int z = 0;
int y = 0;
+ if (nb_namespaces > 0 && parser->h_start_ns != NULL) {
+ for (i = 0; i < nb_namespaces; i += 1) {
+ parser->h_start_ns(parser->user, (const XML_Char *) namespaces[y], (const XML_Char *) namespaces[y+1]);
+ y += 2;
+ }
+ y = 0;
+ }
+
if (parser->h_start_element == NULL) {
return;
}
(*entity)[*entity_len] = '\0';
}
-static xmlEntityPtr
-_get_entity(void *user, const xmlChar *name)
+static void
+_external_entity_ref_handler(void *user, const xmlChar *names, int type, const xmlChar *sys_id, const xmlChar *pub_id, xmlChar *content)
{
XML_Parser parser = (XML_Parser) user;
- if (parser->h_default) {
- xmlChar *entity;
- int len;
-
- _build_entity(name, xmlStrlen(name), &entity, &len);
- parser->h_default(parser->user, (const xmlChar *) entity, len);
- xmlFree(entity);
+ if (parser->h_external_entity_ref == NULL) {
+ return;
}
- return NULL;
+ parser->h_external_entity_ref(parser, names, "", sys_id, pub_id);
}
-static void
-_external_entity_ref_handler(void *user, const xmlChar *names, int type, const xmlChar *sys_id, const xmlChar *pub_id, xmlChar *content)
+static xmlEntityPtr
+_get_entity(void *user, const xmlChar *name)
{
XML_Parser parser = (XML_Parser) user;
+ xmlEntityPtr ret = NULL;
- if (parser->h_external_entity_ref == NULL) {
- return;
+ if (parser->parser->inSubset == 0) {
+ ret = xmlGetPredefinedEntity(name);
+ if (ret == NULL)
+ ret = xmlGetDocEntity(parser->parser->myDoc, name);
+
+
+ if (ret == NULL || (parser->parser->instate != XML_PARSER_ENTITY_VALUE && parser->parser->instate != XML_PARSER_ATTRIBUTE_VALUE)) {
+ if (ret == NULL || ret->etype == XML_INTERNAL_GENERAL_ENTITY || ret->etype == XML_INTERNAL_PARAMETER_ENTITY || ret->etype == XML_INTERNAL_PREDEFINED_ENTITY) {
+ if (parser->h_default) {
+ xmlChar *entity;
+ int len;
+
+ _build_entity(name, xmlStrlen(name), &entity, &len);
+ parser->h_default(parser->user, (const xmlChar *) entity, len);
+ xmlFree(entity);
+ }
+ } else {
+ if (ret->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
+ _external_entity_ref_handler(user, ret->name, ret->etype, ret->SystemID, ret->ExternalID, NULL);
+ }
+ }
+ }
}
- parser->h_external_entity_ref(parser, names, "", sys_id, pub_id);
+ return ret;
}
static xmlSAXHandler
NULL, /* hasExternalSubset */
NULL, /* resolveEntity */
_get_entity, /* getEntity */
- _external_entity_ref_handler, /* entityDecl */
+ NULL, /* entityDecl */
_notation_decl_handler,
NULL, /* attributeDecl */
NULL, /* elementDecl */
parser->parser->charset = XML_CHAR_ENCODING_NONE;
}
parser->parser->replaceEntities = 1;
+ parser->parser->wellFormed = 0;
if (sep != NULL) {
parser->use_namespace = 1;
#if LIBXML_VERSION >= 20600