60 fail(
"Parser not created.");
69 const char *
text =
"<foo:e xmlns:foo='http://example.org/' bar:a='12'\n"
70 " xmlns:bar='http://example.org/'>";
71 const char *
epilog =
"</foo:e>";
73 = {
XCS(
"http://example.org/ e foo"),
XCS(
"http://example.org/ a bar")};
91 fail(
"triplet_start_checker not invoked");
93 fail(
"triplet_end_checker not invoked");
96 fail(
"Namespace handlers not called");
109 fail(
"parsing status doesn't start INITIALIZED");
113 fail(
"parsing status doesn't end FINISHED");
117 fail(
"parsing status doesn't reset to INITIALIZED");
136 const char *
text =
"<n:e xmlns:n='http://example.org/'>\n"
137 " <n:f n:attr='foo'/>\n"
138 " <n:g n:attr2='bar'/>\n"
141 XCS(
"start http://example.org/ f\n")
142 XCS(
"attribute http://example.org/ attr\n")
143 XCS(
"end http://example.org/ f\n")
144 XCS(
"start http://example.org/ g\n")
145 XCS(
"attribute http://example.org/ attr2\n")
146 XCS(
"end http://example.org/ g\n")
147 XCS(
"end http://example.org/ e\n");
154 const char *
text =
"<n:e xmlns:n='http://example.org/'>\n"
155 " <n:f n:attr='foo'/>\n"
156 " <n:g n:attr2='bar'/>\n"
159 XCS(
"start http://example.org/ f n\n")
160 XCS(
"attribute http://example.org/ attr n\n")
161 XCS(
"end http://example.org/ f n\n")
162 XCS(
"start http://example.org/ g n\n")
163 XCS(
"attribute http://example.org/ attr2 n\n")
164 XCS(
"end http://example.org/ g n\n")
165 XCS(
"end http://example.org/ e n\n");
177 const char *
text =
"<e xmlns='http://example.org/'></e>";
191 const char *
text =
"<?xml version='1.0'?>\n"
192 "<!DOCTYPE doc SYSTEM 'http://example.org/doc.dtd' [\n"
193 " <!ENTITY en SYSTEM 'http://example.org/entity.ent'>\n"
195 "<doc xmlns='http://example.org/ns1'>\n"
212 const char *
text =
"<doc xmlns:prefix='http://example.org/'>\n"
213 " <e xmlns:prefix=''/>\n"
217 "Did not report re-setting namespace"
218 " URI with prefix to ''.");
224 const char *
text =
"<?xml version='1.0'?>\n"
225 "<docelem xmlns:pre=''/>";
228 "Did not report setting namespace URI with prefix to ''.");
234 const char *
text =
"<!DOCTYPE doc [\n"
235 " <!ELEMENT doc EMPTY>\n"
237 " xmlns:prefix CDATA ''>\n"
242 "Didn't report attr default setting NS w/ prefix to ''.");
248 const char *
text =
"<!DOCTYPE doc [\n"
249 " <!ELEMENT prefix:doc EMPTY>\n"
250 " <!ATTLIST prefix:doc\n"
251 " xmlns:prefix CDATA 'http://example.org/'>\n"
269 const char *
text =
"<!DOCTYPE doc [\n"
270 " <!ELEMENT prefix:doc EMPTY>\n"
271 " <!ATTLIST prefix:doc\n"
272 " notxmlns:prefix CDATA 'http://example.org/'>\n"
278 fail(
"Unbound prefix incorrectly passed");
285 const char *
text =
"<doc xmlns='http://example.org/'>\n"
300 const char *
text =
"<doc xmlns:a='http://example.org/a'\n"
301 " xmlns:b='http://example.org/a'\n"
302 " a:a='v' b:a='v' />";
304 "did not report multiple attributes with same URI+name");
325 const char *
text =
"<doc xmlns:a='http://example.org/a'\n"
326 " a:a='v' a:i='w' />";
335 const char *
text =
"<doc a:attr=''/>";
337 "did not report unbound prefix on attribute");
343 const char *
text =
"<a:doc/>";
345 "did not report unbound prefix on element");
352 =
"<foo:thisisalongenoughelementnametotriggerareallocation\n"
353 " xmlns:foo='http://example.org/' bar:a='12'\n"
354 " xmlns:bar='http://example.org/'>"
355 "</foo:thisisalongenoughelementnametotriggerareallocation>";
357 = {
XCS(
"http://example.org/")
358 XCS(
" thisisalongenoughelementnametotriggerareallocation foo"),
359 XCS(
"http://example.org/ a bar")};
372 const char *
text =
"<e a='12' bar:b='13'\n"
373 " xmlns:bar='http://example.org/'>"
387 const char *
text =
"<foo:e xmlns:foo='http://example.org/'>"
388 " <foo:thisisalongenoughnametotriggerallocationaction"
402 =
"<foo:e xmlns:foo='http://example.org/' xmlns:xmlns='12' />";
404 =
"<foo:e xmlns:foo='http://example.org/' foo:xmlns='12' />";
406 "xmlns not rejected as an attribute");
416 const char *
text1 =
"<foo:e xmlns:foo='http://example.org/'"
417 " xmlns:xml='http://example.org/' />";
419 =
"<foo:e xmlns:foo='http://www.w3.org/XML/1998/namespace' />";
420 const char *
text3 =
"<foo:e xmlns:foo='http://www.w3.org/2000/xmlns/' />";
423 "xml not rejected as an attribute");
426 "Use of w3.org URL not faulted");
429 "Use of w3.org xmlns URL not faulted");
444 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
445 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
446 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
447 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
448 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
449 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
450 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
451 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
452 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
453 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
454 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
455 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
456 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
457 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
458 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
459 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
460 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
461 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
462 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
463 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
464 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
465 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
466 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
467 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
468 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
469 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
470 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
471 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
472 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
473 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
474 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
475 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
479 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
480 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
481 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
482 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
483 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
484 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
485 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
486 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
487 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
488 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
489 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
490 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
491 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
492 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
493 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
494 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
495 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
496 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
497 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
498 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
499 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
500 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
501 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
502 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
503 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
504 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
505 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
506 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
507 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
508 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
509 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
510 "ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP"
525 const char *
text =
"<?xml version='1.0' encoding='prefix-conv'?>\n"
526 "<foo:e xmlns:foo='http://example.org/'>Hi</foo:e>";
535 const char *
text =
"<foo:e xmlns:foo='http://example.org/' foo:a:b='bar' />";
541 fail(
"Double colon in attribute name not faulted"
542 " (despite active namespace support)");
546 fail(
"Double colon in attribute name faulted"
547 " (despite inactive namespace support");
554 const char *
text =
"<foo:bar:e xmlns:foo='http://example.org/' />";
560 fail(
"Double colon in element name not faulted"
561 " (despite active namespace support)");
565 fail(
"Double colon in element name faulted"
566 " (despite inactive namespace support");
574 const char *
text =
"<foo:e xmlns:foo='http://example.org/' foo:?ar='baz' />";
577 "Invalid character in leafname not faulted");
582 const char *
text =
"<foo:?oc xmlns:foo='http://example.org/' />";
585 "Invalid character in element leafname not faulted");
595 "<\0n\0:\0e\0 \0x\0m\0l\0n\0s\0:\0n\0=\0'\0U\0R\0I\0'\0 \0"
596 "n\0:\0\x04\x0e=\0'\0a\0'\0 \0/\0>\0";
615 "\0<\0n\0:\x0e\x04\0 \0x\0m\0l\0n\0s\0:\0n\0=\0'\0U\0R\0I\0'\0/\0>";
619 const XML_Char *expected =
XCS(
"URI \xe0\xb8\x84");
638 "\0<\0!\0D\0O\0C\0T\0Y\0P\0E\0 \0f\0o\0o\0:\x0e\x04\0 "
639 "\0[\0 \0<\0!\0E\0N\0T\0I\0T\0Y\0 \0b\0a\0r\0 \0'\0b\0a\0z\0'\0>\0 "
642 "\0<\0f\0o\0o\0:\x0e\x04\0 "
643 "\0x\0m\0l\0n\0s\0:\0f\0o\0o\0=\0'\0U\0R\0I\0'\0>"
645 "\0<\0/\0f\0o\0o\0:\x0e\x04\0>";
649 const XML_Char *expected =
XCS(
"URI \xe0\xb8\x84");
665 const char *
text =
"<!DOCTYPE foo:!bad [ <!ENTITY bar 'baz' ]>\n"
666 "<foo:!bad>&bar;</foo:!bad>";
669 "Invalid character in document local name not faulted");
674 const char *
text =
"<!DOCTYPE foo:a:doc [ <!ENTITY bar 'baz' ]>\n"
675 "<foo:a:doc>&bar;</foo:a:doc>";
678 "Double colon in document name not faulted");
709 fail(
"Namespace separator handling is broken");
void tcase_add_test__if_xml_ge(TCase *tc, tcase_test_function test)
void tcase_add_test__ifdef_xml_dtd(TCase *tc, tcase_test_function test)
void basic_teardown(void)
enum XML_Status _XML_Parse_SINGLE_BYTES(XML_Parser parser, const char *s, int len, int isFinal)
void CharData_Init(CharData *storage)
int CharData_CheckXMLChars(CharData *storage, const XML_Char *expected)
#define expect_failure(text, errorCode, errorMessage)
#define run_character_check(text, expected)
#define xml_failure(parser)
void XMLCALL dummy_start_element(void *userData, const XML_Char *name, const XML_Char **atts)
void XMLCALL dummy_end_element(void *userData, const XML_Char *name)
void XMLCALL dummy_end_namespace_decl_handler(void *userData, const XML_Char *prefix)
void XMLCALL dummy_start_namespace_decl_handler(void *userData, const XML_Char *prefix, const XML_Char *uri)
void init_dummy_handlers(void)
unsigned long get_dummy_handler_flags(void)
#define DUMMY_END_NS_DECL_HANDLER_FLAG
#define DUMMY_START_NS_DECL_HANDLER_FLAG
void XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status)
void XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
void XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler handler)
void XML_SetStartNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start)
void XML_UseParserAsHandlerArg(XML_Parser parser)
XML_Bool XML_ParserReset(XML_Parser parser, const XML_Char *encoding)
@ XML_ERROR_DUPLICATE_ATTRIBUTE
@ XML_ERROR_RESERVED_PREFIX_XML
@ XML_ERROR_RESERVED_NAMESPACE_URI
@ XML_ERROR_UNBOUND_PREFIX
@ XML_ERROR_UNDECLARING_PREFIX
@ XML_ERROR_INVALID_TOKEN
@ XML_ERROR_RESERVED_PREFIX_XMLNS
void XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler handler)
void XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *encodingHandlerData)
enum XML_Error XML_GetErrorCode(XML_Parser parser)
@ XML_PARAM_ENTITY_PARSING_ALWAYS
void XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end)
void XML_ParserFree(XML_Parser parser)
void XML_SetReturnNSTriplet(XML_Parser parser, int do_nst)
void XML_SetUserData(XML_Parser parser, void *userData)
void XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler end)
XML_Parser XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator)
void XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler)
int XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing parsing)
apr_text_header const char * text
apr_array_header_t ** result
void XMLCALL start_element_fail(void *userData, const XML_Char *name, const XML_Char **atts)
int XMLCALL MiscEncodingHandler(void *data, const XML_Char *encoding, XML_Encoding *info)
void XMLCALL accumulate_attribute(void *userData, const XML_Char *name, const XML_Char **atts)
void XMLCALL triplet_end_checker(void *userData, const XML_Char *name)
void XMLCALL overwrite_end_checker(void *userData, const XML_Char *name)
int XMLCALL external_entity_handler(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId)
void XMLCALL overwrite_start_checker(void *userData, const XML_Char *name, const XML_Char **atts)
void XMLCALL triplet_start_checker(void *userData, const XML_Char *name, const XML_Char **atts)
void XMLCALL start_ns_clearing_start_element(void *userData, const XML_Char *prefix, const XML_Char *uri)
void XMLCALL start_element_event_handler(void *userData, const XML_Char *name, const XML_Char **atts)
void tcase_add_test(TCase *tc, tcase_test_function test)
void suite_add_tcase(Suite *suite, TCase *tc)
void set_subtest(char const *fmt,...)
void tcase_add_checked_fixture(TCase *tc, tcase_setup_function setup, tcase_teardown_function teardown)
TCase * tcase_create(const char *name)
#define START_TEST(testname)
static const ap_slotmem_provider_t * storage
static void test_ns_reserved_attributes(void)
static void namespace_teardown(void)
static void test_ns_double_colon(void)
static void run_ns_tagname_overwrite_test(const char *text, const XML_Char *result)
static void test_ns_double_colon_element(void)
static void test_ns_unbound_prefix_on_element(void)
void make_namespace_test_case(Suite *s)
static void test_ns_reserved_attributes_2(void)
static void test_ns_utf16_doctype(void)
static void test_ns_parser_reset(void)
static void test_ns_separator_in_uri(void)
static void test_ns_duplicate_attrs_diff_prefixes(void)
static void test_ns_unbound_prefix(void)
static void test_ns_prefix_with_empty_uri_4(void)
static void test_ns_prefix_with_empty_uri_3(void)
static void test_ns_mixed_prefix_atts(void)
static void test_ns_unbound_prefix_on_attribute(void)
static void test_ns_duplicate_hashes(void)
static void test_ns_long_element(void)
static void test_ns_prefix_with_empty_uri_1(void)
static void test_return_ns_triplet(void)
static void test_ns_tagname_overwrite(void)
static void namespace_setup(void)
static void test_ns_tagname_overwrite_triplet(void)
static void test_ns_utf16_leafname(void)
static void test_ns_double_colon_doctype(void)
static void test_start_ns_clears_start_element(void)
static void test_ns_extremely_long_prefix(void)
static void test_ns_bad_attr_leafname(void)
static void test_ns_invalid_doctype(void)
static void test_ns_unknown_encoding_success(void)
static void test_ns_prefix_with_empty_uri_2(void)
static void test_ns_bad_element_leafname(void)
static void test_ns_default_with_empty_uri(void)
static void test_ns_extend_uri_buffer(void)
static void test_ns_utf16_element_leafname(void)
static void test_default_ns_from_ext_subset_and_ext_ge(void)