mirror of
https://github.com/libexpat/libexpat.git
synced 2025-04-07 22:19:12 +00:00
Move remaining declaration, comment and PI tests out of runtests.c
This commit is contained in:
parent
e827f83974
commit
932748bf1b
4 changed files with 216 additions and 211 deletions
|
@ -46,6 +46,7 @@
|
|||
#include "common.h"
|
||||
#include "minicheck.h"
|
||||
#include "dummy.h"
|
||||
#include "handlers.h"
|
||||
#include "alloc_tests.h"
|
||||
|
||||
void
|
||||
|
@ -93,6 +94,196 @@ START_TEST(test_alloc_parse_xdecl) {
|
|||
}
|
||||
END_TEST
|
||||
|
||||
/* As above, but with an encoding big enough to cause storing the
|
||||
* version information to expand the string pool being used.
|
||||
*/
|
||||
START_TEST(test_alloc_parse_xdecl_2) {
|
||||
const char *text
|
||||
= "<?xml version='1.0' encoding='"
|
||||
/* Each line is 64 characters */
|
||||
"ThisIsAStupidlyLongEncodingNameIntendedToTriggerPoolGrowth123456"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMN"
|
||||
"'?>"
|
||||
"<doc>Hello, world</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 20;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetXmlDeclHandler(g_parser, dummy_xdecl_handler);
|
||||
XML_SetUnknownEncodingHandler(g_parser, long_encoding_handler, NULL);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Test the effects of allocation failures on a straightforward parse */
|
||||
START_TEST(test_alloc_parse_pi) {
|
||||
const char *text = "<?xml version='1.0' encoding='utf-8'?>\n"
|
||||
"<?pi unknown?>\n"
|
||||
"<doc>"
|
||||
"Hello, world"
|
||||
"</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 15;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetProcessingInstructionHandler(g_parser, dummy_pi_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parse_pi_2) {
|
||||
const char *text = "<?xml version='1.0' encoding='utf-8'?>\n"
|
||||
"<doc>"
|
||||
"Hello, world"
|
||||
"<?pi unknown?>\n"
|
||||
"</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 15;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetProcessingInstructionHandler(g_parser, dummy_pi_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parse_pi_3) {
|
||||
const char *text
|
||||
= "<?"
|
||||
/* 64 characters per line */
|
||||
"This processing instruction should be long enough to ensure that"
|
||||
"it triggers the growth of an internal string pool when the "
|
||||
"allocator fails at a cruicial moment FGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"Q?><doc/>";
|
||||
int i;
|
||||
const int max_alloc_count = 20;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetProcessingInstructionHandler(g_parser, dummy_pi_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parse_comment) {
|
||||
const char *text = "<?xml version='1.0' encoding='utf-8'?>\n"
|
||||
"<!-- Test parsing this comment -->"
|
||||
"<doc>Hi</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 15;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetCommentHandler(g_parser, dummy_comment_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parse_comment_2) {
|
||||
const char *text = "<?xml version='1.0' encoding='utf-8'?>\n"
|
||||
"<doc>"
|
||||
"Hello, world"
|
||||
"<!-- Parse this comment too -->"
|
||||
"</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 15;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetCommentHandler(g_parser, dummy_comment_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
TCase *
|
||||
make_alloc_test_case(Suite *s) {
|
||||
TCase *tc_alloc = tcase_create("allocation tests");
|
||||
|
@ -101,6 +292,12 @@ make_alloc_test_case(Suite *s) {
|
|||
tcase_add_checked_fixture(tc_alloc, alloc_setup, alloc_teardown);
|
||||
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_xdecl);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_xdecl_2);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_pi);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_pi_2);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_pi_3);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_comment);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_comment_2);
|
||||
|
||||
return tc_alloc; /* TEMPORARY: this will become a void function */
|
||||
}
|
||||
|
|
|
@ -389,6 +389,21 @@ MiscEncodingHandler(void *data, const XML_Char *encoding, XML_Encoding *info) {
|
|||
return XML_STATUS_OK;
|
||||
}
|
||||
|
||||
int XMLCALL
|
||||
long_encoding_handler(void *userData, const XML_Char *encoding,
|
||||
XML_Encoding *info) {
|
||||
int i;
|
||||
|
||||
UNUSED_P(userData);
|
||||
UNUSED_P(encoding);
|
||||
for (i = 0; i < 256; i++)
|
||||
info->map[i] = i;
|
||||
info->data = NULL;
|
||||
info->convert = NULL;
|
||||
info->release = NULL;
|
||||
return XML_STATUS_OK;
|
||||
}
|
||||
|
||||
/* External Entity Handlers */
|
||||
|
||||
int XMLCALL
|
||||
|
|
|
@ -147,6 +147,10 @@ extern int XMLCALL unknown_released_encoding_handler(void *data,
|
|||
extern int XMLCALL MiscEncodingHandler(void *data, const XML_Char *encoding,
|
||||
XML_Encoding *info);
|
||||
|
||||
extern int XMLCALL long_encoding_handler(void *userData,
|
||||
const XML_Char *encoding,
|
||||
XML_Encoding *info);
|
||||
|
||||
/* External Entity Handlers */
|
||||
|
||||
typedef struct ExtOption {
|
||||
|
|
|
@ -76,211 +76,6 @@
|
|||
|
||||
XML_Parser g_parser = NULL;
|
||||
|
||||
/* As above, but with an encoding big enough to cause storing the
|
||||
* version information to expand the string pool being used.
|
||||
*/
|
||||
static int XMLCALL
|
||||
long_encoding_handler(void *userData, const XML_Char *encoding,
|
||||
XML_Encoding *info) {
|
||||
int i;
|
||||
|
||||
UNUSED_P(userData);
|
||||
UNUSED_P(encoding);
|
||||
for (i = 0; i < 256; i++)
|
||||
info->map[i] = i;
|
||||
info->data = NULL;
|
||||
info->convert = NULL;
|
||||
info->release = NULL;
|
||||
return XML_STATUS_OK;
|
||||
}
|
||||
|
||||
START_TEST(test_alloc_parse_xdecl_2) {
|
||||
const char *text
|
||||
= "<?xml version='1.0' encoding='"
|
||||
/* Each line is 64 characters */
|
||||
"ThisIsAStupidlyLongEncodingNameIntendedToTriggerPoolGrowth123456"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMN"
|
||||
"'?>"
|
||||
"<doc>Hello, world</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 20;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetXmlDeclHandler(g_parser, dummy_xdecl_handler);
|
||||
XML_SetUnknownEncodingHandler(g_parser, long_encoding_handler, NULL);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Test the effects of allocation failures on a straightforward parse */
|
||||
START_TEST(test_alloc_parse_pi) {
|
||||
const char *text = "<?xml version='1.0' encoding='utf-8'?>\n"
|
||||
"<?pi unknown?>\n"
|
||||
"<doc>"
|
||||
"Hello, world"
|
||||
"</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 15;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetProcessingInstructionHandler(g_parser, dummy_pi_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parse_pi_2) {
|
||||
const char *text = "<?xml version='1.0' encoding='utf-8'?>\n"
|
||||
"<doc>"
|
||||
"Hello, world"
|
||||
"<?pi unknown?>\n"
|
||||
"</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 15;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetProcessingInstructionHandler(g_parser, dummy_pi_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parse_pi_3) {
|
||||
const char *text
|
||||
= "<?"
|
||||
/* 64 characters per line */
|
||||
"This processing instruction should be long enough to ensure that"
|
||||
"it triggers the growth of an internal string pool when the "
|
||||
"allocator fails at a cruicial moment FGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
|
||||
"Q?><doc/>";
|
||||
int i;
|
||||
const int max_alloc_count = 20;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetProcessingInstructionHandler(g_parser, dummy_pi_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parse_comment) {
|
||||
const char *text = "<?xml version='1.0' encoding='utf-8'?>\n"
|
||||
"<!-- Test parsing this comment -->"
|
||||
"<doc>Hi</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 15;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetCommentHandler(g_parser, dummy_comment_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parse_comment_2) {
|
||||
const char *text = "<?xml version='1.0' encoding='utf-8'?>\n"
|
||||
"<doc>"
|
||||
"Hello, world"
|
||||
"<!-- Parse this comment too -->"
|
||||
"</doc>";
|
||||
int i;
|
||||
const int max_alloc_count = 15;
|
||||
|
||||
for (i = 0; i < max_alloc_count; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetCommentHandler(g_parser, dummy_comment_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
/* See comment in test_alloc_parse_xdecl() */
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
if (i == 0)
|
||||
fail("Parse succeeded despite failing allocator");
|
||||
if (i == max_alloc_count)
|
||||
fail("Parse failed with max allocations");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
static int XMLCALL
|
||||
external_entity_duff_loader(XML_Parser parser, const XML_Char *context,
|
||||
const XML_Char *base, const XML_Char *systemId,
|
||||
|
@ -4130,12 +3925,6 @@ make_suite(void) {
|
|||
TCase *tc_accounting = tcase_create("accounting tests");
|
||||
#endif
|
||||
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_xdecl_2);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_pi);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_pi_2);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_pi_3);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_comment);
|
||||
tcase_add_test(tc_alloc, test_alloc_parse_comment_2);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_create_external_parser);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_run_external_parser);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_dtd_copy_default_atts);
|
||||
|
|
Loading…
Add table
Reference in a new issue