summaryrefslogtreecommitdiff
path: root/ext/dom
diff options
context:
space:
mode:
authorMichael Wallner <mike@php.net>2013-12-02 17:01:25 +0100
committerMichael Wallner <mike@php.net>2013-12-02 17:01:25 +0100
commit9c0a70c1de5ff0f53167822ddd445918db2fb482 (patch)
treebfbfce58fbe24de9bce8ee02a2318e6d01a602cd /ext/dom
parent6eae92741345515c0f55d1b1672c9463eee60463 (diff)
parent22fa3fbc5ffe75349c0edb6b776b6fb1168cb21c (diff)
downloadphp-git-9c0a70c1de5ff0f53167822ddd445918db2fb482.tar.gz
Merge branch 'PHP-5.4' into PHP-5.5
* PHP-5.4: Fix bug #65196
Diffstat (limited to 'ext/dom')
-rw-r--r--ext/dom/document.c17
-rw-r--r--ext/dom/tests/bug65196.phpt26
2 files changed, 42 insertions, 1 deletions
diff --git a/ext/dom/document.c b/ext/dom/document.c
index efe6d9070f..51e75ac365 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -2332,7 +2332,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 0000000000..c77f97222f
--- /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===