File tree Expand file tree Collapse file tree 3 files changed +8
-77
lines changed Expand file tree Collapse file tree 3 files changed +8
-77
lines changed Load Diff This file was deleted.
Original file line number Diff line number Diff line change @@ -9,32 +9,16 @@ $doc->loadXML(<<<'XML'
99<?xml version="1.0"?>
1010<!DOCTYPE books [
1111<!ENTITY test "entity is only for test purposes">
12- <!ENTITY myimage PUBLIC "-" "mypicture.gif" NDATA GIF>
1312]>
1413<container/>
1514XML);
16- $ ref1 = $ doc ->createEntityReference ("test " );
17- $ ref2 = $ doc ->createEntityReference ("myimage " );
18- $ entity1 = $ doc ->doctype ->entities [0 ];
19- $ entity2 = $ doc ->doctype ->entities [1 ];
20-
21- // Entity order depends on addresses
22- if ($ entity1 ->nodeName !== "test " ) {
23- [$ entity1 , $ entity2 ] = [$ entity2 , $ entity1 ];
24- }
25-
26- var_dump ($ entity1 ->nodeName , $ entity1 ->parentNode ->nodeName );
27- var_dump ($ entity2 ->nodeName , $ entity2 ->parentNode ->nodeName );
15+ $ entity = $ doc ->doctype ->entities [0 ];
16+ var_dump ($ entity ->nodeName , $ entity ->parentNode ->nodeName );
2817$ doc ->removeChild ($ doc ->doctype );
29- var_dump ($ entity1 ->nodeName , $ entity1 ->parentNode );
30- var_dump ($ entity2 ->nodeName , $ entity2 ->parentNode );
18+ var_dump ($ entity ->nodeName , $ entity ->parentNode );
3119?>
3220--EXPECT--
3321string(4) "test"
3422string(5) "books"
35- string(7) "myimage"
36- string(5) "books"
3723string(4) "test"
3824NULL
39- string(7) "myimage"
40- NULL
Original file line number Diff line number Diff line change @@ -208,10 +208,12 @@ static void php_libxml_node_free(xmlNodePtr node)
208208 * dtd is attached to the document. This works around the issue by inspecting the parent directly. */
209209 case XML_ENTITY_DECL : {
210210 xmlEntityPtr entity = (xmlEntityPtr ) node ;
211- if (entity -> etype != XML_INTERNAL_PREDEFINED_ENTITY ) {
212- php_libxml_unlink_entity_decl (entity );
213- xmlFreeEntity (entity );
211+ php_libxml_unlink_entity_decl (entity );
212+ if (entity -> orig != NULL ) {
213+ xmlFree ((char * ) entity -> orig );
214+ entity -> orig = NULL ;
214215 }
216+ xmlFreeNode (node );
215217 break ;
216218 }
217219 case XML_NOTATION_NODE : {
@@ -1382,15 +1384,6 @@ PHP_LIBXML_API void php_libxml_node_free_resource(xmlNodePtr node)
13821384 case XML_DOCUMENT_NODE :
13831385 case XML_HTML_DOCUMENT_NODE :
13841386 break ;
1385- case XML_ENTITY_REF_NODE :
1386- /* Entity reference nodes are special: their children point to entity declarations,
1387- * but they don't own the declarations and therefore shouldn't free the children.
1388- * Moreover, there can be N>1 reference nodes for a single entity declarations. */
1389- php_libxml_unregister_node (node );
1390- if (node -> parent == NULL ) {
1391- php_libxml_node_free (node );
1392- }
1393- break ;
13941387 default :
13951388 if (node -> parent == NULL || node -> type == XML_NAMESPACE_DECL ) {
13961389 php_libxml_node_free_list ((xmlNodePtr ) node -> children );
You can’t perform that action at this time.
0 commit comments