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
|
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.
|
* Namespaces tests.
|
||||||
*/
|
*/
|
||||||
@ -1380,6 +1433,7 @@ make_suite(void)
|
|||||||
tcase_add_test(tc_basic, test_dtd_default_handling);
|
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_empty_ns_without_namespaces);
|
||||||
tcase_add_test(tc_basic, test_ns_in_attribute_default_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);
|
suite_add_tcase(s, tc_namespace);
|
||||||
tcase_add_checked_fixture(tc_namespace,
|
tcase_add_checked_fixture(tc_namespace,
|
||||||
|
Loading…
Reference in New Issue
Block a user