]> granicus.if.org Git - php/commitdiff
internal entities get expanded if no default handler but cdata handler exists
authorRob Richards <rrichards@php.net>
Sun, 21 Nov 2004 14:25:15 +0000 (14:25 +0000)
committerRob Richards <rrichards@php.net>
Sun, 21 Nov 2004 14:25:15 +0000 (14:25 +0000)
ext/xml/compat.c

index 72a9b4ed012fc4c7e62348e62527138b1b8f06be..e0d7f08bd70e5d1c049f345aaa8ed3bfcfc77f54 100644 (file)
@@ -278,7 +278,6 @@ _get_entity(void *user, const xmlChar *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) {
@@ -288,6 +287,12 @@ _get_entity(void *user, const xmlChar *name)
                                        _build_entity(name, xmlStrlen(name), &entity, &len);
                                        parser->h_default(parser->user, (const xmlChar *) entity, len);
                                        xmlFree(entity);
+                               } else {
+                                       /* expat will not expand internal entities if default handler is present otherwise
+                                       it will expand and pass them to cdata handler */
+                                       if (parser->h_cdata && ret) {
+                                               parser->h_cdata(parser->user, ret->content, xmlStrlen(ret->content));
+                                       }
                                }
                        } else {
                                if (ret->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) {