Lines Matching +full:libbsd +full:- +full:dev
9 Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
10 Copyright (c) 2000-2017 Expat development team
101 * libbsd (arc4random_buf): HAVE_ARC4RANDOM_BUF + HAVE_LIBBSD, \
102 * libbsd (arc4random): HAVE_ARC4RANDOM + HAVE_LIBBSD, \
103 * Linux / BSD / macOS (/dev/urandom): XML_DEV_URANDOM \
121 #define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((char *)(s) - (char *)NULL) & 1))
129 #define MUST_CONVERT(enc, s) (!(enc)->isUtf8)
162 #define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1))
164 /* Do safe (NULL-aware) pointer arithmetic */
165 #define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
201 to the hash table size, which is a power of 2. We use double-hashing,
204 index was calculated: index = hash & mask, where mask = table->size - 1.
205 We limit the maximum step size to table->size / 4 (mask >> 2) and make
209 ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2))
253 encodings. The memory buffer 'buf' is a separately-allocated
258 XML_Parse()/XML_ParseBuffer(), the buffer is re-allocated to
261 A parser re-uses these structures, maintaining a list of allocated
278 int processed; /* # of processed bytes - when suspended */
535 #define poolStart(pool) ((pool)->start)
536 #define poolEnd(pool) ((pool)->ptr)
537 #define poolLength(pool) ((pool)->ptr - (pool)->start)
538 #define poolChop(pool) ((void)--(pool->ptr))
539 #define poolLastChar(pool) (((pool)->ptr)[-1])
540 #define poolDiscard(pool) ((pool)->ptr = (pool)->start)
541 #define poolFinish(pool) ((pool)->start = (pool)->ptr)
543 (((pool)->ptr == (pool)->end && !poolGrow(pool)) \
545 : ((*((pool)->ptr)++ = c), 1))
650 #define MALLOC(parser, s) (parser->m_mem.malloc_fcn((s)))
651 #define REALLOC(parser, p, s) (parser->m_mem.realloc_fcn((p),(s)))
652 #define FREE(parser, p) (parser->m_mem.free_fcn((p)))
693 const size_t bytesToWrite = count - bytesWrittenTotal; in writeRandomBytes_getrandom_nonblock()
717 /* Extract entropy from /dev/urandom */
723 const int fd = open("/dev/urandom", O_RDONLY); in writeRandomBytes_dev_urandom()
730 const size_t bytesToWrite = count - bytesWrittenTotal; in writeRandomBytes_dev_urandom()
780 …osoft.com/michael_howard/2005/01/14/cryptographically-secure-random-number-on-windows-without-usin…
837 fprintf(stderr, "Entropy: %s --> 0x%0*lx (%lu bytes)\n", in ENTROPY_DEBUG()
871 return ENTROPY_DEBUG("/dev/urandom", entropy); in generate_hash_secret_salt()
874 /* .. and self-made low quality for backup: */ in generate_hash_secret_salt()
879 /* Factors are 2^31-1 and 2^61-1 (Mersenne primes M31 and M61) */ in generate_hash_secret_salt()
891 if (parser->m_parentParser != NULL) in get_hash_secret_salt()
892 return get_hash_secret_salt(parser->m_parentParser); in get_hash_secret_salt()
893 return parser->m_hash_secret_salt; in get_hash_secret_salt()
900 if (parser->m_hash_secret_salt == 0) in startParsing()
901 parser->m_hash_secret_salt = generate_hash_secret_salt(parser); in startParsing()
902 if (parser->m_ns) { in startParsing()
930 memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); in parserCreate()
932 mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); in parserCreate()
933 mtemp->malloc_fcn = memsuite->malloc_fcn; in parserCreate()
934 mtemp->realloc_fcn = memsuite->realloc_fcn; in parserCreate()
935 mtemp->free_fcn = memsuite->free_fcn; in parserCreate()
942 mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); in parserCreate()
943 mtemp->malloc_fcn = malloc; in parserCreate()
944 mtemp->realloc_fcn = realloc; in parserCreate()
945 mtemp->free_fcn = free; in parserCreate()
952 parser->m_buffer = NULL; in parserCreate()
953 parser->m_bufferLim = NULL; in parserCreate()
955 parser->m_attsSize = INIT_ATTS_SIZE; in parserCreate()
956 parser->m_atts = (ATTRIBUTE *)MALLOC(parser, parser->m_attsSize * sizeof(ATTRIBUTE)); in parserCreate()
957 if (parser->m_atts == NULL) { in parserCreate()
962 parser->m_attInfo = (XML_AttrInfo*)MALLOC(parser, parser->m_attsSize * sizeof(XML_AttrInfo)); in parserCreate()
963 if (parser->m_attInfo == NULL) { in parserCreate()
964 FREE(parser, parser->m_atts); in parserCreate()
969 parser->m_dataBuf = (XML_Char *)MALLOC(parser, INIT_DATA_BUF_SIZE * sizeof(XML_Char)); in parserCreate()
970 if (parser->m_dataBuf == NULL) { in parserCreate()
971 FREE(parser, parser->m_atts); in parserCreate()
973 FREE(parser, parser->m_attInfo); in parserCreate()
978 parser->m_dataBufEnd = parser->m_dataBuf + INIT_DATA_BUF_SIZE; in parserCreate()
981 parser->m_dtd = dtd; in parserCreate()
983 parser->m_dtd = dtdCreate(&parser->m_mem); in parserCreate()
984 if (parser->m_dtd == NULL) { in parserCreate()
985 FREE(parser, parser->m_dataBuf); in parserCreate()
986 FREE(parser, parser->m_atts); in parserCreate()
988 FREE(parser, parser->m_attInfo); in parserCreate()
995 parser->m_freeBindingList = NULL; in parserCreate()
996 parser->m_freeTagList = NULL; in parserCreate()
997 parser->m_freeInternalEntities = NULL; in parserCreate()
999 parser->m_groupSize = 0; in parserCreate()
1000 parser->m_groupConnector = NULL; in parserCreate()
1002 parser->m_unknownEncodingHandler = NULL; in parserCreate()
1003 parser->m_unknownEncodingHandlerData = NULL; in parserCreate()
1005 parser->m_namespaceSeparator = ASCII_EXCL; in parserCreate()
1006 parser->m_ns = XML_FALSE; in parserCreate()
1007 parser->m_ns_triplets = XML_FALSE; in parserCreate()
1009 parser->m_nsAtts = NULL; in parserCreate()
1010 parser->m_nsAttsVersion = 0; in parserCreate()
1011 parser->m_nsAttsPower = 0; in parserCreate()
1013 parser->m_protocolEncodingName = NULL; in parserCreate()
1015 poolInit(&parser->m_tempPool, &(parser->m_mem)); in parserCreate()
1016 poolInit(&parser->m_temp2Pool, &(parser->m_mem)); in parserCreate()
1019 if (encodingName && !parser->m_protocolEncodingName) { in parserCreate()
1025 parser->m_ns = XML_TRUE; in parserCreate()
1026 parser->m_internalEncoding = XmlGetInternalEncodingNS(); in parserCreate()
1027 parser->m_namespaceSeparator = *nameSep; in parserCreate()
1030 parser->m_internalEncoding = XmlGetInternalEncoding(); in parserCreate()
1039 parser->m_processor = prologInitProcessor; in parserInit()
1040 XmlPrologStateInit(&parser->m_prologState); in parserInit()
1042 parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem)); in parserInit()
1044 parser->m_curBase = NULL; in parserInit()
1045 XmlInitEncoding(&parser->m_initEncoding, &parser->m_encoding, 0); in parserInit()
1046 parser->m_userData = NULL; in parserInit()
1047 parser->m_handlerArg = NULL; in parserInit()
1048 parser->m_startElementHandler = NULL; in parserInit()
1049 parser->m_endElementHandler = NULL; in parserInit()
1050 parser->m_characterDataHandler = NULL; in parserInit()
1051 parser->m_processingInstructionHandler = NULL; in parserInit()
1052 parser->m_commentHandler = NULL; in parserInit()
1053 parser->m_startCdataSectionHandler = NULL; in parserInit()
1054 parser->m_endCdataSectionHandler = NULL; in parserInit()
1055 parser->m_defaultHandler = NULL; in parserInit()
1056 parser->m_startDoctypeDeclHandler = NULL; in parserInit()
1057 parser->m_endDoctypeDeclHandler = NULL; in parserInit()
1058 parser->m_unparsedEntityDeclHandler = NULL; in parserInit()
1059 parser->m_notationDeclHandler = NULL; in parserInit()
1060 parser->m_startNamespaceDeclHandler = NULL; in parserInit()
1061 parser->m_endNamespaceDeclHandler = NULL; in parserInit()
1062 parser->m_notStandaloneHandler = NULL; in parserInit()
1063 parser->m_externalEntityRefHandler = NULL; in parserInit()
1064 parser->m_externalEntityRefHandlerArg = parser; in parserInit()
1065 parser->m_skippedEntityHandler = NULL; in parserInit()
1066 parser->m_elementDeclHandler = NULL; in parserInit()
1067 parser->m_attlistDeclHandler = NULL; in parserInit()
1068 parser->m_entityDeclHandler = NULL; in parserInit()
1069 parser->m_xmlDeclHandler = NULL; in parserInit()
1070 parser->m_bufferPtr = parser->m_buffer; in parserInit()
1071 parser->m_bufferEnd = parser->m_buffer; in parserInit()
1072 parser->m_parseEndByteIndex = 0; in parserInit()
1073 parser->m_parseEndPtr = NULL; in parserInit()
1074 parser->m_declElementType = NULL; in parserInit()
1075 parser->m_declAttributeId = NULL; in parserInit()
1076 parser->m_declEntity = NULL; in parserInit()
1077 parser->m_doctypeName = NULL; in parserInit()
1078 parser->m_doctypeSysid = NULL; in parserInit()
1079 parser->m_doctypePubid = NULL; in parserInit()
1080 parser->m_declAttributeType = NULL; in parserInit()
1081 parser->m_declNotationName = NULL; in parserInit()
1082 parser->m_declNotationPublicId = NULL; in parserInit()
1083 parser->m_declAttributeIsCdata = XML_FALSE; in parserInit()
1084 parser->m_declAttributeIsId = XML_FALSE; in parserInit()
1085 memset(&parser->m_position, 0, sizeof(POSITION)); in parserInit()
1086 parser->m_errorCode = XML_ERROR_NONE; in parserInit()
1087 parser->m_eventPtr = NULL; in parserInit()
1088 parser->m_eventEndPtr = NULL; in parserInit()
1089 parser->m_positionPtr = NULL; in parserInit()
1090 parser->m_openInternalEntities = NULL; in parserInit()
1091 parser->m_defaultExpandInternalEntities = XML_TRUE; in parserInit()
1092 parser->m_tagLevel = 0; in parserInit()
1093 parser->m_tagStack = NULL; in parserInit()
1094 parser->m_inheritedBindings = NULL; in parserInit()
1095 parser->m_nSpecifiedAtts = 0; in parserInit()
1096 parser->m_unknownEncodingMem = NULL; in parserInit()
1097 parser->m_unknownEncodingRelease = NULL; in parserInit()
1098 parser->m_unknownEncodingData = NULL; in parserInit()
1099 parser->m_parentParser = NULL; in parserInit()
1100 parser->m_parsingStatus.parsing = XML_INITIALIZED; in parserInit()
1102 parser->m_isParamEntity = XML_FALSE; in parserInit()
1103 parser->m_useForeignDTD = XML_FALSE; in parserInit()
1104 parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; in parserInit()
1106 parser->m_hash_secret_salt = 0; in parserInit()
1115 bindings = bindings->nextTagBinding; in moveToFreeBindingList()
1116 b->nextTagBinding = parser->m_freeBindingList; in moveToFreeBindingList()
1117 parser->m_freeBindingList = b; in moveToFreeBindingList()
1130 if (parser->m_parentParser) in XML_ParserReset()
1133 tStk = parser->m_tagStack; in XML_ParserReset()
1136 tStk = tStk->parent; in XML_ParserReset()
1137 tag->parent = parser->m_freeTagList; in XML_ParserReset()
1138 moveToFreeBindingList(parser, tag->bindings); in XML_ParserReset()
1139 tag->bindings = NULL; in XML_ParserReset()
1140 parser->m_freeTagList = tag; in XML_ParserReset()
1143 openEntityList = parser->m_openInternalEntities; in XML_ParserReset()
1146 openEntityList = openEntity->next; in XML_ParserReset()
1147 openEntity->next = parser->m_freeInternalEntities; in XML_ParserReset()
1148 parser->m_freeInternalEntities = openEntity; in XML_ParserReset()
1150 moveToFreeBindingList(parser, parser->m_inheritedBindings); in XML_ParserReset()
1151 FREE(parser, parser->m_unknownEncodingMem); in XML_ParserReset()
1152 if (parser->m_unknownEncodingRelease) in XML_ParserReset()
1153 parser->m_unknownEncodingRelease(parser->m_unknownEncodingData); in XML_ParserReset()
1154 poolClear(&parser->m_tempPool); in XML_ParserReset()
1155 poolClear(&parser->m_temp2Pool); in XML_ParserReset()
1156 FREE(parser, (void *)parser->m_protocolEncodingName); in XML_ParserReset()
1157 parser->m_protocolEncodingName = NULL; in XML_ParserReset()
1159 dtdReset(parser->m_dtd, &parser->m_mem); in XML_ParserReset()
1172 …if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPE… in XML_SetEncoding()
1176 FREE(parser, (void *)parser->m_protocolEncodingName); in XML_SetEncoding()
1180 parser->m_protocolEncodingName = NULL; in XML_SetEncoding()
1183 parser->m_protocolEncodingName = copyString(encodingName, &(parser->m_mem)); in XML_SetEncoding()
1184 if (!parser->m_protocolEncodingName) in XML_SetEncoding()
1241 oldDtd = parser->m_dtd; in XML_ExternalEntityParserCreate()
1242 oldStartElementHandler = parser->m_startElementHandler; in XML_ExternalEntityParserCreate()
1243 oldEndElementHandler = parser->m_endElementHandler; in XML_ExternalEntityParserCreate()
1244 oldCharacterDataHandler = parser->m_characterDataHandler; in XML_ExternalEntityParserCreate()
1245 oldProcessingInstructionHandler = parser->m_processingInstructionHandler; in XML_ExternalEntityParserCreate()
1246 oldCommentHandler = parser->m_commentHandler; in XML_ExternalEntityParserCreate()
1247 oldStartCdataSectionHandler = parser->m_startCdataSectionHandler; in XML_ExternalEntityParserCreate()
1248 oldEndCdataSectionHandler = parser->m_endCdataSectionHandler; in XML_ExternalEntityParserCreate()
1249 oldDefaultHandler = parser->m_defaultHandler; in XML_ExternalEntityParserCreate()
1250 oldUnparsedEntityDeclHandler = parser->m_unparsedEntityDeclHandler; in XML_ExternalEntityParserCreate()
1251 oldNotationDeclHandler = parser->m_notationDeclHandler; in XML_ExternalEntityParserCreate()
1252 oldStartNamespaceDeclHandler = parser->m_startNamespaceDeclHandler; in XML_ExternalEntityParserCreate()
1253 oldEndNamespaceDeclHandler = parser->m_endNamespaceDeclHandler; in XML_ExternalEntityParserCreate()
1254 oldNotStandaloneHandler = parser->m_notStandaloneHandler; in XML_ExternalEntityParserCreate()
1255 oldExternalEntityRefHandler = parser->m_externalEntityRefHandler; in XML_ExternalEntityParserCreate()
1256 oldSkippedEntityHandler = parser->m_skippedEntityHandler; in XML_ExternalEntityParserCreate()
1257 oldUnknownEncodingHandler = parser->m_unknownEncodingHandler; in XML_ExternalEntityParserCreate()
1258 oldElementDeclHandler = parser->m_elementDeclHandler; in XML_ExternalEntityParserCreate()
1259 oldAttlistDeclHandler = parser->m_attlistDeclHandler; in XML_ExternalEntityParserCreate()
1260 oldEntityDeclHandler = parser->m_entityDeclHandler; in XML_ExternalEntityParserCreate()
1261 oldXmlDeclHandler = parser->m_xmlDeclHandler; in XML_ExternalEntityParserCreate()
1262 oldDeclElementType = parser->m_declElementType; in XML_ExternalEntityParserCreate()
1264 oldUserData = parser->m_userData; in XML_ExternalEntityParserCreate()
1265 oldHandlerArg = parser->m_handlerArg; in XML_ExternalEntityParserCreate()
1266 oldDefaultExpandInternalEntities = parser->m_defaultExpandInternalEntities; in XML_ExternalEntityParserCreate()
1267 oldExternalEntityRefHandlerArg = parser->m_externalEntityRefHandlerArg; in XML_ExternalEntityParserCreate()
1269 oldParamEntityParsing = parser->m_paramEntityParsing; in XML_ExternalEntityParserCreate()
1270 oldInEntityValue = parser->m_prologState.inEntityValue; in XML_ExternalEntityParserCreate()
1272 oldns_triplets = parser->m_ns_triplets; in XML_ExternalEntityParserCreate()
1278 oldhash_secret_salt = parser->m_hash_secret_salt; in XML_ExternalEntityParserCreate()
1285 /* Note that the magical uses of the pre-processor to make field in XML_ExternalEntityParserCreate()
1290 if (parser->m_ns) { in XML_ExternalEntityParserCreate()
1292 *tmp = parser->m_namespaceSeparator; in XML_ExternalEntityParserCreate()
1293 parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); in XML_ExternalEntityParserCreate()
1296 parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd); in XML_ExternalEntityParserCreate()
1302 parser->m_startElementHandler = oldStartElementHandler; in XML_ExternalEntityParserCreate()
1303 parser->m_endElementHandler = oldEndElementHandler; in XML_ExternalEntityParserCreate()
1304 parser->m_characterDataHandler = oldCharacterDataHandler; in XML_ExternalEntityParserCreate()
1305 parser->m_processingInstructionHandler = oldProcessingInstructionHandler; in XML_ExternalEntityParserCreate()
1306 parser->m_commentHandler = oldCommentHandler; in XML_ExternalEntityParserCreate()
1307 parser->m_startCdataSectionHandler = oldStartCdataSectionHandler; in XML_ExternalEntityParserCreate()
1308 parser->m_endCdataSectionHandler = oldEndCdataSectionHandler; in XML_ExternalEntityParserCreate()
1309 parser->m_defaultHandler = oldDefaultHandler; in XML_ExternalEntityParserCreate()
1310 parser->m_unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; in XML_ExternalEntityParserCreate()
1311 parser->m_notationDeclHandler = oldNotationDeclHandler; in XML_ExternalEntityParserCreate()
1312 parser->m_startNamespaceDeclHandler = oldStartNamespaceDeclHandler; in XML_ExternalEntityParserCreate()
1313 parser->m_endNamespaceDeclHandler = oldEndNamespaceDeclHandler; in XML_ExternalEntityParserCreate()
1314 parser->m_notStandaloneHandler = oldNotStandaloneHandler; in XML_ExternalEntityParserCreate()
1315 parser->m_externalEntityRefHandler = oldExternalEntityRefHandler; in XML_ExternalEntityParserCreate()
1316 parser->m_skippedEntityHandler = oldSkippedEntityHandler; in XML_ExternalEntityParserCreate()
1317 parser->m_unknownEncodingHandler = oldUnknownEncodingHandler; in XML_ExternalEntityParserCreate()
1318 parser->m_elementDeclHandler = oldElementDeclHandler; in XML_ExternalEntityParserCreate()
1319 parser->m_attlistDeclHandler = oldAttlistDeclHandler; in XML_ExternalEntityParserCreate()
1320 parser->m_entityDeclHandler = oldEntityDeclHandler; in XML_ExternalEntityParserCreate()
1321 parser->m_xmlDeclHandler = oldXmlDeclHandler; in XML_ExternalEntityParserCreate()
1322 parser->m_declElementType = oldDeclElementType; in XML_ExternalEntityParserCreate()
1323 parser->m_userData = oldUserData; in XML_ExternalEntityParserCreate()
1325 parser->m_handlerArg = parser->m_userData; in XML_ExternalEntityParserCreate()
1327 parser->m_handlerArg = parser; in XML_ExternalEntityParserCreate()
1329 parser->m_externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; in XML_ExternalEntityParserCreate()
1330 parser->m_defaultExpandInternalEntities = oldDefaultExpandInternalEntities; in XML_ExternalEntityParserCreate()
1331 parser->m_ns_triplets = oldns_triplets; in XML_ExternalEntityParserCreate()
1332 parser->m_hash_secret_salt = oldhash_secret_salt; in XML_ExternalEntityParserCreate()
1333 parser->m_parentParser = oldParser; in XML_ExternalEntityParserCreate()
1335 parser->m_paramEntityParsing = oldParamEntityParsing; in XML_ExternalEntityParserCreate()
1336 parser->m_prologState.inEntityValue = oldInEntityValue; in XML_ExternalEntityParserCreate()
1339 if (!dtdCopy(oldParser, parser->m_dtd, oldDtd, &parser->m_mem) in XML_ExternalEntityParserCreate()
1344 parser->m_processor = externalEntityInitProcessor; in XML_ExternalEntityParserCreate()
1348 /* The DTD instance referenced by parser->m_dtd is shared between the document's in XML_ExternalEntityParserCreate()
1351 because this would overwrite existing prefix->binding pointers in in XML_ExternalEntityParserCreate()
1352 parser->m_dtd with ones that get destroyed with the external PE parser. in XML_ExternalEntityParserCreate()
1355 parser->m_isParamEntity = XML_TRUE; in XML_ExternalEntityParserCreate()
1356 XmlPrologStateInitExternalEntity(&parser->m_prologState); in XML_ExternalEntityParserCreate()
1357 parser->m_processor = externalParEntInitProcessor; in XML_ExternalEntityParserCreate()
1370 bindings = b->nextTagBinding; in destroyBindings()
1371 FREE(parser, b->uri); in destroyBindings()
1384 tagList = parser->m_tagStack; in XML_ParserFree()
1388 if (parser->m_freeTagList == NULL) in XML_ParserFree()
1390 tagList = parser->m_freeTagList; in XML_ParserFree()
1391 parser->m_freeTagList = NULL; in XML_ParserFree()
1394 tagList = tagList->parent; in XML_ParserFree()
1395 FREE(parser, p->buf); in XML_ParserFree()
1396 destroyBindings(p->bindings, parser); in XML_ParserFree()
1400 entityList = parser->m_openInternalEntities; in XML_ParserFree()
1404 if (parser->m_freeInternalEntities == NULL) in XML_ParserFree()
1406 entityList = parser->m_freeInternalEntities; in XML_ParserFree()
1407 parser->m_freeInternalEntities = NULL; in XML_ParserFree()
1410 entityList = entityList->next; in XML_ParserFree()
1414 destroyBindings(parser->m_freeBindingList, parser); in XML_ParserFree()
1415 destroyBindings(parser->m_inheritedBindings, parser); in XML_ParserFree()
1416 poolDestroy(&parser->m_tempPool); in XML_ParserFree()
1417 poolDestroy(&parser->m_temp2Pool); in XML_ParserFree()
1418 FREE(parser, (void *)parser->m_protocolEncodingName); in XML_ParserFree()
1421 parser->m_dtd with the root parser, so we must not destroy it in XML_ParserFree()
1423 if (!parser->m_isParamEntity && parser->m_dtd) in XML_ParserFree()
1425 if (parser->m_dtd) in XML_ParserFree()
1427 dtdDestroy(parser->m_dtd, (XML_Bool)!parser->m_parentParser, &parser->m_mem); in XML_ParserFree()
1428 FREE(parser, (void *)parser->m_atts); in XML_ParserFree()
1430 FREE(parser, (void *)parser->m_attInfo); in XML_ParserFree()
1432 FREE(parser, parser->m_groupConnector); in XML_ParserFree()
1433 FREE(parser, parser->m_buffer); in XML_ParserFree()
1434 FREE(parser, parser->m_dataBuf); in XML_ParserFree()
1435 FREE(parser, parser->m_nsAtts); in XML_ParserFree()
1436 FREE(parser, parser->m_unknownEncodingMem); in XML_ParserFree()
1437 if (parser->m_unknownEncodingRelease) in XML_ParserFree()
1438 parser->m_unknownEncodingRelease(parser->m_unknownEncodingData); in XML_ParserFree()
1446 parser->m_handlerArg = parser; in XML_UseParserAsHandlerArg()
1456 …if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPE… in XML_UseForeignDTD()
1458 parser->m_useForeignDTD = useDTD; in XML_UseForeignDTD()
1471 …if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPE… in XML_SetReturnNSTriplet()
1473 parser->m_ns_triplets = do_nst ? XML_TRUE : XML_FALSE; in XML_SetReturnNSTriplet()
1481 if (parser->m_handlerArg == parser->m_userData) in XML_SetUserData()
1482 parser->m_handlerArg = parser->m_userData = p; in XML_SetUserData()
1484 parser->m_userData = p; in XML_SetUserData()
1493 p = poolCopyString(&parser->m_dtd->pool, p); in XML_SetBase()
1496 parser->m_curBase = p; in XML_SetBase()
1499 parser->m_curBase = NULL; in XML_SetBase()
1508 return parser->m_curBase; in XML_GetBase()
1515 return -1; in XML_GetSpecifiedAttributeCount()
1516 return parser->m_nSpecifiedAtts; in XML_GetSpecifiedAttributeCount()
1523 return -1; in XML_GetIdAttributeIndex()
1524 return parser->m_idAttIndex; in XML_GetIdAttributeIndex()
1533 return parser->m_attInfo; in XML_GetAttributeInfo()
1544 parser->m_startElementHandler = start; in XML_SetElementHandler()
1545 parser->m_endElementHandler = end; in XML_SetElementHandler()
1552 parser->m_startElementHandler = start; in XML_SetStartElementHandler()
1559 parser->m_endElementHandler = end; in XML_SetEndElementHandler()
1567 parser->m_characterDataHandler = handler; in XML_SetCharacterDataHandler()
1575 parser->m_processingInstructionHandler = handler; in XML_SetProcessingInstructionHandler()
1583 parser->m_commentHandler = handler; in XML_SetCommentHandler()
1593 parser->m_startCdataSectionHandler = start; in XML_SetCdataSectionHandler()
1594 parser->m_endCdataSectionHandler = end; in XML_SetCdataSectionHandler()
1601 parser->m_startCdataSectionHandler = start; in XML_SetStartCdataSectionHandler()
1608 parser->m_endCdataSectionHandler = end; in XML_SetEndCdataSectionHandler()
1617 parser->m_defaultHandler = handler; in XML_SetDefaultHandler()
1618 parser->m_defaultExpandInternalEntities = XML_FALSE; in XML_SetDefaultHandler()
1627 parser->m_defaultHandler = handler; in XML_SetDefaultHandlerExpand()
1628 parser->m_defaultExpandInternalEntities = XML_TRUE; in XML_SetDefaultHandlerExpand()
1638 parser->m_startDoctypeDeclHandler = start; in XML_SetDoctypeDeclHandler()
1639 parser->m_endDoctypeDeclHandler = end; in XML_SetDoctypeDeclHandler()
1646 parser->m_startDoctypeDeclHandler = start; in XML_SetStartDoctypeDeclHandler()
1653 parser->m_endDoctypeDeclHandler = end; in XML_SetEndDoctypeDeclHandler()
1661 parser->m_unparsedEntityDeclHandler = handler; in XML_SetUnparsedEntityDeclHandler()
1669 parser->m_notationDeclHandler = handler; in XML_SetNotationDeclHandler()
1679 parser->m_startNamespaceDeclHandler = start; in XML_SetNamespaceDeclHandler()
1680 parser->m_endNamespaceDeclHandler = end; in XML_SetNamespaceDeclHandler()
1687 parser->m_startNamespaceDeclHandler = start; in XML_SetStartNamespaceDeclHandler()
1694 parser->m_endNamespaceDeclHandler = end; in XML_SetEndNamespaceDeclHandler()
1702 parser->m_notStandaloneHandler = handler; in XML_SetNotStandaloneHandler()
1710 parser->m_externalEntityRefHandler = handler; in XML_SetExternalEntityRefHandler()
1719 parser->m_externalEntityRefHandlerArg = (XML_Parser)arg; in XML_SetExternalEntityRefHandlerArg()
1721 parser->m_externalEntityRefHandlerArg = parser; in XML_SetExternalEntityRefHandlerArg()
1729 parser->m_skippedEntityHandler = handler; in XML_SetSkippedEntityHandler()
1739 parser->m_unknownEncodingHandler = handler; in XML_SetUnknownEncodingHandler()
1740 parser->m_unknownEncodingHandlerData = data; in XML_SetUnknownEncodingHandler()
1748 parser->m_elementDeclHandler = eldecl; in XML_SetElementDeclHandler()
1756 parser->m_attlistDeclHandler = attdecl; in XML_SetAttlistDeclHandler()
1764 parser->m_entityDeclHandler = handler; in XML_SetEntityDeclHandler()
1771 parser->m_xmlDeclHandler = handler; in XML_SetXmlDeclHandler()
1781 …if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPE… in XML_SetParamEntityParsing()
1784 parser->m_paramEntityParsing = peParsing; in XML_SetParamEntityParsing()
1797 if (parser->m_parentParser) in XML_SetHashSalt()
1798 return XML_SetHashSalt(parser->m_parentParser, hash_salt); in XML_SetHashSalt()
1800 …if (parser->m_parsingStatus.parsing == XML_PARSING || parser->m_parsingStatus.parsing == XML_SUSPE… in XML_SetHashSalt()
1802 parser->m_hash_secret_salt = hash_salt; in XML_SetHashSalt()
1811 parser->m_errorCode = XML_ERROR_INVALID_ARGUMENT; in XML_Parse()
1814 switch (parser->m_parsingStatus.parsing) { in XML_Parse()
1816 parser->m_errorCode = XML_ERROR_SUSPENDED; in XML_Parse()
1819 parser->m_errorCode = XML_ERROR_FINISHED; in XML_Parse()
1822 if (parser->m_parentParser == NULL && !startParsing(parser)) { in XML_Parse()
1823 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_Parse()
1828 parser->m_parsingStatus.parsing = XML_PARSING; in XML_Parse()
1832 parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; in XML_Parse()
1835 parser->m_positionPtr = parser->m_bufferPtr; in XML_Parse()
1836 parser->m_parseEndPtr = parser->m_bufferEnd; in XML_Parse()
1842 …parser->m_errorCode = parser->m_processor(parser, parser->m_bufferPtr, parser->m_parseEndPtr, &par… in XML_Parse()
1844 if (parser->m_errorCode == XML_ERROR_NONE) { in XML_Parse()
1845 switch (parser->m_parsingStatus.parsing) { in XML_Parse()
1859 …XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_bufferPtr, &parser->m_posit… in XML_Parse()
1860 parser->m_positionPtr = parser->m_bufferPtr; in XML_Parse()
1865 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_Parse()
1871 parser->m_eventEndPtr = parser->m_eventPtr; in XML_Parse()
1872 parser->m_processor = errorProcessor; in XML_Parse()
1876 else if (parser->m_bufferPtr == parser->m_bufferEnd) { in XML_Parse()
1880 /* Detect overflow (a+b > MAX <==> b > MAX-a) */ in XML_Parse()
1881 if (len > ((XML_Size)-1) / 2 - parser->m_parseEndByteIndex) { in XML_Parse()
1882 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_Parse()
1883 parser->m_eventPtr = parser->m_eventEndPtr = NULL; in XML_Parse()
1884 parser->m_processor = errorProcessor; in XML_Parse()
1887 parser->m_parseEndByteIndex += len; in XML_Parse()
1888 parser->m_positionPtr = s; in XML_Parse()
1889 parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; in XML_Parse()
1891 parser->m_errorCode = parser->m_processor(parser, s, parser->m_parseEndPtr = s + len, &end); in XML_Parse()
1893 if (parser->m_errorCode != XML_ERROR_NONE) { in XML_Parse()
1894 parser->m_eventEndPtr = parser->m_eventPtr; in XML_Parse()
1895 parser->m_processor = errorProcessor; in XML_Parse()
1899 switch (parser->m_parsingStatus.parsing) { in XML_Parse()
1906 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_Parse()
1915 XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, end, &parser->m_position); in XML_Parse()
1916 nLeftOver = s + len - end; in XML_Parse()
1918 if (parser->m_buffer == NULL || nLeftOver > parser->m_bufferLim - parser->m_buffer) { in XML_Parse()
1923 temp = (char *)REALLOC(parser, parser->m_buffer, bytesToAllocate); in XML_Parse()
1926 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_Parse()
1927 parser->m_eventPtr = parser->m_eventEndPtr = NULL; in XML_Parse()
1928 parser->m_processor = errorProcessor; in XML_Parse()
1931 parser->m_buffer = temp; in XML_Parse()
1932 parser->m_bufferLim = parser->m_buffer + bytesToAllocate; in XML_Parse()
1934 memcpy(parser->m_buffer, end, nLeftOver); in XML_Parse()
1936 parser->m_bufferPtr = parser->m_buffer; in XML_Parse()
1937 parser->m_bufferEnd = parser->m_buffer + nLeftOver; in XML_Parse()
1938 parser->m_positionPtr = parser->m_bufferPtr; in XML_Parse()
1939 parser->m_parseEndPtr = parser->m_bufferEnd; in XML_Parse()
1940 parser->m_eventPtr = parser->m_bufferPtr; in XML_Parse()
1941 parser->m_eventEndPtr = parser->m_bufferPtr; in XML_Parse()
1964 switch (parser->m_parsingStatus.parsing) { in XML_ParseBuffer()
1966 parser->m_errorCode = XML_ERROR_SUSPENDED; in XML_ParseBuffer()
1969 parser->m_errorCode = XML_ERROR_FINISHED; in XML_ParseBuffer()
1972 if (parser->m_parentParser == NULL && !startParsing(parser)) { in XML_ParseBuffer()
1973 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_ParseBuffer()
1978 parser->m_parsingStatus.parsing = XML_PARSING; in XML_ParseBuffer()
1981 start = parser->m_bufferPtr; in XML_ParseBuffer()
1982 parser->m_positionPtr = start; in XML_ParseBuffer()
1983 parser->m_bufferEnd += len; in XML_ParseBuffer()
1984 parser->m_parseEndPtr = parser->m_bufferEnd; in XML_ParseBuffer()
1985 parser->m_parseEndByteIndex += len; in XML_ParseBuffer()
1986 parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal; in XML_ParseBuffer()
1988 …parser->m_errorCode = parser->m_processor(parser, start, parser->m_parseEndPtr, &parser->m_bufferP… in XML_ParseBuffer()
1990 if (parser->m_errorCode != XML_ERROR_NONE) { in XML_ParseBuffer()
1991 parser->m_eventEndPtr = parser->m_eventPtr; in XML_ParseBuffer()
1992 parser->m_processor = errorProcessor; in XML_ParseBuffer()
1996 switch (parser->m_parsingStatus.parsing) { in XML_ParseBuffer()
2003 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_ParseBuffer()
2010 …XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_bufferPtr, &parser->m_posit… in XML_ParseBuffer()
2011 parser->m_positionPtr = parser->m_bufferPtr; in XML_ParseBuffer()
2021 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2024 switch (parser->m_parsingStatus.parsing) { in XML_GetBuffer()
2026 parser->m_errorCode = XML_ERROR_SUSPENDED; in XML_GetBuffer()
2029 parser->m_errorCode = XML_ERROR_FINISHED; in XML_GetBuffer()
2034 if (len > EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferEnd)) { in XML_GetBuffer()
2040 (unsigned)EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, in XML_GetBuffer()
2041 parser->m_bufferPtr)); in XML_GetBuffer()
2043 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2047 keep = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer); in XML_GetBuffer()
2052 if (neededSize <= EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_buffer)) { in XML_GetBuffer()
2054 if (keep < EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer)) { in XML_GetBuffer()
2055 int offset = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer) - keep; in XML_GetBuffer()
2057 …memmove(parser->m_buffer, &parser->m_buffer[offset], parser->m_bufferEnd - parser->m_bufferPtr + k… in XML_GetBuffer()
2058 parser->m_bufferEnd -= offset; in XML_GetBuffer()
2059 parser->m_bufferPtr -= offset; in XML_GetBuffer()
2062 if (parser->m_buffer && parser->m_bufferPtr) { in XML_GetBuffer()
2063 memmove(parser->m_buffer, parser->m_bufferPtr, in XML_GetBuffer()
2064 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr)); in XML_GetBuffer()
2065 parser->m_bufferEnd = parser->m_buffer + in XML_GetBuffer()
2066 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr); in XML_GetBuffer()
2067 parser->m_bufferPtr = parser->m_buffer; in XML_GetBuffer()
2073 int bufferSize = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferPtr); in XML_GetBuffer()
2081 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2086 parser->m_errorCode = XML_ERROR_NO_MEMORY; in XML_GetBuffer()
2089 parser->m_bufferLim = newBuf + bufferSize; in XML_GetBuffer()
2091 if (parser->m_bufferPtr) { in XML_GetBuffer()
2092 int keep = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer); in XML_GetBuffer()
2095 memcpy(newBuf, &parser->m_bufferPtr[-keep], in XML_GetBuffer()
2096 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr) + keep); in XML_GetBuffer()
2097 FREE(parser, parser->m_buffer); in XML_GetBuffer()
2098 parser->m_buffer = newBuf; in XML_GetBuffer()
2099 parser->m_bufferEnd = parser->m_buffer + in XML_GetBuffer()
2100 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr) + keep; in XML_GetBuffer()
2101 parser->m_bufferPtr = parser->m_buffer + keep; in XML_GetBuffer()
2105 parser->m_bufferEnd = newBuf; in XML_GetBuffer()
2106 parser->m_bufferPtr = parser->m_buffer = newBuf; in XML_GetBuffer()
2109 if (parser->m_bufferPtr) { in XML_GetBuffer()
2110 memcpy(newBuf, parser->m_bufferPtr, in XML_GetBuffer()
2111 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr)); in XML_GetBuffer()
2112 FREE(parser, parser->m_buffer); in XML_GetBuffer()
2113 parser->m_bufferEnd = newBuf + in XML_GetBuffer()
2114 EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr); in XML_GetBuffer()
2118 parser->m_bufferEnd = newBuf; in XML_GetBuffer()
2120 parser->m_bufferPtr = parser->m_buffer = newBuf; in XML_GetBuffer()
2123 parser->m_eventPtr = parser->m_eventEndPtr = NULL; in XML_GetBuffer()
2124 parser->m_positionPtr = NULL; in XML_GetBuffer()
2126 return parser->m_bufferEnd; in XML_GetBuffer()
2134 switch (parser->m_parsingStatus.parsing) { in XML_StopParser()
2137 parser->m_errorCode = XML_ERROR_SUSPENDED; in XML_StopParser()
2140 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_StopParser()
2143 parser->m_errorCode = XML_ERROR_FINISHED; in XML_StopParser()
2148 if (parser->m_isParamEntity) { in XML_StopParser()
2149 parser->m_errorCode = XML_ERROR_SUSPEND_PE; in XML_StopParser()
2153 parser->m_parsingStatus.parsing = XML_SUSPENDED; in XML_StopParser()
2156 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_StopParser()
2168 if (parser->m_parsingStatus.parsing != XML_SUSPENDED) { in XML_ResumeParser()
2169 parser->m_errorCode = XML_ERROR_NOT_SUSPENDED; in XML_ResumeParser()
2172 parser->m_parsingStatus.parsing = XML_PARSING; in XML_ResumeParser()
2174 …parser->m_errorCode = parser->m_processor(parser, parser->m_bufferPtr, parser->m_parseEndPtr, &par… in XML_ResumeParser()
2176 if (parser->m_errorCode != XML_ERROR_NONE) { in XML_ResumeParser()
2177 parser->m_eventEndPtr = parser->m_eventPtr; in XML_ResumeParser()
2178 parser->m_processor = errorProcessor; in XML_ResumeParser()
2182 switch (parser->m_parsingStatus.parsing) { in XML_ResumeParser()
2188 if (parser->m_parsingStatus.finalBuffer) { in XML_ResumeParser()
2189 parser->m_parsingStatus.parsing = XML_FINISHED; in XML_ResumeParser()
2196 …XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_bufferPtr, &parser->m_posit… in XML_ResumeParser()
2197 parser->m_positionPtr = parser->m_bufferPtr; in XML_ResumeParser()
2207 *status = parser->m_parsingStatus; in XML_GetParsingStatus()
2215 return parser->m_errorCode; in XML_GetErrorCode()
2222 return -1; in XML_GetCurrentByteIndex()
2223 if (parser->m_eventPtr) in XML_GetCurrentByteIndex()
2224 return (XML_Index)(parser->m_parseEndByteIndex - (parser->m_parseEndPtr - parser->m_eventPtr)); in XML_GetCurrentByteIndex()
2225 return -1; in XML_GetCurrentByteIndex()
2233 if (parser->m_eventEndPtr && parser->m_eventPtr) in XML_GetCurrentByteCount()
2234 return (int)(parser->m_eventEndPtr - parser->m_eventPtr); in XML_GetCurrentByteCount()
2244 if (parser->m_eventPtr && parser->m_buffer) { in XML_GetInputContext()
2246 *offset = (int)(parser->m_eventPtr - parser->m_buffer); in XML_GetInputContext()
2248 *size = (int)(parser->m_bufferEnd - parser->m_buffer); in XML_GetInputContext()
2249 return parser->m_buffer; in XML_GetInputContext()
2264 if (parser->m_eventPtr && parser->m_eventPtr >= parser->m_positionPtr) { in XML_GetCurrentLineNumber()
2265 …XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_eventPtr, &parser->m_positi… in XML_GetCurrentLineNumber()
2266 parser->m_positionPtr = parser->m_eventPtr; in XML_GetCurrentLineNumber()
2268 return parser->m_position.lineNumber + 1; in XML_GetCurrentLineNumber()
2276 if (parser->m_eventPtr && parser->m_eventPtr >= parser->m_positionPtr) { in XML_GetCurrentColumnNumber()
2277 …XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, parser->m_eventPtr, &parser->m_positi… in XML_GetCurrentColumnNumber()
2278 parser->m_positionPtr = parser->m_eventPtr; in XML_GetCurrentColumnNumber()
2280 return parser->m_position.columnNumber; in XML_GetCurrentColumnNumber()
2318 if (parser->m_defaultHandler) { in XML_DefaultCurrent()
2319 if (parser->m_openInternalEntities) in XML_DefaultCurrent()
2321 parser->m_internalEncoding, in XML_DefaultCurrent()
2322 parser->m_openInternalEntities->internalEventPtr, in XML_DefaultCurrent()
2323 parser->m_openInternalEntities->internalEventEndPtr); in XML_DefaultCurrent()
2325 reportDefault(parser, parser->m_encoding, parser->m_eventPtr, parser->m_eventEndPtr); in XML_DefaultCurrent()
2342 return XML_L("not well-formed (invalid token)"); in XML_ErrorString()
2380 return XML_L("unexpected parser state - please send a bug report"); in XML_ErrorString()
2396 return XML_L("XML declaration not well-formed"); in XML_ErrorString()
2398 return XML_L("text declaration not well-formed"); in XML_ErrorString()
2428 /* V1 is used to string-ize the version number. However, it would in XML_ExpatVersion()
2429 string-ize the actual version macro *names* unless we get them in XML_ExpatVersion()
2496 /* Initially tag->rawName always points into the parse buffer;
2498 processed, and not yet closed, we need to store tag->rawName in a more
2504 TAG *tag = parser->m_tagStack; in storeRawNames()
2507 int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1); in storeRawNames()
2508 char *rawNameBuf = tag->buf + nameLen; in storeRawNames()
2514 if (tag->rawName == rawNameBuf) in storeRawNames()
2516 /* For re-use purposes we need to ensure that the in storeRawNames()
2517 size of tag->buf is a multiple of sizeof(XML_Char). in storeRawNames()
2519 bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); in storeRawNames()
2520 if (bufSize > tag->bufEnd - tag->buf) { in storeRawNames()
2521 char *temp = (char *)REALLOC(parser, tag->buf, bufSize); in storeRawNames()
2524 /* if tag->name.str points to tag->buf (only when namespace in storeRawNames()
2527 if (tag->name.str == (XML_Char *)tag->buf) in storeRawNames()
2528 tag->name.str = (XML_Char *)temp; in storeRawNames()
2529 /* if tag->name.localPart is set (when namespace processing is on) in storeRawNames()
2530 then update it as well, since it will always point into tag->buf in storeRawNames()
2532 if (tag->name.localPart) in storeRawNames()
2533 tag->name.localPart = (XML_Char *)temp + (tag->name.localPart - in storeRawNames()
2534 (XML_Char *)tag->buf); in storeRawNames()
2535 tag->buf = temp; in storeRawNames()
2536 tag->bufEnd = temp + bufSize; in storeRawNames()
2539 memcpy(rawNameBuf, tag->rawName, tag->rawNameLength); in storeRawNames()
2540 tag->rawName = rawNameBuf; in storeRawNames()
2541 tag = tag->parent; in storeRawNames()
2552 enum XML_Error result = doContent(parser, 0, parser->m_encoding, start, end, in contentProcessor()
2553 endPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer); in contentProcessor()
2570 parser->m_processor = externalEntityInitProcessor2; in externalEntityInitProcessor()
2581 int tok = XmlContentTok(parser->m_encoding, start, end, &next); in externalEntityInitProcessor2()
2587 declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent. in externalEntityInitProcessor2()
2589 if (next == end && !parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor2()
2596 if (!parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor2()
2600 parser->m_eventPtr = start; in externalEntityInitProcessor2()
2603 if (!parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor2()
2607 parser->m_eventPtr = start; in externalEntityInitProcessor2()
2610 parser->m_processor = externalEntityInitProcessor3; in externalEntityInitProcessor2()
2622 parser->m_eventPtr = start; in externalEntityInitProcessor3()
2623 tok = XmlContentTok(parser->m_encoding, start, end, &next); in externalEntityInitProcessor3()
2624 parser->m_eventEndPtr = next; in externalEntityInitProcessor3()
2633 switch (parser->m_parsingStatus.parsing) { in externalEntityInitProcessor3()
2645 if (!parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor3()
2651 if (!parser->m_parsingStatus.finalBuffer) { in externalEntityInitProcessor3()
2657 parser->m_processor = externalEntityContentProcessor; in externalEntityInitProcessor3()
2658 parser->m_tagLevel = 1; in externalEntityInitProcessor3()
2668 enum XML_Error result = doContent(parser, 1, parser->m_encoding, start, end, in externalEntityContentProcessor()
2669 endPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer); in externalEntityContentProcessor()
2687 DTD * const dtd = parser->m_dtd; in doContent()
2691 if (enc == parser->m_encoding) { in doContent()
2692 eventPP = &parser->m_eventPtr; in doContent()
2693 eventEndPP = &parser->m_eventEndPtr; in doContent()
2696 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in doContent()
2697 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in doContent()
2712 if (parser->m_characterDataHandler) { in doContent()
2714 parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); in doContent()
2716 else if (parser->m_defaultHandler) in doContent()
2723 if (parser->m_tagLevel != startTagLevel) in doContent()
2733 if (parser->m_tagLevel != startTagLevel) in doContent()
2759 s + enc->minBytesPerChar, in doContent()
2760 next - enc->minBytesPerChar); in doContent()
2762 if (parser->m_characterDataHandler) in doContent()
2763 parser->m_characterDataHandler(parser->m_handlerArg, &ch, 1); in doContent()
2764 else if (parser->m_defaultHandler) in doContent()
2768 name = poolStoreString(&dtd->pool, enc, in doContent()
2769 s + enc->minBytesPerChar, in doContent()
2770 next - enc->minBytesPerChar); in doContent()
2773 entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0); in doContent()
2774 poolDiscard(&dtd->pool); in doContent()
2779 if (!dtd->hasParamEntityRefs || dtd->standalone) { in doContent()
2782 else if (!entity->is_internal) in doContent()
2786 if (parser->m_skippedEntityHandler) in doContent()
2787 parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); in doContent()
2788 else if (parser->m_defaultHandler) in doContent()
2792 if (entity->open) in doContent()
2794 if (entity->notation) in doContent()
2796 if (entity->textPtr) { in doContent()
2798 if (!parser->m_defaultExpandInternalEntities) { in doContent()
2799 if (parser->m_skippedEntityHandler) in doContent()
2800 parser->m_skippedEntityHandler(parser->m_handlerArg, entity->name, 0); in doContent()
2801 else if (parser->m_defaultHandler) in doContent()
2809 else if (parser->m_externalEntityRefHandler) { in doContent()
2811 entity->open = XML_TRUE; in doContent()
2813 entity->open = XML_FALSE; in doContent()
2816 if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg, in doContent()
2818 entity->base, in doContent()
2819 entity->systemId, in doContent()
2820 entity->publicId)) in doContent()
2822 poolDiscard(&parser->m_tempPool); in doContent()
2824 else if (parser->m_defaultHandler) in doContent()
2835 if (parser->m_freeTagList) { in doContent()
2836 tag = parser->m_freeTagList; in doContent()
2837 parser->m_freeTagList = parser->m_freeTagList->parent; in doContent()
2843 tag->buf = (char *)MALLOC(parser, INIT_TAG_BUF_SIZE); in doContent()
2844 if (!tag->buf) { in doContent()
2848 tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; in doContent()
2850 tag->bindings = NULL; in doContent()
2851 tag->parent = parser->m_tagStack; in doContent()
2852 parser->m_tagStack = tag; in doContent()
2853 tag->name.localPart = NULL; in doContent()
2854 tag->name.prefix = NULL; in doContent()
2855 tag->rawName = s + enc->minBytesPerChar; in doContent()
2856 tag->rawNameLength = XmlNameLength(enc, tag->rawName); in doContent()
2857 ++parser->m_tagLevel; in doContent()
2859 const char *rawNameEnd = tag->rawName + tag->rawNameLength; in doContent()
2860 const char *fromPtr = tag->rawName; in doContent()
2861 toPtr = (XML_Char *)tag->buf; in doContent()
2867 (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1); in doContent()
2868 convLen = (int)(toPtr - (XML_Char *)tag->buf); in doContent()
2870 tag->name.strLen = convLen; in doContent()
2873 bufSize = (int)(tag->bufEnd - tag->buf) << 1; in doContent()
2875 char *temp = (char *)REALLOC(parser, tag->buf, bufSize); in doContent()
2878 tag->buf = temp; in doContent()
2879 tag->bufEnd = temp + bufSize; in doContent()
2884 tag->name.str = (XML_Char *)tag->buf; in doContent()
2886 result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); in doContent()
2889 if (parser->m_startElementHandler) in doContent()
2890 parser->m_startElementHandler(parser->m_handlerArg, tag->name.str, in doContent()
2891 (const XML_Char **)parser->m_atts); in doContent()
2892 else if (parser->m_defaultHandler) in doContent()
2894 poolClear(&parser->m_tempPool); in doContent()
2901 const char *rawName = s + enc->minBytesPerChar; in doContent()
2906 name.str = poolStoreString(&parser->m_tempPool, enc, rawName, in doContent()
2910 poolFinish(&parser->m_tempPool); in doContent()
2916 poolFinish(&parser->m_tempPool); in doContent()
2917 if (parser->m_startElementHandler) { in doContent()
2918 … parser->m_startElementHandler(parser->m_handlerArg, name.str, (const XML_Char **)parser->m_atts); in doContent()
2921 if (parser->m_endElementHandler) { in doContent()
2922 if (parser->m_startElementHandler) in doContent()
2924 parser->m_endElementHandler(parser->m_handlerArg, name.str); in doContent()
2927 if (noElmHandlers && parser->m_defaultHandler) in doContent()
2929 poolClear(&parser->m_tempPool); in doContent()
2932 if ((parser->m_tagLevel == 0) && (parser->m_parsingStatus.parsing != XML_FINISHED)) { in doContent()
2933 if (parser->m_parsingStatus.parsing == XML_SUSPENDED) in doContent()
2934 parser->m_processor = epilogProcessor; in doContent()
2940 if (parser->m_tagLevel == startTagLevel) in doContent()
2945 TAG *tag = parser->m_tagStack; in doContent()
2946 parser->m_tagStack = tag->parent; in doContent()
2947 tag->parent = parser->m_freeTagList; in doContent()
2948 parser->m_freeTagList = tag; in doContent()
2949 rawName = s + enc->minBytesPerChar*2; in doContent()
2951 if (len != tag->rawNameLength in doContent()
2952 || memcmp(tag->rawName, rawName, len) != 0) { in doContent()
2956 --parser->m_tagLevel; in doContent()
2957 if (parser->m_endElementHandler) { in doContent()
2961 localPart = tag->name.localPart; in doContent()
2962 if (parser->m_ns && localPart) { in doContent()
2964 tag->name.str, since this points to the binding->uri in doContent()
2965 buffer which gets re-used; so we have to add them again in doContent()
2967 uri = (XML_Char *)tag->name.str + tag->name.uriLen; in doContent()
2968 /* don't need to check for space - already done in storeAtts() */ in doContent()
2970 prefix = (XML_Char *)tag->name.prefix; in doContent()
2971 if (parser->m_ns_triplets && prefix) { in doContent()
2972 *uri++ = parser->m_namespaceSeparator; in doContent()
2977 parser->m_endElementHandler(parser->m_handlerArg, tag->name.str); in doContent()
2979 else if (parser->m_defaultHandler) in doContent()
2981 while (tag->bindings) { in doContent()
2982 BINDING *b = tag->bindings; in doContent()
2983 if (parser->m_endNamespaceDeclHandler) in doContent()
2984 parser->m_endNamespaceDeclHandler(parser->m_handlerArg, b->prefix->name); in doContent()
2985 tag->bindings = tag->bindings->nextTagBinding; in doContent()
2986 b->nextTagBinding = parser->m_freeBindingList; in doContent()
2987 parser->m_freeBindingList = b; in doContent()
2988 b->prefix->binding = b->prevPrefixBinding; in doContent()
2990 if (parser->m_tagLevel == 0) in doContent()
2999 if (parser->m_characterDataHandler) { in doContent()
3001 parser->m_characterDataHandler(parser->m_handlerArg, buf, XmlEncode(n, (ICHAR *)buf)); in doContent()
3003 else if (parser->m_defaultHandler) in doContent()
3010 if (parser->m_characterDataHandler) { in doContent()
3012 parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); in doContent()
3014 else if (parser->m_defaultHandler) in doContent()
3020 if (parser->m_startCdataSectionHandler) in doContent()
3021 parser->m_startCdataSectionHandler(parser->m_handlerArg); in doContent()
3035 else if (parser->m_characterDataHandler) in doContent()
3036 parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, 0); in doContent()
3038 else if (parser->m_defaultHandler) in doContent()
3044 parser->m_processor = cdataSectionProcessor; in doContent()
3054 if (parser->m_characterDataHandler) { in doContent()
3056 ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; in doContent()
3057 XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd); in doContent()
3058 parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, in doContent()
3059 (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); in doContent()
3062 parser->m_characterDataHandler(parser->m_handlerArg, in doContent()
3064 (int)((XML_Char *)end - (XML_Char *)s)); in doContent()
3066 else if (parser->m_defaultHandler) in doContent()
3075 if (parser->m_tagLevel != startTagLevel) { in doContent()
3083 XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler; in doContent()
3087 ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; in doContent()
3088 …ML_Convert_Result convert_res = XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd); in doContent()
3090 charDataHandler(parser->m_handlerArg, parser->m_dataBuf, in doContent()
3091 (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); in doContent()
3098 charDataHandler(parser->m_handlerArg, in doContent()
3100 (int)((XML_Char *)next - (XML_Char *)s)); in doContent()
3102 else if (parser->m_defaultHandler) in doContent()
3122 if (parser->m_defaultHandler) in doContent()
3128 switch (parser->m_parsingStatus.parsing) { in doContent()
3153 if (parser->m_endNamespaceDeclHandler) in freeBindings()
3154 parser->m_endNamespaceDeclHandler(parser->m_handlerArg, b->prefix->name); in freeBindings()
3156 bindings = bindings->nextTagBinding; in freeBindings()
3157 b->nextTagBinding = parser->m_freeBindingList; in freeBindings()
3158 parser->m_freeBindingList = b; in freeBindings()
3159 b->prefix->binding = b->prevPrefixBinding; in freeBindings()
3163 /* Precondition: all arguments must be non-NULL;
3165 - normalize attributes
3166 - check attributes for well-formedness
3167 - generate namespace aware attribute names (URI, prefix)
3168 - build list of attributes for startElementHandler
3169 - default attributes
3170 - process namespace declarations (check and report them)
3171 - generate namespace aware element name (URI, prefix)
3178 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in storeAtts()
3192 elementType = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, tagNamePtr->str,0); in storeAtts()
3194 const XML_Char *name = poolCopyString(&dtd->pool, tagNamePtr->str); in storeAtts()
3197 elementType = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name, in storeAtts()
3201 if (parser->m_ns && !setElementTypePrefix(parser, elementType)) in storeAtts()
3204 nDefaultAtts = elementType->nDefaultAtts; in storeAtts()
3207 n = XmlGetAttributes(enc, attStr, parser->m_attsSize, parser->m_atts); in storeAtts()
3208 if (n + nDefaultAtts > parser->m_attsSize) { in storeAtts()
3209 int oldAttsSize = parser->m_attsSize; in storeAtts()
3214 parser->m_attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; in storeAtts()
3215 …temp = (ATTRIBUTE *)REALLOC(parser, (void *)parser->m_atts, parser->m_attsSize * sizeof(ATTRIBUTE)… in storeAtts()
3217 parser->m_attsSize = oldAttsSize; in storeAtts()
3220 parser->m_atts = temp; in storeAtts()
3222 …temp2 = (XML_AttrInfo *)REALLOC(parser, (void *)parser->m_attInfo, parser->m_attsSize * sizeof(XML… in storeAtts()
3224 parser->m_attsSize = oldAttsSize; in storeAtts()
3227 parser->m_attInfo = temp2; in storeAtts()
3230 XmlGetAttributes(enc, attStr, n, parser->m_atts); in storeAtts()
3233 appAtts = (const XML_Char **)parser->m_atts; in storeAtts()
3235 ATTRIBUTE *currAtt = &parser->m_atts[i]; in storeAtts()
3237 XML_AttrInfo *currAttInfo = &parser->m_attInfo[i]; in storeAtts()
3240 ATTRIBUTE_ID *attId = getAttributeId(parser, enc, currAtt->name, in storeAtts()
3241 currAtt->name in storeAtts()
3242 + XmlNameLength(enc, currAtt->name)); in storeAtts()
3246 currAttInfo->nameStart = parser->m_parseEndByteIndex - (parser->m_parseEndPtr - currAtt->name); in storeAtts()
3247 currAttInfo->nameEnd = currAttInfo->nameStart + in storeAtts()
3248 XmlNameLength(enc, currAtt->name); in storeAtts()
3249 currAttInfo->valueStart = parser->m_parseEndByteIndex - in storeAtts()
3250 (parser->m_parseEndPtr - currAtt->valuePtr); in storeAtts()
3251 … currAttInfo->valueEnd = parser->m_parseEndByteIndex - (parser->m_parseEndPtr - currAtt->valueEnd); in storeAtts()
3257 if ((attId->name)[-1]) { in storeAtts()
3258 if (enc == parser->m_encoding) in storeAtts()
3259 parser->m_eventPtr = parser->m_atts[i].name; in storeAtts()
3262 (attId->name)[-1] = 1; in storeAtts()
3263 appAtts[attIndex++] = attId->name; in storeAtts()
3264 if (!parser->m_atts[i].normalized) { in storeAtts()
3269 if (attId->maybeTokenized) { in storeAtts()
3272 if (attId == elementType->defaultAtts[j].id) { in storeAtts()
3273 isCdata = elementType->defaultAtts[j].isCdata; in storeAtts()
3281 parser->m_atts[i].valuePtr, parser->m_atts[i].valueEnd, in storeAtts()
3282 &parser->m_tempPool); in storeAtts()
3285 appAtts[attIndex] = poolStart(&parser->m_tempPool); in storeAtts()
3286 poolFinish(&parser->m_tempPool); in storeAtts()
3290 appAtts[attIndex] = poolStoreString(&parser->m_tempPool, enc, parser->m_atts[i].valuePtr, in storeAtts()
3291 parser->m_atts[i].valueEnd); in storeAtts()
3294 poolFinish(&parser->m_tempPool); in storeAtts()
3297 if (attId->prefix) { in storeAtts()
3298 if (attId->xmlns) { in storeAtts()
3300 enum XML_Error result = addBinding(parser, attId->prefix, attId, in storeAtts()
3304 --attIndex; in storeAtts()
3310 (attId->name)[-1] = 2; in storeAtts()
3317 /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */ in storeAtts()
3318 parser->m_nSpecifiedAtts = attIndex; in storeAtts()
3319 if (elementType->idAtt && (elementType->idAtt->name)[-1]) { in storeAtts()
3321 if (appAtts[i] == elementType->idAtt->name) { in storeAtts()
3322 parser->m_idAttIndex = i; in storeAtts()
3327 parser->m_idAttIndex = -1; in storeAtts()
3331 const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + i; in storeAtts()
3332 if (!(da->id->name)[-1] && da->value) { in storeAtts()
3333 if (da->id->prefix) { in storeAtts()
3334 if (da->id->xmlns) { in storeAtts()
3335 enum XML_Error result = addBinding(parser, da->id->prefix, da->id, in storeAtts()
3336 da->value, bindingsPtr); in storeAtts()
3341 (da->id->name)[-1] = 2; in storeAtts()
3343 appAtts[attIndex++] = da->id->name; in storeAtts()
3344 appAtts[attIndex++] = da->value; in storeAtts()
3348 (da->id->name)[-1] = 1; in storeAtts()
3349 appAtts[attIndex++] = da->id->name; in storeAtts()
3350 appAtts[attIndex++] = da->value; in storeAtts()
3361 unsigned long version = parser->m_nsAttsVersion; in storeAtts()
3362 int nsAttsSize = (int)1 << parser->m_nsAttsPower; in storeAtts()
3363 unsigned char oldNsAttsPower = parser->m_nsAttsPower; in storeAtts()
3365 if ((nPrefixes << 1) >> parser->m_nsAttsPower) { /* true for m_nsAttsPower = 0 */ in storeAtts()
3368 while (nPrefixes >> parser->m_nsAttsPower++); in storeAtts()
3369 if (parser->m_nsAttsPower < 3) in storeAtts()
3370 parser->m_nsAttsPower = 3; in storeAtts()
3371 nsAttsSize = (int)1 << parser->m_nsAttsPower; in storeAtts()
3372 temp = (NS_ATT *)REALLOC(parser, parser->m_nsAtts, nsAttsSize * sizeof(NS_ATT)); in storeAtts()
3375 parser->m_nsAttsPower = oldNsAttsPower; in storeAtts()
3378 parser->m_nsAtts = temp; in storeAtts()
3379 version = 0; /* force re-initialization of m_nsAtts hash table */ in storeAtts()
3385 parser->m_nsAtts[--j].version = version; in storeAtts()
3387 parser->m_nsAttsVersion = --version; in storeAtts()
3392 if (s[-1] == 2) { /* prefixed */ in storeAtts()
3402 ((XML_Char *)s)[-1] = 0; /* clear flag */ in storeAtts()
3403 id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, s, 0); in storeAtts()
3404 if (!id || !id->prefix) { in storeAtts()
3421 b = id->prefix->binding; in storeAtts()
3425 for (j = 0; j < b->uriLen; j++) { in storeAtts()
3426 const XML_Char c = b->uri[j]; in storeAtts()
3427 if (!poolAppendChar(&parser->m_tempPool, c)) in storeAtts()
3431 sip24_update(&sip_state, b->uri, b->uriLen * sizeof(XML_Char)); in storeAtts()
3439 if (!poolAppendChar(&parser->m_tempPool, *s)) in storeAtts()
3449 unsigned long mask = nsAttsSize - 1; in storeAtts()
3451 while (parser->m_nsAtts[j].version == version) { in storeAtts()
3453 if (uriHash == parser->m_nsAtts[j].hash) { in storeAtts()
3454 const XML_Char *s1 = poolStart(&parser->m_tempPool); in storeAtts()
3455 const XML_Char *s2 = parser->m_nsAtts[j].uriName; in storeAtts()
3462 step = PROBE_STEP(uriHash, mask, parser->m_nsAttsPower); in storeAtts()
3463 j < step ? (j += nsAttsSize - step) : (j -= step); in storeAtts()
3467 if (parser->m_ns_triplets) { /* append namespace separator and prefix */ in storeAtts()
3468 parser->m_tempPool.ptr[-1] = parser->m_namespaceSeparator; in storeAtts()
3469 s = b->prefix->name; in storeAtts()
3471 if (!poolAppendChar(&parser->m_tempPool, *s)) in storeAtts()
3477 s = poolStart(&parser->m_tempPool); in storeAtts()
3478 poolFinish(&parser->m_tempPool); in storeAtts()
3482 parser->m_nsAtts[j].version = version; in storeAtts()
3483 parser->m_nsAtts[j].hash = uriHash; in storeAtts()
3484 parser->m_nsAtts[j].uriName = s; in storeAtts()
3486 if (!--nPrefixes) { in storeAtts()
3492 ((XML_Char *)s)[-1] = 0; /* clear flag */ in storeAtts()
3497 ((XML_Char *)(appAtts[i]))[-1] = 0; in storeAtts()
3498 for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) in storeAtts()
3499 binding->attId->name[-1] = 0; in storeAtts()
3501 if (!parser->m_ns) in storeAtts()
3505 if (elementType->prefix) { in storeAtts()
3506 binding = elementType->prefix->binding; in storeAtts()
3509 localPart = tagNamePtr->str; in storeAtts()
3513 else if (dtd->defaultPrefix.binding) { in storeAtts()
3514 binding = dtd->defaultPrefix.binding; in storeAtts()
3515 localPart = tagNamePtr->str; in storeAtts()
3520 if (parser->m_ns_triplets && binding->prefix->name) { in storeAtts()
3521 for (; binding->prefix->name[prefixLen++];) in storeAtts()
3524 tagNamePtr->localPart = localPart; in storeAtts()
3525 tagNamePtr->uriLen = binding->uriLen; in storeAtts()
3526 tagNamePtr->prefix = binding->prefix->name; in storeAtts()
3527 tagNamePtr->prefixLen = prefixLen; in storeAtts()
3530 n = i + binding->uriLen + prefixLen; in storeAtts()
3531 if (n > binding->uriAlloc) { in storeAtts()
3536 binding->uriAlloc = n + EXPAND_SPARE; in storeAtts()
3537 memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); in storeAtts()
3538 for (p = parser->m_tagStack; p; p = p->parent) in storeAtts()
3539 if (p->name.str == binding->uri) in storeAtts()
3540 p->name.str = uri; in storeAtts()
3541 FREE(parser, binding->uri); in storeAtts()
3542 binding->uri = uri; in storeAtts()
3545 uri = binding->uri + binding->uriLen; in storeAtts()
3549 uri += i - 1; in storeAtts()
3550 *uri = parser->m_namespaceSeparator; /* replace null terminator */ in storeAtts()
3551 memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char)); in storeAtts()
3553 tagNamePtr->str = binding->uri; in storeAtts()
3557 /* addBinding() overwrites the value of prefix->binding without checking.
3573 (int)sizeof(xmlNamespace)/sizeof(XML_Char) - 1; in addBinding()
3582 (int)sizeof(xmlnsNamespace)/sizeof(XML_Char) - 1; in addBinding()
3592 if (*uri == XML_T('\0') && prefix->name) in addBinding()
3595 if (prefix->name in addBinding()
3596 && prefix->name[0] == XML_T(ASCII_x) in addBinding()
3597 && prefix->name[1] == XML_T(ASCII_m) in addBinding()
3598 && prefix->name[2] == XML_T(ASCII_l)) { in addBinding()
3601 if (prefix->name[3] == XML_T(ASCII_n) in addBinding()
3602 && prefix->name[4] == XML_T(ASCII_s) in addBinding()
3603 && prefix->name[5] == XML_T('\0')) in addBinding()
3606 if (prefix->name[3] == XML_T('\0')) in addBinding()
3628 if (parser->m_namespaceSeparator) in addBinding()
3630 if (parser->m_freeBindingList) { in addBinding()
3631 b = parser->m_freeBindingList; in addBinding()
3632 if (len > b->uriAlloc) { in addBinding()
3633 XML_Char *temp = (XML_Char *)REALLOC(parser, b->uri, in addBinding()
3637 b->uri = temp; in addBinding()
3638 b->uriAlloc = len + EXPAND_SPARE; in addBinding()
3640 parser->m_freeBindingList = b->nextTagBinding; in addBinding()
3646 b->uri = (XML_Char *)MALLOC(parser, sizeof(XML_Char) * (len + EXPAND_SPARE)); in addBinding()
3647 if (!b->uri) { in addBinding()
3651 b->uriAlloc = len + EXPAND_SPARE; in addBinding()
3653 b->uriLen = len; in addBinding()
3654 memcpy(b->uri, uri, len * sizeof(XML_Char)); in addBinding()
3655 if (parser->m_namespaceSeparator) in addBinding()
3656 b->uri[len - 1] = parser->m_namespaceSeparator; in addBinding()
3657 b->prefix = prefix; in addBinding()
3658 b->attId = attId; in addBinding()
3659 b->prevPrefixBinding = prefix->binding; in addBinding()
3661 if (*uri == XML_T('\0') && prefix == &parser->m_dtd->defaultPrefix) in addBinding()
3662 prefix->binding = NULL; in addBinding()
3664 prefix->binding = b; in addBinding()
3665 b->nextTagBinding = *bindingsPtr; in addBinding()
3668 if (attId && parser->m_startNamespaceDeclHandler) in addBinding()
3669 parser->m_startNamespaceDeclHandler(parser->m_handlerArg, prefix->name, in addBinding()
3670 prefix->binding ? uri : 0); in addBinding()
3683 enum XML_Error result = doCdataSection(parser, parser->m_encoding, &start, end, in cdataSectionProcessor()
3684 endPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer); in cdataSectionProcessor()
3688 if (parser->m_parentParser) { /* we are parsing an external entity */ in cdataSectionProcessor()
3689 parser->m_processor = externalEntityContentProcessor; in cdataSectionProcessor()
3693 parser->m_processor = contentProcessor; in cdataSectionProcessor()
3700 /* startPtr gets set to non-null if the section is closed, and to null if
3714 if (enc == parser->m_encoding) { in doCdataSection()
3715 eventPP = &parser->m_eventPtr; in doCdataSection()
3717 eventEndPP = &parser->m_eventEndPtr; in doCdataSection()
3720 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in doCdataSection()
3721 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in doCdataSection()
3732 if (parser->m_endCdataSectionHandler) in doCdataSection()
3733 parser->m_endCdataSectionHandler(parser->m_handlerArg); in doCdataSection()
3736 else if (parser->m_characterDataHandler) in doCdataSection()
3737 parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf, 0); in doCdataSection()
3739 else if (parser->m_defaultHandler) in doCdataSection()
3743 if (parser->m_parsingStatus.parsing == XML_FINISHED) in doCdataSection()
3748 if (parser->m_characterDataHandler) { in doCdataSection()
3750 parser->m_characterDataHandler(parser->m_handlerArg, &c, 1); in doCdataSection()
3752 else if (parser->m_defaultHandler) in doCdataSection()
3757 XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler; in doCdataSection()
3761 ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; in doCdataSection()
3762 …ML_Convert_Result convert_res = XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd); in doCdataSection()
3764 charDataHandler(parser->m_handlerArg, parser->m_dataBuf, in doCdataSection()
3765 (int)(dataPtr - (ICHAR *)parser->m_dataBuf)); in doCdataSection()
3772 charDataHandler(parser->m_handlerArg, in doCdataSection()
3774 (int)((XML_Char *)next - (XML_Char *)s)); in doCdataSection()
3776 else if (parser->m_defaultHandler) in doCdataSection()
3810 switch (parser->m_parsingStatus.parsing) { in doCdataSection()
3833 enum XML_Error result = doIgnoreSection(parser, parser->m_encoding, &start, end, in ignoreSectionProcessor()
3834 endPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer); in ignoreSectionProcessor()
3838 parser->m_processor = prologProcessor; in ignoreSectionProcessor()
3844 /* startPtr gets set to non-null is the section is closed, and to null
3860 if (enc == parser->m_encoding) { in doIgnoreSection()
3861 eventPP = &parser->m_eventPtr; in doIgnoreSection()
3863 eventEndPP = &parser->m_eventEndPtr; in doIgnoreSection()
3877 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in doIgnoreSection()
3878 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in doIgnoreSection()
3887 if (parser->m_defaultHandler) in doIgnoreSection()
3891 if (parser->m_parsingStatus.parsing == XML_FINISHED) in doIgnoreSection()
3935 if (!parser->m_protocolEncodingName) in initializeEncoding()
3939 for (i = 0; parser->m_protocolEncodingName[i]; i++) { in initializeEncoding()
3940 if (i == sizeof(encodingBuf) - 1 in initializeEncoding()
3941 || (parser->m_protocolEncodingName[i] & ~0x7f) != 0) { in initializeEncoding()
3945 encodingBuf[i] = (char)parser->m_protocolEncodingName[i]; in initializeEncoding()
3951 s = parser->m_protocolEncodingName; in initializeEncoding()
3953 …if ((parser->m_ns ? XmlInitEncodingNS : XmlInitEncoding)(&parser->m_initEncoding, &parser->m_encod… in initializeEncoding()
3955 return handleUnknownEncoding(parser, parser->m_protocolEncodingName); in initializeEncoding()
3968 int standalone = -1; in processXmlDecl()
3969 if (!(parser->m_ns in processXmlDecl()
3972 parser->m_encoding, in processXmlDecl()
3975 &parser->m_eventPtr, in processXmlDecl()
3987 parser->m_dtd->standalone = XML_TRUE; in processXmlDecl()
3989 if (parser->m_paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) in processXmlDecl()
3990 parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; in processXmlDecl()
3993 if (parser->m_xmlDeclHandler) { in processXmlDecl()
3995 storedEncName = poolStoreString(&parser->m_temp2Pool, in processXmlDecl()
3996 parser->m_encoding, in processXmlDecl()
3999 + XmlNameLength(parser->m_encoding, encodingName)); in processXmlDecl()
4002 poolFinish(&parser->m_temp2Pool); in processXmlDecl()
4005 storedversion = poolStoreString(&parser->m_temp2Pool, in processXmlDecl()
4006 parser->m_encoding, in processXmlDecl()
4008 versionend - parser->m_encoding->minBytesPerChar); in processXmlDecl()
4012 parser->m_xmlDeclHandler(parser->m_handlerArg, storedversion, storedEncName, standalone); in processXmlDecl()
4014 else if (parser->m_defaultHandler) in processXmlDecl()
4015 reportDefault(parser, parser->m_encoding, s, next); in processXmlDecl()
4016 if (parser->m_protocolEncodingName == NULL) { in processXmlDecl()
4021 * this is UTF-16, is it the same endianness? in processXmlDecl()
4023 if (newEncoding->minBytesPerChar != parser->m_encoding->minBytesPerChar in processXmlDecl()
4024 || (newEncoding->minBytesPerChar == 2 && in processXmlDecl()
4025 newEncoding != parser->m_encoding)) { in processXmlDecl()
4026 parser->m_eventPtr = encodingName; in processXmlDecl()
4029 parser->m_encoding = newEncoding; in processXmlDecl()
4035 &parser->m_temp2Pool, parser->m_encoding, encodingName, in processXmlDecl()
4036 encodingName + XmlNameLength(parser->m_encoding, encodingName)); in processXmlDecl()
4041 poolClear(&parser->m_temp2Pool); in processXmlDecl()
4043 parser->m_eventPtr = encodingName; in processXmlDecl()
4049 poolClear(&parser->m_temp2Pool); in processXmlDecl()
4057 if (parser->m_unknownEncodingHandler) { in handleUnknownEncoding()
4061 info.map[i] = -1; in handleUnknownEncoding()
4065 if (parser->m_unknownEncodingHandler(parser->m_unknownEncodingHandlerData, encodingName, in handleUnknownEncoding()
4068 parser->m_unknownEncodingMem = MALLOC(parser, XmlSizeOfUnknownEncoding()); in handleUnknownEncoding()
4069 if (!parser->m_unknownEncodingMem) { in handleUnknownEncoding()
4074 enc = (parser->m_ns in handleUnknownEncoding()
4076 : XmlInitUnknownEncoding)(parser->m_unknownEncodingMem, in handleUnknownEncoding()
4081 parser->m_unknownEncodingData = info.data; in handleUnknownEncoding()
4082 parser->m_unknownEncodingRelease = info.release; in handleUnknownEncoding()
4083 parser->m_encoding = enc; in handleUnknownEncoding()
4102 parser->m_processor = prologProcessor; in prologInitProcessor()
4120 parser->m_dtd->paramEntityRead = XML_TRUE; in externalParEntInitProcessor()
4122 if (parser->m_prologState.inEntityValue) { in externalParEntInitProcessor()
4123 parser->m_processor = entityValueInitProcessor; in externalParEntInitProcessor()
4127 parser->m_processor = externalParEntProcessor; in externalParEntInitProcessor()
4141 parser->m_eventPtr = start; in entityValueInitProcessor()
4144 tok = XmlPrologTok(parser->m_encoding, start, end, &next); in entityValueInitProcessor()
4145 parser->m_eventEndPtr = next; in entityValueInitProcessor()
4147 if (!parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { in entityValueInitProcessor()
4162 /* found end of entity value - can store it now */ in entityValueInitProcessor()
4163 return storeEntityValue(parser, parser->m_encoding, s, end); in entityValueInitProcessor()
4175 if (parser->m_parsingStatus.parsing == XML_FINISHED) in entityValueInitProcessor()
4178 /* stop scanning for text declaration - we found one */ in entityValueInitProcessor()
4179 parser->m_processor = entityValueProcessor; in entityValueInitProcessor()
4184 function to exit with *nextPtr set to s - that is what we want for other in entityValueInitProcessor()
4185 tokens, but not for the BOM - we would rather like to skip it; in entityValueInitProcessor()
4189 else if (tok == XML_TOK_BOM && next == end && !parser->m_parsingStatus.finalBuffer) { in entityValueInitProcessor()
4202 parser->m_eventPtr = start; in entityValueInitProcessor()
4215 tok = XmlPrologTok(parser->m_encoding, s, end, &next); in externalParEntProcessor()
4217 if (!parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { in externalParEntProcessor()
4239 tok = XmlPrologTok(parser->m_encoding, s, end, &next); in externalParEntProcessor()
4242 parser->m_processor = prologProcessor; in externalParEntProcessor()
4243 return doProlog(parser, parser->m_encoding, s, end, tok, next, in externalParEntProcessor()
4244 nextPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer); in externalParEntProcessor()
4255 const ENCODING *enc = parser->m_encoding; in entityValueProcessor()
4261 if (!parser->m_parsingStatus.finalBuffer && tok != XML_TOK_INVALID) { in entityValueProcessor()
4276 /* found end of entity value - can store it now */ in entityValueProcessor()
4292 int tok = XmlPrologTok(parser->m_encoding, s, end, &next); in prologProcessor()
4293 return doProlog(parser, parser->m_encoding, s, end, tok, next, in prologProcessor()
4294 nextPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer); in prologProcessor()
4331 DTD * const dtd = parser->m_dtd; in doProlog()
4337 if (enc == parser->m_encoding) { in doProlog()
4338 eventPP = &parser->m_eventPtr; in doProlog()
4339 eventEndPP = &parser->m_eventEndPtr; in doProlog()
4342 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in doProlog()
4343 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in doProlog()
4364 case -XML_TOK_PROLOG_S: in doProlog()
4365 tok = -tok; in doProlog()
4370 if (enc != parser->m_encoding && !parser->m_openInternalEntities->betweenDecl) { in doProlog()
4374 /* WFC: PE Between Declarations - must check that PE contains in doProlog()
4378 if (parser->m_isParamEntity || enc != parser->m_encoding) { in doProlog()
4379 if (XmlTokenRole(&parser->m_prologState, XML_TOK_NONE, end, end, enc) in doProlog()
4388 tok = -tok; in doProlog()
4393 role = XmlTokenRole(&parser->m_prologState, tok, s, next, enc); in doProlog()
4400 enc = parser->m_encoding; in doProlog()
4405 if (parser->m_startDoctypeDeclHandler) { in doProlog()
4406 parser->m_doctypeName = poolStoreString(&parser->m_tempPool, enc, s, next); in doProlog()
4407 if (!parser->m_doctypeName) in doProlog()
4409 poolFinish(&parser->m_tempPool); in doProlog()
4410 parser->m_doctypePubid = NULL; in doProlog()
4413 parser->m_doctypeSysid = NULL; /* always initialize to NULL */ in doProlog()
4416 if (parser->m_startDoctypeDeclHandler) { in doProlog()
4417 …parser->m_startDoctypeDeclHandler(parser->m_handlerArg, parser->m_doctypeName, parser->m_doctypeSy… in doProlog()
4418 parser->m_doctypePubid, 1); in doProlog()
4419 parser->m_doctypeName = NULL; in doProlog()
4420 poolClear(&parser->m_tempPool); in doProlog()
4430 enc = parser->m_encoding; in doProlog()
4437 parser->m_useForeignDTD = XML_FALSE; in doProlog()
4438 parser->m_declEntity = (ENTITY *)lookup(parser, in doProlog()
4439 &dtd->paramEntities, in doProlog()
4442 if (!parser->m_declEntity) in doProlog()
4445 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
4446 if (parser->m_startDoctypeDeclHandler) { in doProlog()
4450 pubId = poolStoreString(&parser->m_tempPool, enc, in doProlog()
4451 s + enc->minBytesPerChar, in doProlog()
4452 next - enc->minBytesPerChar); in doProlog()
4456 poolFinish(&parser->m_tempPool); in doProlog()
4457 parser->m_doctypePubid = pubId; in doProlog()
4466 if (dtd->keepProcessing && parser->m_declEntity) { in doProlog()
4467 XML_Char *tem = poolStoreString(&dtd->pool, in doProlog()
4469 s + enc->minBytesPerChar, in doProlog()
4470 next - enc->minBytesPerChar); in doProlog()
4474 parser->m_declEntity->publicId = tem; in doProlog()
4475 poolFinish(&dtd->pool); in doProlog()
4479 if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_PUBLIC_ID) in doProlog()
4484 if (parser->m_doctypeName) { in doProlog()
4485 parser->m_startDoctypeDeclHandler(parser->m_handlerArg, parser->m_doctypeName, in doProlog()
4486 parser->m_doctypeSysid, parser->m_doctypePubid, 0); in doProlog()
4487 poolClear(&parser->m_tempPool); in doProlog()
4490 /* parser->m_doctypeSysid will be non-NULL in the case of a previous in doProlog()
4491 XML_ROLE_DOCTYPE_SYSTEM_ID, even if parser->m_startDoctypeDeclHandler in doProlog()
4495 if (parser->m_doctypeSysid || parser->m_useForeignDTD) { in doProlog()
4496 XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; in doProlog()
4497 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
4498 if (parser->m_paramEntityParsing && parser->m_externalEntityRefHandler) { in doProlog()
4500 &dtd->paramEntities, in doProlog()
4511 if (parser->m_useForeignDTD) in doProlog()
4512 entity->base = parser->m_curBase; in doProlog()
4513 dtd->paramEntityRead = XML_FALSE; in doProlog()
4514 if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg, in doProlog()
4516 entity->base, in doProlog()
4517 entity->systemId, in doProlog()
4518 entity->publicId)) in doProlog()
4520 if (dtd->paramEntityRead) { in doProlog()
4521 if (!dtd->standalone && in doProlog()
4522 parser->m_notStandaloneHandler && in doProlog()
4523 !parser->m_notStandaloneHandler(parser->m_handlerArg)) in doProlog()
4527 is no external subset and we must reset dtd->hasParamEntityRefs in doProlog()
4529 else if (!parser->m_doctypeSysid) in doProlog()
4530 dtd->hasParamEntityRefs = hadParamEntityRefs; in doProlog()
4531 /* end of DTD - no need to update dtd->keepProcessing */ in doProlog()
4533 parser->m_useForeignDTD = XML_FALSE; in doProlog()
4536 if (parser->m_endDoctypeDeclHandler) { in doProlog()
4537 parser->m_endDoctypeDeclHandler(parser->m_handlerArg); in doProlog()
4546 if (parser->m_useForeignDTD) { in doProlog()
4547 XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs; in doProlog()
4548 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
4549 if (parser->m_paramEntityParsing && parser->m_externalEntityRefHandler) { in doProlog()
4550 ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities, in doProlog()
4555 entity->base = parser->m_curBase; in doProlog()
4556 dtd->paramEntityRead = XML_FALSE; in doProlog()
4557 if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg, in doProlog()
4559 entity->base, in doProlog()
4560 entity->systemId, in doProlog()
4561 entity->publicId)) in doProlog()
4563 if (dtd->paramEntityRead) { in doProlog()
4564 if (!dtd->standalone && in doProlog()
4565 parser->m_notStandaloneHandler && in doProlog()
4566 !parser->m_notStandaloneHandler(parser->m_handlerArg)) in doProlog()
4570 is no external subset and we must reset dtd->hasParamEntityRefs in doProlog()
4573 dtd->hasParamEntityRefs = hadParamEntityRefs; in doProlog()
4574 /* end of DTD - no need to update dtd->keepProcessing */ in doProlog()
4578 parser->m_processor = contentProcessor; in doProlog()
4581 parser->m_declElementType = getElementType(parser, enc, s, next); in doProlog()
4582 if (!parser->m_declElementType) in doProlog()
4586 parser->m_declAttributeId = getAttributeId(parser, enc, s, next); in doProlog()
4587 if (!parser->m_declAttributeId) in doProlog()
4589 parser->m_declAttributeIsCdata = XML_FALSE; in doProlog()
4590 parser->m_declAttributeType = NULL; in doProlog()
4591 parser->m_declAttributeIsId = XML_FALSE; in doProlog()
4594 parser->m_declAttributeIsCdata = XML_TRUE; in doProlog()
4595 parser->m_declAttributeType = atypeCDATA; in doProlog()
4598 parser->m_declAttributeIsId = XML_TRUE; in doProlog()
4599 parser->m_declAttributeType = atypeID; in doProlog()
4602 parser->m_declAttributeType = atypeIDREF; in doProlog()
4605 parser->m_declAttributeType = atypeIDREFS; in doProlog()
4608 parser->m_declAttributeType = atypeENTITY; in doProlog()
4611 parser->m_declAttributeType = atypeENTITIES; in doProlog()
4614 parser->m_declAttributeType = atypeNMTOKEN; in doProlog()
4617 parser->m_declAttributeType = atypeNMTOKENS; in doProlog()
4619 if (dtd->keepProcessing && parser->m_attlistDeclHandler) in doProlog()
4624 if (dtd->keepProcessing && parser->m_attlistDeclHandler) { in doProlog()
4626 if (parser->m_declAttributeType) { in doProlog()
4634 if (!poolAppendString(&parser->m_tempPool, prefix)) in doProlog()
4636 if (!poolAppend(&parser->m_tempPool, enc, s, next)) in doProlog()
4638 parser->m_declAttributeType = parser->m_tempPool.start; in doProlog()
4644 if (dtd->keepProcessing) { in doProlog()
4645 if (!defineAttribute(parser->m_declElementType, parser->m_declAttributeId, in doProlog()
4646 parser->m_declAttributeIsCdata, parser->m_declAttributeIsId, in doProlog()
4649 if (parser->m_attlistDeclHandler && parser->m_declAttributeType) { in doProlog()
4650 if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN) in doProlog()
4651 || (*parser->m_declAttributeType == XML_T(ASCII_N) in doProlog()
4652 && parser->m_declAttributeType[1] == XML_T(ASCII_O))) { in doProlog()
4654 if (!poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN)) in doProlog()
4655 || !poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in doProlog()
4657 parser->m_declAttributeType = parser->m_tempPool.start; in doProlog()
4658 poolFinish(&parser->m_tempPool); in doProlog()
4661 parser->m_attlistDeclHandler(parser->m_handlerArg, parser->m_declElementType->name, in doProlog()
4662 parser->m_declAttributeId->name, parser->m_declAttributeType, in doProlog()
4664 poolClear(&parser->m_tempPool); in doProlog()
4671 if (dtd->keepProcessing) { in doProlog()
4674 storeAttributeValue(parser, enc, parser->m_declAttributeIsCdata, in doProlog()
4675 s + enc->minBytesPerChar, in doProlog()
4676 next - enc->minBytesPerChar, in doProlog()
4677 &dtd->pool); in doProlog()
4680 attVal = poolStart(&dtd->pool); in doProlog()
4681 poolFinish(&dtd->pool); in doProlog()
4683 if (!defineAttribute(parser->m_declElementType, parser->m_declAttributeId, in doProlog()
4684 parser->m_declAttributeIsCdata, XML_FALSE, attVal, parser)) in doProlog()
4686 if (parser->m_attlistDeclHandler && parser->m_declAttributeType) { in doProlog()
4687 if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN) in doProlog()
4688 || (*parser->m_declAttributeType == XML_T(ASCII_N) in doProlog()
4689 && parser->m_declAttributeType[1] == XML_T(ASCII_O))) { in doProlog()
4691 if (!poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN)) in doProlog()
4692 || !poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in doProlog()
4694 parser->m_declAttributeType = parser->m_tempPool.start; in doProlog()
4695 poolFinish(&parser->m_tempPool); in doProlog()
4698 parser->m_attlistDeclHandler(parser->m_handlerArg, parser->m_declElementType->name, in doProlog()
4699 parser->m_declAttributeId->name, parser->m_declAttributeType, in doProlog()
4702 poolClear(&parser->m_tempPool); in doProlog()
4708 if (dtd->keepProcessing) { in doProlog()
4710 s + enc->minBytesPerChar, in doProlog()
4711 next - enc->minBytesPerChar); in doProlog()
4712 if (parser->m_declEntity) { in doProlog()
4713 parser->m_declEntity->textPtr = poolStart(&dtd->entityValuePool); in doProlog()
4714 parser->m_declEntity->textLen = (int)(poolLength(&dtd->entityValuePool)); in doProlog()
4715 poolFinish(&dtd->entityValuePool); in doProlog()
4716 if (parser->m_entityDeclHandler) { in doProlog()
4718 parser->m_entityDeclHandler(parser->m_handlerArg, in doProlog()
4719 parser->m_declEntity->name, in doProlog()
4720 parser->m_declEntity->is_param, in doProlog()
4721 parser->m_declEntity->textPtr, in doProlog()
4722 parser->m_declEntity->textLen, in doProlog()
4723 parser->m_curBase, 0, 0, 0); in doProlog()
4728 poolDiscard(&dtd->entityValuePool); in doProlog()
4735 parser->m_useForeignDTD = XML_FALSE; in doProlog()
4737 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
4738 if (parser->m_startDoctypeDeclHandler) { in doProlog()
4739 parser->m_doctypeSysid = poolStoreString(&parser->m_tempPool, enc, in doProlog()
4740 s + enc->minBytesPerChar, in doProlog()
4741 next - enc->minBytesPerChar); in doProlog()
4742 if (parser->m_doctypeSysid == NULL) in doProlog()
4744 poolFinish(&parser->m_tempPool); in doProlog()
4749 /* use externalSubsetName to make parser->m_doctypeSysid non-NULL in doProlog()
4750 for the case where no parser->m_startDoctypeDeclHandler is set */ in doProlog()
4751 parser->m_doctypeSysid = externalSubsetName; in doProlog()
4753 if (!dtd->standalone in doProlog()
4755 && !parser->m_paramEntityParsing in doProlog()
4757 && parser->m_notStandaloneHandler in doProlog()
4758 && !parser->m_notStandaloneHandler(parser->m_handlerArg)) in doProlog()
4763 if (!parser->m_declEntity) { in doProlog()
4764 parser->m_declEntity = (ENTITY *)lookup(parser, in doProlog()
4765 &dtd->paramEntities, in doProlog()
4768 if (!parser->m_declEntity) in doProlog()
4770 parser->m_declEntity->publicId = NULL; in doProlog()
4775 if (dtd->keepProcessing && parser->m_declEntity) { in doProlog()
4776 parser->m_declEntity->systemId = poolStoreString(&dtd->pool, enc, in doProlog()
4777 s + enc->minBytesPerChar, in doProlog()
4778 next - enc->minBytesPerChar); in doProlog()
4779 if (!parser->m_declEntity->systemId) in doProlog()
4781 parser->m_declEntity->base = parser->m_curBase; in doProlog()
4782 poolFinish(&dtd->pool); in doProlog()
4786 if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_SYSTEM_ID) in doProlog()
4791 if (dtd->keepProcessing && parser->m_declEntity && parser->m_entityDeclHandler) { in doProlog()
4793 parser->m_entityDeclHandler(parser->m_handlerArg, in doProlog()
4794 parser->m_declEntity->name, in doProlog()
4795 parser->m_declEntity->is_param, in doProlog()
4797 parser->m_declEntity->base, in doProlog()
4798 parser->m_declEntity->systemId, in doProlog()
4799 parser->m_declEntity->publicId, in doProlog()
4805 if (dtd->keepProcessing && parser->m_declEntity) { in doProlog()
4806 parser->m_declEntity->notation = poolStoreString(&dtd->pool, enc, s, next); in doProlog()
4807 if (!parser->m_declEntity->notation) in doProlog()
4809 poolFinish(&dtd->pool); in doProlog()
4810 if (parser->m_unparsedEntityDeclHandler) { in doProlog()
4812 parser->m_unparsedEntityDeclHandler(parser->m_handlerArg, in doProlog()
4813 parser->m_declEntity->name, in doProlog()
4814 parser->m_declEntity->base, in doProlog()
4815 parser->m_declEntity->systemId, in doProlog()
4816 parser->m_declEntity->publicId, in doProlog()
4817 parser->m_declEntity->notation); in doProlog()
4820 else if (parser->m_entityDeclHandler) { in doProlog()
4822 parser->m_entityDeclHandler(parser->m_handlerArg, in doProlog()
4823 parser->m_declEntity->name, in doProlog()
4825 parser->m_declEntity->base, in doProlog()
4826 parser->m_declEntity->systemId, in doProlog()
4827 parser->m_declEntity->publicId, in doProlog()
4828 parser->m_declEntity->notation); in doProlog()
4836 parser->m_declEntity = NULL; in doProlog()
4839 if (dtd->keepProcessing) { in doProlog()
4840 const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); in doProlog()
4843 parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, in doProlog()
4845 if (!parser->m_declEntity) in doProlog()
4847 if (parser->m_declEntity->name != name) { in doProlog()
4848 poolDiscard(&dtd->pool); in doProlog()
4849 parser->m_declEntity = NULL; in doProlog()
4852 poolFinish(&dtd->pool); in doProlog()
4853 parser->m_declEntity->publicId = NULL; in doProlog()
4854 parser->m_declEntity->is_param = XML_FALSE; in doProlog()
4858 … parser->m_declEntity->is_internal = !(parser->m_parentParser || parser->m_openInternalEntities); in doProlog()
4859 if (parser->m_entityDeclHandler) in doProlog()
4864 poolDiscard(&dtd->pool); in doProlog()
4865 parser->m_declEntity = NULL; in doProlog()
4871 if (dtd->keepProcessing) { in doProlog()
4872 const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); in doProlog()
4875 parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->paramEntities, in doProlog()
4877 if (!parser->m_declEntity) in doProlog()
4879 if (parser->m_declEntity->name != name) { in doProlog()
4880 poolDiscard(&dtd->pool); in doProlog()
4881 parser->m_declEntity = NULL; in doProlog()
4884 poolFinish(&dtd->pool); in doProlog()
4885 parser->m_declEntity->publicId = NULL; in doProlog()
4886 parser->m_declEntity->is_param = XML_TRUE; in doProlog()
4890 … parser->m_declEntity->is_internal = !(parser->m_parentParser || parser->m_openInternalEntities); in doProlog()
4891 if (parser->m_entityDeclHandler) in doProlog()
4896 poolDiscard(&dtd->pool); in doProlog()
4897 parser->m_declEntity = NULL; in doProlog()
4900 parser->m_declEntity = NULL; in doProlog()
4904 parser->m_declNotationPublicId = NULL; in doProlog()
4905 parser->m_declNotationName = NULL; in doProlog()
4906 if (parser->m_notationDeclHandler) { in doProlog()
4907 parser->m_declNotationName = poolStoreString(&parser->m_tempPool, enc, s, next); in doProlog()
4908 if (!parser->m_declNotationName) in doProlog()
4910 poolFinish(&parser->m_tempPool); in doProlog()
4917 if (parser->m_declNotationName) { /* means m_notationDeclHandler != NULL */ in doProlog()
4918 XML_Char *tem = poolStoreString(&parser->m_tempPool, in doProlog()
4920 s + enc->minBytesPerChar, in doProlog()
4921 next - enc->minBytesPerChar); in doProlog()
4925 parser->m_declNotationPublicId = tem; in doProlog()
4926 poolFinish(&parser->m_tempPool); in doProlog()
4931 if (parser->m_declNotationName && parser->m_notationDeclHandler) { in doProlog()
4933 = poolStoreString(&parser->m_tempPool, enc, in doProlog()
4934 s + enc->minBytesPerChar, in doProlog()
4935 next - enc->minBytesPerChar); in doProlog()
4939 parser->m_notationDeclHandler(parser->m_handlerArg, in doProlog()
4940 parser->m_declNotationName, in doProlog()
4941 parser->m_curBase, in doProlog()
4943 parser->m_declNotationPublicId); in doProlog()
4946 poolClear(&parser->m_tempPool); in doProlog()
4949 if (parser->m_declNotationPublicId && parser->m_notationDeclHandler) { in doProlog()
4951 parser->m_notationDeclHandler(parser->m_handlerArg, in doProlog()
4952 parser->m_declNotationName, in doProlog()
4953 parser->m_curBase, in doProlog()
4955 parser->m_declNotationPublicId); in doProlog()
4958 poolClear(&parser->m_tempPool); in doProlog()
4975 if (parser->m_defaultHandler) in doProlog()
4982 parser->m_processor = ignoreSectionProcessor; in doProlog()
4989 if (parser->m_prologState.level >= parser->m_groupSize) { in doProlog()
4990 if (parser->m_groupSize) { in doProlog()
4991 char *temp = (char *)REALLOC(parser, parser->m_groupConnector, parser->m_groupSize *= 2); in doProlog()
4993 parser->m_groupSize /= 2; in doProlog()
4996 parser->m_groupConnector = temp; in doProlog()
4997 if (dtd->scaffIndex) { in doProlog()
4998 int *temp = (int *)REALLOC(parser, dtd->scaffIndex, in doProlog()
4999 parser->m_groupSize * sizeof(int)); in doProlog()
5002 dtd->scaffIndex = temp; in doProlog()
5006 parser->m_groupConnector = (char *)MALLOC(parser, parser->m_groupSize = 32); in doProlog()
5007 if (!parser->m_groupConnector) { in doProlog()
5008 parser->m_groupSize = 0; in doProlog()
5013 parser->m_groupConnector[parser->m_prologState.level] = 0; in doProlog()
5014 if (dtd->in_eldecl) { in doProlog()
5018 dtd->scaffIndex[dtd->scaffLevel] = myindex; in doProlog()
5019 dtd->scaffLevel++; in doProlog()
5020 dtd->scaffold[myindex].type = XML_CTYPE_SEQ; in doProlog()
5021 if (parser->m_elementDeclHandler) in doProlog()
5026 if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_PIPE) in doProlog()
5028 parser->m_groupConnector[parser->m_prologState.level] = ASCII_COMMA; in doProlog()
5029 if (dtd->in_eldecl && parser->m_elementDeclHandler) in doProlog()
5033 if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_COMMA) in doProlog()
5035 if (dtd->in_eldecl in doProlog()
5036 && !parser->m_groupConnector[parser->m_prologState.level] in doProlog()
5037 && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type in doProlog()
5040 dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type in doProlog()
5042 if (parser->m_elementDeclHandler) in doProlog()
5045 parser->m_groupConnector[parser->m_prologState.level] = ASCII_PIPE; in doProlog()
5050 dtd->hasParamEntityRefs = XML_TRUE; in doProlog()
5051 if (!parser->m_paramEntityParsing) in doProlog()
5052 dtd->keepProcessing = dtd->standalone; in doProlog()
5056 name = poolStoreString(&dtd->pool, enc, in doProlog()
5057 s + enc->minBytesPerChar, in doProlog()
5058 next - enc->minBytesPerChar); in doProlog()
5061 entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0); in doProlog()
5062 poolDiscard(&dtd->pool); in doProlog()
5067 if (parser->m_prologState.documentEntity && in doProlog()
5068 (dtd->standalone in doProlog()
5069 ? !parser->m_openInternalEntities in doProlog()
5070 : !dtd->hasParamEntityRefs)) { in doProlog()
5073 else if (!entity->is_internal) { in doProlog()
5098 dtd->keepProcessing = dtd->standalone; in doProlog()
5100 if ((role == XML_ROLE_PARAM_ENTITY_REF) && parser->m_skippedEntityHandler) { in doProlog()
5101 parser->m_skippedEntityHandler(parser->m_handlerArg, name, 1); in doProlog()
5106 if (entity->open) in doProlog()
5108 if (entity->textPtr) { in doProlog()
5118 if (parser->m_externalEntityRefHandler) { in doProlog()
5119 dtd->paramEntityRead = XML_FALSE; in doProlog()
5120 entity->open = XML_TRUE; in doProlog()
5121 if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg, in doProlog()
5123 entity->base, in doProlog()
5124 entity->systemId, in doProlog()
5125 entity->publicId)) { in doProlog()
5126 entity->open = XML_FALSE; in doProlog()
5129 entity->open = XML_FALSE; in doProlog()
5131 if (!dtd->paramEntityRead) { in doProlog()
5132 dtd->keepProcessing = dtd->standalone; in doProlog()
5137 dtd->keepProcessing = dtd->standalone; in doProlog()
5142 if (!dtd->standalone && in doProlog()
5143 parser->m_notStandaloneHandler && in doProlog()
5144 !parser->m_notStandaloneHandler(parser->m_handlerArg)) in doProlog()
5151 if (parser->m_elementDeclHandler) { in doProlog()
5152 parser->m_declElementType = getElementType(parser, enc, s, next); in doProlog()
5153 if (!parser->m_declElementType) in doProlog()
5155 dtd->scaffLevel = 0; in doProlog()
5156 dtd->scaffCount = 0; in doProlog()
5157 dtd->in_eldecl = XML_TRUE; in doProlog()
5164 if (dtd->in_eldecl) { in doProlog()
5165 if (parser->m_elementDeclHandler) { in doProlog()
5169 content->quant = XML_CQUANT_NONE; in doProlog()
5170 content->name = NULL; in doProlog()
5171 content->numchildren = 0; in doProlog()
5172 content->children = NULL; in doProlog()
5173 content->type = ((role == XML_ROLE_CONTENT_ANY) ? in doProlog()
5177 … parser->m_elementDeclHandler(parser->m_handlerArg, parser->m_declElementType->name, content); in doProlog()
5180 dtd->in_eldecl = XML_FALSE; in doProlog()
5185 if (dtd->in_eldecl) { in doProlog()
5186 dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type in doProlog()
5188 if (parser->m_elementDeclHandler) in doProlog()
5205 if (dtd->in_eldecl) { in doProlog()
5211 : next - enc->minBytesPerChar); in doProlog()
5215 dtd->scaffold[myindex].type = XML_CTYPE_NAME; in doProlog()
5216 dtd->scaffold[myindex].quant = quant; in doProlog()
5220 name = el->name; in doProlog()
5221 dtd->scaffold[myindex].name = name; in doProlog()
5224 dtd->contentStringLen += nameLen; in doProlog()
5225 if (parser->m_elementDeclHandler) in doProlog()
5242 if (dtd->in_eldecl) { in doProlog()
5243 if (parser->m_elementDeclHandler) in doProlog()
5245 dtd->scaffLevel--; in doProlog()
5246 dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant; in doProlog()
5247 if (dtd->scaffLevel == 0) { in doProlog()
5253 … parser->m_elementDeclHandler(parser->m_handlerArg, parser->m_declElementType->name, model); in doProlog()
5255 dtd->in_eldecl = XML_FALSE; in doProlog()
5256 dtd->contentStringLen = 0; in doProlog()
5280 if (parser->m_startDoctypeDeclHandler) in doProlog()
5284 if (dtd->keepProcessing && parser->m_entityDeclHandler) in doProlog()
5288 if (parser->m_notationDeclHandler) in doProlog()
5292 if (dtd->keepProcessing && parser->m_attlistDeclHandler) in doProlog()
5296 if (parser->m_elementDeclHandler) in doProlog()
5301 if (handleDefault && parser->m_defaultHandler) in doProlog()
5304 switch (parser->m_parsingStatus.parsing) { in doProlog()
5324 parser->m_processor = epilogProcessor; in epilogProcessor()
5325 parser->m_eventPtr = s; in epilogProcessor()
5328 int tok = XmlPrologTok(parser->m_encoding, s, end, &next); in epilogProcessor()
5329 parser->m_eventEndPtr = next; in epilogProcessor()
5331 /* report partial linebreak - it might be the last token */ in epilogProcessor()
5332 case -XML_TOK_PROLOG_S: in epilogProcessor()
5333 if (parser->m_defaultHandler) { in epilogProcessor()
5334 reportDefault(parser, parser->m_encoding, s, next); in epilogProcessor()
5335 if (parser->m_parsingStatus.parsing == XML_FINISHED) in epilogProcessor()
5344 if (parser->m_defaultHandler) in epilogProcessor()
5345 reportDefault(parser, parser->m_encoding, s, next); in epilogProcessor()
5348 if (!reportProcessingInstruction(parser, parser->m_encoding, s, next)) in epilogProcessor()
5352 if (!reportComment(parser, parser->m_encoding, s, next)) in epilogProcessor()
5356 parser->m_eventPtr = next; in epilogProcessor()
5359 if (!parser->m_parsingStatus.finalBuffer) { in epilogProcessor()
5365 if (!parser->m_parsingStatus.finalBuffer) { in epilogProcessor()
5373 parser->m_eventPtr = s = next; in epilogProcessor()
5374 switch (parser->m_parsingStatus.parsing) { in epilogProcessor()
5394 if (parser->m_freeInternalEntities) { in processInternalEntity()
5395 openEntity = parser->m_freeInternalEntities; in processInternalEntity()
5396 parser->m_freeInternalEntities = openEntity->next; in processInternalEntity()
5403 entity->open = XML_TRUE; in processInternalEntity()
5404 entity->processed = 0; in processInternalEntity()
5405 openEntity->next = parser->m_openInternalEntities; in processInternalEntity()
5406 parser->m_openInternalEntities = openEntity; in processInternalEntity()
5407 openEntity->entity = entity; in processInternalEntity()
5408 openEntity->startTagLevel = parser->m_tagLevel; in processInternalEntity()
5409 openEntity->betweenDecl = betweenDecl; in processInternalEntity()
5410 openEntity->internalEventPtr = NULL; in processInternalEntity()
5411 openEntity->internalEventEndPtr = NULL; in processInternalEntity()
5412 textStart = (char *)entity->textPtr; in processInternalEntity()
5413 textEnd = (char *)(entity->textPtr + entity->textLen); in processInternalEntity()
5418 if (entity->is_param) { in processInternalEntity()
5419 int tok = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); in processInternalEntity()
5420 result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, tok, in processInternalEntity()
5425 result = doContent(parser, parser->m_tagLevel, parser->m_internalEncoding, textStart, in processInternalEntity()
5429 if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) { in processInternalEntity()
5430 entity->processed = (int)(next - textStart); in processInternalEntity()
5431 parser->m_processor = internalEntityProcessor; in processInternalEntity()
5434 entity->open = XML_FALSE; in processInternalEntity()
5435 parser->m_openInternalEntities = openEntity->next; in processInternalEntity()
5437 openEntity->next = parser->m_freeInternalEntities; in processInternalEntity()
5438 parser->m_freeInternalEntities = openEntity; in processInternalEntity()
5454 OPEN_INTERNAL_ENTITY *openEntity = parser->m_openInternalEntities; in internalEntityProcessor()
5458 entity = openEntity->entity; in internalEntityProcessor()
5459 textStart = ((char *)entity->textPtr) + entity->processed; in internalEntityProcessor()
5460 textEnd = (char *)(entity->textPtr + entity->textLen); in internalEntityProcessor()
5465 if (entity->is_param) { in internalEntityProcessor()
5466 int tok = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next); in internalEntityProcessor()
5467 result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd, tok, in internalEntityProcessor()
5472 result = doContent(parser, openEntity->startTagLevel, parser->m_internalEncoding, in internalEntityProcessor()
5477 else if (textEnd != next && parser->m_parsingStatus.parsing == XML_SUSPENDED) { in internalEntityProcessor()
5478 entity->processed = (int)(next - (char *)entity->textPtr); in internalEntityProcessor()
5482 entity->open = XML_FALSE; in internalEntityProcessor()
5483 parser->m_openInternalEntities = openEntity->next; in internalEntityProcessor()
5485 openEntity->next = parser->m_freeInternalEntities; in internalEntityProcessor()
5486 parser->m_freeInternalEntities = openEntity; in internalEntityProcessor()
5490 if (entity->is_param) { in internalEntityProcessor()
5492 parser->m_processor = prologProcessor; in internalEntityProcessor()
5493 tok = XmlPrologTok(parser->m_encoding, s, end, &next); in internalEntityProcessor()
5494 return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr, in internalEntityProcessor()
5495 (XML_Bool)!parser->m_parsingStatus.finalBuffer); in internalEntityProcessor()
5500 parser->m_processor = contentProcessor; in internalEntityProcessor()
5502 return doContent(parser, parser->m_parentParser ? 1 : 0, parser->m_encoding, s, end, in internalEntityProcessor()
5503 nextPtr, (XML_Bool)!parser->m_parsingStatus.finalBuffer); in internalEntityProcessor()
5513 return parser->m_errorCode; in errorProcessor()
5537 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in appendAttributeValue()
5545 if (enc == parser->m_encoding) in appendAttributeValue()
5546 parser->m_eventPtr = next; in appendAttributeValue()
5549 if (enc == parser->m_encoding) in appendAttributeValue()
5550 parser->m_eventPtr = ptr; in appendAttributeValue()
5558 if (enc == parser->m_encoding) in appendAttributeValue()
5559 parser->m_eventPtr = ptr; in appendAttributeValue()
5587 next = ptr + enc->minBytesPerChar; in appendAttributeValue()
5602 ptr + enc->minBytesPerChar, in appendAttributeValue()
5603 next - enc->minBytesPerChar); in appendAttributeValue()
5609 name = poolStoreString(&parser->m_temp2Pool, enc, in appendAttributeValue()
5610 ptr + enc->minBytesPerChar, in appendAttributeValue()
5611 next - enc->minBytesPerChar); in appendAttributeValue()
5614 entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0); in appendAttributeValue()
5615 poolDiscard(&parser->m_temp2Pool); in appendAttributeValue()
5619 if (pool == &dtd->pool) /* are we called from prolog? */ in appendAttributeValue()
5622 parser->m_prologState.documentEntity && in appendAttributeValue()
5624 (dtd->standalone in appendAttributeValue()
5625 ? !parser->m_openInternalEntities in appendAttributeValue()
5626 : !dtd->hasParamEntityRefs); in appendAttributeValue()
5627 else /* if (pool == &parser->m_tempPool): we are called from content */ in appendAttributeValue()
5628 checkEntityDecl = !dtd->hasParamEntityRefs || dtd->standalone; in appendAttributeValue()
5632 else if (!entity->is_internal) in appendAttributeValue()
5636 /* Cannot report skipped entity here - see comments on in appendAttributeValue()
5637 parser->m_skippedEntityHandler. in appendAttributeValue()
5638 if (parser->m_skippedEntityHandler) in appendAttributeValue()
5639 parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); in appendAttributeValue()
5643 if ((pool == &parser->m_tempPool) && parser->m_defaultHandler) in appendAttributeValue()
5648 if (entity->open) { in appendAttributeValue()
5649 if (enc == parser->m_encoding) { in appendAttributeValue()
5652 * The "if (entity->open)" check catches recursive entity in appendAttributeValue()
5661 * here with entity->open being TRUE. in appendAttributeValue()
5667 parser->m_eventPtr = ptr; /* LCOV_EXCL_LINE */ in appendAttributeValue()
5671 if (entity->notation) { in appendAttributeValue()
5672 if (enc == parser->m_encoding) in appendAttributeValue()
5673 parser->m_eventPtr = ptr; in appendAttributeValue()
5676 if (!entity->textPtr) { in appendAttributeValue()
5677 if (enc == parser->m_encoding) in appendAttributeValue()
5678 parser->m_eventPtr = ptr; in appendAttributeValue()
5683 const XML_Char *textEnd = entity->textPtr + entity->textLen; in appendAttributeValue()
5684 entity->open = XML_TRUE; in appendAttributeValue()
5685 result = appendAttributeValue(parser, parser->m_internalEncoding, isCdata, in appendAttributeValue()
5686 (char *)entity->textPtr, in appendAttributeValue()
5688 entity->open = XML_FALSE; in appendAttributeValue()
5700 * names before XmlAttributeValueTok() gets a look-in. This in appendAttributeValue()
5706 if (enc == parser->m_encoding) in appendAttributeValue()
5707 parser->m_eventPtr = ptr; in appendAttributeValue()
5722 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in storeEntityValue()
5723 STRING_POOL *pool = &(dtd->entityValuePool); in storeEntityValue()
5726 int oldInEntityValue = parser->m_prologState.inEntityValue; in storeEntityValue()
5727 parser->m_prologState.inEntityValue = 1; in storeEntityValue()
5732 if (!pool->blocks) { in storeEntityValue()
5743 if (parser->m_isParamEntity || enc != parser->m_encoding) { in storeEntityValue()
5746 name = poolStoreString(&parser->m_tempPool, enc, in storeEntityValue()
5747 entityTextPtr + enc->minBytesPerChar, in storeEntityValue()
5748 next - enc->minBytesPerChar); in storeEntityValue()
5753 entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0); in storeEntityValue()
5754 poolDiscard(&parser->m_tempPool); in storeEntityValue()
5756 /* not a well-formedness error - see XML 1.0: WFC Entity Declared */ in storeEntityValue()
5757 /* cannot report skipped entity here - see comments on in storeEntityValue()
5758 parser->m_skippedEntityHandler in storeEntityValue()
5759 if (parser->m_skippedEntityHandler) in storeEntityValue()
5760 parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0); in storeEntityValue()
5762 dtd->keepProcessing = dtd->standalone; in storeEntityValue()
5765 if (entity->open) { in storeEntityValue()
5766 if (enc == parser->m_encoding) in storeEntityValue()
5767 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
5771 if (entity->systemId) { in storeEntityValue()
5772 if (parser->m_externalEntityRefHandler) { in storeEntityValue()
5773 dtd->paramEntityRead = XML_FALSE; in storeEntityValue()
5774 entity->open = XML_TRUE; in storeEntityValue()
5775 if (!parser->m_externalEntityRefHandler(parser->m_externalEntityRefHandlerArg, in storeEntityValue()
5777 entity->base, in storeEntityValue()
5778 entity->systemId, in storeEntityValue()
5779 entity->publicId)) { in storeEntityValue()
5780 entity->open = XML_FALSE; in storeEntityValue()
5784 entity->open = XML_FALSE; in storeEntityValue()
5785 if (!dtd->paramEntityRead) in storeEntityValue()
5786 dtd->keepProcessing = dtd->standalone; in storeEntityValue()
5789 dtd->keepProcessing = dtd->standalone; in storeEntityValue()
5792 entity->open = XML_TRUE; in storeEntityValue()
5794 parser->m_internalEncoding, in storeEntityValue()
5795 (char *)entity->textPtr, in storeEntityValue()
5796 (char *)(entity->textPtr in storeEntityValue()
5797 + entity->textLen)); in storeEntityValue()
5798 entity->open = XML_FALSE; in storeEntityValue()
5807 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
5821 next = entityTextPtr + enc->minBytesPerChar; in storeEntityValue()
5824 if (pool->end == pool->ptr && !poolGrow(pool)) { in storeEntityValue()
5828 *(pool->ptr)++ = 0xA; in storeEntityValue()
5836 if (enc == parser->m_encoding) in storeEntityValue()
5837 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
5852 if (pool->end == pool->ptr && !poolGrow(pool)) { in storeEntityValue()
5856 *(pool->ptr)++ = buf[i]; in storeEntityValue()
5861 if (enc == parser->m_encoding) in storeEntityValue()
5862 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
5866 if (enc == parser->m_encoding) in storeEntityValue()
5867 parser->m_eventPtr = next; in storeEntityValue()
5871 /* This default case should be unnecessary -- all the tokens in storeEntityValue()
5873 * cases -- but should be retained for safety. We do however in storeEntityValue()
5878 if (enc == parser->m_encoding) in storeEntityValue()
5879 parser->m_eventPtr = entityTextPtr; in storeEntityValue()
5888 parser->m_prologState.inEntityValue = oldInEntityValue; in storeEntityValue()
5923 if (!parser->m_processingInstructionHandler) { in reportProcessingInstruction()
5924 if (parser->m_defaultHandler) in reportProcessingInstruction()
5928 start += enc->minBytesPerChar * 2; in reportProcessingInstruction()
5930 target = poolStoreString(&parser->m_tempPool, enc, start, tem); in reportProcessingInstruction()
5933 poolFinish(&parser->m_tempPool); in reportProcessingInstruction()
5934 data = poolStoreString(&parser->m_tempPool, enc, in reportProcessingInstruction()
5936 end - enc->minBytesPerChar*2); in reportProcessingInstruction()
5940 parser->m_processingInstructionHandler(parser->m_handlerArg, target, data); in reportProcessingInstruction()
5941 poolClear(&parser->m_tempPool); in reportProcessingInstruction()
5950 if (!parser->m_commentHandler) { in reportComment()
5951 if (parser->m_defaultHandler) in reportComment()
5955 data = poolStoreString(&parser->m_tempPool, in reportComment()
5957 start + enc->minBytesPerChar * 4, in reportComment()
5958 end - enc->minBytesPerChar * 3); in reportComment()
5962 parser->m_commentHandler(parser->m_handlerArg, data); in reportComment()
5963 poolClear(&parser->m_tempPool); in reportComment()
5975 if (enc == parser->m_encoding) { in reportDefault()
5976 eventPP = &parser->m_eventPtr; in reportDefault()
5977 eventEndPP = &parser->m_eventEndPtr; in reportDefault()
5983 * conversion to the internal format (UTF-8 unless XML_UNICODE in reportDefault()
5996 eventPP = &(parser->m_openInternalEntities->internalEventPtr); in reportDefault()
5997 eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr); in reportDefault()
6001 ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf; in reportDefault()
6002 convert_res = XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd); in reportDefault()
6004 …parser->m_defaultHandler(parser->m_handlerArg, parser->m_dataBuf, (int)(dataPtr - (ICHAR *)parser-… in reportDefault()
6009 …parser->m_defaultHandler(parser->m_handlerArg, (XML_Char *)s, (int)((XML_Char *)end - (XML_Char *)… in reportDefault()
6020 a default which duplicates a non-default. */ in defineAttribute()
6022 for (i = 0; i < type->nDefaultAtts; i++) in defineAttribute()
6023 if (attId == type->defaultAtts[i].id) in defineAttribute()
6025 if (isId && !type->idAtt && !attId->xmlns) in defineAttribute()
6026 type->idAtt = attId; in defineAttribute()
6028 if (type->nDefaultAtts == type->allocDefaultAtts) { in defineAttribute()
6029 if (type->allocDefaultAtts == 0) { in defineAttribute()
6030 type->allocDefaultAtts = 8; in defineAttribute()
6031 type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(parser, type->allocDefaultAtts in defineAttribute()
6033 if (!type->defaultAtts) { in defineAttribute()
6034 type->allocDefaultAtts = 0; in defineAttribute()
6040 int count = type->allocDefaultAtts * 2; in defineAttribute()
6042 REALLOC(parser, type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE))); in defineAttribute()
6045 type->allocDefaultAtts = count; in defineAttribute()
6046 type->defaultAtts = temp; in defineAttribute()
6049 att = type->defaultAtts + type->nDefaultAtts; in defineAttribute()
6050 att->id = attId; in defineAttribute()
6051 att->value = value; in defineAttribute()
6052 att->isCdata = isCdata; in defineAttribute()
6054 attId->maybeTokenized = XML_TRUE; in defineAttribute()
6055 type->nDefaultAtts += 1; in defineAttribute()
6062 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in setElementTypePrefix()
6064 for (name = elementType->name; *name; name++) { in setElementTypePrefix()
6068 for (s = elementType->name; s != name; s++) { in setElementTypePrefix()
6069 if (!poolAppendChar(&dtd->pool, *s)) in setElementTypePrefix()
6072 if (!poolAppendChar(&dtd->pool, XML_T('\0'))) in setElementTypePrefix()
6074 prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&dtd->pool), in setElementTypePrefix()
6078 if (prefix->name == poolStart(&dtd->pool)) in setElementTypePrefix()
6079 poolFinish(&dtd->pool); in setElementTypePrefix()
6081 poolDiscard(&dtd->pool); in setElementTypePrefix()
6082 elementType->prefix = prefix; in setElementTypePrefix()
6093 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in getAttributeId()
6096 if (!poolAppendChar(&dtd->pool, XML_T('\0'))) in getAttributeId()
6098 name = poolStoreString(&dtd->pool, enc, start, end); in getAttributeId()
6101 /* skip quotation mark - its storage will be re-used (like in name[-1]) */ in getAttributeId()
6103 id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, name, sizeof(ATTRIBUTE_ID)); in getAttributeId()
6106 if (id->name != name) in getAttributeId()
6107 poolDiscard(&dtd->pool); in getAttributeId()
6109 poolFinish(&dtd->pool); in getAttributeId()
6110 if (!parser->m_ns) in getAttributeId()
6119 id->prefix = &dtd->defaultPrefix; in getAttributeId()
6121 id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, name + 6, sizeof(PREFIX)); in getAttributeId()
6122 id->xmlns = XML_TRUE; in getAttributeId()
6131 if (!poolAppendChar(&dtd->pool, name[j])) in getAttributeId()
6134 if (!poolAppendChar(&dtd->pool, XML_T('\0'))) in getAttributeId()
6136 id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&dtd->pool), in getAttributeId()
6138 if (!id->prefix) in getAttributeId()
6140 if (id->prefix->name == poolStart(&dtd->pool)) in getAttributeId()
6141 poolFinish(&dtd->pool); in getAttributeId()
6143 poolDiscard(&dtd->pool); in getAttributeId()
6157 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in getContext()
6161 if (dtd->defaultPrefix.binding) { in getContext()
6164 if (!poolAppendChar(&parser->m_tempPool, XML_T(ASCII_EQUALS))) in getContext()
6166 len = dtd->defaultPrefix.binding->uriLen; in getContext()
6167 if (parser->m_namespaceSeparator) in getContext()
6168 len--; in getContext()
6170 if (!poolAppendChar(&parser->m_tempPool, dtd->defaultPrefix.binding->uri[i])) { in getContext()
6196 hashTableIterInit(&iter, &(dtd->prefixes)); in getContext()
6204 if (!prefix->binding) { in getContext()
6213 if (needSep && !poolAppendChar(&parser->m_tempPool, CONTEXT_SEP)) in getContext()
6215 for (s = prefix->name; *s; s++) in getContext()
6216 if (!poolAppendChar(&parser->m_tempPool, *s)) in getContext()
6218 if (!poolAppendChar(&parser->m_tempPool, XML_T(ASCII_EQUALS))) in getContext()
6220 len = prefix->binding->uriLen; in getContext()
6221 if (parser->m_namespaceSeparator) in getContext()
6222 len--; in getContext()
6224 if (!poolAppendChar(&parser->m_tempPool, prefix->binding->uri[i])) in getContext()
6230 hashTableIterInit(&iter, &(dtd->generalEntities)); in getContext()
6236 if (!e->open) in getContext()
6238 if (needSep && !poolAppendChar(&parser->m_tempPool, CONTEXT_SEP)) in getContext()
6240 for (s = e->name; *s; s++) in getContext()
6241 if (!poolAppendChar(&parser->m_tempPool, *s)) in getContext()
6246 if (!poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in getContext()
6248 return parser->m_tempPool.start; in getContext()
6254 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in setContext()
6260 if (!poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in setContext()
6262 e = (ENTITY *)lookup(parser, &dtd->generalEntities, poolStart(&parser->m_tempPool), 0); in setContext()
6264 e->open = XML_TRUE; in setContext()
6268 poolDiscard(&parser->m_tempPool); in setContext()
6272 if (poolLength(&parser->m_tempPool) == 0) in setContext()
6273 prefix = &dtd->defaultPrefix; in setContext()
6275 if (!poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in setContext()
6277 prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&parser->m_tempPool), in setContext()
6281 if (prefix->name == poolStart(&parser->m_tempPool)) { in setContext()
6282 prefix->name = poolCopyString(&dtd->pool, prefix->name); in setContext()
6283 if (!prefix->name) in setContext()
6286 poolDiscard(&parser->m_tempPool); in setContext()
6291 if (!poolAppendChar(&parser->m_tempPool, *context)) in setContext()
6293 if (!poolAppendChar(&parser->m_tempPool, XML_T('\0'))) in setContext()
6295 if (addBinding(parser, prefix, NULL, poolStart(&parser->m_tempPool), in setContext()
6296 &parser->m_inheritedBindings) != XML_ERROR_NONE) in setContext()
6298 poolDiscard(&parser->m_tempPool); in setContext()
6304 if (!poolAppendChar(&parser->m_tempPool, *s)) in setContext()
6322 if (p != publicId && p[-1] != 0x20) in normalizePublicId()
6329 if (p != publicId && p[-1] == 0x20) in normalizePublicId()
6330 --p; in normalizePublicId()
6337 DTD *p = (DTD *)ms->malloc_fcn(sizeof(DTD)); in dtdCreate()
6340 poolInit(&(p->pool), ms); in dtdCreate()
6341 poolInit(&(p->entityValuePool), ms); in dtdCreate()
6342 hashTableInit(&(p->generalEntities), ms); in dtdCreate()
6343 hashTableInit(&(p->elementTypes), ms); in dtdCreate()
6344 hashTableInit(&(p->attributeIds), ms); in dtdCreate()
6345 hashTableInit(&(p->prefixes), ms); in dtdCreate()
6347 p->paramEntityRead = XML_FALSE; in dtdCreate()
6348 hashTableInit(&(p->paramEntities), ms); in dtdCreate()
6350 p->defaultPrefix.name = NULL; in dtdCreate()
6351 p->defaultPrefix.binding = NULL; in dtdCreate()
6353 p->in_eldecl = XML_FALSE; in dtdCreate()
6354 p->scaffIndex = NULL; in dtdCreate()
6355 p->scaffold = NULL; in dtdCreate()
6356 p->scaffLevel = 0; in dtdCreate()
6357 p->scaffSize = 0; in dtdCreate()
6358 p->scaffCount = 0; in dtdCreate()
6359 p->contentStringLen = 0; in dtdCreate()
6361 p->keepProcessing = XML_TRUE; in dtdCreate()
6362 p->hasParamEntityRefs = XML_FALSE; in dtdCreate()
6363 p->standalone = XML_FALSE; in dtdCreate()
6371 hashTableIterInit(&iter, &(p->elementTypes)); in dtdReset()
6376 if (e->allocDefaultAtts != 0) in dtdReset()
6377 ms->free_fcn(e->defaultAtts); in dtdReset()
6379 hashTableClear(&(p->generalEntities)); in dtdReset()
6381 p->paramEntityRead = XML_FALSE; in dtdReset()
6382 hashTableClear(&(p->paramEntities)); in dtdReset()
6384 hashTableClear(&(p->elementTypes)); in dtdReset()
6385 hashTableClear(&(p->attributeIds)); in dtdReset()
6386 hashTableClear(&(p->prefixes)); in dtdReset()
6387 poolClear(&(p->pool)); in dtdReset()
6388 poolClear(&(p->entityValuePool)); in dtdReset()
6389 p->defaultPrefix.name = NULL; in dtdReset()
6390 p->defaultPrefix.binding = NULL; in dtdReset()
6392 p->in_eldecl = XML_FALSE; in dtdReset()
6394 ms->free_fcn(p->scaffIndex); in dtdReset()
6395 p->scaffIndex = NULL; in dtdReset()
6396 ms->free_fcn(p->scaffold); in dtdReset()
6397 p->scaffold = NULL; in dtdReset()
6399 p->scaffLevel = 0; in dtdReset()
6400 p->scaffSize = 0; in dtdReset()
6401 p->scaffCount = 0; in dtdReset()
6402 p->contentStringLen = 0; in dtdReset()
6404 p->keepProcessing = XML_TRUE; in dtdReset()
6405 p->hasParamEntityRefs = XML_FALSE; in dtdReset()
6406 p->standalone = XML_FALSE; in dtdReset()
6413 hashTableIterInit(&iter, &(p->elementTypes)); in dtdDestroy()
6418 if (e->allocDefaultAtts != 0) in dtdDestroy()
6419 ms->free_fcn(e->defaultAtts); in dtdDestroy()
6421 hashTableDestroy(&(p->generalEntities)); in dtdDestroy()
6423 hashTableDestroy(&(p->paramEntities)); in dtdDestroy()
6425 hashTableDestroy(&(p->elementTypes)); in dtdDestroy()
6426 hashTableDestroy(&(p->attributeIds)); in dtdDestroy()
6427 hashTableDestroy(&(p->prefixes)); in dtdDestroy()
6428 poolDestroy(&(p->pool)); in dtdDestroy()
6429 poolDestroy(&(p->entityValuePool)); in dtdDestroy()
6431 ms->free_fcn(p->scaffIndex); in dtdDestroy()
6432 ms->free_fcn(p->scaffold); in dtdDestroy()
6434 ms->free_fcn(p); in dtdDestroy()
6437 /* Do a deep copy of the DTD. Return 0 for out of memory, non-zero otherwise.
6447 hashTableIterInit(&iter, &(oldDtd->prefixes)); in dtdCopy()
6453 name = poolCopyString(&(newDtd->pool), oldP->name); in dtdCopy()
6456 if (!lookup(oldParser, &(newDtd->prefixes), name, sizeof(PREFIX))) in dtdCopy()
6460 hashTableIterInit(&iter, &(oldDtd->attributeIds)); in dtdCopy()
6472 if (!poolAppendChar(&(newDtd->pool), XML_T('\0'))) in dtdCopy()
6474 name = poolCopyString(&(newDtd->pool), oldA->name); in dtdCopy()
6478 newA = (ATTRIBUTE_ID *)lookup(oldParser, &(newDtd->attributeIds), name, in dtdCopy()
6482 newA->maybeTokenized = oldA->maybeTokenized; in dtdCopy()
6483 if (oldA->prefix) { in dtdCopy()
6484 newA->xmlns = oldA->xmlns; in dtdCopy()
6485 if (oldA->prefix == &oldDtd->defaultPrefix) in dtdCopy()
6486 newA->prefix = &newDtd->defaultPrefix; in dtdCopy()
6488 newA->prefix = (PREFIX *)lookup(oldParser, &(newDtd->prefixes), in dtdCopy()
6489 oldA->prefix->name, 0); in dtdCopy()
6495 hashTableIterInit(&iter, &(oldDtd->elementTypes)); in dtdCopy()
6504 name = poolCopyString(&(newDtd->pool), oldE->name); in dtdCopy()
6507 newE = (ELEMENT_TYPE *)lookup(oldParser, &(newDtd->elementTypes), name, in dtdCopy()
6511 if (oldE->nDefaultAtts) { in dtdCopy()
6512 newE->defaultAtts = (DEFAULT_ATTRIBUTE *) in dtdCopy()
6513 ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); in dtdCopy()
6514 if (!newE->defaultAtts) { in dtdCopy()
6518 if (oldE->idAtt) in dtdCopy()
6519 newE->idAtt = (ATTRIBUTE_ID *) in dtdCopy()
6520 lookup(oldParser, &(newDtd->attributeIds), oldE->idAtt->name, 0); in dtdCopy()
6521 newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; in dtdCopy()
6522 if (oldE->prefix) in dtdCopy()
6523 newE->prefix = (PREFIX *)lookup(oldParser, &(newDtd->prefixes), in dtdCopy()
6524 oldE->prefix->name, 0); in dtdCopy()
6525 for (i = 0; i < newE->nDefaultAtts; i++) { in dtdCopy()
6526 newE->defaultAtts[i].id = (ATTRIBUTE_ID *) in dtdCopy()
6527 lookup(oldParser, &(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); in dtdCopy()
6528 newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; in dtdCopy()
6529 if (oldE->defaultAtts[i].value) { in dtdCopy()
6530 newE->defaultAtts[i].value in dtdCopy()
6531 = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); in dtdCopy()
6532 if (!newE->defaultAtts[i].value) in dtdCopy()
6536 newE->defaultAtts[i].value = NULL; in dtdCopy()
6542 &(newDtd->generalEntities), in dtdCopy()
6543 &(newDtd->pool), in dtdCopy()
6544 &(oldDtd->generalEntities))) in dtdCopy()
6549 &(newDtd->paramEntities), in dtdCopy()
6550 &(newDtd->pool), in dtdCopy()
6551 &(oldDtd->paramEntities))) in dtdCopy()
6553 newDtd->paramEntityRead = oldDtd->paramEntityRead; in dtdCopy()
6556 newDtd->keepProcessing = oldDtd->keepProcessing; in dtdCopy()
6557 newDtd->hasParamEntityRefs = oldDtd->hasParamEntityRefs; in dtdCopy()
6558 newDtd->standalone = oldDtd->standalone; in dtdCopy()
6561 newDtd->in_eldecl = oldDtd->in_eldecl; in dtdCopy()
6562 newDtd->scaffold = oldDtd->scaffold; in dtdCopy()
6563 newDtd->contentStringLen = oldDtd->contentStringLen; in dtdCopy()
6564 newDtd->scaffSize = oldDtd->scaffSize; in dtdCopy()
6565 newDtd->scaffLevel = oldDtd->scaffLevel; in dtdCopy()
6566 newDtd->scaffIndex = oldDtd->scaffIndex; in dtdCopy()
6589 name = poolCopyString(newPool, oldE->name); in copyEntityTable()
6595 if (oldE->systemId) { in copyEntityTable()
6596 const XML_Char *tem = poolCopyString(newPool, oldE->systemId); in copyEntityTable()
6599 newE->systemId = tem; in copyEntityTable()
6600 if (oldE->base) { in copyEntityTable()
6601 if (oldE->base == cachedOldBase) in copyEntityTable()
6602 newE->base = cachedNewBase; in copyEntityTable()
6604 cachedOldBase = oldE->base; in copyEntityTable()
6608 cachedNewBase = newE->base = tem; in copyEntityTable()
6611 if (oldE->publicId) { in copyEntityTable()
6612 tem = poolCopyString(newPool, oldE->publicId); in copyEntityTable()
6615 newE->publicId = tem; in copyEntityTable()
6619 const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, in copyEntityTable()
6620 oldE->textLen); in copyEntityTable()
6623 newE->textPtr = tem; in copyEntityTable()
6624 newE->textLen = oldE->textLen; in copyEntityTable()
6626 if (oldE->notation) { in copyEntityTable()
6627 const XML_Char *tem = poolCopyString(newPool, oldE->notation); in copyEntityTable()
6630 newE->notation = tem; in copyEntityTable()
6632 newE->is_param = oldE->is_param; in copyEntityTable()
6633 newE->is_internal = oldE->is_internal; in copyEntityTable()
6660 key->k[0] = 0; in copy_salt_to_sipkey()
6661 key->k[1] = get_hash_secret_salt(parser); in copy_salt_to_sipkey()
6680 if (table->size == 0) { in lookup()
6684 table->power = INIT_POWER; in lookup()
6685 /* table->size is a power of 2 */ in lookup()
6686 table->size = (size_t)1 << INIT_POWER; in lookup()
6687 tsize = table->size * sizeof(NAMED *); in lookup()
6688 table->v = (NAMED **)table->mem->malloc_fcn(tsize); in lookup()
6689 if (!table->v) { in lookup()
6690 table->size = 0; in lookup()
6693 memset(table->v, 0, tsize); in lookup()
6694 i = hash(parser, name) & ((unsigned long)table->size - 1); in lookup()
6698 unsigned long mask = (unsigned long)table->size - 1; in lookup()
6701 while (table->v[i]) { in lookup()
6702 if (keyeq(name, table->v[i]->name)) in lookup()
6703 return table->v[i]; in lookup()
6705 step = PROBE_STEP(h, mask, table->power); in lookup()
6706 i < step ? (i += table->size - step) : (i -= step); in lookup()
6712 if (table->used >> (table->power - 1)) { in lookup()
6713 unsigned char newPower = table->power + 1; in lookup()
6715 unsigned long newMask = (unsigned long)newSize - 1; in lookup()
6717 NAMED **newV = (NAMED **)table->mem->malloc_fcn(tsize); in lookup()
6721 for (i = 0; i < table->size; i++) in lookup()
6722 if (table->v[i]) { in lookup()
6723 unsigned long newHash = hash(parser, table->v[i]->name); in lookup()
6729 j < step ? (j += newSize - step) : (j -= step); in lookup()
6731 newV[j] = table->v[i]; in lookup()
6733 table->mem->free_fcn(table->v); in lookup()
6734 table->v = newV; in lookup()
6735 table->power = newPower; in lookup()
6736 table->size = newSize; in lookup()
6739 while (table->v[i]) { in lookup()
6742 i < step ? (i += newSize - step) : (i -= step); in lookup()
6746 table->v[i] = (NAMED *)table->mem->malloc_fcn(createSize); in lookup()
6747 if (!table->v[i]) in lookup()
6749 memset(table->v[i], 0, createSize); in lookup()
6750 table->v[i]->name = name; in lookup()
6751 (table->used)++; in lookup()
6752 return table->v[i]; in lookup()
6759 for (i = 0; i < table->size; i++) { in hashTableClear()
6760 table->mem->free_fcn(table->v[i]); in hashTableClear()
6761 table->v[i] = NULL; in hashTableClear()
6763 table->used = 0; in hashTableClear()
6770 for (i = 0; i < table->size; i++) in hashTableDestroy()
6771 table->mem->free_fcn(table->v[i]); in hashTableDestroy()
6772 table->mem->free_fcn(table->v); in hashTableDestroy()
6778 p->power = 0; in hashTableInit()
6779 p->size = 0; in hashTableInit()
6780 p->used = 0; in hashTableInit()
6781 p->v = NULL; in hashTableInit()
6782 p->mem = ms; in hashTableInit()
6788 iter->p = table->v; in hashTableIterInit()
6789 iter->end = iter->p + table->size; in hashTableIterInit()
6795 while (iter->p != iter->end) { in hashTableIterNext()
6796 NAMED *tem = *(iter->p)++; in hashTableIterNext()
6806 pool->blocks = NULL; in poolInit()
6807 pool->freeBlocks = NULL; in poolInit()
6808 pool->start = NULL; in poolInit()
6809 pool->ptr = NULL; in poolInit()
6810 pool->end = NULL; in poolInit()
6811 pool->mem = ms; in poolInit()
6817 if (!pool->freeBlocks) in poolClear()
6818 pool->freeBlocks = pool->blocks; in poolClear()
6820 BLOCK *p = pool->blocks; in poolClear()
6822 BLOCK *tem = p->next; in poolClear()
6823 p->next = pool->freeBlocks; in poolClear()
6824 pool->freeBlocks = p; in poolClear()
6828 pool->blocks = NULL; in poolClear()
6829 pool->start = NULL; in poolClear()
6830 pool->ptr = NULL; in poolClear()
6831 pool->end = NULL; in poolClear()
6837 BLOCK *p = pool->blocks; in poolDestroy()
6839 BLOCK *tem = p->next; in poolDestroy()
6840 pool->mem->free_fcn(p); in poolDestroy()
6843 p = pool->freeBlocks; in poolDestroy()
6845 BLOCK *tem = p->next; in poolDestroy()
6846 pool->mem->free_fcn(p); in poolDestroy()
6855 if (!pool->ptr && !poolGrow(pool)) in poolAppend()
6858 …onvert_Result convert_res = XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); in poolAppend()
6864 return pool->start; in poolAppend()
6874 s = pool->start; in poolCopyString()
6882 if (!pool->ptr && !poolGrow(pool)) { in poolCopyStringN()
6887 * pool->ptr cannot be NULL. in poolCopyStringN()
6896 for (; n > 0; --n, s++) { in poolCopyStringN()
6900 s = pool->start; in poolCopyStringN()
6913 return pool->start; in poolAppendString()
6922 if (pool->ptr == pool->end && !poolGrow(pool)) in poolStoreString()
6924 *(pool->ptr)++ = 0; in poolStoreString()
6925 return pool->start; in poolStoreString()
6936 ** on top has no chance of making us accept a small non-negative number in poolBytesToAllocateFor()
6960 if (pool->freeBlocks) { in poolGrow()
6961 if (pool->start == 0) { in poolGrow()
6962 pool->blocks = pool->freeBlocks; in poolGrow()
6963 pool->freeBlocks = pool->freeBlocks->next; in poolGrow()
6964 pool->blocks->next = NULL; in poolGrow()
6965 pool->start = pool->blocks->s; in poolGrow()
6966 pool->end = pool->start + pool->blocks->size; in poolGrow()
6967 pool->ptr = pool->start; in poolGrow()
6970 if (pool->end - pool->start < pool->freeBlocks->size) { in poolGrow()
6971 BLOCK *tem = pool->freeBlocks->next; in poolGrow()
6972 pool->freeBlocks->next = pool->blocks; in poolGrow()
6973 pool->blocks = pool->freeBlocks; in poolGrow()
6974 pool->freeBlocks = tem; in poolGrow()
6975 memcpy(pool->blocks->s, pool->start, in poolGrow()
6976 (pool->end - pool->start) * sizeof(XML_Char)); in poolGrow()
6977 pool->ptr = pool->blocks->s + (pool->ptr - pool->start); in poolGrow()
6978 pool->start = pool->blocks->s; in poolGrow()
6979 pool->end = pool->start + pool->blocks->size; in poolGrow()
6983 if (pool->blocks && pool->start == pool->blocks->s) { in poolGrow()
6985 int blockSize = (int)((unsigned)(pool->end - pool->start)*2U); in poolGrow()
6990 const ptrdiff_t offsetInsideBlock = pool->ptr - pool->start; in poolGrow()
7007 pool->mem->realloc_fcn(pool->blocks, (unsigned)bytesToAllocate); in poolGrow()
7010 pool->blocks = temp; in poolGrow()
7011 pool->blocks->size = blockSize; in poolGrow()
7012 pool->ptr = pool->blocks->s + offsetInsideBlock; in poolGrow()
7013 pool->start = pool->blocks->s; in poolGrow()
7014 pool->end = pool->start + blockSize; in poolGrow()
7018 int blockSize = (int)(pool->end - pool->start); in poolGrow()
7048 tem = (BLOCK *)pool->mem->malloc_fcn(bytesToAllocate); in poolGrow()
7051 tem->size = blockSize; in poolGrow()
7052 tem->next = pool->blocks; in poolGrow()
7053 pool->blocks = tem; in poolGrow()
7054 if (pool->ptr != pool->start) in poolGrow()
7055 memcpy(tem->s, pool->start, in poolGrow()
7056 (pool->ptr - pool->start) * sizeof(XML_Char)); in poolGrow()
7057 pool->ptr = tem->s + (pool->ptr - pool->start); in poolGrow()
7058 pool->start = tem->s; in poolGrow()
7059 pool->end = tem->s + blockSize; in poolGrow()
7067 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in nextScaffoldPart()
7071 if (!dtd->scaffIndex) { in nextScaffoldPart()
7072 dtd->scaffIndex = (int *)MALLOC(parser, parser->m_groupSize * sizeof(int)); in nextScaffoldPart()
7073 if (!dtd->scaffIndex) in nextScaffoldPart()
7074 return -1; in nextScaffoldPart()
7075 dtd->scaffIndex[0] = 0; in nextScaffoldPart()
7078 if (dtd->scaffCount >= dtd->scaffSize) { in nextScaffoldPart()
7080 if (dtd->scaffold) { in nextScaffoldPart()
7082 REALLOC(parser, dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD)); in nextScaffoldPart()
7084 return -1; in nextScaffoldPart()
7085 dtd->scaffSize *= 2; in nextScaffoldPart()
7091 return -1; in nextScaffoldPart()
7092 dtd->scaffSize = INIT_SCAFFOLD_ELEMENTS; in nextScaffoldPart()
7094 dtd->scaffold = temp; in nextScaffoldPart()
7096 next = dtd->scaffCount++; in nextScaffoldPart()
7097 me = &dtd->scaffold[next]; in nextScaffoldPart()
7098 if (dtd->scaffLevel) { in nextScaffoldPart()
7099 CONTENT_SCAFFOLD *parent = &dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel-1]]; in nextScaffoldPart()
7100 if (parent->lastchild) { in nextScaffoldPart()
7101 dtd->scaffold[parent->lastchild].nextsib = next; in nextScaffoldPart()
7103 if (!parent->childcnt) in nextScaffoldPart()
7104 parent->firstchild = next; in nextScaffoldPart()
7105 parent->lastchild = next; in nextScaffoldPart()
7106 parent->childcnt++; in nextScaffoldPart()
7108 me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; in nextScaffoldPart()
7119 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in build_node()
7120 dest->type = dtd->scaffold[src_node].type; in build_node()
7121 dest->quant = dtd->scaffold[src_node].quant; in build_node()
7122 if (dest->type == XML_CTYPE_NAME) { in build_node()
7124 dest->name = *strpos; in build_node()
7125 src = dtd->scaffold[src_node].name; in build_node()
7132 dest->numchildren = 0; in build_node()
7133 dest->children = NULL; in build_node()
7138 dest->numchildren = dtd->scaffold[src_node].childcnt; in build_node()
7139 dest->children = *contpos; in build_node()
7140 *contpos += dest->numchildren; in build_node()
7141 for (i = 0, cn = dtd->scaffold[src_node].firstchild; in build_node()
7142 i < dest->numchildren; in build_node()
7143 i++, cn = dtd->scaffold[cn].nextsib) { in build_node()
7144 build_node(parser, cn, &(dest->children[i]), contpos, strpos); in build_node()
7146 dest->name = NULL; in build_node()
7153 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in build_model()
7157 int allocsize = (dtd->scaffCount * sizeof(XML_Content) in build_model()
7158 + (dtd->contentStringLen * sizeof(XML_Char))); in build_model()
7164 str = (XML_Char *) (&ret[dtd->scaffCount]); in build_model()
7177 DTD * const dtd = parser->m_dtd; /* save one level of indirection */ in getElementType()
7178 const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end); in getElementType()
7183 ret = (ELEMENT_TYPE *) lookup(parser, &dtd->elementTypes, name, sizeof(ELEMENT_TYPE)); in getElementType()
7186 if (ret->name != name) in getElementType()
7187 poolDiscard(&dtd->pool); in getElementType()
7189 poolFinish(&dtd->pool); in getElementType()
7211 result = memsuite->malloc_fcn(charsRequired * sizeof(XML_Char)); in copyString()