SF bug #1515266: missing check of stopped parser in doContext() for loop
(added regression test, closing bug report)
This commit is contained in:
parent
60391fb209
commit
66cc81dd7c
@ -983,6 +983,59 @@ START_TEST(test_ns_in_attribute_default_without_namespaces)
|
||||
END_TEST
|
||||
|
||||
|
||||
static void
|
||||
self_clearing_aborting_character_handler(void *userData,
|
||||
const XML_Char *s,
|
||||
int len)
|
||||
{
|
||||
XML_StopParser(parser, XML_FALSE);
|
||||
XML_SetCharacterDataHandler(parser, NULL);
|
||||
}
|
||||
|
||||
/* Regression test for SF bug #1515266: missing check of stopped
|
||||
parser in doContext() 'for' loop. */
|
||||
START_TEST(test_stop_parser_between_char_data_calls)
|
||||
{
|
||||
/* The sample data must be big enough that there are two calls to
|
||||
the character data handler from within the inner "for" loop of
|
||||
the XML_TOK_DATA_CHARS case in doContent(), and the character
|
||||
handler must stop the parser and clear the character data
|
||||
handler.
|
||||
*/
|
||||
char *text =
|
||||
"<?xml version='1.0' encoding='iso-8859-1'?><s>"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"012345678901234567890123456789012345678901234567890123456789"
|
||||
"</s>";
|
||||
|
||||
XML_SetCharacterDataHandler(parser,
|
||||
self_clearing_aborting_character_handler);
|
||||
if (XML_Parse(parser, text, strlen(text), XML_TRUE) != XML_STATUS_ERROR)
|
||||
xml_failure(parser);
|
||||
if (XML_GetErrorCode(parser) != XML_ERROR_ABORTED)
|
||||
xml_failure(parser);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
||||
/*
|
||||
* Namespaces tests.
|
||||
*/
|
||||
@ -1380,6 +1433,7 @@ make_suite(void)
|
||||
tcase_add_test(tc_basic, test_dtd_default_handling);
|
||||
tcase_add_test(tc_basic, test_empty_ns_without_namespaces);
|
||||
tcase_add_test(tc_basic, test_ns_in_attribute_default_without_namespaces);
|
||||
tcase_add_test(tc_basic, test_stop_parser_between_char_data_calls);
|
||||
|
||||
suite_add_tcase(s, tc_namespace);
|
||||
tcase_add_checked_fixture(tc_namespace,
|
||||
|
Loading…
Reference in New Issue
Block a user