summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-04-07 13:05:37 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-04-07 13:07:33 +0200
commit13c9572a792bd3dc92f95ffd9569b460e788114d (patch)
tree90a4ba44b74038feeca6c37b69c01555675c72ba
parent22a077b642815a2e1c36ba03df906146c9ecbe50 (diff)
parentefec22b7bedfb1eae2df72b84cf5ad229e0bdc1e (diff)
downloadphp-git-13c9572a792bd3dc92f95ffd9569b460e788114d.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fix #78221: DOMNode::normalize() doesn't remove empty text nodes
-rw-r--r--NEWS4
-rw-r--r--ext/dom/php_dom.c8
-rw-r--r--ext/dom/tests/bug78221.phpt17
3 files changed, 29 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 5959a0373f..67d71eca64 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,10 @@ PHP NEWS
?? ??? ????, PHP 7.4.6
+- DOM:
+ . Fixed bug #78221 (DOMNode::normalize() doesn't remove empty text nodes).
+ (cmb)
+
- MBString:
. Fixed bug #79441 (Segfault in mb_chr() if internal encoding is unsupported).
(Girgias)
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
index 726b74b934..d5738e1060 100644
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@ -1385,6 +1385,14 @@ void dom_normalize (xmlNodePtr nodep)
break;
}
}
+ strContent = xmlNodeGetContent(child);
+ if (*strContent == '\0') {
+ nextp = child->next;
+ xmlUnlinkNode(child);
+ php_libxml_node_free_resource(child);
+ child = nextp;
+ continue;
+ }
break;
case XML_ELEMENT_NODE:
dom_normalize (child);
diff --git a/ext/dom/tests/bug78221.phpt b/ext/dom/tests/bug78221.phpt
new file mode 100644
index 0000000000..a9bf50d98e
--- /dev/null
+++ b/ext/dom/tests/bug78221.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #78221 (DOMNode::normalize() doesn't remove empty text nodes)
+--SKIPIF--
+<?php
+if (!extension_loaded('dom')) die('skip dom extension not available');
+?>
+--FILE--
+<?php
+$doc = new DOMDocument();
+$doc->loadHTML('<p id=x>foo</p>');
+$p = $doc->getElementById('x');
+$p->childNodes[0]->textContent = '';
+$p->normalize();
+var_dump($p->childNodes->length);
+?>
+--EXPECT--
+int(0)