65 {
"<e k1=\"v2\" k2=\"v2\"/>",
NULL,
NULL, 0},
66 {
"<e k1=\"v2\" k2=\"v2\"></e>",
NULL,
NULL, 0},
67 {
"<p:e xmlns:p=\"https://domain.invalid/\" />",
NULL,
NULL, 0},
68 {
"<e k=\"&'><"\" />",
NULL,
NULL,
70 {
"<e1 xmlns='https://example.org/'>\n"
77 {
"<e1><e2>text1<e3/>text2</e2></e1>",
NULL,
NULL, 0},
78 {
"<e>&'><"</e>",
NULL,
NULL,
80 {
"<e>A)</e>",
NULL,
NULL, 0},
83 {
"<?xml version=\"1.0\"?><root/>",
NULL,
NULL, 0},
86 {
" <e1> <e2> </e2> </e1> ",
NULL,
NULL, 0},
87 {
"<e1 ><e2 /></e1 >",
NULL,
NULL, 0},
88 {
"<e1><e2 k = \"v\"/><e3 k = 'v'/></e1>",
NULL,
NULL, 0},
91 {
"<!-- Comment --><e><!-- Comment --></e>",
NULL,
NULL, 0},
94 {
"<?xml-stylesheet type=\"text/xsl\" href=\"https://domain.invalid/\" media=\"all\"?><e/>",
96 {
"<?pi0?><?pi1 ?><?pi2 ?><r/><?pi4?>",
NULL,
NULL, 0},
98 {
"<?pi0?><?pi1 ?><?pi2 ?><!DOCTYPE r SYSTEM 'first.ent'><r/>",
99 "<?pi3?><!ENTITY % e1 SYSTEM 'second.ent'><?pi4?>%e1;<?pi5?>",
"<?pi6?>",
104 {
"<e><![CDATA[one two three]]></e>",
NULL,
NULL, 0},
110 "<!ENTITY e \"111<![CDATA[2 <= 2]]>333\">\n"
118 "<!ENTITY % draft 'INCLUDE'>\n"
119 "<!ENTITY % final 'IGNORE'>\n"
120 "<!ENTITY % import SYSTEM \"first.ent\">\n"
124 "<![%draft;[<!--1-->]]>\n"
125 "<![%final;[<!--22-->]]>",
126 NULL,
sizeof(
XML_Char) * (strlen(
"INCLUDE") + strlen(
"IGNORE"))},
130 {
"<!DOCTYPE root [\n"
131 "<!ENTITY nine \"123456789\">\n"
133 "<root>&nine;</root>",
135 {
"<!DOCTYPE root [\n"
136 "<!ENTITY nine \"123456789\">\n"
138 "<root k1=\"&nine;\"/>",
140 {
"<!DOCTYPE root [\n"
141 "<!ENTITY nine \"123456789\">\n"
142 "<!ENTITY nine2 \"&nine;&nine;\">\n"
144 "<root>&nine2;&nine2;&nine2;</root>",
147 * (strlen(
"&nine;") + strlen(
"123456789"))},
149 " <!ENTITY five SYSTEM 'first.ent'>\n"
154 " <!ENTITY five SYSTEM 'first.ent'>\n"
157 "\xEF\xBB\xBF" ,
NULL, 0},
162 "<!ENTITY % comment \"<!---->\">\n"
168 "<!ENTITY % ninedef \"<!ENTITY nine "123456789">\">\n"
174 * (strlen(
"<!ENTITY nine \"123456789\">") + strlen(
"123456789"))},
176 "<!ENTITY % comment \"<!--1-->\">\n"
177 "<!ENTITY % comment2 \"%comment;<!--22-->%comment;\">\n"
183 * (strlen(
"%comment;<!--22-->%comment;") + 2 * strlen(
"<!--1-->"))},
185 " <!ENTITY % five \"12345\">\n"
186 " <!ENTITY % five2def \"<!ENTITY five2 "[%five;][%five;]]]]">\">\n"
192 * (strlen(
"<!ENTITY five2 \"[%five;][%five;]]]]\">")
193 + 2 * strlen(
"12345")
194 + strlen(
"[12345][12345]]]]"))},
195 {
"<!DOCTYPE r SYSTEM \"first.ent\">\n"
197 "<!ENTITY % comment '<!--1-->'>\n"
198 "<!ENTITY % comment2 '<!--22-->%comment;<!--22-->%comment;<!--22-->'>\n"
202 * (strlen(
"<!--22-->%comment;<!--22-->%comment;<!--22-->")
203 + 2 * strlen(
"<!---->"))},
204 {
"<!DOCTYPE r SYSTEM 'first.ent'>\n"
206 "<!ENTITY % e1 PUBLIC 'foo' 'second.ent'>\n"
207 "<!ENTITY % e2 '<!--22-->%e1;<!--22-->'>\n"
209 "<!--1-->",
sizeof(
XML_Char) * strlen(
"<!--22--><!--1--><!--22-->")},
211 "<!DOCTYPE r SYSTEM 'first.ent'>\n"
213 "<!ENTITY % e1 SYSTEM 'second.ent'>\n"
214 "<!ENTITY % e2 '%e1;'>",
215 "<?xml version='1.0' encoding='utf-8'?>\n"
221 "<!DOCTYPE r SYSTEM 'first.ent'>\n"
223 "<!ENTITY % e1 SYSTEM 'second.ent'>\n"
224 "<!ENTITY % e2 '%e1;'>",
225 "<?xml version='1.0' encoding='utf-8'?>\n"
230 {
"<!DOCTYPE doc SYSTEM 'first.ent'>\n"
232 "<!ELEMENT doc EMPTY>\n"
233 "<!ENTITY % e1 SYSTEM 'second.ent'>\n"
234 "<!ENTITY % e2 '%e1;'>\n"
236 "\xEF\xBB\xBF<!ATTLIST doc a1 CDATA 'value'>" ,
237 strlen(
"\xEF\xBB\xBF<!ATTLIST doc a1 CDATA 'value'>")},
278 "")
" count direct bytes, got " EXPAT_FMT_ULL(
"")
" instead.\n",
280 fail(
"Count of direct bytes is off");
287 "")
" count indirect bytes, got " EXPAT_FMT_ULL(
"")
" instead.\n",
290 fail(
"Count of indirect bytes is off");
301 fail(
"parserWithoutParent is NULL");
303 fail(
"parserWithParent is NULL");
308 fail(
"Call with NULL parser is NOT supposed to succeed");
312 fail(
"Call with non-root parser is NOT supposed to succeed");
316 fail(
"Call with NaN limit is NOT supposed to succeed");
320 fail(
"Call with negative limit is NOT supposed to succeed");
324 fail(
"Call with positive limit <1.0 is NOT supposed to succeed");
330 fail(
"Call with positive limit >=1.0 is supposed to succeed");
334 fail(
"Call with positive limit >=1.0 is supposed to succeed");
338 fail(
"Call with positive limit >=1.0 is supposed to succeed");
343 fail(
"Call with NULL parser is NOT supposed to succeed");
347 fail(
"Call with non-root parser is NOT supposed to succeed");
353 fail(
"Call with non-NULL parentless parser is supposed to succeed");
362 unsigned char uc = 0;
363 for (;
uc < (
unsigned char)-1;
uc++) {
367 fail(
"unsignedCharToPrintable returned NULL");
369 fail(
"unsignedCharToPrintable returned empty string");
375 fail(
"unsignedCharToPrintable result mistaken");
378 fail(
"unsignedCharToPrintable result mistaken");
387 const char doc[] =
"<!ENTITY % p1 '123456789_123456789_1234567'>";
401 for (
size_t i = 0;
i <
sizeof(
cases) /
sizeof(
cases[0]);
i++) {
void make_accounting_test_case(Suite *s)
void tcase_add_test__ifdef_xml_dtd(TCase *tc, tcase_test_function test)
enum XML_Status _XML_Parse_SINGLE_BYTES(XML_Parser parser, const char *s, int len, int isFinal)
void _xml_failure(XML_Parser parser, const char *file, int line)
@ XML_ERROR_AMPLIFICATION_LIMIT_BREACH
enum XML_Error XML_GetErrorCode(XML_Parser parser)
@ XML_PARAM_ENTITY_PARSING_ALWAYS
XML_Parser XML_ParserCreate(const XML_Char *encoding)
void XML_ParserFree(XML_Parser parser)
void XML_SetUserData(XML_Parser parser, void *userData)
void XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler)
int XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing parsing)
XML_Parser XML_ExternalEntityParserCreate(XML_Parser parser, const XML_Char *context, const XML_Char *encoding)
int accounting_external_entity_ref_handler(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId)
#define EXPAT_FMT_ULL(midpart)
void tcase_add_test(TCase *tc, tcase_test_function test)
void suite_add_tcase(Suite *suite, TCase *tc)
void set_subtest(char const *fmt,...)
TCase * tcase_create(const char *name)
#define assert_true(cond)
#define START_TEST(testname)
const unsigned long long expectedCountBytesIndirectExtra
const char * secondExternalText
const char * firstExternalText
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray