66#define XML_BUILDING_EXPAT 1
70#if ! defined(XML_GE) || (1 - XML_GE - 1 == 2) || (XML_GE < 0) || (XML_GE > 1)
71# error XML_GE (for general entities) must be defined, non-empty, either 1 or 0 (0 to disable, 1 to enable; 1 is a common default)
74#if defined(XML_DTD) && XML_GE == 0
75# error Either undefine XML_DTD or define XML_GE to 1.
78#if ! defined(XML_CONTEXT_BYTES) || (1 - XML_CONTEXT_BYTES - 1 == 2) \
79 || (XML_CONTEXT_BYTES + 0 < 0)
80# error XML_CONTEXT_BYTES must be defined, non-empty and >=0 (0 to disable, >=1 to enable; 1024 is a common default)
83#if defined(HAVE_SYSCALL_GETRANDOM)
84# if ! defined(_GNU_SOURCE)
91# if ! defined(_CRT_RAND_S)
107# define getpid GetCurrentProcessId
109# include <sys/time.h>
110# include <sys/types.h>
124#if defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM)
125# if defined(HAVE_GETRANDOM)
126# include <sys/random.h>
129# include <sys/syscall.h>
131# if ! defined(GRND_NONBLOCK)
132# define GRND_NONBLOCK 0x0001
136#if defined(HAVE_LIBBSD) \
137 && (defined(HAVE_ARC4RANDOM_BUF) || defined(HAVE_ARC4RANDOM))
138# include <bsd/stdlib.h>
141#if defined(_WIN32) && ! defined(LOAD_LIBRARY_SEARCH_SYSTEM32)
142# define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
145#if ! defined(HAVE_GETRANDOM) && ! defined(HAVE_SYSCALL_GETRANDOM) \
146 && ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM) \
147 && ! defined(XML_DEV_URANDOM) && ! defined(_WIN32) \
148 && ! defined(XML_POOR_ENTROPY)
149# error You do not have support for any sources of high quality entropy \
150 enabled. For end user security, that is probably not what you want. \
152 Your options include: \
153 * Linux >=3.17 + glibc >=2.25 (getrandom): HAVE_GETRANDOM, \
154 * Linux >=3.17 + glibc (including <2.25) (syscall SYS_getrandom): HAVE_SYSCALL_GETRANDOM, \
155 * BSD / macOS >=10.7 / glibc >=2.36 (arc4random_buf): HAVE_ARC4RANDOM_BUF, \
156 * BSD / macOS (including <10.7) / glibc >=2.36 (arc4random): HAVE_ARC4RANDOM, \
157 * libbsd (arc4random_buf): HAVE_ARC4RANDOM_BUF + HAVE_LIBBSD, \
158 * libbsd (arc4random): HAVE_ARC4RANDOM + HAVE_LIBBSD, \
159 * Linux (including <3.17) / BSD / macOS (including <10.7) / Solaris >=8 (/dev/urandom): XML_DEV_URANDOM, \
160 * Windows >=Vista (rand_s): _WIN32. \
162 If insist on not using any of these, bypass this error by defining \
163 XML_POOR_ENTROPY; you have been warned. \
165 If you have reasons to patch this detection code away or need changes \
166 to the build system, please open a bug. Thank you!
170# define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX
171# define XmlConvert XmlUtf16Convert
172# define XmlGetInternalEncoding XmlGetUtf16InternalEncoding
173# define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS
174# define XmlEncode XmlUtf16Encode
175# define MUST_CONVERT(enc, s) (! (enc)->isUtf16 || (((uintptr_t)(s)) & 1))
176typedef unsigned short ICHAR;
178# define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX
179# define XmlConvert XmlUtf8Convert
180# define XmlGetInternalEncoding XmlGetUtf8InternalEncoding
181# define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS
182# define XmlEncode XmlUtf8Encode
183# define MUST_CONVERT(enc, s) (! (enc)->isUtf8)
189# define XmlInitEncodingNS XmlInitEncoding
190# define XmlInitUnknownEncodingNS XmlInitUnknownEncoding
191# undef XmlGetInternalEncodingNS
192# define XmlGetInternalEncodingNS XmlGetInternalEncoding
193# define XmlParseXmlDeclNS XmlParseXmlDecl
199# ifdef XML_UNICODE_WCHAR_T
200# define XML_T(x) (const wchar_t) x
201# define XML_L(x) L##x
203# define XML_T(x) (const unsigned short)x
215#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1))
218#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
220#define EXPAT_MIN(a, b) (((a) < (b)) ? (a) : (b))
252#define SECOND_HASH(hash, mask, power) \
253 ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2))
254#define PROBE_STEP(hash, mask, power) \
255 ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1))
262#define INIT_TAG_BUF_SIZE 32
263#define INIT_DATA_BUF_SIZE 1024
264#define INIT_ATTS_SIZE 16
265#define INIT_ATTS_VERSION 0xFFFFFFFF
266#define INIT_BLOCK_SIZE 1024
267#define INIT_BUFFER_SIZE 1024
269#define EXPAND_SPARE 24
342#define INIT_SCAFFOLD_ELEMENTS 32
477 const char *
s,
const char *next);
480 const char *
s,
const char *
end,
int tok,
481 const char *next,
const char **
nextPtr,
513 const char *ptr,
const char *
end,
522 const char *
start,
const char *
end);
532 const char *
start,
const char *
end);
534 const char *
start,
const char *
end);
536 const char *
start,
const char *
end);
567 const char *ptr,
const char *
end);
569 const char *ptr,
const char *
end);
581 const char *ptr,
const char *
end);
623#define poolStart(pool) ((pool)->start)
624#define poolLength(pool) ((pool)->ptr - (pool)->start)
625#define poolChop(pool) ((void)--(pool->ptr))
626#define poolLastChar(pool) (((pool)->ptr)[-1])
627#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
628#define poolFinish(pool) ((pool)->start = (pool)->ptr)
629#define poolAppendChar(pool, c) \
630 (((pool)->ptr == (pool)->end && ! poolGrow(pool)) \
632 : ((*((pool)->ptr)++ = c), 1))
634#if ! defined(XML_TESTING)
639#if defined(XML_TESTING)
761#define MALLOC(parser, s) (parser->m_mem.malloc_fcn((s)))
762#define REALLOC(parser, p, s) (parser->m_mem.realloc_fcn((p), (s)))
763#define FREE(parser, p) (parser->m_mem.free_fcn((p)))
789#if ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM)
791# if defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM)
805# if defined(HAVE_GETRANDOM)
823# if ! defined(_WIN32) && defined(XML_DEV_URANDOM)
831 const int fd = open(
"/dev/urandom",
O_RDONLY);
857#if defined(HAVE_ARC4RANDOM) && ! defined(HAVE_ARC4RANDOM_BUF)
883# if defined(__MINGW32__) && defined(__MINGW32_VERSION) \
884 && __MINGW32_VERSION < 5003000L && ! defined(__MINGW64_VERSION_MAJOR)
914#if ! defined(HAVE_ARC4RANDOM_BUF) && ! defined(HAVE_ARC4RANDOM)
921 return ft.dwHighDateTime ^
ft.dwLowDateTime;
956#if defined(HAVE_ARC4RANDOM_BUF)
959#elif defined(HAVE_ARC4RANDOM)
968# elif defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM)
973# if ! defined(_WIN32) && defined(XML_DEV_URANDOM)
984 if (
sizeof(
unsigned long) == 4) {
988 entropy * (
unsigned long)2305843009213693951ULL);
997 return parser->m_hash_secret_salt;
1005 if (
parser->m_reparseDeferralEnabled
1006 && !
parser->m_parsingStatus.finalBuffer) {
1013#if XML_CONTEXT_BYTES > 0
1028#if defined(XML_TESTING)
1037 parser->m_partialTokenBytesBefore = 0;
1046 if (
parser->m_hash_secret_salt == 0)
1086 mtemp->free_fcn = free;
1154 parser->m_nsAttsVersion = 0;
1155 parser->m_nsAttsPower = 0;
1201 parser->m_processingInstructionHandler =
NULL;
1222 parser->m_parseEndByteIndex = 0;
1224 parser->m_partialTokenBytesBefore = 0;
1226 parser->m_lastBufferRequestSize = 0;
1248 parser->m_nSpecifiedAtts = 0;
1259 parser->m_hash_secret_salt = 0;
1264 parser->m_accounting.maximumAmplificationFactor
1266 parser->m_accounting.activationThresholdBytes
1280 b->nextTagBinding =
parser->m_freeBindingList;
1281 parser->m_freeBindingList =
b;
1293 if (
parser->m_parentParser)
1315 if (
parser->m_unknownEncodingRelease)
1316 parser->m_unknownEncodingRelease(
parser->m_unknownEncodingData);
1347 if (!
parser->m_protocolEncodingName)
1530 bindings =
b->nextTagBinding;
1597 if (
parser->m_unknownEncodingRelease)
1598 parser->m_unknownEncodingRelease(
parser->m_unknownEncodingData);
1664 return parser->m_curBase;
1671 return parser->m_nSpecifiedAtts;
1678 return parser->m_idAttIndex;
1686 return parser->m_attInfo;
1715 parser->m_characterDataHandler = handler;
1722 parser->m_processingInstructionHandler = handler;
1728 parser->m_commentHandler = handler;
1759 parser->m_defaultHandler = handler;
1767 parser->m_defaultHandler = handler;
1797 parser->m_unparsedEntityDeclHandler = handler;
1803 parser->m_notationDeclHandler = handler;
1813 parser->m_endNamespaceDeclHandler =
end;
1827 parser->m_endNamespaceDeclHandler =
end;
1834 parser->m_notStandaloneHandler = handler;
1841 parser->m_externalEntityRefHandler = handler;
1858 parser->m_skippedEntityHandler = handler;
1866 parser->m_unknownEncodingHandler = handler;
1885 parser->m_entityDeclHandler = handler;
1891 parser->m_xmlDeclHandler = handler;
1915 if (
parser->m_parentParser)
1932 switch (
parser->m_parsingStatus.parsing) {
1949#if XML_CONTEXT_BYTES == 0
1976 switch (
parser->m_parsingStatus.parsing) {
2049 switch (
parser->m_parsingStatus.parsing) {
2058 if (!
parser->m_bufferPtr) {
2087 switch (
parser->m_parsingStatus.parsing) {
2115 switch (
parser->m_parsingStatus.parsing) {
2130#if XML_CONTEXT_BYTES > 0
2141#if XML_CONTEXT_BYTES > 0
2155#if XML_CONTEXT_BYTES > 0
2179 if (bufferSize == 0)
2183 bufferSize = (
int)(2U * (
unsigned)bufferSize);
2185 if (bufferSize <= 0) {
2195#if XML_CONTEXT_BYTES > 0
2196 if (
parser->m_bufferPtr) {
2213 if (
parser->m_bufferPtr) {
2230 return parser->m_bufferEnd;
2237 switch (
parser->m_parsingStatus.parsing) {
2254 if (
parser->m_isParamEntity) {
2289 switch (
parser->m_parsingStatus.parsing) {
2295 if (
parser->m_parsingStatus.finalBuffer) {
2321 return parser->m_errorCode;
2339 return (
int)(
parser->m_eventEndPtr -
parser->m_eventPtr);
2345#if XML_CONTEXT_BYTES > 0
2360 return (
const char *)0;
2372 return parser->m_position.lineNumber + 1;
2384 return parser->m_position.columnNumber;
2417 if (
parser->m_defaultHandler) {
2418 if (
parser->m_openInternalEntities)
2420 parser->m_openInternalEntities->internalEventPtr,
2421 parser->m_openInternalEntities->internalEventEndPtr);
2434 return XML_L(
"out of memory");
2436 return XML_L(
"syntax error");
2438 return XML_L(
"no element found");
2440 return XML_L(
"not well-formed (invalid token)");
2442 return XML_L(
"unclosed token");
2444 return XML_L(
"partial character");
2446 return XML_L(
"mismatched tag");
2448 return XML_L(
"duplicate attribute");
2450 return XML_L(
"junk after document element");
2452 return XML_L(
"illegal parameter entity reference");
2454 return XML_L(
"undefined entity");
2456 return XML_L(
"recursive entity reference");
2458 return XML_L(
"asynchronous entity");
2460 return XML_L(
"reference to invalid character number");
2462 return XML_L(
"reference to binary entity");
2464 return XML_L(
"reference to external entity in attribute");
2466 return XML_L(
"XML or text declaration not at start of entity");
2468 return XML_L(
"unknown encoding");
2470 return XML_L(
"encoding specified in XML declaration is incorrect");
2472 return XML_L(
"unclosed CDATA section");
2474 return XML_L(
"error in processing external entity reference");
2476 return XML_L(
"document is not standalone");
2478 return XML_L(
"unexpected parser state - please send a bug report");
2480 return XML_L(
"entity declared in parameter entity");
2482 return XML_L(
"requested feature requires XML_DTD support in Expat");
2484 return XML_L(
"cannot change setting once parsing has begun");
2487 return XML_L(
"unbound prefix");
2490 return XML_L(
"must not undeclare prefix");
2492 return XML_L(
"incomplete markup in parameter entity");
2494 return XML_L(
"XML declaration not well-formed");
2496 return XML_L(
"text declaration not well-formed");
2498 return XML_L(
"illegal character(s) in public id");
2500 return XML_L(
"parser suspended");
2502 return XML_L(
"parser not suspended");
2504 return XML_L(
"parsing aborted");
2506 return XML_L(
"parsing finished");
2508 return XML_L(
"cannot suspend in external parameter entity");
2512 "reserved prefix (xml) must not be undeclared or bound to another namespace name");
2514 return XML_L(
"reserved prefix (xmlns) must not be declared or undeclared");
2517 "prefix must not be bound to one of the reserved namespace names");
2520 return XML_L(
"invalid argument");
2524 "a successful prior call to function XML_GetBuffer is required");
2528 "limit on input amplification factor (from DTD and entities) breached");
2531 return XML_L(
"parser not started");
2546#define V1(a, b, c) XML_L(#a) XML_L(".") XML_L(#b) XML_L(".") XML_L(#c)
2547#define V2(a, b, c) XML_L("expat_") V1(a, b, c)
2576#ifdef XML_UNICODE_WCHAR_T
2582#if XML_CONTEXT_BYTES > 0
2592#ifdef XML_LARGE_SIZE
2602 XML_L(
"XML_BLAP_MAX_AMP"),
2606 XML_L(
"XML_BLAP_ACT_THRES"),
2729 const char *next =
start;
2746 if (next ==
end && !
parser->m_parsingStatus.finalBuffer) {
2753 if (!
parser->m_parsingStatus.finalBuffer) {
2760 if (!
parser->m_parsingStatus.finalBuffer) {
2775 const char *next =
start;
2782 parser->m_eventEndPtr = next;
2790 switch (
parser->m_parsingStatus.parsing) {
2801 if (!
parser->m_parsingStatus.finalBuffer) {
2807 if (!
parser->m_parsingStatus.finalBuffer) {
2834 const char *
s,
const char *
end,
const char **
nextPtr,
2841 if (enc ==
parser->m_encoding) {
2845 eventPP = &(
parser->m_openInternalEntities->internalEventPtr);
2851 const char *next =
s;
2872 if (
parser->m_characterDataHandler) {
2874 parser->m_characterDataHandler(
parser->m_handlerArg, &
c, 1);
2875 }
else if (
parser->m_defaultHandler)
2880 if (startTagLevel == 0)
2882 if (
parser->m_tagLevel != startTagLevel)
2891 if (startTagLevel > 0) {
2892 if (
parser->m_tagLevel != startTagLevel)
2927 if (
parser->m_characterDataHandler)
2929 else if (
parser->m_defaultHandler)
2943 if (!
dtd->hasParamEntityRefs ||
dtd->standalone) {
2946 else if (!
entity->is_internal)
2949 if (
parser->m_skippedEntityHandler)
2951 else if (
parser->m_defaultHandler)
2961 if (!
parser->m_defaultExpandInternalEntities) {
2962 if (
parser->m_skippedEntityHandler)
2965 else if (
parser->m_defaultHandler)
2972 }
else if (
parser->m_externalEntityRefHandler) {
2979 if (!
parser->m_externalEntityRefHandler(
2984 }
else if (
parser->m_defaultHandler)
2994 if (
parser->m_freeTagList) {
3049 if (
parser->m_startElementHandler)
3052 else if (
parser->m_defaultHandler)
3077 if (
parser->m_startElementHandler) {
3082 if (
parser->m_endElementHandler) {
3083 if (
parser->m_startElementHandler)
3093 if ((
parser->m_tagLevel == 0)
3102 if (
parser->m_tagLevel == startTagLevel)
3106 const char *rawName;
3119 if (
parser->m_endElementHandler) {
3124 if (
parser->m_ns && localPart) {
3132 *
uri++ = *localPart++;
3142 }
else if (
parser->m_defaultHandler)
3146 if (
parser->m_endNamespaceDeclHandler)
3147 parser->m_endNamespaceDeclHandler(
parser->m_handlerArg,
3150 b->nextTagBinding =
parser->m_freeBindingList;
3151 parser->m_freeBindingList =
b;
3152 b->prefix->binding =
b->prevPrefixBinding;
3154 if ((
parser->m_tagLevel == 0)
3167 if (
parser->m_characterDataHandler) {
3171 }
else if (
parser->m_defaultHandler)
3177 if (
parser->m_characterDataHandler) {
3179 parser->m_characterDataHandler(
parser->m_handlerArg, &
c, 1);
3180 }
else if (
parser->m_defaultHandler)
3185 if (
parser->m_startCdataSectionHandler)
3186 parser->m_startCdataSectionHandler(
parser->m_handlerArg);
3200 else if ((0) &&
parser->m_characterDataHandler)
3204 else if (
parser->m_defaultHandler)
3220 if (
parser->m_characterDataHandler) {
3224 parser->m_characterDataHandler(
3228 parser->m_characterDataHandler(
3231 }
else if (
parser->m_defaultHandler)
3236 if (startTagLevel == 0) {
3240 if (
parser->m_tagLevel != startTagLevel) {
3265 }
else if (
parser->m_defaultHandler)
3284 if (
parser->m_defaultHandler)
3290 switch (
parser->m_parsingStatus.parsing) {
3314 if (
parser->m_endNamespaceDeclHandler)
3315 parser->m_endNamespaceDeclHandler(
parser->m_handlerArg,
b->prefix->name);
3318 b->nextTagBinding =
parser->m_freeBindingList;
3319 parser->m_freeBindingList =
b;
3320 b->prefix->binding =
b->prevPrefixBinding;
3375 if (
n + nDefaultAtts >
parser->m_attsSize) {
3394#if UINT_MAX >= SIZE_MAX
3395 if ((
unsigned)
parser->m_attsSize > (
size_t)(-1) /
sizeof(
ATTRIBUTE)) {
3413# if UINT_MAX >= SIZE_MAX
3433 for (
i = 0;
i <
n;
i++) {
3458 if ((attId->
name)[-1]) {
3459 if (enc ==
parser->m_encoding)
3463 (attId->
name)[-1] = 1;
3465 if (!
parser->m_atts[
i].normalized) {
3472 for (j = 0; j < nDefaultAtts; j++) {
3510 (attId->
name)[-1] = 2;
3525 parser->m_idAttIndex = -1;
3528 for (
i = 0;
i < nDefaultAtts;
i++) {
3530 if (! (
da->id->name)[-1] &&
da->value) {
3531 if (
da->id->prefix) {
3532 if (
da->id->xmlns) {
3538 (
da->id->name)[-1] = 2;
3544 (
da->id->name)[-1] = 1;
3557 unsigned long version =
parser->m_nsAttsVersion;
3560 if (
parser->m_nsAttsPower >=
sizeof(
unsigned int) * 8 ) {
3568 >>
parser->m_nsAttsPower) {
3573 if (
parser->m_nsAttsPower < 3)
3574 parser->m_nsAttsPower = 3;
3589#if UINT_MAX >= SIZE_MAX
3611 parser->m_nsAtts[--j].version = version;
3613 parser->m_nsAttsVersion = --version;
3630 if (!
id || !
id->prefix) {
3647 b =
id->prefix->binding;
3651 for (j = 0; j <
b->uriLen; j++) {
3674 unsigned char step = 0;
3677 while (
parser->m_nsAtts[j].version == version) {
3690 j < step ? (j +=
nsAttsSize - step) : (j -= step);
3694 if (
parser->m_ns_triplets) {
3695 parser->m_tempPool.ptr[-1] =
parser->m_namespaceSeparator;
3696 s =
b->prefix->name;
3709 parser->m_nsAtts[j].version = version;
3711 parser->m_nsAtts[j].uriName =
s;
3738 }
else if (
dtd->defaultPrefix.binding) {
3752 for (
i = 0; localPart[
i++];)
3773#if UINT_MAX >= SIZE_MAX
4005 if (
parser->m_namespaceSeparator)
4007 if (
parser->m_freeBindingList) {
4008 b =
parser->m_freeBindingList;
4009 if (
len >
b->uriAlloc) {
4019#if UINT_MAX >= SIZE_MAX
4032 parser->m_freeBindingList =
b->nextTagBinding;
4046#if UINT_MAX >= SIZE_MAX
4062 if (
parser->m_namespaceSeparator)
4063 b->uri[
len - 1] =
parser->m_namespaceSeparator;
4075 if (attId &&
parser->m_startNamespaceDeclHandler)
4093 if (
parser->m_parentParser) {
4114 if (enc ==
parser->m_encoding) {
4119 eventPP = &(
parser->m_openInternalEntities->internalEventPtr);
4126 const char *next =
s;
4139 if (
parser->m_endCdataSectionHandler)
4140 parser->m_endCdataSectionHandler(
parser->m_handlerArg);
4143 else if ((0) &&
parser->m_characterDataHandler)
4147 else if (
parser->m_defaultHandler)
4156 if (
parser->m_characterDataHandler) {
4158 parser->m_characterDataHandler(
parser->m_handlerArg, &
c, 1);
4159 }
else if (
parser->m_defaultHandler)
4181 }
else if (
parser->m_defaultHandler)
4214 switch (
parser->m_parsingStatus.parsing) {
4257 if (enc ==
parser->m_encoding) {
4273 eventPP = &(
parser->m_openInternalEntities->internalEventPtr);
4290 if (
parser->m_defaultHandler)
4337 if (!
parser->m_protocolEncodingName)
4341 for (
i = 0;
parser->m_protocolEncodingName[
i];
i++) {
4343 || (
parser->m_protocolEncodingName[
i] & ~0x7f) != 0) {
4353 s =
parser->m_protocolEncodingName;
4367 const char *version =
NULL;
4370 int standalone = -1;
4391 if (
parser->m_paramEntityParsing
4396 if (
parser->m_xmlDeclHandler) {
4414 }
else if (
parser->m_defaultHandler)
4416 if (
parser->m_protocolEncodingName ==
NULL) {
4455 if (
parser->m_unknownEncodingHandler) {
4458 for (
i = 0;
i < 256;
i++)
4463 if (
parser->m_unknownEncodingHandler(
parser->m_unknownEncodingHandlerData,
4467 if (!
parser->m_unknownEncodingMem) {
4476 parser->m_unknownEncodingRelease =
info.release;
4477 parser->m_encoding = enc;
4510 if (
parser->m_prologState.inEntityValue) {
4524 const char *next =
start;
4533 parser->m_eventEndPtr = next;
4606 const char *next =
s;
4653 const char *next =
s;
4690 const char *next =
s;
4738 if (enc ==
parser->m_encoding) {
4742 eventPP = &(
parser->m_openInternalEntities->internalEventPtr);
4770 if (enc !=
parser->m_encoding
4771 && !
parser->m_openInternalEntities->betweenDecl) {
4779 if (
parser->m_isParamEntity || enc !=
parser->m_encoding) {
4815 enc =
parser->m_encoding;
4819 if (
parser->m_startDoctypeDeclHandler) {
4822 if (!
parser->m_doctypeName)
4831 if (
parser->m_startDoctypeDeclHandler) {
4832 parser->m_startDoctypeDeclHandler(
4834 parser->m_doctypePubid, 1);
4845 enc =
parser->m_encoding;
4854 if (!
parser->m_declEntity)
4858 if (
parser->m_startDoctypeDeclHandler) {
4878 if (
dtd->keepProcessing &&
parser->m_declEntity) {
4900 if (
parser->m_doctypeName) {
4901 parser->m_startDoctypeDeclHandler(
4903 parser->m_doctypePubid, 0);
4912 if (
parser->m_doctypeSysid ||
parser->m_useForeignDTD) {
4915 if (
parser->m_paramEntityParsing
4916 &&
parser->m_externalEntityRefHandler) {
4927 if (
parser->m_useForeignDTD)
4930 if (!
parser->m_externalEntityRefHandler(
4931 parser->m_externalEntityRefHandlerArg, 0,
entity->base,
4934 if (
dtd->paramEntityRead) {
4935 if (!
dtd->standalone &&
parser->m_notStandaloneHandler
4936 && !
parser->m_notStandaloneHandler(
parser->m_handlerArg))
4942 else if (!
parser->m_doctypeSysid)
4949 if (
parser->m_endDoctypeDeclHandler) {
4959 if (
parser->m_useForeignDTD) {
4962 if (
parser->m_paramEntityParsing
4963 &&
parser->m_externalEntityRefHandler) {
4970 if (!
parser->m_externalEntityRefHandler(
4971 parser->m_externalEntityRefHandlerArg, 0,
entity->base,
4974 if (
dtd->paramEntityRead) {
4975 if (!
dtd->standalone &&
parser->m_notStandaloneHandler
4976 && !
parser->m_notStandaloneHandler(
parser->m_handlerArg))
4992 if (!
parser->m_declElementType)
4997 if (!
parser->m_declAttributeId)
5029 if (
dtd->keepProcessing &&
parser->m_attlistDeclHandler)
5034 if (
dtd->keepProcessing &&
parser->m_attlistDeclHandler) {
5036 if (
parser->m_declAttributeType) {
5046 parser->m_declAttributeType =
parser->m_tempPool.start;
5052 if (
dtd->keepProcessing) {
5054 parser->m_declAttributeId,
5055 parser->m_declAttributeIsCdata,
5058 if (
parser->m_attlistDeclHandler &&
parser->m_declAttributeType) {
5066 parser->m_declAttributeType =
parser->m_tempPool.start;
5070 parser->m_attlistDeclHandler(
5072 parser->m_declAttributeId->name,
parser->m_declAttributeType, 0,
5081 if (
dtd->keepProcessing) {
5096 if (
parser->m_attlistDeclHandler &&
parser->m_declAttributeType) {
5104 parser->m_declAttributeType =
parser->m_tempPool.start;
5108 parser->m_attlistDeclHandler(
5110 parser->m_declAttributeId->name,
parser->m_declAttributeType,
5118 if (
dtd->keepProcessing) {
5125 if (
parser->m_declEntity) {
5127 parser->m_declEntity->textLen
5130 if (
parser->m_entityDeclHandler) {
5132 parser->m_entityDeclHandler(
5134 parser->m_declEntity->is_param,
parser->m_declEntity->textPtr,
5135 parser->m_declEntity->textLen,
parser->m_curBase, 0, 0, 0);
5151 if (
parser->m_entityDeclHandler) {
5153 parser->m_entityDeclHandler(
5155 parser->m_declEntity->is_param,
parser->m_declEntity->textPtr,
5156 parser->m_declEntity->textLen,
parser->m_curBase, 0, 0, 0);
5168 if (
parser->m_startDoctypeDeclHandler) {
5183 if (!
dtd->standalone
5185 && !
parser->m_paramEntityParsing
5187 &&
parser->m_notStandaloneHandler
5188 && !
parser->m_notStandaloneHandler(
parser->m_handlerArg))
5193 if (!
parser->m_declEntity) {
5196 if (!
parser->m_declEntity)
5203 if (
dtd->keepProcessing &&
parser->m_declEntity) {
5204 parser->m_declEntity->systemId
5207 if (!
parser->m_declEntity->systemId)
5229 if (
dtd->keepProcessing &&
parser->m_declEntity
5230 &&
parser->m_entityDeclHandler) {
5232 parser->m_entityDeclHandler(
5234 parser->m_declEntity->is_param, 0, 0,
parser->m_declEntity->base,
5235 parser->m_declEntity->systemId,
parser->m_declEntity->publicId, 0);
5240 if (
dtd->keepProcessing &&
parser->m_declEntity) {
5241 parser->m_declEntity->notation
5243 if (!
parser->m_declEntity->notation)
5246 if (
parser->m_unparsedEntityDeclHandler) {
5248 parser->m_unparsedEntityDeclHandler(
5250 parser->m_declEntity->base,
parser->m_declEntity->systemId,
5251 parser->m_declEntity->publicId,
parser->m_declEntity->notation);
5253 }
else if (
parser->m_entityDeclHandler) {
5255 parser->m_entityDeclHandler(
5256 parser->m_handlerArg,
parser->m_declEntity->name, 0, 0, 0,
5257 parser->m_declEntity->base,
parser->m_declEntity->systemId,
5258 parser->m_declEntity->publicId,
parser->m_declEntity->notation);
5268 if (
dtd->keepProcessing) {
5274 if (!
parser->m_declEntity)
5286 parser->m_declEntity->is_internal
5287 = ! (
parser->m_parentParser ||
parser->m_openInternalEntities);
5288 if (
parser->m_entityDeclHandler)
5298 if (
dtd->keepProcessing) {
5304 if (!
parser->m_declEntity)
5316 parser->m_declEntity->is_internal
5317 = ! (
parser->m_parentParser ||
parser->m_openInternalEntities);
5318 if (
parser->m_entityDeclHandler)
5332 if (
parser->m_notationDeclHandler) {
5333 parser->m_declNotationName
5335 if (!
parser->m_declNotationName)
5345 ->m_declNotationName) {
5358 if (
parser->m_declNotationName &&
parser->m_notationDeclHandler) {
5365 parser->m_notationDeclHandler(
5367 systemId,
parser->m_declNotationPublicId);
5373 if (
parser->m_declNotationPublicId &&
parser->m_notationDeclHandler) {
5375 parser->m_notationDeclHandler(
5377 0,
parser->m_declNotationPublicId);
5396 if (
parser->m_defaultHandler)
5409 if (
parser->m_prologState.level >=
parser->m_groupSize) {
5410 if (
parser->m_groupSize) {
5413 if (
parser->m_groupSize > (
unsigned int)(-1) / 2u) {
5420 parser->m_groupSize /= 2;
5426 if (
dtd->scaffIndex) {
5431#if UINT_MAX >= SIZE_MAX
5432 if (
parser->m_groupSize > (
size_t)(-1) /
sizeof(
int)) {
5446 if (!
parser->m_groupConnector) {
5452 parser->m_groupConnector[
parser->m_prologState.level] = 0;
5453 if (
dtd->in_eldecl) {
5461 if (
parser->m_elementDeclHandler)
5469 if (
dtd->in_eldecl &&
parser->m_elementDeclHandler)
5476 && !
parser->m_groupConnector[
parser->m_prologState.level]
5477 && (
dtd->scaffold[
dtd->scaffIndex[
dtd->scaffLevel - 1]].type
5479 dtd->scaffold[
dtd->scaffIndex[
dtd->scaffLevel - 1]].type
5481 if (
parser->m_elementDeclHandler)
5490 if (!
parser->m_paramEntityParsing)
5491 dtd->keepProcessing =
dtd->standalone;
5505 if (
parser->m_prologState.documentEntity
5506 && (
dtd->standalone ? !
parser->m_openInternalEntities
5507 : !
dtd->hasParamEntityRefs)) {
5510 else if (!
entity->is_internal) {
5534 dtd->keepProcessing =
dtd->standalone;
5537 &&
parser->m_skippedEntityHandler) {
5555 if (
parser->m_externalEntityRefHandler) {
5559 if (!
parser->m_externalEntityRefHandler(
5560 parser->m_externalEntityRefHandlerArg, 0,
entity->base,
5569 if (!
dtd->paramEntityRead) {
5570 dtd->keepProcessing =
dtd->standalone;
5574 dtd->keepProcessing =
dtd->standalone;
5579 if (!
dtd->standalone &&
parser->m_notStandaloneHandler
5580 && !
parser->m_notStandaloneHandler(
parser->m_handlerArg))
5587 if (
parser->m_elementDeclHandler) {
5589 if (!
parser->m_declElementType)
5591 dtd->scaffLevel = 0;
5592 dtd->scaffCount = 0;
5600 if (
dtd->in_eldecl) {
5601 if (
parser->m_elementDeclHandler) {
5613 parser->m_elementDeclHandler(
5622 if (
dtd->in_eldecl) {
5623 dtd->scaffold[
dtd->scaffIndex[
dtd->scaffLevel - 1]].type
5625 if (
parser->m_elementDeclHandler)
5642 if (
dtd->in_eldecl) {
5668 if (
parser->m_elementDeclHandler)
5685 if (
dtd->in_eldecl) {
5686 if (
parser->m_elementDeclHandler)
5689 dtd->scaffold[
dtd->scaffIndex[
dtd->scaffLevel]].quant = quant;
5690 if (
dtd->scaffLevel == 0) {
5696 parser->m_elementDeclHandler(
5697 parser->m_handlerArg,
parser->m_declElementType->name, model);
5700 dtd->contentStringLen = 0;
5724 if (
parser->m_startDoctypeDeclHandler)
5728 if (
dtd->keepProcessing &&
parser->m_entityDeclHandler)
5732 if (
parser->m_notationDeclHandler)
5736 if (
dtd->keepProcessing &&
parser->m_attlistDeclHandler)
5740 if (
parser->m_elementDeclHandler)
5748 switch (
parser->m_parsingStatus.parsing) {
5768 const char *next =
NULL;
5777 parser->m_eventEndPtr = next;
5781 if (
parser->m_defaultHandler) {
5792 if (
parser->m_defaultHandler)
5804 parser->m_eventPtr = next;
5807 if (!
parser->m_parsingStatus.finalBuffer) {
5813 if (!
parser->m_parsingStatus.finalBuffer) {
5821 parser->m_eventPtr =
s = next;
5822 switch (
parser->m_parsingStatus.parsing) {
5840 if (
parser->m_freeInternalEntities) {
5882 }
else if (
parser->m_openInternalEntities->entity ==
entity) {
5978 return parser->m_errorCode;
6019 if (enc ==
parser->m_encoding)
6020 parser->m_eventPtr = next;
6023 if (enc ==
parser->m_encoding)
6024 parser->m_eventPtr = ptr;
6031 if (enc ==
parser->m_encoding)
6032 parser->m_eventPtr = ptr;
6035 if (! isCdata &&
n == 0x20
6048 for (
i = 0;
i <
n;
i++) {
6099 parser->m_prologState.documentEntity &&
6101 (
dtd->standalone ? !
parser->m_openInternalEntities
6102 : !
dtd->hasParamEntityRefs);
6108 else if (!
entity->is_internal)
6124 if (enc ==
parser->m_encoding) {
6142 parser->m_eventPtr = ptr;
6147 if (enc ==
parser->m_encoding)
6148 parser->m_eventPtr = ptr;
6152 if (enc ==
parser->m_encoding)
6153 parser->m_eventPtr = ptr;
6163 isCdata, (
const char *)
entity->textPtr,
6186 if (enc ==
parser->m_encoding)
6187 parser->m_eventPtr = ptr;
6206 parser->m_prologState.inEntityValue = 1;
6213 if (!
pool->blocks) {
6233 if (
parser->m_isParamEntity || enc !=
parser->m_encoding) {
6252 dtd->keepProcessing =
dtd->standalone;
6256 if (enc ==
parser->m_encoding)
6262 if (
parser->m_externalEntityRefHandler) {
6266 if (!
parser->m_externalEntityRefHandler(
6267 parser->m_externalEntityRefHandlerArg, 0,
entity->base,
6276 if (!
dtd->paramEntityRead)
6277 dtd->keepProcessing =
dtd->standalone;
6279 dtd->keepProcessing =
dtd->standalone;
6318 *(
pool->ptr)++ = 0xA;
6325 if (enc ==
parser->m_encoding)
6340 for (
i = 0;
i <
n;
i++) {
6349 if (enc ==
parser->m_encoding)
6354 if (enc ==
parser->m_encoding)
6355 parser->m_eventPtr = next;
6366 if (enc ==
parser->m_encoding)
6430 const char *
start,
const char *
end) {
6434 if (!
parser->m_processingInstructionHandler) {
6435 if (
parser->m_defaultHandler)
6450 parser->m_processingInstructionHandler(
parser->m_handlerArg, target,
data);
6459 if (!
parser->m_commentHandler) {
6460 if (
parser->m_defaultHandler)
6482 if (enc ==
parser->m_encoding) {
6502 eventPP = &(
parser->m_openInternalEntities->internalEventPtr);
6517 parser->m_defaultHandler(
6530 for (
i = 0;
i <
type->nDefaultAtts;
i++)
6531 if (attId ==
type->defaultAtts[
i].id)
6534 type->idAtt = attId;
6536 if (
type->nDefaultAtts ==
type->allocDefaultAtts) {
6537 if (
type->allocDefaultAtts == 0) {
6538 type->allocDefaultAtts = 8;
6541 if (!
type->defaultAtts) {
6542 type->allocDefaultAtts = 0;
6559#if UINT_MAX >= SIZE_MAX
6576 att->isCdata = isCdata;
6579 type->nDefaultAtts += 1;
6640 id->prefix = &
dtd->defaultPrefix;
6651 for (j = 0; j <
i; j++) {
6673#define CONTEXT_SEP XML_T(ASCII_FF)
6681 if (
dtd->defaultPrefix.binding) {
6686 len =
dtd->defaultPrefix.binding->uriLen;
6687 if (
parser->m_namespaceSeparator)
6689 for (
i = 0;
i <
len;
i++) {
6691 dtd->defaultPrefix.binding->uri[
i])) {
6742 if (
parser->m_namespaceSeparator)
6744 for (
i = 0;
i <
len;
i++)
6760 for (
s =
e->name; *
s;
s++)
6768 return parser->m_tempPool.start;
6819 &
parser->m_inheritedBindings)
6839 for (
s = publicId; *
s;
s++) {
6844 if (
p != publicId &&
p[-1] != 0x20)
6851 if (
p != publicId &&
p[-1] == 0x20)
6871 p->defaultPrefix.name =
NULL;
6872 p->defaultPrefix.binding =
NULL;
6875 p->scaffIndex =
NULL;
6880 p->contentStringLen = 0;
6896 if (
e->allocDefaultAtts != 0)
6897 ms->free_fcn(
e->defaultAtts);
6909 p->defaultPrefix.name =
NULL;
6910 p->defaultPrefix.binding =
NULL;
6914 ms->free_fcn(
p->scaffIndex);
6915 p->scaffIndex =
NULL;
6916 ms->free_fcn(
p->scaffold);
6922 p->contentStringLen = 0;
6937 if (
e->allocDefaultAtts != 0)
6938 ms->free_fcn(
e->defaultAtts);
6950 ms->free_fcn(
p->scaffIndex);
6951 ms->free_fcn(
p->scaffold);
7001 newA->maybeTokenized =
oldA->maybeTokenized;
7008 oldA->prefix->name, 0);
7030 if (
oldE->nDefaultAtts) {
7035#if UINT_MAX >= SIZE_MAX
7036 if ((
size_t)
oldE->nDefaultAtts
7043 if (!
newE->defaultAtts) {
7049 oldE->idAtt->name, 0);
7050 newE->allocDefaultAtts =
newE->nDefaultAtts =
oldE->nDefaultAtts;
7053 oldE->prefix->name, 0);
7054 for (
i = 0;
i <
newE->nDefaultAtts;
i++) {
7057 newE->defaultAtts[
i].isCdata =
oldE->defaultAtts[
i].isCdata;
7058 if (
oldE->defaultAtts[
i].value) {
7059 newE->defaultAtts[
i].value
7061 if (!
newE->defaultAtts[
i].value)
7070 &(
oldDtd->generalEntities)))
7075 &(
oldDtd->paramEntities)))
7081 newDtd->hasParamEntityRefs =
oldDtd->hasParamEntityRefs;
7116 if (
oldE->systemId) {
7132 if (
oldE->publicId) {
7146 if (
oldE->notation) {
7153 newE->is_internal =
oldE->is_internal;
7171 for (; *
s;
s++,
len++)
7196 if (table->
size == 0) {
7214 unsigned char step = 0;
7216 while (table->
v[
i]) {
7221 i < step ? (
i += table->
size - step) : (
i -= step);
7227 if (table->
used >> (table->
power - 1)) {
7231 if (
newPower >=
sizeof(
unsigned long) * 8 ) {
7248 for (
i = 0;
i < table->
size;
i++)
7256 j < step ? (j +=
newSize - step) : (j -= step);
7266 while (table->
v[
i]) {
7269 i < step ? (
i +=
newSize - step) : (
i -= step);
7285 for (
i = 0;
i < table->
size;
i++) {
7295 for (
i = 0;
i < table->
size;
i++)
7337 if (!
pool->freeBlocks)
7343 p->next =
pool->freeBlocks;
7344 pool->freeBlocks =
p;
7359 pool->mem->free_fcn(
p);
7362 p =
pool->freeBlocks;
7365 pool->mem->free_fcn(
p);
7414 for (;
n > 0; --
n,
s++) {
7474 if (
pool->freeBlocks) {
7475 if (
pool->start == 0) {
7477 pool->freeBlocks =
pool->freeBlocks->next;
7484 if (
pool->end -
pool->start <
pool->freeBlocks->size) {
7486 pool->freeBlocks->next =
pool->blocks;
7582 if (!
dtd->scaffIndex) {
7587#if UINT_MAX >= SIZE_MAX
7588 if (
parser->m_groupSize > ((
size_t)(-1) /
sizeof(
int))) {
7593 if (!
dtd->scaffIndex)
7595 dtd->scaffIndex[0] = 0;
7598 if (
dtd->scaffCount >=
dtd->scaffSize) {
7600 if (
dtd->scaffold) {
7609#if UINT_MAX >= SIZE_MAX
7619 dtd->scaffSize *= 2;
7629 next =
dtd->scaffCount++;
7630 me = &
dtd->scaffold[next];
7631 if (
dtd->scaffLevel) {
7633 = &
dtd->scaffold[
dtd->scaffIndex[
dtd->scaffLevel - 1]];
7635 dtd->scaffold[
parent->lastchild].nextsib = next;
7638 parent->firstchild = next;
7639 parent->lastchild = next;
7642 me->firstchild =
me->lastchild =
me->childcnt =
me->nextsib = 0;
7660#if UINT_MAX >= SIZE_MAX
7664 if (
dtd->contentStringLen > (
size_t)(-1) /
sizeof(
XML_Char)) {
7669 > (
size_t)(-1) -
dtd->contentStringLen *
sizeof(
XML_Char)) {
7754 dest->numchildren = 0;
7825 +
rootParser->m_accounting.countBytesIndirect;
7850 "10")
", indirect " EXPAT_FMT_ULL(
"10")
", amplification %8.2f%s",
7873 const char ellipis[] =
"[..]";
7879 if ((
rootParser->m_accounting.debugLevel >= 3u)
7927 : &
rootParser->m_accounting.countBytesIndirect;
7936 +
rootParser->m_accounting.countBytesIndirect;
7942 <=
rootParser->m_accounting.maximumAmplificationFactor);
7944 if (
rootParser->m_accounting.debugLevel >= 2u) {
7957 return parser->m_accounting.countBytesDirect;
7964 return parser->m_accounting.countBytesIndirect;
7974# if defined(XML_UNICODE)
7982 "expat: Entities(%p): Count %9u, depth %2u/%2u %*s%s%s; %s length %d (xmlparse.c:%d)\n",
7986 (
rootParser->m_entity_stats.currentDepth - 1) * 2,
"",
7996 rootParser->m_entity_stats.countEverOpened++;
7999 >
rootParser->m_entity_stats.maximumDepthSeen) {
8000 rootParser->m_entity_stats.maximumDepthSeen++;
const char apr_size_t len
void(* XML_EndElementHandler)(void *userData, const XML_Char *name)
void(* XML_StartElementHandler)(void *userData, const XML_Char *name, const XML_Char **atts)
void(* XML_DefaultHandler)(void *userData, const XML_Char *s, int len)
int(* XML_ExternalEntityRefHandler)(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId)
void(* XML_StartNamespaceDeclHandler)(void *userData, const XML_Char *prefix, const XML_Char *uri)
@ XML_FEATURE_SIZEOF_XML_LCHAR
@ XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT
@ XML_FEATURE_SIZEOF_XML_CHAR
@ XML_FEATURE_UNICODE_WCHAR_T
@ XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT
@ XML_FEATURE_CONTEXT_BYTES
void(* XML_NotationDeclHandler)(void *userData, const XML_Char *notationName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId)
void(* XML_AttlistDeclHandler)(void *userData, const XML_Char *elname, const XML_Char *attname, const XML_Char *att_type, const XML_Char *dflt, int isrequired)
#define XML_MAJOR_VERSION
#define XML_MINOR_VERSION
@ XML_ERROR_UNCLOSED_TOKEN
@ XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF
@ XML_ERROR_NOT_STANDALONE
@ XML_ERROR_INCOMPLETE_PE
@ XML_ERROR_RECURSIVE_ENTITY_REF
@ XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING
@ XML_ERROR_ENTITY_DECLARED_IN_PE
@ XML_ERROR_DUPLICATE_ATTRIBUTE
@ XML_ERROR_EXTERNAL_ENTITY_HANDLING
@ XML_ERROR_INCORRECT_ENCODING
@ XML_ERROR_MISPLACED_XML_PI
@ XML_ERROR_AMPLIFICATION_LIMIT_BREACH
@ XML_ERROR_PARAM_ENTITY_REF
@ XML_ERROR_FEATURE_REQUIRES_XML_DTD
@ XML_ERROR_RESERVED_PREFIX_XML
@ XML_ERROR_UNEXPECTED_STATE
@ XML_ERROR_JUNK_AFTER_DOC_ELEMENT
@ XML_ERROR_NOT_SUSPENDED
@ XML_ERROR_UNCLOSED_CDATA_SECTION
@ XML_ERROR_RESERVED_NAMESPACE_URI
@ XML_ERROR_UNDEFINED_ENTITY
@ XML_ERROR_UNBOUND_PREFIX
@ XML_ERROR_UNDECLARING_PREFIX
@ XML_ERROR_INVALID_TOKEN
@ XML_ERROR_BINARY_ENTITY_REF
@ XML_ERROR_UNKNOWN_ENCODING
@ XML_ERROR_INVALID_ARGUMENT
@ XML_ERROR_RESERVED_PREFIX_XMLNS
void(* XML_XmlDeclHandler)(void *userData, const XML_Char *version, const XML_Char *encoding, int standalone)
#define XML_STATUS_SUSPENDED
struct XML_cp XML_Content
void(* XML_CommentHandler)(void *userData, const XML_Char *data)
@ XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE
@ XML_PARAM_ENTITY_PARSING_NEVER
int(* XML_UnknownEncodingHandler)(void *encodingHandlerData, const XML_Char *name, XML_Encoding *info)
void(* XML_ProcessingInstructionHandler)(void *userData, const XML_Char *target, const XML_Char *data)
void(* XML_UnparsedEntityDeclHandler)(void *userData, const XML_Char *entityName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName)
#define XML_MICRO_VERSION
void(* XML_CharacterDataHandler)(void *userData, const XML_Char *s, int len)
int(* XML_NotStandaloneHandler)(void *userData)
struct XML_ParserStruct * XML_Parser
void(* XML_SkippedEntityHandler)(void *userData, const XML_Char *entityName, int is_parameter_entity)
void(* XML_StartDoctypeDeclHandler)(void *userData, const XML_Char *doctypeName, const XML_Char *sysid, const XML_Char *pubid, int has_internal_subset)
void(* XML_EndNamespaceDeclHandler)(void *userData, const XML_Char *prefix)
void(* XML_EndDoctypeDeclHandler)(void *userData)
void(* XML_ElementDeclHandler)(void *userData, const XML_Char *name, XML_Content *model)
void(* XML_StartCdataSectionHandler)(void *userData)
void(* XML_EntityDeclHandler)(void *userData, const XML_Char *entityName, int is_parameter_entity, const XML_Char *value, int value_length, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName)
void(* XML_EndCdataSectionHandler)(void *userData)
#define XML_CONTEXT_BYTES
const unsigned char * buf
apr_file_t apr_off_t start
apr_pool_t apr_dbd_t const char const char * label
apr_memcache_server_t * ms
const char int apr_pool_t * pool
apr_seek_where_t apr_off_t * offset
apr_array_header_t ** result
apr_vformatter_buff_t * c
const char apr_uint32_t * id
void apr_skiplistnode ** iter
#define EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT
#define EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT
#define EXPAT_FMT_ULL(midpart)
static struct siphash * sip24_update(struct siphash *H, const void *src, size_t len)
static int sip24_valid(void)
static struct siphash * sip24_init(struct siphash *H, const struct sipkey *key)
static uint64_t sip24_final(struct siphash *H)
enum XML_Content_Quant quant
enum XML_Content_Type type
unsigned contentStringLen
CONTENT_SCAFFOLD * scaffold
XML_Bool hasParamEntityRefs
HASH_TABLE generalEntities
STRING_POOL entityValuePool
DEFAULT_ATTRIBUTE * defaultAtts
const ATTRIBUTE_ID * idAtt
const XML_Char * publicId
const XML_Char * systemId
const XML_Char * notation
const XML_Memory_Handling_Suite * mem
const XML_Memory_Handling_Suite * mem
const XML_Char * localPart
void *(* malloc_fcn)(size_t size)
void(* free_fcn)(void *ptr)
XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler
XML_XmlDeclHandler m_xmlDeclHandler
const ENCODING * m_encoding
XML_CommentHandler m_commentHandler
XML_Bool m_declAttributeIsCdata
XML_ExternalEntityRefHandler m_externalEntityRefHandler
XML_UnknownEncodingHandler m_unknownEncodingHandler
enum XML_Error m_errorCode
XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler
unsigned char m_nsAttsPower
XML_StartElementHandler m_startElementHandler
XML_Bool m_defaultExpandInternalEntities
const char * m_eventEndPtr
const XML_Char * m_doctypeName
void * m_unknownEncodingMem
XML_SkippedEntityHandler m_skippedEntityHandler
XML_EndElementHandler m_endElementHandler
XML_EntityDeclHandler m_entityDeclHandler
XML_Parser m_externalEntityRefHandlerArg
const XML_Memory_Handling_Suite m_mem
size_t m_partialTokenBytesBefore
XML_Bool m_declAttributeIsId
void * m_unknownEncodingHandlerData
void(* m_unknownEncodingRelease)(void *)
XML_AttlistDeclHandler m_attlistDeclHandler
const XML_Char * m_curBase
int m_lastBufferRequestSize
XML_Parser m_parentParser
void * m_unknownEncodingData
ELEMENT_TYPE * m_declElementType
ATTRIBUTE_ID * m_declAttributeId
const ENCODING * m_internalEncoding
unsigned long m_hash_secret_salt
XML_Index m_parseEndByteIndex
XML_EndCdataSectionHandler m_endCdataSectionHandler
const XML_Char * m_protocolEncodingName
XML_Bool m_reparseDeferralEnabled
const XML_Char * m_declAttributeType
const XML_Char * m_declNotationName
XML_NotationDeclHandler m_notationDeclHandler
OPEN_INTERNAL_ENTITY * m_freeInternalEntities
OPEN_INTERNAL_ENTITY * m_openInternalEntities
XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler
BINDING * m_inheritedBindings
BINDING * m_freeBindingList
XML_ElementDeclHandler m_elementDeclHandler
XML_DefaultHandler m_defaultHandler
XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler
INIT_ENCODING m_initEncoding
XML_Char m_namespaceSeparator
const XML_Char * m_declNotationPublicId
XML_ParsingStatus m_parsingStatus
const XML_Char * m_doctypeSysid
const char * m_parseEndPtr
const char * m_positionPtr
XML_NotStandaloneHandler m_notStandaloneHandler
XML_ProcessingInstructionHandler m_processingInstructionHandler
XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler
XML_CharacterDataHandler m_characterDataHandler
PROLOG_STATE m_prologState
unsigned long m_nsAttsVersion
XML_StartCdataSectionHandler m_startCdataSectionHandler
const XML_Char * m_doctypePubid
enum XML_Content_Quant quant
struct binding * prevPrefixBinding
const struct attribute_id * attId
struct binding * nextTagBinding
struct open_internal_entity * next
const char * internalEventEndPtr
const char * internalEventPtr
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray
static enum XML_Error callProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr)
const XML_Bool g_reparseDeferralEnabledDefault
static Processor internalEntityProcessor
static void moveToFreeBindingList(XML_Parser parser, BINDING *bindings)
static unsigned long get_hash_secret_salt(XML_Parser parser)
int XML_GetCurrentByteCount(XML_Parser parser)
static Processor prologProcessor
const XML_LChar * XML_ErrorString(enum XML_Error code)
static Processor externalEntityInitProcessor3
void XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status)
static size_t poolBytesToAllocateFor(int blockSize)
int XML_GetSpecifiedAttributeCount(XML_Parser parser)
XML_Bool XML_SetReparseDeferralEnabled(XML_Parser parser, XML_Bool enabled)
enum XML_Status XML_SetBase(XML_Parser parser, const XML_Char *p)
void XML_SetStartDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start)
#define PROBE_STEP(hash, mask, power)
static NAMED * lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize)
static enum XML_Error storeSelfEntityValue(XML_Parser parser, ENTITY *entity)
static void hashTableInit(HASH_TABLE *table, const XML_Memory_Handling_Suite *ms)
void XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler handler)
void XML_SetCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start, XML_EndCdataSectionHandler end)
static const XML_Char * poolCopyString(STRING_POOL *pool, const XML_Char *s)
static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
void XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
static void dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms)
int XML_GetIdAttributeIndex(XML_Parser parser)
#define INIT_SCAFFOLD_ELEMENTS
XML_Bool XML_ParserReset(XML_Parser parser, const XML_Char *encodingName)
static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, const char *ptr, const char *end, STRING_POOL *pool, enum XML_Account account)
XML_Index XML_GetCurrentByteIndex(XML_Parser parser)
int XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing peParsing)
#define REALLOC(parser, p, s)
static XML_Char * copyString(const XML_Char *s, const XML_Memory_Handling_Suite *memsuite)
#define INIT_DATA_BUF_SIZE
static Processor epilogProcessor
static const XML_Char implicitContext[]
static void poolClear(STRING_POOL *pool)
static XML_Bool startParsing(XML_Parser parser)
static enum XML_Error addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr)
static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr, XML_Bool haveMore, XML_Bool allowClosingDoctype, enum XML_Account account)
static unsigned long gather_time_entropy(void)
static const XML_Char * poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n)
#define XmlInitUnknownEncodingNS
static Processor prologInitProcessor
void XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler)
void XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl)
void XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *data)
static enum XML_Error handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName)
static void normalizePublicId(XML_Char *s)
static unsigned long getDebugLevel(const char *variableName, unsigned long defaultDebugLevel)
#define INIT_ATTS_VERSION
static void hashTableClear(HASH_TABLE *table)
void XML_SetNotStandaloneHandler(XML_Parser parser, XML_NotStandaloneHandler handler)
#define MUST_CONVERT(enc, s)
void XML_SetStartNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start)
void XML_UseParserAsHandlerArg(XML_Parser parser)
void XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler)
void XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler start)
static XML_Bool is_rfc3986_uri_char(XML_Char candidate)
static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore, enum XML_Account account)
void XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler)
const XML_Char * XML_GetBase(XML_Parser parser)
void XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler)
static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType)
const XML_Feature * XML_GetFeatureList(void)
enum XML_Status XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
enum XML_Status XML_StopParser(XML_Parser parser, XML_Bool resumable)
static unsigned long generate_hash_secret_salt(XML_Parser parser)
#define XmlGetInternalEncodingNS
static Processor contentProcessor
enum XML_Status XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName)
#define MALLOC(parser, s)
enum XML_Error XML_GetErrorCode(XML_Parser parser)
static int copyEntityTable(XML_Parser oldParser, HASH_TABLE *newTable, STRING_POOL *newPool, const HASH_TABLE *oldTable)
#define INIT_TAG_BUF_SIZE
static Processor errorProcessor
static XML_Parser parserCreate(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep, DTD *dtd)
void XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, XML_EndDoctypeDeclHandler end)
enum XML_Error Processor(XML_Parser parser, const char *start, const char *end, const char **endPtr)
void XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end)
static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms)
static ATTRIBUTE_ID * getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
void XML_SetUserData(XML_Parser parser, void *p)
static int nextScaffoldPart(XML_Parser parser)
static int reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
void XML_ParserFree(XML_Parser parser)
XML_Parser XML_ParserCreate(const XML_Char *encodingName)
static XML_Char * poolStoreString(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end)
void XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler)
void XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end)
struct open_internal_entity OPEN_INTERNAL_ENTITY
XML_Size XML_GetCurrentLineNumber(XML_Parser parser)
XML_Parser XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context, const XML_Char *encodingName)
static XML_Bool setContext(XML_Parser parser, const XML_Char *context)
static Processor externalEntityInitProcessor
void XML_SetStartCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start)
XML_Parser XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep)
#define XmlGetInternalEncoding
void XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler)
static XML_Bool storeRawNames(XML_Parser parser)
static void destroyBindings(BINDING *bindings, XML_Parser parser)
static XML_Bool keyeq(KEY s1, KEY s2)
void XML_SetReturnNSTriplet(XML_Parser parser, int do_nst)
static XML_Char * poolAppend(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end)
#define XmlInitEncodingNS
XML_Size XML_GetCurrentColumnNumber(XML_Parser parser)
static void parserInit(XML_Parser parser, const XML_Char *encodingName)
void * XML_MemRealloc(XML_Parser parser, void *ptr, size_t size)
static void copy_salt_to_sipkey(XML_Parser parser, struct sipkey *key)
static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata, XML_Bool isId, const XML_Char *value, XML_Parser parser)
static void normalizeLines(XML_Char *s)
static void freeBindings(XML_Parser parser, BINDING *bindings)
void XML_FreeContentModel(XML_Parser parser, XML_Content *model)
static Processor externalEntityInitProcessor2
static void reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, const char *end)
void XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler end)
static XML_Content * build_model(XML_Parser parser)
#define poolDiscard(pool)
static int dtdCopy(XML_Parser oldParser, DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms)
enum XML_Error XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD)
static ELEMENT_TYPE * getElementType(XML_Parser parser, const ENCODING *enc, const char *ptr, const char *end)
static void hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table)
static NAMED * hashTableIterNext(HASH_TABLE_ITER *iter)
void XML_SetSkippedEntityHandler(XML_Parser parser, XML_SkippedEntityHandler handler)
void XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler handler)
void * XML_MemMalloc(XML_Parser parser, size_t size)
enum XML_Status XML_ParseBuffer(XML_Parser parser, int len, int isFinal)
static XML_Bool poolGrow(STRING_POOL *pool)
struct attribute_id ATTRIBUTE_ID
void XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler)
void XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler end)
#define EXPAT_SAFE_PTR_DIFF(p, q)
static size_t keylen(KEY s)
static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, const char *ptr, const char *end, STRING_POOL *pool, enum XML_Account account)
void XML_SetEndCdataSectionHandler(XML_Parser parser, XML_EndCdataSectionHandler end)
void XML_DefaultCurrent(XML_Parser parser)
int XML_SetHashSalt(XML_Parser parser, unsigned long hash_salt)
static Processor cdataSectionProcessor
static enum XML_Error processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *s, const char *next)
static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, TAG_NAME *tagNamePtr, BINDING **bindingsPtr, enum XML_Account account)
const char * XML_GetInputContext(XML_Parser parser, int *offset, int *size)
static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *start, const char *end, const char **endPtr, XML_Bool haveMore, enum XML_Account account)
void XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg)
static Processor externalEntityContentProcessor
void * XML_GetBuffer(XML_Parser parser, int len)
const XML_LChar * XML_ExpatVersion(void)
enum XML_Status XML_ResumeParser(XML_Parser parser)
#define poolAppendChar(pool, c)
static void poolInit(STRING_POOL *pool, const XML_Memory_Handling_Suite *ms)
#define poolLastChar(pool)
#define XmlParseXmlDeclNS
static void hashTableDestroy(HASH_TABLE *table)
XML_Parser XML_ParserCreate_MM(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep)
static const XML_Char * poolAppendString(STRING_POOL *pool, const XML_Char *s)
static const XML_Char * getContext(XML_Parser parser)
void XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler handler)
static void poolDestroy(STRING_POOL *pool)
static unsigned long ENTROPY_DEBUG(const char *label, unsigned long entropy)
static DTD * dtdCreate(const XML_Memory_Handling_Suite *ms)
void XML_MemFree(XML_Parser parser, void *ptr)
static enum XML_Error processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl)
static enum XML_Error initializeEncoding(XML_Parser parser)
void XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl)
@ XML_ACCOUNT_ENTITY_EXPANSION
XML_Expat_Version XML_ExpatVersionInfo(void)
void XmlPrologStateInit(PROLOG_STATE *state)
#define XmlTokenRole(state, tok, ptr, end, enc)
@ XML_ROLE_NOTATION_PUBLIC_ID
@ XML_ROLE_GROUP_CLOSE_REP
@ XML_ROLE_CONTENT_PCDATA
@ XML_ROLE_CONTENT_ELEMENT_REP
@ XML_ROLE_ENTITY_COMPLETE
@ XML_ROLE_DOCTYPE_INTERNAL_SUBSET
@ XML_ROLE_ATTRIBUTE_TYPE_ENTITY
@ XML_ROLE_NOTATION_NO_SYSTEM_ID
@ XML_ROLE_PARAM_ENTITY_REF
@ XML_ROLE_ATTRIBUTE_TYPE_ENTITIES
@ XML_ROLE_ENTITY_NOTATION_NAME
@ XML_ROLE_GROUP_SEQUENCE
@ XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS
@ XML_ROLE_ATTLIST_ELEMENT_NAME
@ XML_ROLE_GROUP_CLOSE_OPT
@ XML_ROLE_IMPLIED_ATTRIBUTE_VALUE
@ XML_ROLE_ATTRIBUTE_TYPE_CDATA
@ XML_ROLE_ATTRIBUTE_ENUM_VALUE
@ XML_ROLE_ENTITY_SYSTEM_ID
@ XML_ROLE_CONTENT_ELEMENT
@ XML_ROLE_ATTRIBUTE_NOTATION_VALUE
@ XML_ROLE_DOCTYPE_SYSTEM_ID
@ XML_ROLE_NOTATION_SYSTEM_ID
@ XML_ROLE_ATTRIBUTE_NAME
@ XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN
@ XML_ROLE_ATTRIBUTE_TYPE_ID
@ XML_ROLE_ENTITY_PUBLIC_ID
@ XML_ROLE_INSTANCE_START
@ XML_ROLE_CONTENT_ELEMENT_PLUS
@ XML_ROLE_GENERAL_ENTITY_NAME
@ XML_ROLE_PARAM_ENTITY_NAME
@ XML_ROLE_DEFAULT_ATTRIBUTE_VALUE
@ XML_ROLE_GROUP_CLOSE_PLUS
@ XML_ROLE_REQUIRED_ATTRIBUTE_VALUE
@ XML_ROLE_FIXED_ATTRIBUTE_VALUE
@ XML_ROLE_CONTENT_ELEMENT_OPT
@ XML_ROLE_ATTRIBUTE_TYPE_IDREFS
@ XML_ROLE_DOCTYPE_PUBLIC_ID
@ XML_ROLE_ATTRIBUTE_TYPE_IDREF
ENCODING * XmlInitUnknownEncoding(void *mem, int *table, CONVERTER convert, void *userData)
int XmlSizeOfUnknownEncoding(void)
#define XmlGetAttributes(enc, ptr, attsMax, atts)
int XmlParseXmlDecl(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingNamePtr, const ENCODING **namedEncodingPtr, int *standalonePtr)
#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr)
#define XmlNameLength(enc, ptr)
#define XML_TOK_PARTIAL_CHAR
int XmlInitEncoding(INIT_ENCODING *p, const ENCODING **encPtr, const char *name)
#define XmlEntityValueTok(enc, ptr, end, nextTokPtr)
#define XML_TOK_EMPTY_ELEMENT_NO_ATTS
#define XML_TOK_ENTITY_REF
#define XmlContentTok(enc, ptr, end, nextTokPtr)
#define XML_TOK_DATA_NEWLINE
#define XmlPrologTok(enc, ptr, end, nextTokPtr)
#define XmlIsPublicId(enc, ptr, end, badPtr)
#define XML_TOK_START_TAG_WITH_ATTS
#define XML_TOK_CDATA_SECT_CLOSE
#define XML_TOK_DATA_CHARS
#define XML_TOK_PARAM_ENTITY_REF
#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS
#define XML_TOK_TRAILING_RSQB
#define XmlCharRefNumber(enc, ptr)
#define XmlPredefinedEntityName(enc, ptr, end)
@ XML_CONVERT_INPUT_INCOMPLETE
#define XML_TOK_ATTRIBUTE_VALUE_S
#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr)
#define XML_TOK_START_TAG_NO_ATTS
#define XmlSkipS(enc, ptr)
#define XML_TOK_TRAILING_CR
#define XML_TOK_CDATA_SECT_OPEN
#define XML_TOK_INSTANCE_START
#define XmlUpdatePosition(enc, ptr, end, pos)