Lines Matching +full:libbsd +full:- +full:dev
9 Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
11 Copyright (c) 2000-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
12 Copyright (c) 2001-2002 Greg Stein <gstein@users.sourceforge.net>
13 Copyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>
14 Copyright (c) 2005-2009 Steven Solie <steven@solie.ca>
16 Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
20 Copyright (c) 2016 Pascal Cuoq <cuoq@trust-in-soft.com>
22 Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
26 Copyright (c) 2017 Rolf Eike Beer <eike@sf-mail.de>
30 Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it>
33 Copyright (c) 2019-2020 Ben Wagner <bungeman@chromium.org>
35 Copyright (c) 2021 Dong-hee Na <donghee.na@python.org>
136 * libbsd (arc4random_buf): HAVE_ARC4RANDOM_BUF + HAVE_LIBBSD, \
137 * libbsd (arc4random): HAVE_ARC4RANDOM + HAVE_LIBBSD, \
138 …* Linux (including <3.17) / BSD / macOS (including <10.7) / Solaris >=8 (/dev/urandom): XML_DEV_UR…
154 # define MUST_CONVERT(enc, s) (! (enc)->isUtf16 || (((uintptr_t)(s)) & 1))
162 # define MUST_CONVERT(enc, s) (! (enc)->isUtf8)
194 #define ROUND_UP(n, sz) (((n) + ((sz)-1)) & ~((sz)-1))
196 /* Do safe (NULL-aware) pointer arithmetic */
197 #define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
222 to the hash table size, which is a power of 2. We use double-hashing,
225 index was calculated: index = hash & mask, where mask = table->size - 1.
226 We limit the maximum step size to table->size / 4 (mask >> 2) and make
230 ((((hash) & ~(mask)) >> ((power)-1)) & ((mask) >> 2))
274 encodings. The memory buffer 'buf' is a separately-allocated
279 XML_Parse()/XML_ParseBuffer(), the buffer is re-allocated to
282 A parser re-uses these structures, maintaining a list of allocated
299 int processed; /* # of processed bytes - when suspended */
593 #define poolStart(pool) ((pool)->start)
594 #define poolEnd(pool) ((pool)->ptr)
595 #define poolLength(pool) ((pool)->ptr - (pool)->start)
596 #define poolChop(pool) ((void)--(pool->ptr))
597 #define poolLastChar(pool) (((pool)->ptr)[-1])
598 #define poolDiscard(pool) ((pool)->ptr = (pool)->start)
599 #define poolFinish(pool) ((pool)->start = (pool)->ptr)
601 (((pool)->ptr == (pool)->end && ! poolGrow(pool)) \
603 : ((*((pool)->ptr)++ = c), 1))
712 #define MALLOC(parser, s) (parser->m_mem.malloc_fcn((s)))
713 #define REALLOC(parser, p, s) (parser->m_mem.realloc_fcn((p), (s)))
714 #define FREE(parser, p) (parser->m_mem.free_fcn((p)))
753 const size_t bytesToWrite = count - bytesWrittenTotal; in writeRandomBytes_getrandom_nonblock()
776 /* Extract entropy from /dev/urandom */
782 const int fd = open("/dev/urandom", O_RDONLY); in writeRandomBytes_dev_urandom()
789 const size_t bytesToWrite = count - bytesWrittenTotal; in writeRandomBytes_dev_urandom()
830 /* Provide declaration of rand_s() for MinGW-32 (not 64, which has it),
895 fprintf(stderr, "expat: Entropy: %s --> 0x%0*lx (%lu bytes)\n", label, in ENTROPY_DEBUG()
926 return ENTROPY_DEBUG("/dev/urandom", entropy); in generate_hash_secret_salt()
929 /* .. and self-made low quality for backup: */ in generate_hash_secret_salt()
934 /* Factors are 2^31-1 and 2^61-1 (Mersenne primes M31 and M61) */ in generate_hash_secret_salt()
946 if (parser->m_parentParser != NULL) in get_hash_secret_salt()
947 return get_hash_secret_salt(parser->m_parentParser); in get_hash_secret_salt()
948 return parser->m_hash_secret_salt; in get_hash_secret_salt()
954 if (parser->m_hash_secret_salt == 0) in startParsing()
955 parser->m_hash_secret_salt = generate_hash_secret_salt(parser); in startParsing()
956 if (parser->m_ns) { in startParsing()
980 parser = memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); in parserCreate()
982 mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); in parserCreate()
983 mtemp->malloc_fcn = memsuite->malloc_fcn; in parserCreate()
984 mtemp->realloc_fcn = memsuite->realloc_fcn; in parserCreate()
985 mtemp->free_fcn = memsuite->free_fcn; in parserCreate()
991 mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); in parserCreate()
992 mtemp->malloc_fcn = malloc; in parserCreate()
993 mtemp->realloc_fcn = realloc; in parserCreate()
994 mtemp->free_fcn = free; in parserCreate()
1001 parser->m_buffer = NULL; in parserCreate()
1002 parser->m_bufferLim = NULL; in parserCreate()
1004 parser->m_attsSize = INIT_ATTS_SIZE; in parserCreate()
1005 parser->m_atts in parserCreate()
1006 = (ATTRIBUTE *)MALLOC(parser, parser->m_attsSize * sizeof(ATTRIBUTE)); in parserCreate()
1007 if (parser->m_atts == NULL) { in parserCreate()
1012 parser->m_attInfo = (XML_AttrInfo *)MALLOC( in parserCreate()
1013 parser, parser->m_attsSize * sizeof(XML_AttrInfo)); in parserCreate()
1014 if (parser->m_attInfo == NULL) { in parserCreate()
1015 FREE(parser, parser->m_atts); in parserCreate()
1020 parser->m_dataBuf in parserCreate()
1022 if (parser->m_dataBuf == NULL) { in parserCreate()
1023 FREE(parser, parser->m_atts); in parserCreate()
1025 FREE(parser, parser->m_attInfo); in parserCreate()
1030 parser->m_dataBufEnd = parser->m_dataBuf + INIT_DATA_BUF_SIZE; in parserCreate()
1033 parser->m_dtd = dtd; in parserCreate()
1035 parser->m_dtd = dtdCreate(&parser->m_mem); in parserCreate()
1036 if (parser->m_dtd == NULL) { in parserCreate()
1037 FREE(parser, parser->m_dataBuf); in parserCreate()
1038 FREE(parser, parser->m_atts); in parserCreate()
1040 FREE(parser, parser->m_attInfo); in parserCreate()
1047 parser->m_freeBindingList = NULL; in parserCreate()
1048 parser->m_freeTagList = NULL; in parserCreate()
1049 parser->m_freeInternalEntities = NULL; in parserCreate()
1051 parser->m_groupSize = 0; in parserCreate()
1052 parser->m_groupConnector = NULL; in parserCreate()
1054 parser->m_unknownEncodingHandler = NULL; in parserCreate()
1055 parser->m_unknownEncodingHandlerData = NULL; in parserCreate()
1057 parser->m_namespaceSeparator = ASCII_EXCL; in parserCreate()
1058 parser->m_ns = XML_FALSE; in parserCreate()
1059 parser->m_ns_triplets = XML_FALSE; in parserCreate()
1061 parser->m_nsAtts = NULL; in parserCreate()
1062 parser->m_nsAttsVersion = 0; in parserCreate()
1063 parser->m_nsAttsPower = 0; in parserCreate()
1065 parser->m_protocolEncodingName = NULL; in parserCreate()
1067 poolInit(&parser->m_tempPool, &(parser->m_mem)); in parserCreate()
1068 poolInit(&parser->m_temp2Pool, &(parser->m_mem)); in parserCreate()
1071 if (encodingName && ! parser->m_protocolEncodingName) { in parserCreate()
1074 // destroying parser->m_dtd because the DTD is shared with the parent in parserCreate()
1076 // parser->m_dtd is parser->m_isParamEntity but it will be set to in parserCreate()
1078 parser->m_dtd = NULL; in parserCreate()
1085 parser->m_ns = XML_TRUE; in parserCreate()
1086 parser->m_internalEncoding = XmlGetInternalEncodingNS(); in parserCreate()
1087 parser->m_namespaceSeparator = *nameSep; in parserCreate()
1089 parser->m_internalEncoding = XmlGetInternalEncoding(); in parserCreate()
1097 parser->m_processor = prologInitProcessor; in parserInit()
1098 XmlPrologStateInit(&parser->m_prologState); in parserInit()
1100 parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem)); in parserInit()
1102 parser->m_curBase = NULL; in parserInit()
1103 XmlInitEncoding(&parser->m_initEncoding, &parser->m_encoding, 0); in parserInit()
1104 parser->m_userData = NULL; in parserInit()
1105 parser->m_handlerArg = NULL; in parserInit()
1106 parser->m_startElementHandler = NULL; in parserInit()
1107 parser->m_endElementHandler = NULL; in parserInit()
1108 parser->m_characterDataHandler = NULL; in parserInit()
1109 parser->m_processingInstructionHandler = NULL; in parserInit()
1110 parser->m_commentHandler = NULL; in parserInit()
1111 parser->m_startCdataSectionHandler = NULL; in parserInit()
1112 parser->m_endCdataSectionHandler = NULL; in parserInit()
1113 parser->m_defaultHandler = NULL; in parserInit()
1114 parser->m_startDoctypeDeclHandler = NULL; in parserInit()
1115 parser->m_endDoctypeDeclHandler = NULL; in parserInit()
1116 parser->m_unparsedEntityDeclHandler = NULL; in parserInit()
1117 parser->m_notationDeclHandler = NULL; in parserInit()
1118 parser->m_startNamespaceDeclHandler = NULL; in parserInit()
1119 parser->m_endNamespaceDeclHandler = NULL; in parserInit()
1120 parser->m_notStandaloneHandler = NULL; in parserInit()
1121 parser->m_externalEntityRefHandler = NULL; in parserInit()
1122 parser->m_externalEntityRefHandlerArg = parser; in parserInit()
1123 parser->m_skippedEntityHandler = NULL; in parserInit()
1124 parser->m_elementDeclHandler = NULL; in parserInit()
1125 parser->m_attlistDeclHandler = NULL; in parserInit()
1126 parser->m_entityDeclHandler = NULL; in parserInit()
1127 parser->m_xmlDeclHandler = NULL; in parserInit()
1128 parser->m_bufferPtr = parser->m_buffer; in parserInit()
1129 parser->m_bufferEnd = parser->m_buffer; in parserInit()
1130 parser->m_parseEndByteIndex = 0; in parserInit()
1131 parser->m_parseEndPtr = NULL; in parserInit()
1132 parser->m_declElementType = NULL; in parserInit()
1133 parser->m_declAttributeId = NULL; in parserInit()
1134 parser->m_declEntity = NULL; in parserInit()
1135 parser->m_doctypeName = NULL; in parserInit()
1136 parser->m_doctypeSysid = NULL; in parserInit()
1137 parser->m_doctypePubid = NULL; in parserInit()
1138 parser->m_declAttributeType = NULL; in parserInit()
1139 parser->m_declNotationName = NULL; in parserInit()
1140 parser->m_declNotationPublicId = NULL; in parserInit()
1141 parser->m_declAttributeIsCdata = XML_FALSE; in parserInit()
1142 parser->m_declAttributeIsId = XML_FALSE; in parserInit()
1143 memset(&parser->m_position, 0, sizeof(POSITION)); in parserInit()
1144 parser->m_errorCode = XML_ERROR_NONE; in parserInit()
1145 parser->m_eventPtr = NULL; in parserInit()
1146 parser->m_eventEndPtr = NULL; in parserInit()
1147 parser->m_positionPtr = NULL; in parserInit()
1148 parser->m_openInternalEntities = NULL; in parserInit()
1149 parser->m_defaultExpandInternalEntities = XML_TRUE; in parserInit()
1150 parser->m_tagLevel = 0; in parserInit()
1151 parser->m_tagStack = NULL; in parserInit()
1152 parser->m_inheritedBindings = NULL; in parserInit()
1153 parser->m_nSpecifiedAtts = 0; in parserInit()
1154 parser->m_unknownEncodingMem = NULL; in parserInit()
1155 parser->m_unknownEncodingRelease = NULL; in parserInit()
1156 parser->m_unknownEncodingData = NULL; in parserInit()
1157 parser->m_parentParser = NULL; in parserInit()
1158 parser->m_parsingStatus.parsing = XML_INITIALIZED; in parserInit()
1160 parser->m_isParamEntity = XML_FALSE; in parserInit()
1161 parser->m_useForeignDTD = XML_FALSE; in parserInit()
1162 parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; in parserInit()
1164 parser->m_hash_secret_salt = 0; in parserInit()
1167 memset(&parser->m_accounting, 0, sizeof(ACCOUNTING)); in parserInit()
1168 parser->m_accounting.debugLevel = getDebugLevel("EXPAT_ACCOUNTING_DEBUG", 0u); in parserInit()
1169 parser->m_accounting.maximumAmplificationFactor in parserInit()
1171 parser->m_accounting.activationThresholdBytes in parserInit()
1174 memset(&parser->m_entity_stats, 0, sizeof(ENTITY_STATS)); in parserInit()
1175 parser->m_entity_stats.debugLevel = getDebugLevel("EXPAT_ENTITY_DEBUG", 0u); in parserInit()
1184 bindings = bindings->nextTagBinding; in moveToFreeBindingList()
1185 b->nextTagBinding = parser->m_freeBindingList; in moveToFreeBindingList()
1186 parser->m_freeBindingList = b; in moveToFreeBindingList()
1198 if (parser->m_parentParser) in XML_ParserReset()
1201 tStk = parser->m_tagStack; in XML_ParserReset()
1204 tStk = tStk->parent; in XML_ParserReset()
1205 tag->parent = parser->m_freeTagList; in XML_ParserReset()
1206 moveToFreeBindingList(parser, tag->bindings); in XML_ParserReset()
1207 tag->bindings = NULL; in XML_ParserReset()
1208 parser->m_freeTagList = tag; in XML_ParserReset()
1211 openEntityList = parser->m_openInternalEntities; in XML_ParserReset()
1214 openEntityList = openEntity->next; in XML_ParserReset()
1215 openEntity->next = parser->m_freeInternalEntities; in XML_ParserReset()
1216 parser->m_freeInternalEntities = openEntity; in XML_ParserReset()
1218 moveToFreeBindingList(parser, parser->m_inheritedBindings); in XML_ParserReset()
1219 FREE(parser, parser->m_unknownEncodingMem); in XML_ParserReset()
1220 if (parser->m_unknownEncodingRelease) in XML_ParserReset()
1221 parser->m_unknownEncodingRelease(parser->m_unknownEncodingData); in XML_ParserReset()
1222 poolClear(&parser->m_tempPool); in XML_ParserReset()
1223 poolClear(&parser->m_temp2Pool); in XML_ParserReset()
1224 FREE(parser, (void *)parser->m_protocolEncodingName); in XML_ParserReset()
1225 parser->m_protocolEncodingName = NULL; in XML_ParserReset()
1227 dtdReset(parser->m_dtd, &parser->m_mem); in XML_ParserReset()
1239 if (parser->m_parsingStatus.parsing == XML_PARSING in XML_SetEncoding()
1240 || parser->m_parsingStatus.parsing == XML_SUSPENDED) in XML_SetEncoding()
1244 FREE(parser, (void *)parser->m_protocolEncodingName); in XML_SetEncoding()
1248 parser->m_protocolEncodingName = NULL; in XML_SetEncoding()
1251 parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem)); in XML_SetEncoding()
1252 if (! parser->m_protocolEncodingName) in XML_SetEncoding()
1307 oldDtd = parser->m_dtd; in XML_ExternalEntityParserCreate()
1308 oldStartElementHandler = parser->m_startElementHandler; in XML_ExternalEntityParserCreate()
1309 oldEndElementHandler = parser->m_endElementHandler; in XML_ExternalEntityParserCreate()
1310 oldCharacterDataHandler = parser->m_characterDataHandler; in XML_ExternalEntityParserCreate()
1311 oldProcessingInstructionHandler = parser->m_processingInstructionHandler; in XML_ExternalEntityParserCreate()
1312 oldCommentHandler = parser->m_commentHandler; in XML_ExternalEntityParserCreate()
1313 oldStartCdataSectionHandler = parser->m_startCdataSectionHandler; in XML_ExternalEntityParserCreate()
1314 oldEndCdataSectionHandler = parser->m_endCdataSectionHandler; in XML_ExternalEntityParserCreate()
1315 oldDefaultHandler = parser->m_defaultHandler; in XML_ExternalEntityParserCreate()
1316 oldUnparsedEntityDeclHandler = parser->m_unparsedEntityDeclHandler; in XML_ExternalEntityParserCreate()
1317 oldNotationDeclHandler = parser->m_notationDeclHandler; in XML_ExternalEntityParserCreate()
1318 oldStartNamespaceDeclHandler = parser->m_startNamespaceDeclHandler; in XML_ExternalEntityParserCreate()
1319 oldEndNamespaceDeclHandler = parser->m_endNamespaceDeclHandler; in XML_ExternalEntityParserCreate()
1320 oldNotStandaloneHandler = parser->m_notStandaloneHandler; in XML_ExternalEntityParserCreate()
1321 oldExternalEntityRefHandler = parser->m_externalEntityRefHandler; in XML_ExternalEntityParserCreate()
1322 oldSkippedEntityHandler = parser->m_skippedEntityHandler; in XML_ExternalEntityParserCreate()
1323 oldUnknownEncodingHandler = parser->m_unknownEncodingHandler; in XML_ExternalEntityParserCreate()
1324 oldElementDeclHandler = parser->m_elementDeclHandler; in XML_ExternalEntityParserCreate()
1325 oldAttlistDeclHandler = parser->m_attlistDeclHandler; in XML_ExternalEntityParserCreate()
1326 oldEntityDeclHandler = parser->m_entityDeclHandler; in XML_ExternalEntityParserCreate()
1327 oldXmlDeclHandler = parser->m_xmlDeclHandler; in XML_ExternalEntityParserCreate()
1328 oldDeclElementType = parser->m_declElementType; in XML_ExternalEntityParserCreate()
1330 oldUserData = parser->m_userData; in XML_ExternalEntityParserCreate()
1331 oldHandlerArg = parser->m_handlerArg; in XML_ExternalEntityParserCreate()
1332 oldDefaultExpandInternalEntities = parser->m_defaultExpandInternalEntities; in XML_ExternalEntityParserCreate()
1333 oldExternalEntityRefHandlerArg = parser->m_externalEntityRefHandlerArg; in XML_ExternalEntityParserCreate()
1335 oldParamEntityParsing = parser->m_paramEntityParsing; in XML_ExternalEntityParserCreate()
1336 oldInEntityValue = parser->m_prologState.inEntityValue; in XML_ExternalEntityParserCreate()
1338 oldns_triplets = parser->m_ns_triplets; in XML_ExternalEntityParserCreate()
1344 oldhash_secret_salt = parser->m_hash_secret_salt; in XML_ExternalEntityParserCreate()
1351 /* Note that the magical uses of the pre-processor to make field in XML_ExternalEntityParserCreate()
1356 if (parser->m_ns) { in XML_ExternalEntityParserCreate()
1357 XML_Char tmp[2] = {parser->m_namespaceSeparator, 0}; in XML_ExternalEntityParserCreate()
1358 parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); in XML_ExternalEntityParserCreate()
1360 parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd); in XML_ExternalEntityParserCreate()
1366 parser->m_startElementHandler = oldStartElementHandler; in XML_ExternalEntityParserCreate()
1367 parser->m_endElementHandler = oldEndElementHandler; in XML_ExternalEntityParserCreate()
1368 parser->m_characterDataHandler = oldCharacterDataHandler; in XML_ExternalEntityParserCreate()
1369 parser->m_processingInstructionHandler = oldProcessingInstructionHandler; in XML_ExternalEntityParserCreate()
1370 parser->m_commentHandler = oldCommentHandler; in XML_ExternalEntityParserCreate()
1371 parser->m_startCdataSectionHandler = oldStartCdataSectionHandler; in XML_ExternalEntityParserCreate()
1372 parser->m_endCdataSectionHandler = oldEndCdataSectionHandler; in XML_ExternalEntityParserCreate()
1373 parser->m_defaultHandler = oldDefaultHandler; in XML_ExternalEntityParserCreate()
1374 parser->m_unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; in XML_ExternalEntityParserCreate()
1375 parser->m_notationDeclHandler = oldNotationDeclHandler; in XML_ExternalEntityParserCreate()
1376 parser->m_startNamespaceDeclHandler = oldStartNamespaceDeclHandler; in XML_ExternalEntityParserCreate()
1377 parser->m_endNamespaceDeclHandler = oldEndNamespaceDeclHandler; in XML_ExternalEntityParserCreate()
1378 parser->m_notStandaloneHandler = oldNotStandaloneHandler; in XML_ExternalEntityParserCreate()
1379 parser->m_externalEntityRefHandler = oldExternalEntityRefHandler; in XML_ExternalEntityParserCreate()
1380 parser->m_skippedEntityHandler = oldSkippedEntityHandler; in XML_ExternalEntityParserCreate()
1381 parser->m_unknownEncodingHandler = oldUnknownEncodingHandler; in XML_ExternalEntityParserCreate()
1382 parser->m_elementDeclHandler = oldElementDeclHandler; in XML_ExternalEntityParserCreate()
1383 parser->m_attlistDeclHandler = oldAttlistDeclHandler; in XML_ExternalEntityParserCreate()
1384 parser->m_entityDeclHandler = oldEntityDeclHandler; in XML_ExternalEntityParserCreate()
1385 parser->m_xmlDeclHandler = oldXmlDeclHandler; in XML_ExternalEntityParserCreate()
1386 parser->m_declElementType = oldDeclElementType; in XML_ExternalEntityParserCreate()
1387 parser->m_userData = oldUserData; in XML_ExternalEntityParserCreate()
1389 parser->m_handlerArg = parser->m_userData; in XML_ExternalEntityParserCreate()
1391 parser->m_handlerArg = parser; in XML_ExternalEntityParserCreate()
1393 parser->m_externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; in XML_ExternalEntityParserCreate()
1394 parser->m_defaultExpandInternalEntities = oldDefaultExpandInternalEntities; in XML_ExternalEntityParserCreate()
1395 parser->m_ns_triplets = oldns_triplets; in XML_ExternalEntityParserCreate()
1396 parser->m_hash_secret_salt = oldhash_secret_salt; in XML_ExternalEntityParserCreate()
1397 parser->m_parentParser = oldParser; in XML_ExternalEntityParserCreate()
1399 parser->m_paramEntityParsing = oldParamEntityParsing; in XML_ExternalEntityParserCreate()
1400 parser->m_prologState.inEntityValue = oldInEntityValue; in XML_ExternalEntityParserCreate()
1403 if (! dtdCopy(oldParser, parser->m_dtd, oldDtd, &parser->m_mem) in XML_ExternalEntityParserCreate()
1408 parser->m_processor = externalEntityInitProcessor; in XML_ExternalEntityParserCreate()
1411 /* The DTD instance referenced by parser->m_dtd is shared between the in XML_ExternalEntityParserCreate()
1414 setContext, because this would overwrite existing prefix->binding in XML_ExternalEntityParserCreate()
1415 pointers in parser->m_dtd with ones that get destroyed with the external in XML_ExternalEntityParserCreate()
1418 parser->m_isParamEntity = XML_TRUE; in XML_ExternalEntityParserCreate()
1419 XmlPrologStateInitExternalEntity(&parser->m_prologState); in XML_ExternalEntityParserCreate()
1420 parser->m_processor = externalParEntInitProcessor; in XML_ExternalEntityParserCreate()
1432 bindings = b->nextTagBinding; in destroyBindings()
1433 FREE(parser, b->uri); in destroyBindings()
1445 tagList = parser->m_tagStack; in XML_ParserFree()
1449 if (parser->m_freeTagList == NULL) in XML_ParserFree()
1451 tagList = parser->m_freeTagList; in XML_ParserFree()
1452 parser->m_freeTagList = NULL; in XML_ParserFree()
1455 tagList = tagList->parent; in XML_ParserFree()
1456 FREE(parser, p->buf); in XML_ParserFree()
1457 destroyBindings(p->bindings, parser); in XML_ParserFree()
1461 entityList = parser->m_openInternalEntities; in XML_ParserFree()
1465 if (parser->m_freeInternalEntities == NULL) in XML_ParserFree()
1467 entityList = parser->m_freeInternalEntities; in XML_ParserFree()
1468 parser->m_freeInternalEntities = NULL; in XML_ParserFree()
1471 entityList = entityList->next; in XML_ParserFree()
1475 destroyBindings(parser->m_freeBindingList, parser); in XML_ParserFree()
1476 destroyBindings(parser->m_inheritedBindings, parser); in XML_ParserFree()
1477 poolDestroy(&parser->m_tempPool); in XML_ParserFree()
1478 poolDestroy(&parser->m_temp2Pool); in XML_ParserFree()
1479 FREE(parser, (void *)parser->m_protocolEncodingName); in XML_ParserFree()
1482 parser->m_dtd with the root parser, so we must not destroy it in XML_ParserFree()
1484 if (! parser->m_isParamEntity && parser->m_dtd) in XML_ParserFree()
1486 if (parser->m_dtd) in XML_ParserFree()
1488 dtdDestroy(parser->m_dtd, (XML_Bool)! parser->m_parentParser, in XML_ParserFree()
1489 &parser->m_mem); in XML_ParserFree()
1490 FREE(parser, (void *)parser->m_atts); in XML_ParserFree()
1492 FREE(parser, (void *)parser->m_attInfo); in XML_ParserFree()
1494 FREE(parser, parser->m_groupConnector); in XML_ParserFree()
1495 FREE(parser, parser->m_buffer); in XML_ParserFree()
1496 FREE(parser, parser->m_dataBuf); in XML_ParserFree()
1497 FREE(parser, parser->m_nsAtts); in XML_ParserFree()
1498 FREE(parser, parser->m_unknownEncodingMem); in XML_ParserFree()
1499 if (parser->m_unknownEncodingRelease) in XML_ParserFree()
1500 parser->m_unknownEncodingRelease(parser->m_unknownEncodingData); in XML_ParserFree()
1507 parser->m_handlerArg = parser; in XML_UseParserAsHandlerArg()
1516 if (parser->m_parsingStatus.parsing == XML_PARSING in XML_UseForeignDTD()
1517 || parser->m_parsingStatus.parsing == XML_SUSPENDED) in XML_UseForeignDTD()
1519 parser->m_useForeignDTD = useDTD; in XML_UseForeignDTD()
1532 if (parser->m_parsingStatus.parsing == XML_PARSING in XML_SetReturnNSTriplet()
1533 || parser->m_parsingStatus.parsing == XML_SUSPENDED) in XML_SetReturnNSTriplet()
1535 parser->m_ns_triplets = do_nst ? XML_TRUE : XML_FALSE; in XML_SetReturnNSTriplet()
1542 if (parser->m_handlerArg == parser->m_userData) in XML_SetUserData()
1543 parser->m_handlerArg = parser->m_userData = p; in XML_SetUserData()
1545 parser->m_userData = p; in XML_SetUserData()
1553 p = poolCopyString(&parser->m_dtd->pool, p); in XML_SetBase()
1556 parser->m_curBase = p; in XML_SetBase()
1558 parser->m_curBase = NULL; in XML_SetBase()
1566 return parser->m_curBase; in XML_GetBase()
1572 return -1; in XML_GetSpecifiedAttributeCount()
1573 return parser->m_nSpecifiedAtts; in XML_GetSpecifiedAttributeCount()
1579 return -1; in XML_GetIdAttributeIndex()
1580 return parser->m_idAttIndex; in XML_GetIdAttributeIndex()
1588 return parser->m_attInfo; in XML_GetAttributeInfo()
1597 parser->m_startElementHandler = start; in XML_SetElementHandler()
1598 parser->m_endElementHandler = end; in XML_SetElementHandler()
1604 parser->m_startElementHandler = start; in XML_SetStartElementHandler()
1610 parser->m_endElementHandler = end; in XML_SetEndElementHandler()
1617 parser->m_characterDataHandler = handler; in XML_SetCharacterDataHandler()
1624 parser->m_processingInstructionHandler = handler; in XML_SetProcessingInstructionHandler()
1630 parser->m_commentHandler = handler; in XML_SetCommentHandler()
1639 parser->m_startCdataSectionHandler = start; in XML_SetCdataSectionHandler()
1640 parser->m_endCdataSectionHandler = end; in XML_SetCdataSectionHandler()
1647 parser->m_startCdataSectionHandler = start; in XML_SetStartCdataSectionHandler()
1654 parser->m_endCdataSectionHandler = end; in XML_SetEndCdataSectionHandler()
1661 parser->m_defaultHandler = handler; in XML_SetDefaultHandler()
1662 parser->m_defaultExpandInternalEntities = XML_FALSE; in XML_SetDefaultHandler()
1669 parser->m_defaultHandler = handler; in XML_SetDefaultHandlerExpand()
1670 parser->m_defaultExpandInternalEntities = XML_TRUE; in XML_SetDefaultHandlerExpand()
1678 parser->m_startDoctypeDeclHandler = start; in XML_SetDoctypeDeclHandler()
1679 parser->m_endDoctypeDeclHandler = end; in XML_SetDoctypeDeclHandler()
1686 parser->m_startDoctypeDeclHandler = start; in XML_SetStartDoctypeDeclHandler()
1692 parser->m_endDoctypeDeclHandler = end; in XML_SetEndDoctypeDeclHandler()
1699 parser->m_unparsedEntityDeclHandler = handler; in XML_SetUnparsedEntityDeclHandler()
1705 parser->m_notationDeclHandler = handler; in XML_SetNotationDeclHandler()
1714 parser->m_startNamespaceDeclHandler = start; in XML_SetNamespaceDeclHandler()
1715 parser->m_endNamespaceDeclHandler = end; in XML_SetNamespaceDeclHandler()
1722 parser->m_startNamespaceDeclHandler = start; in XML_SetStartNamespaceDeclHandler()
1729 parser->m_endNamespaceDeclHandler = end; in XML_SetEndNamespaceDeclHandler()
1736 parser->m_notStandaloneHandler = handler; in XML_SetNotStandaloneHandler()
1743 parser->m_externalEntityRefHandler = handler; in XML_SetExternalEntityRefHandler()
1751 parser->m_externalEntityRefHandlerArg = (XML_Parser)arg; in XML_SetExternalEntityRefHandlerArg()
1753 parser->m_externalEntityRefHandlerArg = parser; in XML_SetExternalEntityRefHandlerArg()
1760 parser->m_skippedEntityHandler = handler; in XML_SetSkippedEntityHandler()
1768 parser->m_unknownEncodingHandler = handler; in XML_SetUnknownEncodingHandler()
1769 parser->m_unknownEncodingHandlerData = data; in XML_SetUnknownEncodingHandler()
1775 parser->m_elementDeclHandler = eldecl; in XML_SetElementDeclHandler()
1781 parser->m_attlistDeclHandler = attdecl; in XML_SetAttlistDeclHandler()
1787 parser->m_entityDeclHandler = handler; in XML_SetEntityDeclHandler()
1793 parser->m_xmlDeclHandler = handler; in XML_SetXmlDeclHandler()
1802 if (parser->m_parsingStatus.parsing == XML_PARSING in XML_SetParamEntityParsing()
1803 || parser->m_parsingStatus.parsing == XML_SUSPENDED) in XML_SetParamEntityParsing()
1806 parser->m_paramEntityParsing = peParsing; in XML_SetParamEntityParsing()
1817 if (parser->m_parentParser) in XML_SetHashSalt()
1818 return XML_SetHashSalt(parser->m_parentParser, hash_salt); in XML_SetHashSalt()
1820 if (parser->m_parsingStatus.parsing == XML_PARSING in XML_SetHashSalt()
1821 || parser->m_parsingStatus.parsing == XML_SUSPENDED) in XML_SetHashSalt()
1823 parser->m_hash_secret_salt = hash_salt; in XML_SetHashSalt()
1831 parser->m_errorCode = XML_ERROR_INVALID_ARGUMENT; in XML_Parse()
1834 switch (parser->m_parsingStatus.parsing) { in XML_Parse()
1836 parser->m_errorCode = XML_ERROR_SUSPENDED; in XML_Parse()
1839 parser->m_errorCode = XML_ERROR_FINISHED; in XML_Parse()
1842 if (parser->m_parentParser == NULL && ! startParsing(parser)) { in XML_Parse()
1843 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_Parse()
1848 parser->m_parsingStatus.parsing = XML_PARSING; in XML_Parse()
1852 parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; in XML_Parse()
1855 parser->m_positionPtr = parser->m_bufferPtr; in XML_Parse()
1856 parser->m_parseEndPtr = parser->m_bufferEnd; in XML_Parse()
1862 parser->m_errorCode in XML_Parse()
1863 = parser->m_processor(parser, parser->m_bufferPtr, in XML_Parse()
1864 parser->m_parseEndPtr, &parser->m_bufferPtr); in XML_Parse()
1866 if (parser->m_errorCode == XML_ERROR_NONE) { in XML_Parse()
1867 switch (parser->m_parsingStatus.parsing) { in XML_Parse()
1881 XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, in XML_Parse()
1882 parser->m_bufferPtr, &parser->m_position); in XML_Parse()
1883 parser->m_positionPtr = parser->m_bufferPtr; in XML_Parse()
1888 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_Parse()
1894 parser->m_eventEndPtr = parser->m_eventPtr; in XML_Parse()
1895 parser->m_processor = errorProcessor; in XML_Parse()
1899 else if (parser->m_bufferPtr == parser->m_bufferEnd) { in XML_Parse()
1903 /* Detect overflow (a+b > MAX <==> b > MAX-a) */ in XML_Parse()
1904 if ((XML_Size)len > ((XML_Size)-1) / 2 - parser->m_parseEndByteIndex) { in XML_Parse()
1905 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_Parse()
1906 parser->m_eventPtr = parser->m_eventEndPtr = NULL; in XML_Parse()
1907 parser->m_processor = errorProcessor; in XML_Parse()
1910 parser->m_parseEndByteIndex += len; in XML_Parse()
1911 parser->m_positionPtr = s; in XML_Parse()
1912 parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; in XML_Parse()
1914 parser->m_errorCode in XML_Parse()
1915 = parser->m_processor(parser, s, parser->m_parseEndPtr = s + len, &end); in XML_Parse()
1917 if (parser->m_errorCode != XML_ERROR_NONE) { in XML_Parse()
1918 parser->m_eventEndPtr = parser->m_eventPtr; in XML_Parse()
1919 parser->m_processor = errorProcessor; in XML_Parse()
1922 switch (parser->m_parsingStatus.parsing) { in XML_Parse()
1929 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_Parse()
1938 XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, end, in XML_Parse()
1939 &parser->m_position); in XML_Parse()
1940 nLeftOver = s + len - end; in XML_Parse()
1942 if (parser->m_buffer == NULL in XML_Parse()
1943 || nLeftOver > parser->m_bufferLim - parser->m_buffer) { in XML_Parse()
1948 temp = (char *)REALLOC(parser, parser->m_buffer, bytesToAllocate); in XML_Parse()
1951 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_Parse()
1952 parser->m_eventPtr = parser->m_eventEndPtr = NULL; in XML_Parse()
1953 parser->m_processor = errorProcessor; in XML_Parse()
1956 parser->m_buffer = temp; in XML_Parse()
1957 parser->m_bufferLim = parser->m_buffer + bytesToAllocate; in XML_Parse()
1959 memcpy(parser->m_buffer, end, nLeftOver); in XML_Parse()
1961 parser->m_bufferPtr = parser->m_buffer; in XML_Parse()
1962 parser->m_bufferEnd = parser->m_buffer + nLeftOver; in XML_Parse()
1963 parser->m_positionPtr = parser->m_bufferPtr; in XML_Parse()
1964 parser->m_parseEndPtr = parser->m_bufferEnd; in XML_Parse()
1965 parser->m_eventPtr = parser->m_bufferPtr; in XML_Parse()
1966 parser->m_eventEndPtr = parser->m_bufferPtr; in XML_Parse()
1988 switch (parser->m_parsingStatus.parsing) { in XML_ParseBuffer()
1990 parser->m_errorCode = XML_ERROR_SUSPENDED; in XML_ParseBuffer()
1993 parser->m_errorCode = XML_ERROR_FINISHED; in XML_ParseBuffer()
1997 if (! parser->m_bufferPtr) { in XML_ParseBuffer()
1998 parser->m_errorCode = XML_ERROR_NO_BUFFER; in XML_ParseBuffer()
2002 if (parser->m_parentParser == NULL && ! startParsing(parser)) { in XML_ParseBuffer()
2003 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_ParseBuffer()
2008 parser->m_parsingStatus.parsing = XML_PARSING; in XML_ParseBuffer()
2011 start = parser->m_bufferPtr; in XML_ParseBuffer()
2012 parser->m_positionPtr = start; in XML_ParseBuffer()
2013 parser->m_bufferEnd += len; in XML_ParseBuffer()
2014 parser->m_parseEndPtr = parser->m_bufferEnd; in XML_ParseBuffer()
2015 parser->m_parseEndByteIndex += len; in XML_ParseBuffer()
2016 parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; in XML_ParseBuffer()
2018 parser->m_errorCode = parser->m_processor( in XML_ParseBuffer()
2019 parser, start, parser->m_parseEndPtr, &parser->m_bufferPtr); in XML_ParseBuffer()
2021 if (parser->m_errorCode != XML_ERROR_NONE) { in XML_ParseBuffer()
2022 parser->m_eventEndPtr = parser->m_eventPtr; in XML_ParseBuffer()
2023 parser->m_processor = errorProcessor; in XML_ParseBuffer()
2026 switch (parser->m_parsingStatus.parsing) { in XML_ParseBuffer()
2033 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_ParseBuffer()
2040 XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, in XML_ParseBuffer()
2041 parser->m_bufferPtr, &parser->m_position); in XML_ParseBuffer()
2042 parser->m_positionPtr = parser->m_bufferPtr; in XML_ParseBuffer()
2051 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2054 switch (parser->m_parsingStatus.parsing) { in XML_GetBuffer()
2056 parser->m_errorCode = XML_ERROR_SUSPENDED; in XML_GetBuffer()
2059 parser->m_errorCode = XML_ERROR_FINISHED; in XML_GetBuffer()
2064 if (len > EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferEnd)) { in XML_GetBuffer()
2071 parser->m_bufferEnd, parser->m_bufferPtr)); in XML_GetBuffer()
2073 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2077 keep = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer); in XML_GetBuffer()
2081 if (keep > INT_MAX - neededSize) { in XML_GetBuffer()
2082 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2088 <= EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_buffer)) { in XML_GetBuffer()
2090 if (keep < EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer)) { in XML_GetBuffer()
2092 = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer) in XML_GetBuffer()
2093 - keep; in XML_GetBuffer()
2096 memmove(parser->m_buffer, &parser->m_buffer[offset], in XML_GetBuffer()
2097 parser->m_bufferEnd - parser->m_bufferPtr + keep); in XML_GetBuffer()
2098 parser->m_bufferEnd -= offset; in XML_GetBuffer()
2099 parser->m_bufferPtr -= offset; in XML_GetBuffer()
2102 if (parser->m_buffer && parser->m_bufferPtr) { in XML_GetBuffer()
2103 memmove(parser->m_buffer, parser->m_bufferPtr, in XML_GetBuffer()
2104 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr)); in XML_GetBuffer()
2105 parser->m_bufferEnd in XML_GetBuffer()
2106 = parser->m_buffer in XML_GetBuffer()
2107 + EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr); in XML_GetBuffer()
2108 parser->m_bufferPtr = parser->m_buffer; in XML_GetBuffer()
2114 = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferPtr); in XML_GetBuffer()
2122 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2127 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2130 parser->m_bufferLim = newBuf + bufferSize; in XML_GetBuffer()
2132 if (parser->m_bufferPtr) { in XML_GetBuffer()
2133 memcpy(newBuf, &parser->m_bufferPtr[-keep], in XML_GetBuffer()
2134 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr) in XML_GetBuffer()
2136 FREE(parser, parser->m_buffer); in XML_GetBuffer()
2137 parser->m_buffer = newBuf; in XML_GetBuffer()
2138 parser->m_bufferEnd in XML_GetBuffer()
2139 = parser->m_buffer in XML_GetBuffer()
2140 + EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr) in XML_GetBuffer()
2142 parser->m_bufferPtr = parser->m_buffer + keep; in XML_GetBuffer()
2145 parser->m_bufferEnd = newBuf; in XML_GetBuffer()
2146 parser->m_bufferPtr = parser->m_buffer = newBuf; in XML_GetBuffer()
2149 if (parser->m_bufferPtr) { in XML_GetBuffer()
2150 memcpy(newBuf, parser->m_bufferPtr, in XML_GetBuffer()
2151 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr)); in XML_GetBuffer()
2152 FREE(parser, parser->m_buffer); in XML_GetBuffer()
2153 parser->m_bufferEnd in XML_GetBuffer()
2155 + EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr); in XML_GetBuffer()
2158 parser->m_bufferEnd = newBuf; in XML_GetBuffer()
2160 parser->m_bufferPtr = parser->m_buffer = newBuf; in XML_GetBuffer()
2163 parser->m_eventPtr = parser->m_eventEndPtr = NULL; in XML_GetBuffer()
2164 parser->m_positionPtr = NULL; in XML_GetBuffer()
2166 return parser->m_bufferEnd; in XML_GetBuffer()
2173 switch (parser->m_parsingStatus.parsing) { in XML_StopParser()
2176 parser->m_errorCode = XML_ERROR_SUSPENDED; in XML_StopParser()
2179 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_StopParser()
2182 parser->m_errorCode = XML_ERROR_FINISHED; in XML_StopParser()
2187 if (parser->m_isParamEntity) { in XML_StopParser()
2188 parser->m_errorCode = XML_ERROR_SUSPEND_PE; in XML_StopParser()
2192 parser->m_parsingStatus.parsing = XML_SUSPENDED; in XML_StopParser()
2194 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_StopParser()
2205 if (parser->m_parsingStatus.parsing != XML_SUSPENDED) { in XML_ResumeParser()
2206 parser->m_errorCode = XML_ERROR_NOT_SUSPENDED; in XML_ResumeParser()
2209 parser->m_parsingStatus.parsing = XML_PARSING; in XML_ResumeParser()
2211 parser->m_errorCode = parser->m_processor( in XML_ResumeParser()
2212 parser, parser->m_bufferPtr, parser->m_parseEndPtr, &parser->m_bufferPtr); in XML_ResumeParser()
2214 if (parser->m_errorCode != XML_ERROR_NONE) { in XML_ResumeParser()
2215 parser->m_eventEndPtr = parser->m_eventPtr; in XML_ResumeParser()
2216 parser->m_processor = errorProcessor; in XML_ResumeParser()
2219 switch (parser->m_parsingStatus.parsing) { in XML_ResumeParser()
2225 if (parser->m_parsingStatus.finalBuffer) { in XML_ResumeParser()
2226 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_ResumeParser()
2233 XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, in XML_ResumeParser()
2234 parser->m_bufferPtr, &parser->m_position); in XML_ResumeParser()
2235 parser->m_positionPtr = parser->m_bufferPtr; in XML_ResumeParser()
2244 *status = parser->m_parsingStatus; in XML_GetParsingStatus()
2251 return parser->m_errorCode; in XML_GetErrorCode()
2257 return -1; in XML_GetCurrentByteIndex()
2258 if (parser->m_eventPtr) in XML_GetCurrentByteIndex()
2259 return (XML_Index)(parser->m_parseEndByteIndex in XML_GetCurrentByteIndex()
2260 - (parser->m_parseEndPtr - parser->m_eventPtr)); in XML_GetCurrentByteIndex()
2261 return -1; in XML_GetCurrentByteIndex()
2268 if (parser->m_eventEndPtr && parser->m_eventPtr) in XML_GetCurrentByteCount()
2269 return (int)(parser->m_eventEndPtr - parser->m_eventPtr); in XML_GetCurrentByteCount()
2278 if (parser->m_eventPtr && parser->m_buffer) { in XML_GetInputContext()
2280 *offset = (int)(parser->m_eventPtr - parser->m_buffer); in XML_GetInputContext()
2282 *size = (int)(parser->m_bufferEnd - parser->m_buffer); in XML_GetInputContext()
2283 return parser->m_buffer; in XML_GetInputContext()
2297 if (parser->m_eventPtr && parser->m_eventPtr >= parser->m_positionPtr) { in XML_GetCurrentLineNumber()
2298 XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, in XML_GetCurrentLineNumber()
2299 parser->m_eventPtr, &parser->m_position); in XML_GetCurrentLineNumber()
2300 parser->m_positionPtr = parser->m_eventPtr; in XML_GetCurrentLineNumber()
2302 return parser->m_position.lineNumber + 1; in XML_GetCurrentLineNumber()
2309 if (parser->m_eventPtr && parser->m_eventPtr >= parser->m_positionPtr) { in XML_GetCurrentColumnNumber()
2310 XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, in XML_GetCurrentColumnNumber()
2311 parser->m_eventPtr, &parser->m_position); in XML_GetCurrentColumnNumber()
2312 parser->m_positionPtr = parser->m_eventPtr; in XML_GetCurrentColumnNumber()
2314 return parser->m_position.columnNumber; in XML_GetCurrentColumnNumber()
2347 if (parser->m_defaultHandler) { in XML_DefaultCurrent()
2348 if (parser->m_openInternalEntities) in XML_DefaultCurrent()
2349 reportDefault(parser, parser->m_internalEncoding, in XML_DefaultCurrent()
2350 parser->m_openInternalEntities->internalEventPtr, in XML_DefaultCurrent()
2351 parser->m_openInternalEntities->internalEventEndPtr); in XML_DefaultCurrent()
2353 reportDefault(parser, parser->m_encoding, parser->m_eventPtr, in XML_DefaultCurrent()
2354 parser->m_eventEndPtr); in XML_DefaultCurrent()
2370 return XML_L("not well-formed (invalid token)"); in XML_ErrorString()
2408 return XML_L("unexpected parser state - please send a bug report"); in XML_ErrorString()
2424 return XML_L("XML declaration not well-formed"); in XML_ErrorString()
2426 return XML_L("text declaration not well-formed"); in XML_ErrorString()
2465 /* V1 is used to string-ize the version number. However, it would in XML_ExpatVersion()
2466 string-ize the actual version macro *names* unless we get them in XML_ExpatVersion()
2544 if ((parser == NULL) || (parser->m_parentParser != NULL) in XML_SetBillionLaughsAttackProtectionMaximumAmplification()
2549 parser->m_accounting.maximumAmplificationFactor = maximumAmplificationFactor; in XML_SetBillionLaughsAttackProtectionMaximumAmplification()
2556 if ((parser == NULL) || (parser->m_parentParser != NULL)) { in XML_SetBillionLaughsAttackProtectionActivationThreshold()
2559 parser->m_accounting.activationThresholdBytes = activationThresholdBytes; in XML_SetBillionLaughsAttackProtectionActivationThreshold()
2564 /* Initially tag->rawName always points into the parse buffer;
2566 processed, and not yet closed, we need to store tag->rawName in a more
2571 TAG *tag = parser->m_tagStack; in storeRawNames()
2574 int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1); in storeRawNames()
2576 char *rawNameBuf = tag->buf + nameLen; in storeRawNames()
2582 if (tag->rawName == rawNameBuf) in storeRawNames()
2584 /* For re-use purposes we need to ensure that the in storeRawNames()
2585 size of tag->buf is a multiple of sizeof(XML_Char). in storeRawNames()
2587 rawNameLen = ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); in storeRawNames()
2589 if (rawNameLen > (size_t)INT_MAX - nameLen) in storeRawNames()
2592 if (bufSize > tag->bufEnd - tag->buf) { in storeRawNames()
2593 char *temp = (char *)REALLOC(parser, tag->buf, bufSize); in storeRawNames()
2596 /* if tag->name.str points to tag->buf (only when namespace in storeRawNames()
2599 if (tag->name.str == (XML_Char *)tag->buf) in storeRawNames()
2600 tag->name.str = (XML_Char *)temp; in storeRawNames()
2601 /* if tag->name.localPart is set (when namespace processing is on) in storeRawNames()
2602 then update it as well, since it will always point into tag->buf in storeRawNames()
2604 if (tag->name.localPart) in storeRawNames()
2605 tag->name.localPart in storeRawNames()
2606 = (XML_Char *)temp + (tag->name.localPart - (XML_Char *)tag->buf); in storeRawNames()
2607 tag->buf = temp; in storeRawNames()
2608 tag->bufEnd = temp + bufSize; in storeRawNames()
2611 memcpy(rawNameBuf, tag->rawName, tag->rawNameLength); in storeRawNames()
2612 tag->rawName = rawNameBuf; in storeRawNames()
2613 tag = tag->parent; in storeRawNames()
2622 parser, 0, parser->m_encoding, start, end, endPtr, in contentProcessor()
2623 (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_ACCOUNT_DIRECT); in contentProcessor()
2637 parser->m_processor = externalEntityInitProcessor2; in externalEntityInitProcessor()
2645 int tok = XmlContentTok(parser->m_encoding, start, end, &next); in externalEntityInitProcessor2()
2659 declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent. in externalEntityInitProcessor2()
2661 if (next == end && ! parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor2()
2668 if (! parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor2()
2672 parser->m_eventPtr = start; in externalEntityInitProcessor2()
2675 if (! parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor2()
2679 parser->m_eventPtr = start; in externalEntityInitProcessor2()
2682 parser->m_processor = externalEntityInitProcessor3; in externalEntityInitProcessor2()
2691 parser->m_eventPtr = start; in externalEntityInitProcessor3()
2692 tok = XmlContentTok(parser->m_encoding, start, end, &next); in externalEntityInitProcessor3()
2694 - processXmlDecl in externalEntityInitProcessor3()
2695 - externalEntityContentProcessor in externalEntityInitProcessor3()
2697 parser->m_eventEndPtr = next; in externalEntityInitProcessor3()
2705 switch (parser->m_parsingStatus.parsing) { in externalEntityInitProcessor3()
2716 if (! parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor3()
2722 if (! parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor3()
2728 parser->m_processor = externalEntityContentProcessor; in externalEntityInitProcessor3()
2729 parser->m_tagLevel = 1; in externalEntityInitProcessor3()
2737 = doContent(parser, 1, parser->m_encoding, start, end, endPtr, in externalEntityContentProcessor()
2738 (XML_Bool)! parser->m_parsingStatus.finalBuffer, in externalEntityContentProcessor()
2752 DTD *const dtd = parser->m_dtd; in doContent()
2756 if (enc == parser->m_encoding) { in doContent()
2757 eventPP = &parser->m_eventPtr; in doContent()
2758 eventEndPP = &parser->m_eventEndPtr; in doContent()
2760 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in doContent()
2761 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in doContent()
2787 if (parser->m_characterDataHandler) { in doContent()
2789 parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); in doContent()
2790 } else if (parser->m_defaultHandler) in doContent()
2797 if (parser->m_tagLevel != startTagLevel) in doContent()
2807 if (parser->m_tagLevel != startTagLevel) in doContent()
2832 enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); in doContent()
2835 /* NOTE: We are replacing 4-6 characters original input for 1 character in doContent()
2842 if (parser->m_characterDataHandler) in doContent()
2843 parser->m_characterDataHandler(parser->m_handlerArg, &ch, 1); in doContent()
2844 else if (parser->m_defaultHandler) in doContent()
2848 name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, in doContent()
2849 next - enc->minBytesPerChar); in doContent()
2852 entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0); in doContent()
2853 poolDiscard(&dtd->pool); in doContent()
2858 if (! dtd->hasParamEntityRefs || dtd->standalone) { in doContent()
2861 else if (! entity->is_internal) in doContent()
2864 if (parser->m_skippedEntityHandler) in doContent()
2865 parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); in doContent()
2866 else if (parser->m_defaultHandler) in doContent()
2870 if (entity->open) in doContent()
2872 if (entity->notation) in doContent()
2874 if (entity->textPtr) { in doContent()
2876 if (! parser->m_defaultExpandInternalEntities) { in doContent()
2877 if (parser->m_skippedEntityHandler) in doContent()
2878 parser->m_skippedEntityHandler(parser->m_handlerArg, entity->name, in doContent()
2880 else if (parser->m_defaultHandler) in doContent()
2887 } else if (parser->m_externalEntityRefHandler) { in doContent()
2889 entity->open = XML_TRUE; in doContent()
2891 entity->open = XML_FALSE; in doContent()
2894 if (! parser->m_externalEntityRefHandler( in doContent()
2895 parser->m_externalEntityRefHandlerArg, context, entity->base, in doContent()
2896 entity->systemId, entity->publicId)) in doContent()
2898 poolDiscard(&parser->m_tempPool); in doContent()
2899 } else if (parser->m_defaultHandler) in doContent()
2909 if (parser->m_freeTagList) { in doContent()
2910 tag = parser->m_freeTagList; in doContent()
2911 parser->m_freeTagList = parser->m_freeTagList->parent; in doContent()
2916 tag->buf = (char *)MALLOC(parser, INIT_TAG_BUF_SIZE); in doContent()
2917 if (! tag->buf) { in doContent()
2921 tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; in doContent()
2923 tag->bindings = NULL; in doContent()
2924 tag->parent = parser->m_tagStack; in doContent()
2925 parser->m_tagStack = tag; in doContent()
2926 tag->name.localPart = NULL; in doContent()
2927 tag->name.prefix = NULL; in doContent()
2928 tag->rawName = s + enc->minBytesPerChar; in doContent()
2929 tag->rawNameLength = XmlNameLength(enc, tag->rawName); in doContent()
2930 ++parser->m_tagLevel; in doContent()
2932 const char *rawNameEnd = tag->rawName + tag->rawNameLength; in doContent()
2933 const char *fromPtr = tag->rawName; in doContent()
2934 toPtr = (XML_Char *)tag->buf; in doContent()
2940 (ICHAR *)tag->bufEnd - 1); in doContent()
2941 convLen = (int)(toPtr - (XML_Char *)tag->buf); in doContent()
2944 tag->name.strLen = convLen; in doContent()
2947 bufSize = (int)(tag->bufEnd - tag->buf) << 1; in doContent()
2949 char *temp = (char *)REALLOC(parser, tag->buf, bufSize); in doContent()
2952 tag->buf = temp; in doContent()
2953 tag->bufEnd = temp + bufSize; in doContent()
2958 tag->name.str = (XML_Char *)tag->buf; in doContent()
2961 = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings), account); in doContent()
2964 if (parser->m_startElementHandler) in doContent()
2965 parser->m_startElementHandler(parser->m_handlerArg, tag->name.str, in doContent()
2966 (const XML_Char **)parser->m_atts); in doContent()
2967 else if (parser->m_defaultHandler) in doContent()
2969 poolClear(&parser->m_tempPool); in doContent()
2975 const char *rawName = s + enc->minBytesPerChar; in doContent()
2980 name.str = poolStoreString(&parser->m_tempPool, enc, rawName, in doContent()
2984 poolFinish(&parser->m_tempPool); in doContent()
2991 poolFinish(&parser->m_tempPool); in doContent()
2992 if (parser->m_startElementHandler) { in doContent()
2993 parser->m_startElementHandler(parser->m_handlerArg, name.str, in doContent()
2994 (const XML_Char **)parser->m_atts); in doContent()
2997 if (parser->m_endElementHandler) { in doContent()
2998 if (parser->m_startElementHandler) in doContent()
3000 parser->m_endElementHandler(parser->m_handlerArg, name.str); in doContent()
3003 if (noElmHandlers && parser->m_defaultHandler) in doContent()
3005 poolClear(&parser->m_tempPool); in doContent()
3008 if ((parser->m_tagLevel == 0) in doContent()
3009 && (parser->m_parsingStatus.parsing != XML_FINISHED)) { in doContent()
3010 if (parser->m_parsingStatus.parsing == XML_SUSPENDED) in doContent()
3011 parser->m_processor = epilogProcessor; in doContent()
3017 if (parser->m_tagLevel == startTagLevel) in doContent()
3022 TAG *tag = parser->m_tagStack; in doContent()
3023 rawName = s + enc->minBytesPerChar * 2; in doContent()
3025 if (len != tag->rawNameLength in doContent()
3026 || memcmp(tag->rawName, rawName, len) != 0) { in doContent()
3030 parser->m_tagStack = tag->parent; in doContent()
3031 tag->parent = parser->m_freeTagList; in doContent()
3032 parser->m_freeTagList = tag; in doContent()
3033 --parser->m_tagLevel; in doContent()
3034 if (parser->m_endElementHandler) { in doContent()
3038 localPart = tag->name.localPart; in doContent()
3039 if (parser->m_ns && localPart) { in doContent()
3041 tag->name.str, since this points to the binding->uri in doContent()
3042 buffer which gets re-used; so we have to add them again in doContent()
3044 uri = (XML_Char *)tag->name.str + tag->name.uriLen; in doContent()
3045 /* don't need to check for space - already done in storeAtts() */ in doContent()
3048 prefix = (XML_Char *)tag->name.prefix; in doContent()
3049 if (parser->m_ns_triplets && prefix) { in doContent()
3050 *uri++ = parser->m_namespaceSeparator; in doContent()
3056 parser->m_endElementHandler(parser->m_handlerArg, tag->name.str); in doContent()
3057 } else if (parser->m_defaultHandler) in doContent()
3059 while (tag->bindings) { in doContent()
3060 BINDING *b = tag->bindings; in doContent()
3061 if (parser->m_endNamespaceDeclHandler) in doContent()
3062 parser->m_endNamespaceDeclHandler(parser->m_handlerArg, in doContent()
3063 b->prefix->name); in doContent()
3064 tag->bindings = tag->bindings->nextTagBinding; in doContent()
3065 b->nextTagBinding = parser->m_freeBindingList; in doContent()
3066 parser->m_freeBindingList = b; in doContent()
3067 b->prefix->binding = b->prevPrefixBinding; in doContent()
3069 if ((parser->m_tagLevel == 0) in doContent()
3070 && (parser->m_parsingStatus.parsing != XML_FINISHED)) { in doContent()
3071 if (parser->m_parsingStatus.parsing == XML_SUSPENDED) in doContent()
3072 parser->m_processor = epilogProcessor; in doContent()
3082 if (parser->m_characterDataHandler) { in doContent()
3084 parser->m_characterDataHandler(parser->m_handlerArg, buf, in doContent()
3086 } else if (parser->m_defaultHandler) in doContent()
3092 if (parser->m_characterDataHandler) { in doContent()
3094 parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); in doContent()
3095 } else if (parser->m_defaultHandler) in doContent()
3100 if (parser->m_startCdataSectionHandler) in doContent()
3101 parser->m_startCdataSectionHandler(parser->m_handlerArg); in doContent()
3115 else if (0 && parser->m_characterDataHandler) in doContent()
3116 parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, in doContent()
3119 else if (parser->m_defaultHandler) in doContent()
3126 parser->m_processor = cdataSectionProcessor; in doContent()
3135 if (parser->m_characterDataHandler) { in doContent()
3137 ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; in doContent()
3138 XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd); in doContent()
3139 parser->m_characterDataHandler( in doContent()
3140 parser->m_handlerArg, parser->m_dataBuf, in doContent()
3141 (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); in doContent()
3143 parser->m_characterDataHandler( in doContent()
3144 parser->m_handlerArg, (XML_Char *)s, in doContent()
3145 (int)((XML_Char *)end - (XML_Char *)s)); in doContent()
3146 } else if (parser->m_defaultHandler) in doContent()
3155 if (parser->m_tagLevel != startTagLevel) { in doContent()
3162 XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler; in doContent()
3166 ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; in doContent()
3168 enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd); in doContent()
3170 charDataHandler(parser->m_handlerArg, parser->m_dataBuf, in doContent()
3171 (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); in doContent()
3178 charDataHandler(parser->m_handlerArg, (XML_Char *)s, in doContent()
3179 (int)((XML_Char *)next - (XML_Char *)s)); in doContent()
3180 } else if (parser->m_defaultHandler) in doContent()
3199 if (parser->m_defaultHandler) in doContent()
3205 switch (parser->m_parsingStatus.parsing) { in doContent()
3229 if (parser->m_endNamespaceDeclHandler) in freeBindings()
3230 parser->m_endNamespaceDeclHandler(parser->m_handlerArg, b->prefix->name); in freeBindings()
3232 bindings = bindings->nextTagBinding; in freeBindings()
3233 b->nextTagBinding = parser->m_freeBindingList; in freeBindings()
3234 parser->m_freeBindingList = b; in freeBindings()
3235 b->prefix->binding = b->prevPrefixBinding; in freeBindings()
3239 /* Precondition: all arguments must be non-NULL;
3241 - normalize attributes
3242 - check attributes for well-formedness
3243 - generate namespace aware attribute names (URI, prefix)
3244 - build list of attributes for startElementHandler
3245 - default attributes
3246 - process namespace declarations (check and report them)
3247 - generate namespace aware element name (URI, prefix)
3253 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in storeAtts()
3268 = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, tagNamePtr->str, 0); in storeAtts()
3270 const XML_Char *name = poolCopyString(&dtd->pool, tagNamePtr->str); in storeAtts()
3273 elementType = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name, in storeAtts()
3277 if (parser->m_ns && ! setElementTypePrefix(parser, elementType)) in storeAtts()
3280 nDefaultAtts = elementType->nDefaultAtts; in storeAtts()
3283 n = XmlGetAttributes(enc, attStr, parser->m_attsSize, parser->m_atts); in storeAtts()
3286 if (n > INT_MAX - nDefaultAtts) { in storeAtts()
3290 if (n + nDefaultAtts > parser->m_attsSize) { in storeAtts()
3291 int oldAttsSize = parser->m_attsSize; in storeAtts()
3298 if ((nDefaultAtts > INT_MAX - INIT_ATTS_SIZE) in storeAtts()
3299 || (n > INT_MAX - (nDefaultAtts + INIT_ATTS_SIZE))) { in storeAtts()
3303 parser->m_attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; in storeAtts()
3307 * from -Wtype-limits on platforms where in storeAtts()
3310 if ((unsigned)parser->m_attsSize > (size_t)(-1) / sizeof(ATTRIBUTE)) { in storeAtts()
3311 parser->m_attsSize = oldAttsSize; in storeAtts()
3316 temp = (ATTRIBUTE *)REALLOC(parser, (void *)parser->m_atts, in storeAtts()
3317 parser->m_attsSize * sizeof(ATTRIBUTE)); in storeAtts()
3319 parser->m_attsSize = oldAttsSize; in storeAtts()
3322 parser->m_atts = temp; in storeAtts()
3326 * from -Wtype-limits on platforms where in storeAtts()
3329 if ((unsigned)parser->m_attsSize > (size_t)(-1) / sizeof(XML_AttrInfo)) { in storeAtts()
3330 parser->m_attsSize = oldAttsSize; in storeAtts()
3335 temp2 = (XML_AttrInfo *)REALLOC(parser, (void *)parser->m_attInfo, in storeAtts()
3336 parser->m_attsSize * sizeof(XML_AttrInfo)); in storeAtts()
3338 parser->m_attsSize = oldAttsSize; in storeAtts()
3341 parser->m_attInfo = temp2; in storeAtts()
3344 XmlGetAttributes(enc, attStr, n, parser->m_atts); in storeAtts()
3347 appAtts = (const XML_Char **)parser->m_atts; in storeAtts()
3349 ATTRIBUTE *currAtt = &parser->m_atts[i]; in storeAtts()
3351 XML_AttrInfo *currAttInfo = &parser->m_attInfo[i]; in storeAtts()
3355 = getAttributeId(parser, enc, currAtt->name, in storeAtts()
3356 currAtt->name + XmlNameLength(enc, currAtt->name)); in storeAtts()
3360 currAttInfo->nameStart in storeAtts()
3361 = parser->m_parseEndByteIndex - (parser->m_parseEndPtr - currAtt->name); in storeAtts()
3362 currAttInfo->nameEnd in storeAtts()
3363 = currAttInfo->nameStart + XmlNameLength(enc, currAtt->name); in storeAtts()
3364 currAttInfo->valueStart = parser->m_parseEndByteIndex in storeAtts()
3365 - (parser->m_parseEndPtr - currAtt->valuePtr); in storeAtts()
3366 currAttInfo->valueEnd = parser->m_parseEndByteIndex in storeAtts()
3367 - (parser->m_parseEndPtr - currAtt->valueEnd); in storeAtts()
3373 if ((attId->name)[-1]) { in storeAtts()
3374 if (enc == parser->m_encoding) in storeAtts()
3375 parser->m_eventPtr = parser->m_atts[i].name; in storeAtts()
3378 (attId->name)[-1] = 1; in storeAtts()
3379 appAtts[attIndex++] = attId->name; in storeAtts()
3380 if (! parser->m_atts[i].normalized) { in storeAtts()
3385 if (attId->maybeTokenized) { in storeAtts()
3388 if (attId == elementType->defaultAtts[j].id) { in storeAtts()
3389 isCdata = elementType->defaultAtts[j].isCdata; in storeAtts()
3397 parser, enc, isCdata, parser->m_atts[i].valuePtr, in storeAtts()
3398 parser->m_atts[i].valueEnd, &parser->m_tempPool, account); in storeAtts()
3401 appAtts[attIndex] = poolStart(&parser->m_tempPool); in storeAtts()
3402 poolFinish(&parser->m_tempPool); in storeAtts()
3405 appAtts[attIndex] = poolStoreString(&parser->m_tempPool, enc, in storeAtts()
3406 parser->m_atts[i].valuePtr, in storeAtts()
3407 parser->m_atts[i].valueEnd); in storeAtts()
3410 poolFinish(&parser->m_tempPool); in storeAtts()
3413 if (attId->prefix) { in storeAtts()
3414 if (attId->xmlns) { in storeAtts()
3416 enum XML_Error result = addBinding(parser, attId->prefix, attId, in storeAtts()
3420 --attIndex; in storeAtts()
3425 (attId->name)[-1] = 2; in storeAtts()
3431 /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */ in storeAtts()
3432 parser->m_nSpecifiedAtts = attIndex; in storeAtts()
3433 if (elementType->idAtt && (elementType->idAtt->name)[-1]) { in storeAtts()
3435 if (appAtts[i] == elementType->idAtt->name) { in storeAtts()
3436 parser->m_idAttIndex = i; in storeAtts()
3440 parser->m_idAttIndex = -1; in storeAtts()
3444 const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + i; in storeAtts()
3445 if (! (da->id->name)[-1] && da->value) { in storeAtts()
3446 if (da->id->prefix) { in storeAtts()
3447 if (da->id->xmlns) { in storeAtts()
3448 enum XML_Error result = addBinding(parser, da->id->prefix, da->id, in storeAtts()
3449 da->value, bindingsPtr); in storeAtts()
3453 (da->id->name)[-1] = 2; in storeAtts()
3455 appAtts[attIndex++] = da->id->name; in storeAtts()
3456 appAtts[attIndex++] = da->value; in storeAtts()
3459 (da->id->name)[-1] = 1; in storeAtts()
3460 appAtts[attIndex++] = da->id->name; in storeAtts()
3461 appAtts[attIndex++] = da->value; in storeAtts()
3472 unsigned long version = parser->m_nsAttsVersion; in storeAtts()
3475 if (parser->m_nsAttsPower >= sizeof(unsigned int) * 8 /* bits per byte */) { in storeAtts()
3479 unsigned int nsAttsSize = 1u << parser->m_nsAttsPower; in storeAtts()
3480 unsigned char oldNsAttsPower = parser->m_nsAttsPower; in storeAtts()
3483 >> parser->m_nsAttsPower) { /* true for m_nsAttsPower = 0 */ in storeAtts()
3486 while (nPrefixes >> parser->m_nsAttsPower++) in storeAtts()
3488 if (parser->m_nsAttsPower < 3) in storeAtts()
3489 parser->m_nsAttsPower = 3; in storeAtts()
3492 if (parser->m_nsAttsPower >= sizeof(nsAttsSize) * 8 /* bits per byte */) { in storeAtts()
3494 parser->m_nsAttsPower = oldNsAttsPower; in storeAtts()
3498 nsAttsSize = 1u << parser->m_nsAttsPower; in storeAtts()
3502 * from -Wtype-limits on platforms where in storeAtts()
3505 if (nsAttsSize > (size_t)(-1) / sizeof(NS_ATT)) { in storeAtts()
3507 parser->m_nsAttsPower = oldNsAttsPower; in storeAtts()
3512 temp = (NS_ATT *)REALLOC(parser, parser->m_nsAtts, in storeAtts()
3516 parser->m_nsAttsPower = oldNsAttsPower; in storeAtts()
3519 parser->m_nsAtts = temp; in storeAtts()
3520 version = 0; /* force re-initialization of m_nsAtts hash table */ in storeAtts()
3526 parser->m_nsAtts[--j].version = version; in storeAtts()
3528 parser->m_nsAttsVersion = --version; in storeAtts()
3533 if (s[-1] == 2) { /* prefixed */ in storeAtts()
3543 ((XML_Char *)s)[-1] = 0; /* clear flag */ in storeAtts()
3544 id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, s, 0); in storeAtts()
3545 if (! id || ! id->prefix) { in storeAtts()
3562 b = id->prefix->binding; in storeAtts()
3566 for (j = 0; j < b->uriLen; j++) { in storeAtts()
3567 const XML_Char c = b->uri[j]; in storeAtts()
3568 if (! poolAppendChar(&parser->m_tempPool, c)) in storeAtts()
3572 sip24_update(&sip_state, b->uri, b->uriLen * sizeof(XML_Char)); in storeAtts()
3580 if (! poolAppendChar(&parser->m_tempPool, *s)) in storeAtts()
3590 unsigned long mask = nsAttsSize - 1; in storeAtts()
3592 while (parser->m_nsAtts[j].version == version) { in storeAtts()
3594 if (uriHash == parser->m_nsAtts[j].hash) { in storeAtts()
3595 const XML_Char *s1 = poolStart(&parser->m_tempPool); in storeAtts()
3596 const XML_Char *s2 = parser->m_nsAtts[j].uriName; in storeAtts()
3604 step = PROBE_STEP(uriHash, mask, parser->m_nsAttsPower); in storeAtts()
3605 j < step ? (j += nsAttsSize - step) : (j -= step); in storeAtts()
3609 if (parser->m_ns_triplets) { /* append namespace separator and prefix */ in storeAtts()
3610 parser->m_tempPool.ptr[-1] = parser->m_namespaceSeparator; in storeAtts()
3611 s = b->prefix->name; in storeAtts()
3613 if (! poolAppendChar(&parser->m_tempPool, *s)) in storeAtts()
3619 s = poolStart(&parser->m_tempPool); in storeAtts()
3620 poolFinish(&parser->m_tempPool); in storeAtts()
3624 parser->m_nsAtts[j].version = version; in storeAtts()
3625 parser->m_nsAtts[j].hash = uriHash; in storeAtts()
3626 parser->m_nsAtts[j].uriName = s; in storeAtts()
3628 if (! --nPrefixes) { in storeAtts()
3633 ((XML_Char *)s)[-1] = 0; /* clear flag */ in storeAtts()
3638 ((XML_Char *)(appAtts[i]))[-1] = 0; in storeAtts()
3639 for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) in storeAtts()
3640 binding->attId->name[-1] = 0; in storeAtts()
3642 if (! parser->m_ns) in storeAtts()
3646 if (elementType->prefix) { in storeAtts()
3647 binding = elementType->prefix->binding; in storeAtts()
3650 localPart = tagNamePtr->str; in storeAtts()
3653 } else if (dtd->defaultPrefix.binding) { in storeAtts()
3654 binding = dtd->defaultPrefix.binding; in storeAtts()
3655 localPart = tagNamePtr->str; in storeAtts()
3659 if (parser->m_ns_triplets && binding->prefix->name) { in storeAtts()
3660 for (; binding->prefix->name[prefixLen++];) in storeAtts()
3663 tagNamePtr->localPart = localPart; in storeAtts()
3664 tagNamePtr->uriLen = binding->uriLen; in storeAtts()
3665 tagNamePtr->prefix = binding->prefix->name; in storeAtts()
3666 tagNamePtr->prefixLen = prefixLen; in storeAtts()
3671 if (binding->uriLen > INT_MAX - prefixLen in storeAtts()
3672 || i > INT_MAX - (binding->uriLen + prefixLen)) { in storeAtts()
3676 n = i + binding->uriLen + prefixLen; in storeAtts()
3677 if (n > binding->uriAlloc) { in storeAtts()
3681 if (n > INT_MAX - EXPAND_SPARE) { in storeAtts()
3686 * from -Wtype-limits on platforms where in storeAtts()
3689 if ((unsigned)(n + EXPAND_SPARE) > (size_t)(-1) / sizeof(XML_Char)) { in storeAtts()
3697 binding->uriAlloc = n + EXPAND_SPARE; in storeAtts()
3698 memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); in storeAtts()
3699 for (p = parser->m_tagStack; p; p = p->parent) in storeAtts()
3700 if (p->name.str == binding->uri) in storeAtts()
3701 p->name.str = uri; in storeAtts()
3702 FREE(parser, binding->uri); in storeAtts()
3703 binding->uri = uri; in storeAtts()
3706 uri = binding->uri + binding->uriLen; in storeAtts()
3710 uri += i - 1; in storeAtts()
3711 *uri = parser->m_namespaceSeparator; /* replace null terminator */ in storeAtts()
3712 memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char)); in storeAtts()
3714 tagNamePtr->str = binding->uri; in storeAtts()
3721 // https://datatracker.ietf.org/doc/html/rfc3986#appendix-A in is_rfc3986_uri_char()
3792 // From rule "pct-encoded" in is_rfc3986_uri_char()
3796 case '-': in is_rfc3986_uri_char()
3801 // From rule "gen-delims" in is_rfc3986_uri_char()
3810 // From rule "sub-delims" in is_rfc3986_uri_char()
3829 /* addBinding() overwrites the value of prefix->binding without checking.
3845 static const int xmlLen = (int)sizeof(xmlNamespace) / sizeof(XML_Char) - 1; in addBinding()
3854 = (int)sizeof(xmlnsNamespace) / sizeof(XML_Char) - 1; in addBinding()
3864 if (*uri == XML_T('\0') && prefix->name) in addBinding()
3867 if (prefix->name && prefix->name[0] == XML_T(ASCII_x) in addBinding()
3868 && prefix->name[1] == XML_T(ASCII_m) in addBinding()
3869 && prefix->name[2] == XML_T(ASCII_l)) { in addBinding()
3871 if (prefix->name[3] == XML_T(ASCII_n) && prefix->name[4] == XML_T(ASCII_s) in addBinding()
3872 && prefix->name[5] == XML_T('\0')) in addBinding()
3875 if (prefix->name[3] == XML_T('\0')) in addBinding()
3903 // application-chosen namespace separator if the chosen separator in addBinding()
3904 // is a non-URI character with regard to RFC 3986. in addBinding()
3905 if (parser->m_ns && (uri[len] == parser->m_namespaceSeparator) in addBinding()
3920 if (parser->m_namespaceSeparator) in addBinding()
3922 if (parser->m_freeBindingList) { in addBinding()
3923 b = parser->m_freeBindingList; in addBinding()
3924 if (len > b->uriAlloc) { in addBinding()
3926 if (len > INT_MAX - EXPAND_SPARE) { in addBinding()
3932 * from -Wtype-limits on platforms where in addBinding()
3935 if ((unsigned)(len + EXPAND_SPARE) > (size_t)(-1) / sizeof(XML_Char)) { in addBinding()
3941 parser, b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); in addBinding()
3944 b->uri = temp; in addBinding()
3945 b->uriAlloc = len + EXPAND_SPARE; in addBinding()
3947 parser->m_freeBindingList = b->nextTagBinding; in addBinding()
3954 if (len > INT_MAX - EXPAND_SPARE) { in addBinding()
3959 * from -Wtype-limits on platforms where in addBinding()
3962 if ((unsigned)(len + EXPAND_SPARE) > (size_t)(-1) / sizeof(XML_Char)) { in addBinding()
3967 b->uri in addBinding()
3969 if (! b->uri) { in addBinding()
3973 b->uriAlloc = len + EXPAND_SPARE; in addBinding()
3975 b->uriLen = len; in addBinding()
3976 memcpy(b->uri, uri, len * sizeof(XML_Char)); in addBinding()
3977 if (parser->m_namespaceSeparator) in addBinding()
3978 b->uri[len - 1] = parser->m_namespaceSeparator; in addBinding()
3979 b->prefix = prefix; in addBinding()
3980 b->attId = attId; in addBinding()
3981 b->prevPrefixBinding = prefix->binding; in addBinding()
3983 if (*uri == XML_T('\0') && prefix == &parser->m_dtd->defaultPrefix) in addBinding()
3984 prefix->binding = NULL; in addBinding()
3986 prefix->binding = b; in addBinding()
3987 b->nextTagBinding = *bindingsPtr; in addBinding()
3990 if (attId && parser->m_startNamespaceDeclHandler) in addBinding()
3991 parser->m_startNamespaceDeclHandler(parser->m_handlerArg, prefix->name, in addBinding()
3992 prefix->binding ? uri : 0); in addBinding()
4003 parser, parser->m_encoding, &start, end, endPtr, in cdataSectionProcessor()
4004 (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_ACCOUNT_DIRECT); in cdataSectionProcessor()
4008 if (parser->m_parentParser) { /* we are parsing an external entity */ in cdataSectionProcessor()
4009 parser->m_processor = externalEntityContentProcessor; in cdataSectionProcessor()
4012 parser->m_processor = contentProcessor; in cdataSectionProcessor()
4019 /* startPtr gets set to non-null if the section is closed, and to null if
4029 if (enc == parser->m_encoding) { in doCdataSection()
4030 eventPP = &parser->m_eventPtr; in doCdataSection()
4032 eventEndPP = &parser->m_eventEndPtr; in doCdataSection()
4034 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in doCdataSection()
4035 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in doCdataSection()
4054 if (parser->m_endCdataSectionHandler) in doCdataSection()
4055 parser->m_endCdataSectionHandler(parser->m_handlerArg); in doCdataSection()
4058 else if (0 && parser->m_characterDataHandler) in doCdataSection()
4059 parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, in doCdataSection()
4062 else if (parser->m_defaultHandler) in doCdataSection()
4066 if (parser->m_parsingStatus.parsing == XML_FINISHED) in doCdataSection()
4071 if (parser->m_characterDataHandler) { in doCdataSection()
4073 parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); in doCdataSection()
4074 } else if (parser->m_defaultHandler) in doCdataSection()
4078 XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler; in doCdataSection()
4082 ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; in doCdataSection()
4084 enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd); in doCdataSection()
4086 charDataHandler(parser->m_handlerArg, parser->m_dataBuf, in doCdataSection()
4087 (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); in doCdataSection()
4094 charDataHandler(parser->m_handlerArg, (XML_Char *)s, in doCdataSection()
4095 (int)((XML_Char *)next - (XML_Char *)s)); in doCdataSection()
4096 } else if (parser->m_defaultHandler) in doCdataSection()
4129 switch (parser->m_parsingStatus.parsing) { in doCdataSection()
4150 = doIgnoreSection(parser, parser->m_encoding, &start, end, endPtr, in ignoreSectionProcessor()
4151 (XML_Bool)! parser->m_parsingStatus.finalBuffer); in ignoreSectionProcessor()
4155 parser->m_processor = prologProcessor; in ignoreSectionProcessor()
4161 /* startPtr gets set to non-null is the section is closed, and to null
4172 if (enc == parser->m_encoding) { in doIgnoreSection()
4173 eventPP = &parser->m_eventPtr; in doIgnoreSection()
4175 eventEndPP = &parser->m_eventEndPtr; in doIgnoreSection()
4188 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in doIgnoreSection()
4189 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in doIgnoreSection()
4205 if (parser->m_defaultHandler) in doIgnoreSection()
4209 if (parser->m_parsingStatus.parsing == XML_FINISHED) in doIgnoreSection()
4252 if (! parser->m_protocolEncodingName) in initializeEncoding()
4256 for (i = 0; parser->m_protocolEncodingName[i]; i++) { in initializeEncoding()
4257 if (i == sizeof(encodingBuf) - 1 in initializeEncoding()
4258 || (parser->m_protocolEncodingName[i] & ~0x7f) != 0) { in initializeEncoding()
4262 encodingBuf[i] = (char)parser->m_protocolEncodingName[i]; in initializeEncoding()
4268 s = parser->m_protocolEncodingName; in initializeEncoding()
4270 if ((parser->m_ns ? XmlInitEncodingNS : XmlInitEncoding)( in initializeEncoding()
4271 &parser->m_initEncoding, &parser->m_encoding, s)) in initializeEncoding()
4273 return handleUnknownEncoding(parser, parser->m_protocolEncodingName); in initializeEncoding()
4285 int standalone = -1; in processXmlDecl()
4295 if (! (parser->m_ns ? XmlParseXmlDeclNS : XmlParseXmlDecl)( in processXmlDecl()
4296 isGeneralTextEntity, parser->m_encoding, s, next, &parser->m_eventPtr, in processXmlDecl()
4304 parser->m_dtd->standalone = XML_TRUE; in processXmlDecl()
4306 if (parser->m_paramEntityParsing in processXmlDecl()
4308 parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; in processXmlDecl()
4311 if (parser->m_xmlDeclHandler) { in processXmlDecl()
4314 &parser->m_temp2Pool, parser->m_encoding, encodingName, in processXmlDecl()
4315 encodingName + XmlNameLength(parser->m_encoding, encodingName)); in processXmlDecl()
4318 poolFinish(&parser->m_temp2Pool); in processXmlDecl()
4322 = poolStoreString(&parser->m_temp2Pool, parser->m_encoding, version, in processXmlDecl()
4323 versionend - parser->m_encoding->minBytesPerChar); in processXmlDecl()
4327 parser->m_xmlDeclHandler(parser->m_handlerArg, storedversion, storedEncName, in processXmlDecl()
4329 } else if (parser->m_defaultHandler) in processXmlDecl()
4330 reportDefault(parser, parser->m_encoding, s, next); in processXmlDecl()
4331 if (parser->m_protocolEncodingName == NULL) { in processXmlDecl()
4336 * this is UTF-16, is it the same endianness? in processXmlDecl()
4338 if (newEncoding->minBytesPerChar != parser->m_encoding->minBytesPerChar in processXmlDecl()
4339 || (newEncoding->minBytesPerChar == 2 in processXmlDecl()
4340 && newEncoding != parser->m_encoding)) { in processXmlDecl()
4341 parser->m_eventPtr = encodingName; in processXmlDecl()
4344 parser->m_encoding = newEncoding; in processXmlDecl()
4349 &parser->m_temp2Pool, parser->m_encoding, encodingName, in processXmlDecl()
4350 encodingName + XmlNameLength(parser->m_encoding, encodingName)); in processXmlDecl()
4355 poolClear(&parser->m_temp2Pool); in processXmlDecl()
4357 parser->m_eventPtr = encodingName; in processXmlDecl()
4363 poolClear(&parser->m_temp2Pool); in processXmlDecl()
4370 if (parser->m_unknownEncodingHandler) { in handleUnknownEncoding()
4374 info.map[i] = -1; in handleUnknownEncoding()
4378 if (parser->m_unknownEncodingHandler(parser->m_unknownEncodingHandlerData, in handleUnknownEncoding()
4381 parser->m_unknownEncodingMem = MALLOC(parser, XmlSizeOfUnknownEncoding()); in handleUnknownEncoding()
4382 if (! parser->m_unknownEncodingMem) { in handleUnknownEncoding()
4387 enc = (parser->m_ns ? XmlInitUnknownEncodingNS : XmlInitUnknownEncoding)( in handleUnknownEncoding()
4388 parser->m_unknownEncodingMem, info.map, info.convert, info.data); in handleUnknownEncoding()
4390 parser->m_unknownEncodingData = info.data; in handleUnknownEncoding()
4391 parser->m_unknownEncodingRelease = info.release; in handleUnknownEncoding()
4392 parser->m_encoding = enc; in handleUnknownEncoding()
4408 parser->m_processor = prologProcessor; in prologInitProcessor()
4423 parser->m_dtd->paramEntityRead = XML_TRUE; in externalParEntInitProcessor()
4425 if (parser->m_prologState.inEntityValue) { in externalParEntInitProcessor()
4426 parser->m_processor = entityValueInitProcessor; in externalParEntInitProcessor()
4429 parser->m_processor = externalParEntProcessor; in externalParEntInitProcessor()
4440 parser->m_eventPtr = start; in entityValueInitProcessor()
4443 tok = XmlPrologTok(parser->m_encoding, start, end, &next); in entityValueInitProcessor()
4445 - storeEntityValue in entityValueInitProcessor()
4446 - processXmlDecl in entityValueInitProcessor()
4448 parser->m_eventEndPtr = next; in entityValueInitProcessor()
4450 if (! parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { in entityValueInitProcessor()
4465 /* found end of entity value - can store it now */ in entityValueInitProcessor()
4466 return storeEntityValue(parser, parser->m_encoding, s, end, in entityValueInitProcessor()
4478 if (parser->m_parsingStatus.parsing == XML_FINISHED) in entityValueInitProcessor()
4481 /* stop scanning for text declaration - we found one */ in entityValueInitProcessor()
4482 parser->m_processor = entityValueProcessor; in entityValueInitProcessor()
4487 function to exit with *nextPtr set to s - that is what we want for other in entityValueInitProcessor()
4488 tokens, but not for the BOM - we would rather like to skip it; in entityValueInitProcessor()
4493 && ! parser->m_parsingStatus.finalBuffer) { in entityValueInitProcessor()
4514 parser->m_eventPtr = start; in entityValueInitProcessor()
4524 tok = XmlPrologTok(parser->m_encoding, s, end, &next); in externalParEntProcessor()
4526 if (! parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { in externalParEntProcessor()
4555 tok = XmlPrologTok(parser->m_encoding, s, end, &next); in externalParEntProcessor()
4558 parser->m_processor = prologProcessor; in externalParEntProcessor()
4559 return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, in externalParEntProcessor()
4560 (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, in externalParEntProcessor()
4569 const ENCODING *enc = parser->m_encoding; in entityValueProcessor()
4575 - storeEntityValue in entityValueProcessor()
4578 if (! parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { in entityValueProcessor()
4593 /* found end of entity value - can store it now */ in entityValueProcessor()
4606 int tok = XmlPrologTok(parser->m_encoding, s, end, &next); in prologProcessor()
4607 return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, in prologProcessor()
4608 (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, in prologProcessor()
4647 DTD *const dtd = parser->m_dtd; in doProlog()
4653 if (enc == parser->m_encoding) { in doProlog()
4654 eventPP = &parser->m_eventPtr; in doProlog()
4655 eventEndPP = &parser->m_eventEndPtr; in doProlog()
4657 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in doProlog()
4658 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in doProlog()
4679 case -XML_TOK_PROLOG_S: in doProlog()
4680 tok = -tok; in doProlog()
4685 if (enc != parser->m_encoding in doProlog()
4686 && ! parser->m_openInternalEntities->betweenDecl) { in doProlog()
4690 /* WFC: PE Between Declarations - must check that PE contains in doProlog()
4694 if (parser->m_isParamEntity || enc != parser->m_encoding) { in doProlog()
4695 if (XmlTokenRole(&parser->m_prologState, XML_TOK_NONE, end, end, enc) in doProlog()
4704 tok = -tok; in doProlog()
4709 role = XmlTokenRole(&parser->m_prologState, tok, s, next, enc); in doProlog()
4728 enc = parser->m_encoding; in doProlog()
4732 if (parser->m_startDoctypeDeclHandler) { in doProlog()
4733 parser->m_doctypeName in doProlog()
4734 = poolStoreString(&parser->m_tempPool, enc, s, next); in doProlog()
4735 if (! parser->m_doctypeName) in doProlog()
4737 poolFinish(&parser->m_tempPool); in doProlog()
4738 parser->m_doctypePubid = NULL; in doProlog()
4741 parser->m_doctypeSysid = NULL; /* always initialize to NULL */ in doProlog()
4744 if (parser->m_startDoctypeDeclHandler) { in doProlog()
4745 parser->m_startDoctypeDeclHandler( in doProlog()
4746 parser->m_handlerArg, parser->m_doctypeName, parser->m_doctypeSysid, in doProlog()
4747 parser->m_doctypePubid, 1); in doProlog()
4748 parser->m_doctypeName = NULL; in doProlog()
4749 poolClear(&parser->m_tempPool); in doProlog()
4758 enc = parser->m_encoding; in doProlog()
4764 parser->m_useForeignDTD = XML_FALSE; in doProlog()
4765 parser->m_declEntity = (ENTITY *)lookup( in doProlog()
4766 parser, &dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); in doProlog()
4767 if (! parser->m_declEntity) in doProlog()
4770 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
4771 if (parser->m_startDoctypeDeclHandler) { in doProlog()
4775 pubId = poolStoreString(&parser->m_tempPool, enc, in doProlog()
4776 s + enc->minBytesPerChar, in doProlog()
4777 next - enc->minBytesPerChar); in doProlog()
4781 poolFinish(&parser->m_tempPool); in doProlog()
4782 parser->m_doctypePubid = pubId; in doProlog()
4791 if (dtd->keepProcessing && parser->m_declEntity) { in doProlog()
4793 = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, in doProlog()
4794 next - enc->minBytesPerChar); in doProlog()
4798 parser->m_declEntity->publicId = tem; in doProlog()
4799 poolFinish(&dtd->pool); in doProlog()
4803 if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_PUBLIC_ID) in doProlog()
4813 if (parser->m_doctypeName) { in doProlog()
4814 parser->m_startDoctypeDeclHandler( in doProlog()
4815 parser->m_handlerArg, parser->m_doctypeName, parser->m_doctypeSysid, in doProlog()
4816 parser->m_doctypePubid, 0); in doProlog()
4817 poolClear(&parser->m_tempPool); in doProlog()
4820 /* parser->m_doctypeSysid will be non-NULL in the case of a previous in doProlog()
4821 XML_ROLE_DOCTYPE_SYSTEM_ID, even if parser->m_startDoctypeDeclHandler in doProlog()
4825 if (parser->m_doctypeSysid || parser->m_useForeignDTD) { in doProlog()
4826 XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; in doProlog()
4827 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
4828 if (parser->m_paramEntityParsing in doProlog()
4829 && parser->m_externalEntityRefHandler) { in doProlog()
4830 ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities, in doProlog()
4840 if (parser->m_useForeignDTD) in doProlog()
4841 entity->base = parser->m_curBase; in doProlog()
4842 dtd->paramEntityRead = XML_FALSE; in doProlog()
4843 if (! parser->m_externalEntityRefHandler( in doProlog()
4844 parser->m_externalEntityRefHandlerArg, 0, entity->base, in doProlog()
4845 entity->systemId, entity->publicId)) in doProlog()
4847 if (dtd->paramEntityRead) { in doProlog()
4848 if (! dtd->standalone && parser->m_notStandaloneHandler in doProlog()
4849 && ! parser->m_notStandaloneHandler(parser->m_handlerArg)) in doProlog()
4853 is no external subset and we must reset dtd->hasParamEntityRefs in doProlog()
4855 else if (! parser->m_doctypeSysid) in doProlog()
4856 dtd->hasParamEntityRefs = hadParamEntityRefs; in doProlog()
4857 /* end of DTD - no need to update dtd->keepProcessing */ in doProlog()
4859 parser->m_useForeignDTD = XML_FALSE; in doProlog()
4862 if (parser->m_endDoctypeDeclHandler) { in doProlog()
4863 parser->m_endDoctypeDeclHandler(parser->m_handlerArg); in doProlog()
4872 if (parser->m_useForeignDTD) { in doProlog()
4873 XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; in doProlog()
4874 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
4875 if (parser->m_paramEntityParsing in doProlog()
4876 && parser->m_externalEntityRefHandler) { in doProlog()
4877 ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities, in doProlog()
4881 entity->base = parser->m_curBase; in doProlog()
4882 dtd->paramEntityRead = XML_FALSE; in doProlog()
4883 if (! parser->m_externalEntityRefHandler( in doProlog()
4884 parser->m_externalEntityRefHandlerArg, 0, entity->base, in doProlog()
4885 entity->systemId, entity->publicId)) in doProlog()
4887 if (dtd->paramEntityRead) { in doProlog()
4888 if (! dtd->standalone && parser->m_notStandaloneHandler in doProlog()
4889 && ! parser->m_notStandaloneHandler(parser->m_handlerArg)) in doProlog()
4893 is no external subset and we must reset dtd->hasParamEntityRefs in doProlog()
4896 dtd->hasParamEntityRefs = hadParamEntityRefs; in doProlog()
4897 /* end of DTD - no need to update dtd->keepProcessing */ in doProlog()
4901 parser->m_processor = contentProcessor; in doProlog()
4904 parser->m_declElementType = getElementType(parser, enc, s, next); in doProlog()
4905 if (! parser->m_declElementType) in doProlog()
4909 parser->m_declAttributeId = getAttributeId(parser, enc, s, next); in doProlog()
4910 if (! parser->m_declAttributeId) in doProlog()
4912 parser->m_declAttributeIsCdata = XML_FALSE; in doProlog()
4913 parser->m_declAttributeType = NULL; in doProlog()
4914 parser->m_declAttributeIsId = XML_FALSE; in doProlog()
4917 parser->m_declAttributeIsCdata = XML_TRUE; in doProlog()
4918 parser->m_declAttributeType = atypeCDATA; in doProlog()
4921 parser->m_declAttributeIsId = XML_TRUE; in doProlog()
4922 parser->m_declAttributeType = atypeID; in doProlog()
4925 parser->m_declAttributeType = atypeIDREF; in doProlog()
4928 parser->m_declAttributeType = atypeIDREFS; in doProlog()
4931 parser->m_declAttributeType = atypeENTITY; in doProlog()
4934 parser->m_declAttributeType = atypeENTITIES; in doProlog()
4937 parser->m_declAttributeType = atypeNMTOKEN; in doProlog()
4940 parser->m_declAttributeType = atypeNMTOKENS; in doProlog()
4942 if (dtd->keepProcessing && parser->m_attlistDeclHandler) in doProlog()
4947 if (dtd->keepProcessing && parser->m_attlistDeclHandler) { in doProlog()
4949 if (parser->m_declAttributeType) { in doProlog()
4955 if (! poolAppendString(&parser->m_tempPool, prefix)) in doProlog()
4957 if (! poolAppend(&parser->m_tempPool, enc, s, next)) in doProlog()
4959 parser->m_declAttributeType = parser->m_tempPool.start; in doProlog()
4965 if (dtd->keepProcessing) { in doProlog()
4966 if (! defineAttribute(parser->m_declElementType, in doProlog()
4967 parser->m_declAttributeId, in doProlog()
4968 parser->m_declAttributeIsCdata, in doProlog()
4969 parser->m_declAttributeIsId, 0, parser)) in doProlog()
4971 if (parser->m_attlistDeclHandler && parser->m_declAttributeType) { in doProlog()
4972 if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN) in doProlog()
4973 || (*parser->m_declAttributeType == XML_T(ASCII_N) in doProlog()
4974 && parser->m_declAttributeType[1] == XML_T(ASCII_O))) { in doProlog()
4976 if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN)) in doProlog()
4977 || ! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in doProlog()
4979 parser->m_declAttributeType = parser->m_tempPool.start; in doProlog()
4980 poolFinish(&parser->m_tempPool); in doProlog()
4983 parser->m_attlistDeclHandler( in doProlog()
4984 parser->m_handlerArg, parser->m_declElementType->name, in doProlog()
4985 parser->m_declAttributeId->name, parser->m_declAttributeType, 0, in doProlog()
4990 poolClear(&parser->m_tempPool); in doProlog()
4994 if (dtd->keepProcessing) { in doProlog()
4997 parser, enc, parser->m_declAttributeIsCdata, in doProlog()
4998 s + enc->minBytesPerChar, next - enc->minBytesPerChar, &dtd->pool, in doProlog()
5002 attVal = poolStart(&dtd->pool); in doProlog()
5003 poolFinish(&dtd->pool); in doProlog()
5006 parser->m_declElementType, parser->m_declAttributeId, in doProlog()
5007 parser->m_declAttributeIsCdata, XML_FALSE, attVal, parser)) in doProlog()
5009 if (parser->m_attlistDeclHandler && parser->m_declAttributeType) { in doProlog()
5010 if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN) in doProlog()
5011 || (*parser->m_declAttributeType == XML_T(ASCII_N) in doProlog()
5012 && parser->m_declAttributeType[1] == XML_T(ASCII_O))) { in doProlog()
5014 if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN)) in doProlog()
5015 || ! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in doProlog()
5017 parser->m_declAttributeType = parser->m_tempPool.start; in doProlog()
5018 poolFinish(&parser->m_tempPool); in doProlog()
5021 parser->m_attlistDeclHandler( in doProlog()
5022 parser->m_handlerArg, parser->m_declElementType->name, in doProlog()
5023 parser->m_declAttributeId->name, parser->m_declAttributeType, in doProlog()
5025 poolClear(&parser->m_tempPool); in doProlog()
5031 if (dtd->keepProcessing) { in doProlog()
5033 = storeEntityValue(parser, enc, s + enc->minBytesPerChar, in doProlog()
5034 next - enc->minBytesPerChar, XML_ACCOUNT_NONE); in doProlog()
5035 if (parser->m_declEntity) { in doProlog()
5036 parser->m_declEntity->textPtr = poolStart(&dtd->entityValuePool); in doProlog()
5037 parser->m_declEntity->textLen in doProlog()
5038 = (int)(poolLength(&dtd->entityValuePool)); in doProlog()
5039 poolFinish(&dtd->entityValuePool); in doProlog()
5040 if (parser->m_entityDeclHandler) { in doProlog()
5042 parser->m_entityDeclHandler( in doProlog()
5043 parser->m_handlerArg, parser->m_declEntity->name, in doProlog()
5044 parser->m_declEntity->is_param, parser->m_declEntity->textPtr, in doProlog()
5045 parser->m_declEntity->textLen, parser->m_curBase, 0, 0, 0); in doProlog()
5049 poolDiscard(&dtd->entityValuePool); in doProlog()
5056 parser->m_useForeignDTD = XML_FALSE; in doProlog()
5058 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
5059 if (parser->m_startDoctypeDeclHandler) { in doProlog()
5060 parser->m_doctypeSysid = poolStoreString(&parser->m_tempPool, enc, in doProlog()
5061 s + enc->minBytesPerChar, in doProlog()
5062 next - enc->minBytesPerChar); in doProlog()
5063 if (parser->m_doctypeSysid == NULL) in doProlog()
5065 poolFinish(&parser->m_tempPool); in doProlog()
5070 /* use externalSubsetName to make parser->m_doctypeSysid non-NULL in doProlog()
5071 for the case where no parser->m_startDoctypeDeclHandler is set */ in doProlog()
5072 parser->m_doctypeSysid = externalSubsetName; in doProlog()
5074 if (! dtd->standalone in doProlog()
5076 && ! parser->m_paramEntityParsing in doProlog()
5078 && parser->m_notStandaloneHandler in doProlog()
5079 && ! parser->m_notStandaloneHandler(parser->m_handlerArg)) in doProlog()
5084 if (! parser->m_declEntity) { in doProlog()
5085 parser->m_declEntity = (ENTITY *)lookup( in doProlog()
5086 parser, &dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); in doProlog()
5087 if (! parser->m_declEntity) in doProlog()
5089 parser->m_declEntity->publicId = NULL; in doProlog()
5094 if (dtd->keepProcessing && parser->m_declEntity) { in doProlog()
5095 parser->m_declEntity->systemId in doProlog()
5096 = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, in doProlog()
5097 next - enc->minBytesPerChar); in doProlog()
5098 if (! parser->m_declEntity->systemId) in doProlog()
5100 parser->m_declEntity->base = parser->m_curBase; in doProlog()
5101 poolFinish(&dtd->pool); in doProlog()
5105 if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_SYSTEM_ID) in doProlog()
5110 if (dtd->keepProcessing && parser->m_declEntity in doProlog()
5111 && parser->m_entityDeclHandler) { in doProlog()
5113 parser->m_entityDeclHandler( in doProlog()
5114 parser->m_handlerArg, parser->m_declEntity->name, in doProlog()
5115 parser->m_declEntity->is_param, 0, 0, parser->m_declEntity->base, in doProlog()
5116 parser->m_declEntity->systemId, parser->m_declEntity->publicId, 0); in doProlog()
5121 if (dtd->keepProcessing && parser->m_declEntity) { in doProlog()
5122 parser->m_declEntity->notation in doProlog()
5123 = poolStoreString(&dtd->pool, enc, s, next); in doProlog()
5124 if (! parser->m_declEntity->notation) in doProlog()
5126 poolFinish(&dtd->pool); in doProlog()
5127 if (parser->m_unparsedEntityDeclHandler) { in doProlog()
5129 parser->m_unparsedEntityDeclHandler( in doProlog()
5130 parser->m_handlerArg, parser->m_declEntity->name, in doProlog()
5131 parser->m_declEntity->base, parser->m_declEntity->systemId, in doProlog()
5132 parser->m_declEntity->publicId, parser->m_declEntity->notation); in doProlog()
5134 } else if (parser->m_entityDeclHandler) { in doProlog()
5136 parser->m_entityDeclHandler( in doProlog()
5137 parser->m_handlerArg, parser->m_declEntity->name, 0, 0, 0, in doProlog()
5138 parser->m_declEntity->base, parser->m_declEntity->systemId, in doProlog()
5139 parser->m_declEntity->publicId, parser->m_declEntity->notation); in doProlog()
5146 parser->m_declEntity = NULL; in doProlog()
5149 if (dtd->keepProcessing) { in doProlog()
5150 const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); in doProlog()
5153 parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->generalEntities, in doProlog()
5155 if (! parser->m_declEntity) in doProlog()
5157 if (parser->m_declEntity->name != name) { in doProlog()
5158 poolDiscard(&dtd->pool); in doProlog()
5159 parser->m_declEntity = NULL; in doProlog()
5161 poolFinish(&dtd->pool); in doProlog()
5162 parser->m_declEntity->publicId = NULL; in doProlog()
5163 parser->m_declEntity->is_param = XML_FALSE; in doProlog()
5167 parser->m_declEntity->is_internal in doProlog()
5168 = ! (parser->m_parentParser || parser->m_openInternalEntities); in doProlog()
5169 if (parser->m_entityDeclHandler) in doProlog()
5173 poolDiscard(&dtd->pool); in doProlog()
5174 parser->m_declEntity = NULL; in doProlog()
5179 if (dtd->keepProcessing) { in doProlog()
5180 const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); in doProlog()
5183 parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->paramEntities, in doProlog()
5185 if (! parser->m_declEntity) in doProlog()
5187 if (parser->m_declEntity->name != name) { in doProlog()
5188 poolDiscard(&dtd->pool); in doProlog()
5189 parser->m_declEntity = NULL; in doProlog()
5191 poolFinish(&dtd->pool); in doProlog()
5192 parser->m_declEntity->publicId = NULL; in doProlog()
5193 parser->m_declEntity->is_param = XML_TRUE; in doProlog()
5197 parser->m_declEntity->is_internal in doProlog()
5198 = ! (parser->m_parentParser || parser->m_openInternalEntities); in doProlog()
5199 if (parser->m_entityDeclHandler) in doProlog()
5203 poolDiscard(&dtd->pool); in doProlog()
5204 parser->m_declEntity = NULL; in doProlog()
5207 parser->m_declEntity = NULL; in doProlog()
5211 parser->m_declNotationPublicId = NULL; in doProlog()
5212 parser->m_declNotationName = NULL; in doProlog()
5213 if (parser->m_notationDeclHandler) { in doProlog()
5214 parser->m_declNotationName in doProlog()
5215 = poolStoreString(&parser->m_tempPool, enc, s, next); in doProlog()
5216 if (! parser->m_declNotationName) in doProlog()
5218 poolFinish(&parser->m_tempPool); in doProlog()
5226 ->m_declNotationName) { /* means m_notationDeclHandler != NULL */ in doProlog()
5227 XML_Char *tem = poolStoreString(&parser->m_tempPool, enc, in doProlog()
5228 s + enc->minBytesPerChar, in doProlog()
5229 next - enc->minBytesPerChar); in doProlog()
5233 parser->m_declNotationPublicId = tem; in doProlog()
5234 poolFinish(&parser->m_tempPool); in doProlog()
5239 if (parser->m_declNotationName && parser->m_notationDeclHandler) { in doProlog()
5240 const XML_Char *systemId = poolStoreString(&parser->m_tempPool, enc, in doProlog()
5241 s + enc->minBytesPerChar, in doProlog()
5242 next - enc->minBytesPerChar); in doProlog()
5246 parser->m_notationDeclHandler( in doProlog()
5247 parser->m_handlerArg, parser->m_declNotationName, parser->m_curBase, in doProlog()
5248 systemId, parser->m_declNotationPublicId); in doProlog()
5251 poolClear(&parser->m_tempPool); in doProlog()
5254 if (parser->m_declNotationPublicId && parser->m_notationDeclHandler) { in doProlog()
5256 parser->m_notationDeclHandler( in doProlog()
5257 parser->m_handlerArg, parser->m_declNotationName, parser->m_curBase, in doProlog()
5258 0, parser->m_declNotationPublicId); in doProlog()
5261 poolClear(&parser->m_tempPool); in doProlog()
5277 if (parser->m_defaultHandler) in doProlog()
5284 parser->m_processor = ignoreSectionProcessor; in doProlog()
5290 if (parser->m_prologState.level >= parser->m_groupSize) { in doProlog()
5291 if (parser->m_groupSize) { in doProlog()
5294 if (parser->m_groupSize > (unsigned int)(-1) / 2u) { in doProlog()
5299 parser, parser->m_groupConnector, parser->m_groupSize *= 2); in doProlog()
5301 parser->m_groupSize /= 2; in doProlog()
5304 parser->m_groupConnector = new_connector; in doProlog()
5307 if (dtd->scaffIndex) { in doProlog()
5310 * from -Wtype-limits on platforms where in doProlog()
5313 if (parser->m_groupSize > (size_t)(-1) / sizeof(int)) { in doProlog()
5319 parser, dtd->scaffIndex, parser->m_groupSize * sizeof(int)); in doProlog()
5322 dtd->scaffIndex = new_scaff_index; in doProlog()
5325 parser->m_groupConnector in doProlog()
5326 = (char *)MALLOC(parser, parser->m_groupSize = 32); in doProlog()
5327 if (! parser->m_groupConnector) { in doProlog()
5328 parser->m_groupSize = 0; in doProlog()
5333 parser->m_groupConnector[parser->m_prologState.level] = 0; in doProlog()
5334 if (dtd->in_eldecl) { in doProlog()
5338 assert(dtd->scaffIndex != NULL); in doProlog()
5339 dtd->scaffIndex[dtd->scaffLevel] = myindex; in doProlog()
5340 dtd->scaffLevel++; in doProlog()
5341 dtd->scaffold[myindex].type = XML_CTYPE_SEQ; in doProlog()
5342 if (parser->m_elementDeclHandler) in doProlog()
5347 if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_PIPE) in doProlog()
5349 parser->m_groupConnector[parser->m_prologState.level] = ASCII_COMMA; in doProlog()
5350 if (dtd->in_eldecl && parser->m_elementDeclHandler) in doProlog()
5354 if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_COMMA) in doProlog()
5356 if (dtd->in_eldecl in doProlog()
5357 && ! parser->m_groupConnector[parser->m_prologState.level] in doProlog()
5358 && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type in doProlog()
5360 dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type in doProlog()
5362 if (parser->m_elementDeclHandler) in doProlog()
5365 parser->m_groupConnector[parser->m_prologState.level] = ASCII_PIPE; in doProlog()
5370 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
5371 if (! parser->m_paramEntityParsing) in doProlog()
5372 dtd->keepProcessing = dtd->standalone; in doProlog()
5376 name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, in doProlog()
5377 next - enc->minBytesPerChar); in doProlog()
5380 entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0); in doProlog()
5381 poolDiscard(&dtd->pool); in doProlog()
5386 if (parser->m_prologState.documentEntity in doProlog()
5387 && (dtd->standalone ? ! parser->m_openInternalEntities in doProlog()
5388 : ! dtd->hasParamEntityRefs)) { in doProlog()
5391 else if (! entity->is_internal) { in doProlog()
5415 dtd->keepProcessing = dtd->standalone; in doProlog()
5418 && parser->m_skippedEntityHandler) { in doProlog()
5419 parser->m_skippedEntityHandler(parser->m_handlerArg, name, 1); in doProlog()
5424 if (entity->open) in doProlog()
5426 if (entity->textPtr) { in doProlog()
5436 if (parser->m_externalEntityRefHandler) { in doProlog()
5437 dtd->paramEntityRead = XML_FALSE; in doProlog()
5438 entity->open = XML_TRUE; in doProlog()
5440 if (! parser->m_externalEntityRefHandler( in doProlog()
5441 parser->m_externalEntityRefHandlerArg, 0, entity->base, in doProlog()
5442 entity->systemId, entity->publicId)) { in doProlog()
5444 entity->open = XML_FALSE; in doProlog()
5448 entity->open = XML_FALSE; in doProlog()
5450 if (! dtd->paramEntityRead) { in doProlog()
5451 dtd->keepProcessing = dtd->standalone; in doProlog()
5455 dtd->keepProcessing = dtd->standalone; in doProlog()
5460 if (! dtd->standalone && parser->m_notStandaloneHandler in doProlog()
5461 && ! parser->m_notStandaloneHandler(parser->m_handlerArg)) in doProlog()
5468 if (parser->m_elementDeclHandler) { in doProlog()
5469 parser->m_declElementType = getElementType(parser, enc, s, next); in doProlog()
5470 if (! parser->m_declElementType) in doProlog()
5472 dtd->scaffLevel = 0; in doProlog()
5473 dtd->scaffCount = 0; in doProlog()
5474 dtd->in_eldecl = XML_TRUE; in doProlog()
5481 if (dtd->in_eldecl) { in doProlog()
5482 if (parser->m_elementDeclHandler) { in doProlog()
5487 content->quant = XML_CQUANT_NONE; in doProlog()
5488 content->name = NULL; in doProlog()
5489 content->numchildren = 0; in doProlog()
5490 content->children = NULL; in doProlog()
5491 content->type = ((role == XML_ROLE_CONTENT_ANY) ? XML_CTYPE_ANY in doProlog()
5494 parser->m_elementDeclHandler( in doProlog()
5495 parser->m_handlerArg, parser->m_declElementType->name, content); in doProlog()
5498 dtd->in_eldecl = XML_FALSE; in doProlog()
5503 if (dtd->in_eldecl) { in doProlog()
5504 dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type in doProlog()
5506 if (parser->m_elementDeclHandler) in doProlog()
5523 if (dtd->in_eldecl) { in doProlog()
5528 = (quant == XML_CQUANT_NONE ? next : next - enc->minBytesPerChar); in doProlog()
5532 dtd->scaffold[myindex].type = XML_CTYPE_NAME; in doProlog()
5533 dtd->scaffold[myindex].quant = quant; in doProlog()
5537 name = el->name; in doProlog()
5538 dtd->scaffold[myindex].name = name; in doProlog()
5544 if (nameLen > UINT_MAX - dtd->contentStringLen) { in doProlog()
5548 dtd->contentStringLen += (unsigned)nameLen; in doProlog()
5549 if (parser->m_elementDeclHandler) in doProlog()
5566 if (dtd->in_eldecl) { in doProlog()
5567 if (parser->m_elementDeclHandler) in doProlog()
5569 dtd->scaffLevel--; in doProlog()
5570 dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant; in doProlog()
5571 if (dtd->scaffLevel == 0) { in doProlog()
5577 parser->m_elementDeclHandler( in doProlog()
5578 parser->m_handlerArg, parser->m_declElementType->name, model); in doProlog()
5580 dtd->in_eldecl = XML_FALSE; in doProlog()
5581 dtd->contentStringLen = 0; in doProlog()
5605 if (parser->m_startDoctypeDeclHandler) in doProlog()
5609 if (dtd->keepProcessing && parser->m_entityDeclHandler) in doProlog()
5613 if (parser->m_notationDeclHandler) in doProlog()
5617 if (dtd->keepProcessing && parser->m_attlistDeclHandler) in doProlog()
5621 if (parser->m_elementDeclHandler) in doProlog()
5626 if (handleDefault && parser->m_defaultHandler) in doProlog()
5629 switch (parser->m_parsingStatus.parsing) { in doProlog()
5646 parser->m_processor = epilogProcessor; in epilogProcessor()
5647 parser->m_eventPtr = s; in epilogProcessor()
5650 int tok = XmlPrologTok(parser->m_encoding, s, end, &next); in epilogProcessor()
5658 parser->m_eventEndPtr = next; in epilogProcessor()
5660 /* report partial linebreak - it might be the last token */ in epilogProcessor()
5661 case -XML_TOK_PROLOG_S: in epilogProcessor()
5662 if (parser->m_defaultHandler) { in epilogProcessor()
5663 reportDefault(parser, parser->m_encoding, s, next); in epilogProcessor()
5664 if (parser->m_parsingStatus.parsing == XML_FINISHED) in epilogProcessor()
5673 if (parser->m_defaultHandler) in epilogProcessor()
5674 reportDefault(parser, parser->m_encoding, s, next); in epilogProcessor()
5677 if (! reportProcessingInstruction(parser, parser->m_encoding, s, next)) in epilogProcessor()
5681 if (! reportComment(parser, parser->m_encoding, s, next)) in epilogProcessor()
5685 parser->m_eventPtr = next; in epilogProcessor()
5688 if (! parser->m_parsingStatus.finalBuffer) { in epilogProcessor()
5694 if (! parser->m_parsingStatus.finalBuffer) { in epilogProcessor()
5702 parser->m_eventPtr = s = next; in epilogProcessor()
5703 switch (parser->m_parsingStatus.parsing) { in epilogProcessor()
5721 if (parser->m_freeInternalEntities) { in processInternalEntity()
5722 openEntity = parser->m_freeInternalEntities; in processInternalEntity()
5723 parser->m_freeInternalEntities = openEntity->next; in processInternalEntity()
5730 entity->open = XML_TRUE; in processInternalEntity()
5734 entity->processed = 0; in processInternalEntity()
5735 openEntity->next = parser->m_openInternalEntities; in processInternalEntity()
5736 parser->m_openInternalEntities = openEntity; in processInternalEntity()
5737 openEntity->entity = entity; in processInternalEntity()
5738 openEntity->startTagLevel = parser->m_tagLevel; in processInternalEntity()
5739 openEntity->betweenDecl = betweenDecl; in processInternalEntity()
5740 openEntity->internalEventPtr = NULL; in processInternalEntity()
5741 openEntity->internalEventEndPtr = NULL; in processInternalEntity()
5742 textStart = (const char *)entity->textPtr; in processInternalEntity()
5743 textEnd = (const char *)(entity->textPtr + entity->textLen); in processInternalEntity()
5748 if (entity->is_param) { in processInternalEntity()
5750 = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); in processInternalEntity()
5751 result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, in processInternalEntity()
5756 result = doContent(parser, parser->m_tagLevel, parser->m_internalEncoding, in processInternalEntity()
5761 if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) { in processInternalEntity()
5762 entity->processed = (int)(next - textStart); in processInternalEntity()
5763 parser->m_processor = internalEntityProcessor; in processInternalEntity()
5768 entity->open = XML_FALSE; in processInternalEntity()
5769 parser->m_openInternalEntities = openEntity->next; in processInternalEntity()
5771 openEntity->next = parser->m_freeInternalEntities; in processInternalEntity()
5772 parser->m_freeInternalEntities = openEntity; in processInternalEntity()
5785 OPEN_INTERNAL_ENTITY *openEntity = parser->m_openInternalEntities; in internalEntityProcessor()
5789 entity = openEntity->entity; in internalEntityProcessor()
5790 textStart = ((const char *)entity->textPtr) + entity->processed; in internalEntityProcessor()
5791 textEnd = (const char *)(entity->textPtr + entity->textLen); in internalEntityProcessor()
5796 if (entity->is_param) { in internalEntityProcessor()
5798 = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); in internalEntityProcessor()
5799 result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, in internalEntityProcessor()
5804 result = doContent(parser, openEntity->startTagLevel, in internalEntityProcessor()
5805 parser->m_internalEncoding, textStart, textEnd, &next, in internalEntityProcessor()
5811 if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) { in internalEntityProcessor()
5812 entity->processed = (int)(next - (const char *)entity->textPtr); in internalEntityProcessor()
5819 entity->open = XML_FALSE; in internalEntityProcessor()
5820 parser->m_openInternalEntities = openEntity->next; in internalEntityProcessor()
5822 openEntity->next = parser->m_freeInternalEntities; in internalEntityProcessor()
5823 parser->m_freeInternalEntities = openEntity; in internalEntityProcessor()
5828 if (parser->m_openInternalEntities != NULL in internalEntityProcessor()
5829 && parser->m_parsingStatus.parsing == XML_SUSPENDED) { in internalEntityProcessor()
5834 if (entity->is_param) { in internalEntityProcessor()
5836 parser->m_processor = prologProcessor; in internalEntityProcessor()
5837 tok = XmlPrologTok(parser->m_encoding, s, end, &next); in internalEntityProcessor()
5838 return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, in internalEntityProcessor()
5839 (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE, in internalEntityProcessor()
5844 parser->m_processor = contentProcessor; in internalEntityProcessor()
5846 result = doContent(parser, parser->m_parentParser ? 1 : 0, in internalEntityProcessor()
5847 parser->m_encoding, s, end, nextPtr, in internalEntityProcessor()
5848 (XML_Bool)! parser->m_parsingStatus.finalBuffer, in internalEntityProcessor()
5864 return parser->m_errorCode; in errorProcessor()
5886 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in appendAttributeValue()
5905 if (enc == parser->m_encoding) in appendAttributeValue()
5906 parser->m_eventPtr = next; in appendAttributeValue()
5909 if (enc == parser->m_encoding) in appendAttributeValue()
5910 parser->m_eventPtr = ptr; in appendAttributeValue()
5917 if (enc == parser->m_encoding) in appendAttributeValue()
5918 parser->m_eventPtr = ptr; in appendAttributeValue()
5944 next = ptr + enc->minBytesPerChar; in appendAttributeValue()
5958 enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); in appendAttributeValue()
5961 /* NOTE: We are replacing 4-6 characters original input for 1 character in appendAttributeValue()
5972 name = poolStoreString(&parser->m_temp2Pool, enc, in appendAttributeValue()
5973 ptr + enc->minBytesPerChar, in appendAttributeValue()
5974 next - enc->minBytesPerChar); in appendAttributeValue()
5977 entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0); in appendAttributeValue()
5978 poolDiscard(&parser->m_temp2Pool); in appendAttributeValue()
5982 if (pool == &dtd->pool) /* are we called from prolog? */ in appendAttributeValue()
5985 parser->m_prologState.documentEntity && in appendAttributeValue()
5987 (dtd->standalone ? ! parser->m_openInternalEntities in appendAttributeValue()
5988 : ! dtd->hasParamEntityRefs); in appendAttributeValue()
5989 else /* if (pool == &parser->m_tempPool): we are called from content */ in appendAttributeValue()
5990 checkEntityDecl = ! dtd->hasParamEntityRefs || dtd->standalone; in appendAttributeValue()
5994 else if (! entity->is_internal) in appendAttributeValue()
5997 /* Cannot report skipped entity here - see comments on in appendAttributeValue()
5998 parser->m_skippedEntityHandler. in appendAttributeValue()
5999 if (parser->m_skippedEntityHandler) in appendAttributeValue()
6000 parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); in appendAttributeValue()
6004 if ((pool == &parser->m_tempPool) && parser->m_defaultHandler) in appendAttributeValue()
6009 if (entity->open) { in appendAttributeValue()
6010 if (enc == parser->m_encoding) { in appendAttributeValue()
6013 * The "if (entity->open)" check catches recursive entity in appendAttributeValue()
6022 * here with entity->open being TRUE. in appendAttributeValue()
6028 parser->m_eventPtr = ptr; /* LCOV_EXCL_LINE */ in appendAttributeValue()
6032 if (entity->notation) { in appendAttributeValue()
6033 if (enc == parser->m_encoding) in appendAttributeValue()
6034 parser->m_eventPtr = ptr; in appendAttributeValue()
6037 if (! entity->textPtr) { in appendAttributeValue()
6038 if (enc == parser->m_encoding) in appendAttributeValue()
6039 parser->m_eventPtr = ptr; in appendAttributeValue()
6043 const XML_Char *textEnd = entity->textPtr + entity->textLen; in appendAttributeValue()
6044 entity->open = XML_TRUE; in appendAttributeValue()
6048 result = appendAttributeValue(parser, parser->m_internalEncoding, in appendAttributeValue()
6049 isCdata, (const char *)entity->textPtr, in appendAttributeValue()
6055 entity->open = XML_FALSE; in appendAttributeValue()
6066 * names before XmlAttributeValueTok() gets a look-in. This in appendAttributeValue()
6072 if (enc == parser->m_encoding) in appendAttributeValue()
6073 parser->m_eventPtr = ptr; in appendAttributeValue()
6086 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in storeEntityValue()
6087 STRING_POOL *pool = &(dtd->entityValuePool); in storeEntityValue()
6090 int oldInEntityValue = parser->m_prologState.inEntityValue; in storeEntityValue()
6091 parser->m_prologState.inEntityValue = 1; in storeEntityValue()
6098 if (! pool->blocks) { in storeEntityValue()
6120 if (parser->m_isParamEntity || enc != parser->m_encoding) { in storeEntityValue()
6123 name = poolStoreString(&parser->m_tempPool, enc, in storeEntityValue()
6124 entityTextPtr + enc->minBytesPerChar, in storeEntityValue()
6125 next - enc->minBytesPerChar); in storeEntityValue()
6130 entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0); in storeEntityValue()
6131 poolDiscard(&parser->m_tempPool); in storeEntityValue()
6133 /* not a well-formedness error - see XML 1.0: WFC Entity Declared */ in storeEntityValue()
6134 /* cannot report skipped entity here - see comments on in storeEntityValue()
6135 parser->m_skippedEntityHandler in storeEntityValue()
6136 if (parser->m_skippedEntityHandler) in storeEntityValue()
6137 parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); in storeEntityValue()
6139 dtd->keepProcessing = dtd->standalone; in storeEntityValue()
6142 if (entity->open) { in storeEntityValue()
6143 if (enc == parser->m_encoding) in storeEntityValue()
6144 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
6148 if (entity->systemId) { in storeEntityValue()
6149 if (parser->m_externalEntityRefHandler) { in storeEntityValue()
6150 dtd->paramEntityRead = XML_FALSE; in storeEntityValue()
6151 entity->open = XML_TRUE; in storeEntityValue()
6153 if (! parser->m_externalEntityRefHandler( in storeEntityValue()
6154 parser->m_externalEntityRefHandlerArg, 0, entity->base, in storeEntityValue()
6155 entity->systemId, entity->publicId)) { in storeEntityValue()
6157 entity->open = XML_FALSE; in storeEntityValue()
6162 entity->open = XML_FALSE; in storeEntityValue()
6163 if (! dtd->paramEntityRead) in storeEntityValue()
6164 dtd->keepProcessing = dtd->standalone; in storeEntityValue()
6166 dtd->keepProcessing = dtd->standalone; in storeEntityValue()
6168 entity->open = XML_TRUE; in storeEntityValue()
6171 parser, parser->m_internalEncoding, (const char *)entity->textPtr, in storeEntityValue()
6172 (const char *)(entity->textPtr + entity->textLen), in storeEntityValue()
6175 entity->open = XML_FALSE; in storeEntityValue()
6184 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
6198 next = entityTextPtr + enc->minBytesPerChar; in storeEntityValue()
6201 if (pool->end == pool->ptr && ! poolGrow(pool)) { in storeEntityValue()
6205 *(pool->ptr)++ = 0xA; in storeEntityValue()
6212 if (enc == parser->m_encoding) in storeEntityValue()
6213 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
6228 if (pool->end == pool->ptr && ! poolGrow(pool)) { in storeEntityValue()
6232 *(pool->ptr)++ = buf[i]; in storeEntityValue()
6236 if (enc == parser->m_encoding) in storeEntityValue()
6237 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
6241 if (enc == parser->m_encoding) in storeEntityValue()
6242 parser->m_eventPtr = next; in storeEntityValue()
6246 /* This default case should be unnecessary -- all the tokens in storeEntityValue()
6248 * cases -- but should be retained for safety. We do however in storeEntityValue()
6253 if (enc == parser->m_encoding) in storeEntityValue()
6254 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
6263 parser->m_prologState.inEntityValue = oldInEntityValue; in storeEntityValue()
6295 if (! parser->m_processingInstructionHandler) { in reportProcessingInstruction()
6296 if (parser->m_defaultHandler) in reportProcessingInstruction()
6300 start += enc->minBytesPerChar * 2; in reportProcessingInstruction()
6302 target = poolStoreString(&parser->m_tempPool, enc, start, tem); in reportProcessingInstruction()
6305 poolFinish(&parser->m_tempPool); in reportProcessingInstruction()
6306 data = poolStoreString(&parser->m_tempPool, enc, XmlSkipS(enc, tem), in reportProcessingInstruction()
6307 end - enc->minBytesPerChar * 2); in reportProcessingInstruction()
6311 parser->m_processingInstructionHandler(parser->m_handlerArg, target, data); in reportProcessingInstruction()
6312 poolClear(&parser->m_tempPool); in reportProcessingInstruction()
6320 if (! parser->m_commentHandler) { in reportComment()
6321 if (parser->m_defaultHandler) in reportComment()
6325 data = poolStoreString(&parser->m_tempPool, enc, in reportComment()
6326 start + enc->minBytesPerChar * 4, in reportComment()
6327 end - enc->minBytesPerChar * 3); in reportComment()
6331 parser->m_commentHandler(parser->m_handlerArg, data); in reportComment()
6332 poolClear(&parser->m_tempPool); in reportComment()
6343 if (enc == parser->m_encoding) { in reportDefault()
6344 eventPP = &parser->m_eventPtr; in reportDefault()
6345 eventEndPP = &parser->m_eventEndPtr; in reportDefault()
6350 * conversion to the internal format (UTF-8 unless XML_UNICODE in reportDefault()
6363 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in reportDefault()
6364 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in reportDefault()
6368 ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; in reportDefault()
6370 = XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd); in reportDefault()
6372 parser->m_defaultHandler(parser->m_handlerArg, parser->m_dataBuf, in reportDefault()
6373 (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); in reportDefault()
6378 parser->m_defaultHandler(parser->m_handlerArg, (XML_Char *)s, in reportDefault()
6379 (int)((XML_Char *)end - (XML_Char *)s)); in reportDefault()
6388 a default which duplicates a non-default. */ in defineAttribute()
6390 for (i = 0; i < type->nDefaultAtts; i++) in defineAttribute()
6391 if (attId == type->defaultAtts[i].id) in defineAttribute()
6393 if (isId && ! type->idAtt && ! attId->xmlns) in defineAttribute()
6394 type->idAtt = attId; in defineAttribute()
6396 if (type->nDefaultAtts == type->allocDefaultAtts) { in defineAttribute()
6397 if (type->allocDefaultAtts == 0) { in defineAttribute()
6398 type->allocDefaultAtts = 8; in defineAttribute()
6399 type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC( in defineAttribute()
6400 parser, type->allocDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); in defineAttribute()
6401 if (! type->defaultAtts) { in defineAttribute()
6402 type->allocDefaultAtts = 0; in defineAttribute()
6409 if (type->allocDefaultAtts > INT_MAX / 2) { in defineAttribute()
6413 int count = type->allocDefaultAtts * 2; in defineAttribute()
6417 * from -Wtype-limits on platforms where in defineAttribute()
6420 if ((unsigned)count > (size_t)(-1) / sizeof(DEFAULT_ATTRIBUTE)) { in defineAttribute()
6425 temp = (DEFAULT_ATTRIBUTE *)REALLOC(parser, type->defaultAtts, in defineAttribute()
6429 type->allocDefaultAtts = count; in defineAttribute()
6430 type->defaultAtts = temp; in defineAttribute()
6433 att = type->defaultAtts + type->nDefaultAtts; in defineAttribute()
6434 att->id = attId; in defineAttribute()
6435 att->value = value; in defineAttribute()
6436 att->isCdata = isCdata; in defineAttribute()
6438 attId->maybeTokenized = XML_TRUE; in defineAttribute()
6439 type->nDefaultAtts += 1; in defineAttribute()
6445 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in setElementTypePrefix()
6447 for (name = elementType->name; *name; name++) { in setElementTypePrefix()
6451 for (s = elementType->name; s != name; s++) { in setElementTypePrefix()
6452 if (! poolAppendChar(&dtd->pool, *s)) in setElementTypePrefix()
6455 if (! poolAppendChar(&dtd->pool, XML_T('\0'))) in setElementTypePrefix()
6457 prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&dtd->pool), in setElementTypePrefix()
6461 if (prefix->name == poolStart(&dtd->pool)) in setElementTypePrefix()
6462 poolFinish(&dtd->pool); in setElementTypePrefix()
6464 poolDiscard(&dtd->pool); in setElementTypePrefix()
6465 elementType->prefix = prefix; in setElementTypePrefix()
6475 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in getAttributeId()
6478 if (! poolAppendChar(&dtd->pool, XML_T('\0'))) in getAttributeId()
6480 name = poolStoreString(&dtd->pool, enc, start, end); in getAttributeId()
6483 /* skip quotation mark - its storage will be re-used (like in name[-1]) */ in getAttributeId()
6485 id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, name, in getAttributeId()
6489 if (id->name != name) in getAttributeId()
6490 poolDiscard(&dtd->pool); in getAttributeId()
6492 poolFinish(&dtd->pool); in getAttributeId()
6493 if (! parser->m_ns) in getAttributeId()
6500 id->prefix = &dtd->defaultPrefix; in getAttributeId()
6502 id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, name + 6, in getAttributeId()
6504 id->xmlns = XML_TRUE; in getAttributeId()
6512 if (! poolAppendChar(&dtd->pool, name[j])) in getAttributeId()
6515 if (! poolAppendChar(&dtd->pool, XML_T('\0'))) in getAttributeId()
6517 id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, in getAttributeId()
6518 poolStart(&dtd->pool), sizeof(PREFIX)); in getAttributeId()
6519 if (! id->prefix) in getAttributeId()
6521 if (id->prefix->name == poolStart(&dtd->pool)) in getAttributeId()
6522 poolFinish(&dtd->pool); in getAttributeId()
6524 poolDiscard(&dtd->pool); in getAttributeId()
6537 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in getContext()
6541 if (dtd->defaultPrefix.binding) { in getContext()
6544 if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_EQUALS))) in getContext()
6546 len = dtd->defaultPrefix.binding->uriLen; in getContext()
6547 if (parser->m_namespaceSeparator) in getContext()
6548 len--; in getContext()
6550 if (! poolAppendChar(&parser->m_tempPool, in getContext()
6551 dtd->defaultPrefix.binding->uri[i])) { in getContext()
6577 hashTableIterInit(&iter, &(dtd->prefixes)); in getContext()
6585 if (! prefix->binding) { in getContext()
6594 if (needSep && ! poolAppendChar(&parser->m_tempPool, CONTEXT_SEP)) in getContext()
6596 for (s = prefix->name; *s; s++) in getContext()
6597 if (! poolAppendChar(&parser->m_tempPool, *s)) in getContext()
6599 if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_EQUALS))) in getContext()
6601 len = prefix->binding->uriLen; in getContext()
6602 if (parser->m_namespaceSeparator) in getContext()
6603 len--; in getContext()
6605 if (! poolAppendChar(&parser->m_tempPool, prefix->binding->uri[i])) in getContext()
6610 hashTableIterInit(&iter, &(dtd->generalEntities)); in getContext()
6616 if (! e->open) in getContext()
6618 if (needSep && ! poolAppendChar(&parser->m_tempPool, CONTEXT_SEP)) in getContext()
6620 for (s = e->name; *s; s++) in getContext()
6621 if (! poolAppendChar(&parser->m_tempPool, *s)) in getContext()
6626 if (! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in getContext()
6628 return parser->m_tempPool.start; in getContext()
6633 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in setContext()
6639 if (! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in setContext()
6641 e = (ENTITY *)lookup(parser, &dtd->generalEntities, in setContext()
6642 poolStart(&parser->m_tempPool), 0); in setContext()
6644 e->open = XML_TRUE; in setContext()
6648 poolDiscard(&parser->m_tempPool); in setContext()
6651 if (poolLength(&parser->m_tempPool) == 0) in setContext()
6652 prefix = &dtd->defaultPrefix; in setContext()
6654 if (! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in setContext()
6657 = (PREFIX *)lookup(parser, &dtd->prefixes, in setContext()
6658 poolStart(&parser->m_tempPool), sizeof(PREFIX)); in setContext()
6661 if (prefix->name == poolStart(&parser->m_tempPool)) { in setContext()
6662 prefix->name = poolCopyString(&dtd->pool, prefix->name); in setContext()
6663 if (! prefix->name) in setContext()
6666 poolDiscard(&parser->m_tempPool); in setContext()
6670 if (! poolAppendChar(&parser->m_tempPool, *context)) in setContext()
6672 if (! poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in setContext()
6674 if (addBinding(parser, prefix, NULL, poolStart(&parser->m_tempPool), in setContext()
6675 &parser->m_inheritedBindings) in setContext()
6678 poolDiscard(&parser->m_tempPool); in setContext()
6683 if (! poolAppendChar(&parser->m_tempPool, *s)) in setContext()
6700 if (p != publicId && p[-1] != 0x20) in normalizePublicId()
6707 if (p != publicId && p[-1] == 0x20) in normalizePublicId()
6708 --p; in normalizePublicId()
6714 DTD *p = ms->malloc_fcn(sizeof(DTD)); in dtdCreate()
6717 poolInit(&(p->pool), ms); in dtdCreate()
6718 poolInit(&(p->entityValuePool), ms); in dtdCreate()
6719 hashTableInit(&(p->generalEntities), ms); in dtdCreate()
6720 hashTableInit(&(p->elementTypes), ms); in dtdCreate()
6721 hashTableInit(&(p->attributeIds), ms); in dtdCreate()
6722 hashTableInit(&(p->prefixes), ms); in dtdCreate()
6724 p->paramEntityRead = XML_FALSE; in dtdCreate()
6725 hashTableInit(&(p->paramEntities), ms); in dtdCreate()
6727 p->defaultPrefix.name = NULL; in dtdCreate()
6728 p->defaultPrefix.binding = NULL; in dtdCreate()
6730 p->in_eldecl = XML_FALSE; in dtdCreate()
6731 p->scaffIndex = NULL; in dtdCreate()
6732 p->scaffold = NULL; in dtdCreate()
6733 p->scaffLevel = 0; in dtdCreate()
6734 p->scaffSize = 0; in dtdCreate()
6735 p->scaffCount = 0; in dtdCreate()
6736 p->contentStringLen = 0; in dtdCreate()
6738 p->keepProcessing = XML_TRUE; in dtdCreate()
6739 p->hasParamEntityRefs = XML_FALSE; in dtdCreate()
6740 p->standalone = XML_FALSE; in dtdCreate()
6747 hashTableIterInit(&iter, &(p->elementTypes)); in dtdReset()
6752 if (e->allocDefaultAtts != 0) in dtdReset()
6753 ms->free_fcn(e->defaultAtts); in dtdReset()
6755 hashTableClear(&(p->generalEntities)); in dtdReset()
6757 p->paramEntityRead = XML_FALSE; in dtdReset()
6758 hashTableClear(&(p->paramEntities)); in dtdReset()
6760 hashTableClear(&(p->elementTypes)); in dtdReset()
6761 hashTableClear(&(p->attributeIds)); in dtdReset()
6762 hashTableClear(&(p->prefixes)); in dtdReset()
6763 poolClear(&(p->pool)); in dtdReset()
6764 poolClear(&(p->entityValuePool)); in dtdReset()
6765 p->defaultPrefix.name = NULL; in dtdReset()
6766 p->defaultPrefix.binding = NULL; in dtdReset()
6768 p->in_eldecl = XML_FALSE; in dtdReset()
6770 ms->free_fcn(p->scaffIndex); in dtdReset()
6771 p->scaffIndex = NULL; in dtdReset()
6772 ms->free_fcn(p->scaffold); in dtdReset()
6773 p->scaffold = NULL; in dtdReset()
6775 p->scaffLevel = 0; in dtdReset()
6776 p->scaffSize = 0; in dtdReset()
6777 p->scaffCount = 0; in dtdReset()
6778 p->contentStringLen = 0; in dtdReset()
6780 p->keepProcessing = XML_TRUE; in dtdReset()
6781 p->hasParamEntityRefs = XML_FALSE; in dtdReset()
6782 p->standalone = XML_FALSE; in dtdReset()
6788 hashTableIterInit(&iter, &(p->elementTypes)); in dtdDestroy()
6793 if (e->allocDefaultAtts != 0) in dtdDestroy()
6794 ms->free_fcn(e->defaultAtts); in dtdDestroy()
6796 hashTableDestroy(&(p->generalEntities)); in dtdDestroy()
6798 hashTableDestroy(&(p->paramEntities)); in dtdDestroy()
6800 hashTableDestroy(&(p->elementTypes)); in dtdDestroy()
6801 hashTableDestroy(&(p->attributeIds)); in dtdDestroy()
6802 hashTableDestroy(&(p->prefixes)); in dtdDestroy()
6803 poolDestroy(&(p->pool)); in dtdDestroy()
6804 poolDestroy(&(p->entityValuePool)); in dtdDestroy()
6806 ms->free_fcn(p->scaffIndex); in dtdDestroy()
6807 ms->free_fcn(p->scaffold); in dtdDestroy()
6809 ms->free_fcn(p); in dtdDestroy()
6812 /* Do a deep copy of the DTD. Return 0 for out of memory, non-zero otherwise.
6822 hashTableIterInit(&iter, &(oldDtd->prefixes)); in dtdCopy()
6828 name = poolCopyString(&(newDtd->pool), oldP->name); in dtdCopy()
6831 if (! lookup(oldParser, &(newDtd->prefixes), name, sizeof(PREFIX))) in dtdCopy()
6835 hashTableIterInit(&iter, &(oldDtd->attributeIds)); in dtdCopy()
6847 if (! poolAppendChar(&(newDtd->pool), XML_T('\0'))) in dtdCopy()
6849 name = poolCopyString(&(newDtd->pool), oldA->name); in dtdCopy()
6853 newA = (ATTRIBUTE_ID *)lookup(oldParser, &(newDtd->attributeIds), name, in dtdCopy()
6857 newA->maybeTokenized = oldA->maybeTokenized; in dtdCopy()
6858 if (oldA->prefix) { in dtdCopy()
6859 newA->xmlns = oldA->xmlns; in dtdCopy()
6860 if (oldA->prefix == &oldDtd->defaultPrefix) in dtdCopy()
6861 newA->prefix = &newDtd->defaultPrefix; in dtdCopy()
6863 newA->prefix = (PREFIX *)lookup(oldParser, &(newDtd->prefixes), in dtdCopy()
6864 oldA->prefix->name, 0); in dtdCopy()
6870 hashTableIterInit(&iter, &(oldDtd->elementTypes)); in dtdCopy()
6879 name = poolCopyString(&(newDtd->pool), oldE->name); in dtdCopy()
6882 newE = (ELEMENT_TYPE *)lookup(oldParser, &(newDtd->elementTypes), name, in dtdCopy()
6886 if (oldE->nDefaultAtts) { in dtdCopy()
6887 newE->defaultAtts in dtdCopy()
6888 = ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); in dtdCopy()
6889 if (! newE->defaultAtts) { in dtdCopy()
6893 if (oldE->idAtt) in dtdCopy()
6894 newE->idAtt = (ATTRIBUTE_ID *)lookup(oldParser, &(newDtd->attributeIds), in dtdCopy()
6895 oldE->idAtt->name, 0); in dtdCopy()
6896 newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; in dtdCopy()
6897 if (oldE->prefix) in dtdCopy()
6898 newE->prefix = (PREFIX *)lookup(oldParser, &(newDtd->prefixes), in dtdCopy()
6899 oldE->prefix->name, 0); in dtdCopy()
6900 for (i = 0; i < newE->nDefaultAtts; i++) { in dtdCopy()
6901 newE->defaultAtts[i].id = (ATTRIBUTE_ID *)lookup( in dtdCopy()
6902 oldParser, &(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); in dtdCopy()
6903 newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; in dtdCopy()
6904 if (oldE->defaultAtts[i].value) { in dtdCopy()
6905 newE->defaultAtts[i].value in dtdCopy()
6906 = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); in dtdCopy()
6907 if (! newE->defaultAtts[i].value) in dtdCopy()
6910 newE->defaultAtts[i].value = NULL; in dtdCopy()
6915 if (! copyEntityTable(oldParser, &(newDtd->generalEntities), &(newDtd->pool), in dtdCopy()
6916 &(oldDtd->generalEntities))) in dtdCopy()
6920 if (! copyEntityTable(oldParser, &(newDtd->paramEntities), &(newDtd->pool), in dtdCopy()
6921 &(oldDtd->paramEntities))) in dtdCopy()
6923 newDtd->paramEntityRead = oldDtd->paramEntityRead; in dtdCopy()
6926 newDtd->keepProcessing = oldDtd->keepProcessing; in dtdCopy()
6927 newDtd->hasParamEntityRefs = oldDtd->hasParamEntityRefs; in dtdCopy()
6928 newDtd->standalone = oldDtd->standalone; in dtdCopy()
6931 newDtd->in_eldecl = oldDtd->in_eldecl; in dtdCopy()
6932 newDtd->scaffold = oldDtd->scaffold; in dtdCopy()
6933 newDtd->contentStringLen = oldDtd->contentStringLen; in dtdCopy()
6934 newDtd->scaffSize = oldDtd->scaffSize; in dtdCopy()
6935 newDtd->scaffLevel = oldDtd->scaffLevel; in dtdCopy()
6936 newDtd->scaffIndex = oldDtd->scaffIndex; in dtdCopy()
6956 name = poolCopyString(newPool, oldE->name); in copyEntityTable()
6962 if (oldE->systemId) { in copyEntityTable()
6963 const XML_Char *tem = poolCopyString(newPool, oldE->systemId); in copyEntityTable()
6966 newE->systemId = tem; in copyEntityTable()
6967 if (oldE->base) { in copyEntityTable()
6968 if (oldE->base == cachedOldBase) in copyEntityTable()
6969 newE->base = cachedNewBase; in copyEntityTable()
6971 cachedOldBase = oldE->base; in copyEntityTable()
6975 cachedNewBase = newE->base = tem; in copyEntityTable()
6978 if (oldE->publicId) { in copyEntityTable()
6979 tem = poolCopyString(newPool, oldE->publicId); in copyEntityTable()
6982 newE->publicId = tem; in copyEntityTable()
6986 = poolCopyStringN(newPool, oldE->textPtr, oldE->textLen); in copyEntityTable()
6989 newE->textPtr = tem; in copyEntityTable()
6990 newE->textLen = oldE->textLen; in copyEntityTable()
6992 if (oldE->notation) { in copyEntityTable()
6993 const XML_Char *tem = poolCopyString(newPool, oldE->notation); in copyEntityTable()
6996 newE->notation = tem; in copyEntityTable()
6998 newE->is_param = oldE->is_param; in copyEntityTable()
6999 newE->is_internal = oldE->is_internal; in copyEntityTable()
7024 key->k[0] = 0; in copy_salt_to_sipkey()
7025 key->k[1] = get_hash_secret_salt(parser); in copy_salt_to_sipkey()
7042 if (table->size == 0) { in lookup()
7046 table->power = INIT_POWER; in lookup()
7047 /* table->size is a power of 2 */ in lookup()
7048 table->size = (size_t)1 << INIT_POWER; in lookup()
7049 tsize = table->size * sizeof(NAMED *); in lookup()
7050 table->v = table->mem->malloc_fcn(tsize); in lookup()
7051 if (! table->v) { in lookup()
7052 table->size = 0; in lookup()
7055 memset(table->v, 0, tsize); in lookup()
7056 i = hash(parser, name) & ((unsigned long)table->size - 1); in lookup()
7059 unsigned long mask = (unsigned long)table->size - 1; in lookup()
7062 while (table->v[i]) { in lookup()
7063 if (keyeq(name, table->v[i]->name)) in lookup()
7064 return table->v[i]; in lookup()
7066 step = PROBE_STEP(h, mask, table->power); in lookup()
7067 i < step ? (i += table->size - step) : (i -= step); in lookup()
7073 if (table->used >> (table->power - 1)) { in lookup()
7074 unsigned char newPower = table->power + 1; in lookup()
7082 unsigned long newMask = (unsigned long)newSize - 1; in lookup()
7085 if (newSize > (size_t)(-1) / sizeof(NAMED *)) { in lookup()
7090 NAMED **newV = table->mem->malloc_fcn(tsize); in lookup()
7094 for (i = 0; i < table->size; i++) in lookup()
7095 if (table->v[i]) { in lookup()
7096 unsigned long newHash = hash(parser, table->v[i]->name); in lookup()
7102 j < step ? (j += newSize - step) : (j -= step); in lookup()
7104 newV[j] = table->v[i]; in lookup()
7106 table->mem->free_fcn(table->v); in lookup()
7107 table->v = newV; in lookup()
7108 table->power = newPower; in lookup()
7109 table->size = newSize; in lookup()
7112 while (table->v[i]) { in lookup()
7115 i < step ? (i += newSize - step) : (i -= step); in lookup()
7119 table->v[i] = table->mem->malloc_fcn(createSize); in lookup()
7120 if (! table->v[i]) in lookup()
7122 memset(table->v[i], 0, createSize); in lookup()
7123 table->v[i]->name = name; in lookup()
7124 (table->used)++; in lookup()
7125 return table->v[i]; in lookup()
7131 for (i = 0; i < table->size; i++) { in hashTableClear()
7132 table->mem->free_fcn(table->v[i]); in hashTableClear()
7133 table->v[i] = NULL; in hashTableClear()
7135 table->used = 0; in hashTableClear()
7141 for (i = 0; i < table->size; i++) in hashTableDestroy()
7142 table->mem->free_fcn(table->v[i]); in hashTableDestroy()
7143 table->mem->free_fcn(table->v); in hashTableDestroy()
7148 p->power = 0; in hashTableInit()
7149 p->size = 0; in hashTableInit()
7150 p->used = 0; in hashTableInit()
7151 p->v = NULL; in hashTableInit()
7152 p->mem = ms; in hashTableInit()
7157 iter->p = table->v; in hashTableIterInit()
7158 iter->end = iter->p ? iter->p + table->size : NULL; in hashTableIterInit()
7163 while (iter->p != iter->end) { in hashTableIterNext()
7164 NAMED *tem = *(iter->p)++; in hashTableIterNext()
7173 pool->blocks = NULL; in poolInit()
7174 pool->freeBlocks = NULL; in poolInit()
7175 pool->start = NULL; in poolInit()
7176 pool->ptr = NULL; in poolInit()
7177 pool->end = NULL; in poolInit()
7178 pool->mem = ms; in poolInit()
7183 if (! pool->freeBlocks) in poolClear()
7184 pool->freeBlocks = pool->blocks; in poolClear()
7186 BLOCK *p = pool->blocks; in poolClear()
7188 BLOCK *tem = p->next; in poolClear()
7189 p->next = pool->freeBlocks; in poolClear()
7190 pool->freeBlocks = p; in poolClear()
7194 pool->blocks = NULL; in poolClear()
7195 pool->start = NULL; in poolClear()
7196 pool->ptr = NULL; in poolClear()
7197 pool->end = NULL; in poolClear()
7202 BLOCK *p = pool->blocks; in poolDestroy()
7204 BLOCK *tem = p->next; in poolDestroy()
7205 pool->mem->free_fcn(p); in poolDestroy()
7208 p = pool->freeBlocks; in poolDestroy()
7210 BLOCK *tem = p->next; in poolDestroy()
7211 pool->mem->free_fcn(p); in poolDestroy()
7219 if (! pool->ptr && ! poolGrow(pool)) in poolAppend()
7223 enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); in poolAppend()
7230 return pool->start; in poolAppend()
7239 s = pool->start; in poolCopyString()
7246 if (! pool->ptr && ! poolGrow(pool)) { in poolCopyStringN()
7251 * pool->ptr cannot be NULL. in poolCopyStringN()
7260 for (; n > 0; --n, s++) { in poolCopyStringN()
7264 s = pool->start; in poolCopyStringN()
7276 return pool->start; in poolAppendString()
7284 if (pool->ptr == pool->end && ! poolGrow(pool)) in poolStoreString()
7286 *(pool->ptr)++ = 0; in poolStoreString()
7287 return pool->start; in poolStoreString()
7297 ** on top has no chance of making us accept a small non-negative number in poolBytesToAllocateFor()
7320 if (pool->freeBlocks) { in poolGrow()
7321 if (pool->start == 0) { in poolGrow()
7322 pool->blocks = pool->freeBlocks; in poolGrow()
7323 pool->freeBlocks = pool->freeBlocks->next; in poolGrow()
7324 pool->blocks->next = NULL; in poolGrow()
7325 pool->start = pool->blocks->s; in poolGrow()
7326 pool->end = pool->start + pool->blocks->size; in poolGrow()
7327 pool->ptr = pool->start; in poolGrow()
7330 if (pool->end - pool->start < pool->freeBlocks->size) { in poolGrow()
7331 BLOCK *tem = pool->freeBlocks->next; in poolGrow()
7332 pool->freeBlocks->next = pool->blocks; in poolGrow()
7333 pool->blocks = pool->freeBlocks; in poolGrow()
7334 pool->freeBlocks = tem; in poolGrow()
7335 memcpy(pool->blocks->s, pool->start, in poolGrow()
7336 (pool->end - pool->start) * sizeof(XML_Char)); in poolGrow()
7337 pool->ptr = pool->blocks->s + (pool->ptr - pool->start); in poolGrow()
7338 pool->start = pool->blocks->s; in poolGrow()
7339 pool->end = pool->start + pool->blocks->size; in poolGrow()
7343 if (pool->blocks && pool->start == pool->blocks->s) { in poolGrow()
7345 int blockSize = (int)((unsigned)(pool->end - pool->start) * 2U); in poolGrow()
7350 const ptrdiff_t offsetInsideBlock = pool->ptr - pool->start; in poolGrow()
7366 temp = (BLOCK *)pool->mem->realloc_fcn(pool->blocks, in poolGrow()
7370 pool->blocks = temp; in poolGrow()
7371 pool->blocks->size = blockSize; in poolGrow()
7372 pool->ptr = pool->blocks->s + offsetInsideBlock; in poolGrow()
7373 pool->start = pool->blocks->s; in poolGrow()
7374 pool->end = pool->start + blockSize; in poolGrow()
7377 int blockSize = (int)(pool->end - pool->start); in poolGrow()
7407 tem = pool->mem->malloc_fcn(bytesToAllocate); in poolGrow()
7410 tem->size = blockSize; in poolGrow()
7411 tem->next = pool->blocks; in poolGrow()
7412 pool->blocks = tem; in poolGrow()
7413 if (pool->ptr != pool->start) in poolGrow()
7414 memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char)); in poolGrow()
7415 pool->ptr = tem->s + (pool->ptr - pool->start); in poolGrow()
7416 pool->start = tem->s; in poolGrow()
7417 pool->end = tem->s + blockSize; in poolGrow()
7424 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in nextScaffoldPart()
7428 if (! dtd->scaffIndex) { in nextScaffoldPart()
7429 dtd->scaffIndex = (int *)MALLOC(parser, parser->m_groupSize * sizeof(int)); in nextScaffoldPart()
7430 if (! dtd->scaffIndex) in nextScaffoldPart()
7431 return -1; in nextScaffoldPart()
7432 dtd->scaffIndex[0] = 0; in nextScaffoldPart()
7435 if (dtd->scaffCount >= dtd->scaffSize) { in nextScaffoldPart()
7437 if (dtd->scaffold) { in nextScaffoldPart()
7439 if (dtd->scaffSize > UINT_MAX / 2u) { in nextScaffoldPart()
7440 return -1; in nextScaffoldPart()
7444 * from -Wtype-limits on platforms where in nextScaffoldPart()
7447 if (dtd->scaffSize > (size_t)(-1) / 2u / sizeof(CONTENT_SCAFFOLD)) { in nextScaffoldPart()
7448 return -1; in nextScaffoldPart()
7453 parser, dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD)); in nextScaffoldPart()
7455 return -1; in nextScaffoldPart()
7456 dtd->scaffSize *= 2; in nextScaffoldPart()
7461 return -1; in nextScaffoldPart()
7462 dtd->scaffSize = INIT_SCAFFOLD_ELEMENTS; in nextScaffoldPart()
7464 dtd->scaffold = temp; in nextScaffoldPart()
7466 next = dtd->scaffCount++; in nextScaffoldPart()
7467 me = &dtd->scaffold[next]; in nextScaffoldPart()
7468 if (dtd->scaffLevel) { in nextScaffoldPart()
7470 = &dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]]; in nextScaffoldPart()
7471 if (parent->lastchild) { in nextScaffoldPart()
7472 dtd->scaffold[parent->lastchild].nextsib = next; in nextScaffoldPart()
7474 if (! parent->childcnt) in nextScaffoldPart()
7475 parent->firstchild = next; in nextScaffoldPart()
7476 parent->lastchild = next; in nextScaffoldPart()
7477 parent->childcnt++; in nextScaffoldPart()
7479 me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; in nextScaffoldPart()
7485 /* Function build_model transforms the existing parser->m_dtd->scaffold in build_model()
7487 * XML_Content tree nodes followed by a gapless list of zero-terminated in build_model()
7489 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in build_model()
7495 * from -Wtype-limits on platforms where in build_model()
7498 if (dtd->scaffCount > (size_t)(-1) / sizeof(XML_Content)) { in build_model()
7501 if (dtd->contentStringLen > (size_t)(-1) / sizeof(XML_Char)) { in build_model()
7505 if (dtd->scaffCount * sizeof(XML_Content) in build_model()
7506 > (size_t)(-1) - dtd->contentStringLen * sizeof(XML_Char)) { in build_model()
7510 const size_t allocsize = (dtd->scaffCount * sizeof(XML_Content) in build_model()
7511 + (dtd->contentStringLen * sizeof(XML_Char))); in build_model()
7525 * - We have two writing pointers, both walking up the result array; one does in build_model()
7529 * - The faster one, pointer jobDest, always leads and writes "what job in build_model()
7532 * to array dtd->scaffold) in field "numchildren". in build_model()
7534 * - The slower one, pointer dest, looks at the value stored in the in build_model()
7536 * at that time) and puts the real data from dtd->scaffold in. in build_model()
7538 * - Before the loop starts, jobDest writes source array index 0 in build_model()
7542 * - Whenever nodes with children are encountered, jobDest appends in build_model()
7564 * - The algorithm repeats until all target array indices have been processed. in build_model()
7567 XML_Content *const destLimit = &ret[dtd->scaffCount]; in build_model()
7569 str = (XML_Char *)&ret[dtd->scaffCount]; in build_model()
7572 (jobDest++)->numchildren = 0; in build_model()
7576 const int src_node = (int)dest->numchildren; in build_model()
7579 dest->type = dtd->scaffold[src_node].type; in build_model()
7580 dest->quant = dtd->scaffold[src_node].quant; in build_model()
7581 if (dest->type == XML_CTYPE_NAME) { in build_model()
7583 dest->name = str; in build_model()
7584 src = dtd->scaffold[src_node].name; in build_model()
7591 dest->numchildren = 0; in build_model()
7592 dest->children = NULL; in build_model()
7596 dest->name = NULL; in build_model()
7597 dest->numchildren = dtd->scaffold[src_node].childcnt; in build_model()
7598 dest->children = jobDest; in build_model()
7601 for (i = 0, cn = dtd->scaffold[src_node].firstchild; in build_model()
7602 i < dest->numchildren; i++, cn = dtd->scaffold[cn].nextsib) in build_model()
7603 (jobDest++)->numchildren = (unsigned int)cn; in build_model()
7613 DTD *const dtd = parser->m_dtd; /* save one level of indirection */ in getElementType()
7614 const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end); in getElementType()
7619 ret = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name, in getElementType()
7623 if (ret->name != name) in getElementType()
7624 poolDiscard(&dtd->pool); in getElementType()
7626 poolFinish(&dtd->pool); in getElementType()
7646 result = memsuite->malloc_fcn(charsRequired * sizeof(XML_Char)); in copyString()
7659 = rootParser->m_accounting.countBytesDirect in accountingGetCurrentAmplification()
7660 + rootParser->m_accounting.countBytesIndirect; in accountingGetCurrentAmplification()
7662 = rootParser->m_accounting.countBytesDirect in accountingGetCurrentAmplification()
7664 / (float)(rootParser->m_accounting.countBytesDirect)) in accountingGetCurrentAmplification()
7666 assert(! rootParser->m_parentParser); in accountingGetCurrentAmplification()
7673 assert(! rootParser->m_parentParser); in accountingReportStats()
7675 if (rootParser->m_accounting.debugLevel < 1) { in accountingReportStats()
7684 (void *)rootParser, rootParser->m_accounting.countBytesDirect, in accountingReportStats()
7685 rootParser->m_accounting.countBytesIndirect, in accountingReportStats()
7699 assert(! rootParser->m_parentParser); in accountingReportDiff()
7707 const size_t ellipsisLength = sizeof(ellipis) /* because compile-time */ - 1; in accountingReportDiff()
7712 if ((rootParser->m_accounting.debugLevel >= 3) in accountingReportDiff()
7713 || (after - before) in accountingReportDiff()
7723 walker = after - contextLength; in accountingReportDiff()
7752 assert(! rootParser->m_parentParser); in accountingDiffTolerated()
7756 const ptrdiff_t bytesMore = after - before; in accountingDiffTolerated()
7759 = isDirect ? &rootParser->m_accounting.countBytesDirect in accountingDiffTolerated()
7760 : &rootParser->m_accounting.countBytesIndirect; in accountingDiffTolerated()
7763 if (*additionTarget > (XmlBigCount)(-1) - (XmlBigCount)bytesMore) in accountingDiffTolerated()
7768 = rootParser->m_accounting.countBytesDirect in accountingDiffTolerated()
7769 + rootParser->m_accounting.countBytesIndirect; in accountingDiffTolerated()
7773 = (countBytesOutput < rootParser->m_accounting.activationThresholdBytes) in accountingDiffTolerated()
7775 <= rootParser->m_accounting.maximumAmplificationFactor); in accountingDiffTolerated()
7777 if (rootParser->m_accounting.debugLevel >= 2) { in accountingDiffTolerated()
7790 return parser->m_accounting.countBytesDirect; in testingAccountingGetCountBytesDirect()
7797 return parser->m_accounting.countBytesIndirect; in testingAccountingGetCountBytesIndirect()
7803 assert(! rootParser->m_parentParser); in entityTrackingReportStats()
7804 if (rootParser->m_entity_stats.debugLevel < 1) in entityTrackingReportStats()
7810 const char *const entityName = entity->name; in entityTrackingReportStats()
7816 (void *)rootParser, rootParser->m_entity_stats.countEverOpened, in entityTrackingReportStats()
7817 rootParser->m_entity_stats.currentDepth, in entityTrackingReportStats()
7818 rootParser->m_entity_stats.maximumDepthSeen, in entityTrackingReportStats()
7819 (rootParser->m_entity_stats.currentDepth - 1) * 2, "", in entityTrackingReportStats()
7820 entity->is_param ? "%" : "&", entityName, action, entity->textLen, in entityTrackingReportStats()
7827 assert(! rootParser->m_parentParser); in entityTrackingOnOpen()
7829 rootParser->m_entity_stats.countEverOpened++; in entityTrackingOnOpen()
7830 rootParser->m_entity_stats.currentDepth++; in entityTrackingOnOpen()
7831 if (rootParser->m_entity_stats.currentDepth in entityTrackingOnOpen()
7832 > rootParser->m_entity_stats.maximumDepthSeen) { in entityTrackingOnOpen()
7833 rootParser->m_entity_stats.maximumDepthSeen++; in entityTrackingOnOpen()
7842 assert(! rootParser->m_parentParser); in entityTrackingOnClose()
7845 rootParser->m_entity_stats.currentDepth--; in entityTrackingOnClose()
7852 while (rootParser->m_parentParser) { in getRootParserOf()
7853 rootParser = rootParser->m_parentParser; in getRootParserOf()
7856 assert(! rootParser->m_parentParser); in getRootParserOf()
7957 return "-"; in unsignedCharToPrintable()