Skip to content

Commit 076ddf2

Browse files
tstarlingnielsdos
authored andcommitted
Also avoid entity expansion in DOMAttr::$nodeValue
1 parent ee68c22 commit 076ddf2

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

ext/dom/node.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,11 @@ int dom_node_node_value_write(dom_object *obj, zval *newval)
177177

178178
/* Access to Element node is implemented as a convenience method */
179179
switch (nodep->type) {
180-
case XML_ELEMENT_NODE:
181180
case XML_ATTRIBUTE_NODE:
181+
dom_remove_all_children(nodep);
182+
xmlAddChild(nodep, xmlNewTextLen((xmlChar *) ZSTR_VAL(str), ZSTR_LEN(str)));
183+
break;
184+
case XML_ELEMENT_NODE:
182185
dom_remove_all_children(nodep);
183186
ZEND_FALLTHROUGH;
184187
case XML_TEXT_NODE:

ext/dom/tests/DOMAttr_entity_expansion.phpt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ print $doc->saveXML($elt) . "\n";
1515
$attr->removeChild($attr->firstChild);
1616
print $doc->saveXML($elt) . "\n";
1717

18+
$attr->nodeValue = '&';
19+
print $doc->saveXML($elt) . "\n";
20+
21+
$attr->nodeValue = '&';
22+
print $doc->saveXML($elt) . "\n";
23+
24+
$elt->removeAttributeNode($attr);
1825
$elt->setAttributeNS('http://www.w3.org/2000/svg', 'svg:id','&');
1926
print $doc->saveXML($elt) . "\n";
2027

@@ -26,5 +33,7 @@ print $doc->saveXML($elt) . "\n";
2633
<elt a="&amp;"/>
2734
<elt a="&amp;amp;"/>
2835
<elt a=""/>
29-
<elt xmlns:svg="http://www.w3.org/2000/svg" a="" svg:id="&amp;amp;"/>
30-
<elt xmlns:svg="http://www.w3.org/2000/svg" a="" svg:id="&amp;lt;&amp;amp;"/>
36+
<elt a="&amp;"/>
37+
<elt a="&amp;amp;"/>
38+
<elt xmlns:svg="http://www.w3.org/2000/svg" svg:id="&amp;amp;"/>
39+
<elt xmlns:svg="http://www.w3.org/2000/svg" svg:id="&amp;lt;&amp;amp;"/>

0 commit comments

Comments
 (0)