diff options
author | Michael Wallner <mike@php.net> | 2013-12-02 17:01:25 +0100 |
---|---|---|
committer | Michael Wallner <mike@php.net> | 2013-12-02 17:01:25 +0100 |
commit | 9c0a70c1de5ff0f53167822ddd445918db2fb482 (patch) | |
tree | bfbfce58fbe24de9bce8ee02a2318e6d01a602cd /ext/dom | |
parent | 6eae92741345515c0f55d1b1672c9463eee60463 (diff) | |
parent | 22fa3fbc5ffe75349c0edb6b776b6fb1168cb21c (diff) | |
download | php-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.c | 17 | ||||
-rw-r--r-- | ext/dom/tests/bug65196.phpt | 26 |
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=== |