com php-src: Fix bug #65196: NEWS ext/dom/document.c ext/dom/tests/bug65196.phpt
| From: | Michael Wallner | Date: | Mon, 02 Dec 2013 16:00:13 +0000 |
| Subject: | com php-src: Fix bug #65196: NEWS ext/dom/document.c ext/dom/tests/bug65196.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-74201@lists.php.net to get a copy of this message | ||
Commit: 22fa3fbc5ffe75349c0edb6b776b6fb1168cb21c
Author: Michael Wallner <mike@php.net> Mon, 2 Dec 2013 16:58:34 +0100
Parents: 6408a1a59e6d371cd488687e28e18815ea97984e
Branches: PHP-5.4 PHP-5.5 PHP-5.6 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=22fa3fbc5ffe75349c0edb6b776b6fb1168cb21c
Log:
Fix bug #65196
Passing DOMDocumentFragment to DOMDocument::saveHTML()
produces invalid markup, because a DocumentFragment is just a container
for child nodes and not a real node itself.
Bugs:
https://bugs.php.net/65196
Changed paths:
M NEWS
M ext/dom/document.c
A ext/dom/tests/bug65196.phpt
Diff:
diff --git a/NEWS b/NEWS
index bf759c8..3b20898 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,10 @@ PHP NEWS
1600). (Derick, T. Carter)
. Fixed bug #61599 (Wrong Day of Week). (Derick, T.. Carter)
+- DOM:
+ . Fixed bug #65196 (Passing DOMDocumentFragment to DOMDocument::saveHTML()
+ Produces invalid Markup). (Mike)
+
- XSL
. Fixed bug #49634 (Segfault throwing an exception in a XSL registered
function). (Mike)
diff --git a/ext/dom/document.c b/ext/dom/document.c
index d17c7cb..0826863 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -2324,7 +2324,22 @@ PHP_FUNCTION(dom_document_save_html)
RETURN_FALSE;
}
- size = htmlNodeDump(buf, docp, node);
+ if (node->type == XML_DOCUMENT_FRAG_NODE) {
+ int one_size;
+
+ for (node = node->children; node; node = node->next) {
+ one_size = htmlNodeDump(buf, docp, node);
+
+ if (one_size >= 0) {
+ size += one_size;
+ } else {
+ size = -1;
+ break;
+ }
+ }
+ } else {
+ size = htmlNodeDump(buf, docp, node);
+ }
if (size >= 0) {
mem = (xmlChar*) xmlBufferContent(buf);
if (!mem) {
diff --git a/ext/dom/tests/bug65196.phpt b/ext/dom/tests/bug65196.phpt
new file mode 100644
index 0000000..c77f972
--- /dev/null
+++ b/ext/dom/tests/bug65196.phpt
@@ -0,0 +1,26 @@
+--TEST--
+bug #65196 (Passing DOMDocumentFragment to DOMDocument::saveHTML() Produces invalid Markup)
+--SKIPIF--
+<?php
+extension_loaded("dom") or die("skip need ext/dom");
+?>
+--FILE--
+<?php
+$dom = new DOMDocument();
+
+$frag1 = $dom->createDocumentFragment();
+var_dump($dom->saveHTML($frag1));
+
+$frag2 = $dom->createDocumentFragment();
+$div = $dom->createElement('div');
+$div->appendChild($dom->createElement('span'));
+$frag2->appendChild($div);
+$frag2->appendChild($dom->createElement('div'));
+$frag2->appendChild($dom->createElement('div'));
+var_dump($dom->saveHTML($frag2));
+?>
+===DONE===
+--EXPECT--
+string(0) ""
+string(46)
"<div><span></span></div><div></div><div></div>"
+===DONE===