]> granicus.if.org Git - php/commitdiff
Revert "DOMDocument::formatOutput attribute sometimes ignored"
authorChristoph M. Becker <cmbecker69@gmx.de>
Tue, 14 Aug 2018 10:14:33 +0000 (12:14 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Tue, 14 Aug 2018 10:14:33 +0000 (12:14 +0200)
This reverts commit ef9ed19ec7f141311feea1d42467f5773cfc09bc and its
follow-up 36f05a80d7cf11fffb827c7f0b6c8e73d3846e8e, since these caused
a serious regression (see bug #76738).

NEWS
ext/dom/document.c
ext/dom/tests/bug76285.phpt [deleted file]

diff --git a/NEWS b/NEWS
index 767f78aa9cb587fc5821e9cc030fc750f219da2c..555f04b55a872257ebe03afb25a26ab3a3ec07fc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,10 @@ PHP                                                                        NEWS
 - Bz2:
   . Fixed arginfo for bzcompress. (Tyson Andre)
 
+- DOM:
+  . Reverted fix for bug #76285 (DOMDocument::formatOutput attribute sometimes
+    ignored). (cmb)
+
 - gettext:
   . Fixed bug #76517 (incorrect restoring of LDFLAGS). (sji)
 
index 6bbc0500b91346ce6bad658a0a351bf96129a0f0..2b029dc4037932ba686018fe6571755a74fd5487 100644 (file)
@@ -2148,7 +2148,6 @@ PHP_FUNCTION(dom_document_save_html)
        zval *id, *nodep = NULL;
        xmlDoc *docp;
        xmlNode *node;
-       xmlOutputBufferPtr outBuf;
        xmlBufferPtr buf;
        dom_object *intern, *nodeobj;
        xmlChar *mem = NULL;
@@ -2175,8 +2174,7 @@ PHP_FUNCTION(dom_document_save_html)
                }
 
                buf = xmlBufferCreate();
-               outBuf = xmlOutputBufferCreateBuffer(buf, NULL);
-               if (!outBuf || !buf) {
+               if (!buf) {
                        php_error_docref(NULL, E_WARNING, "Could not fetch buffer");
                        RETURN_FALSE;
                }
@@ -2185,33 +2183,20 @@ PHP_FUNCTION(dom_document_save_html)
                        int one_size;
 
                        for (node = node->children; node; node = node->next) {
-                               htmlNodeDumpFormatOutput(outBuf, docp, node, NULL, format);
-#ifdef LIBXML2_NEW_BUFFER
-                               one_size = !outBuf->error ? xmlOutputBufferGetSize(outBuf) : -1;
-#else
-                               one_size = !outBuf->error ? outBuf->buffer->use : -1;
-#endif
+                               one_size = htmlNodeDump(buf, docp, node);
+
                                if (one_size >= 0) {
-                                       size = one_size;
+                                       size += one_size;
                                } else {
                                        size = -1;
                                        break;
                                }
                        }
                } else {
-                       htmlNodeDumpFormatOutput(outBuf, docp, node, NULL, format);
-#ifdef LIBXML2_NEW_BUFFER
-                       size = !outBuf->error ? xmlOutputBufferGetSize(outBuf): -1;
-#else
-                       size = !outBuf->error ? outBuf->buffer->use : -1;
-#endif
+                       size = htmlNodeDump(buf, docp, node);
                }
                if (size >= 0) {
-#ifdef LIBXML2_NEW_BUFFER
-                       mem = (xmlChar*) xmlOutputBufferGetContent(outBuf);
-#else
-                       mem = (xmlChar*) outBuf->buffer->content;
-#endif
+                       mem = (xmlChar*) xmlBufferContent(buf);
                        if (!mem) {
                                RETVAL_FALSE;
                        } else {
@@ -2221,7 +2206,7 @@ PHP_FUNCTION(dom_document_save_html)
                        php_error_docref(NULL, E_WARNING, "Error dumping HTML node");
                        RETVAL_FALSE;
                }
-               xmlOutputBufferClose(outBuf);
+               xmlBufferFree(buf);
        } else {
 #if LIBXML_VERSION >= 20623
                htmlDocDumpMemoryFormat(docp, &mem, &size, format);
diff --git a/ext/dom/tests/bug76285.phpt b/ext/dom/tests/bug76285.phpt
deleted file mode 100644 (file)
index c5fbd96..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---TEST--
-Bug #76285 DOMDocument::formatOutput attribute sometimes ignored
---SKIPIF--
-<?php require_once('skipif.inc'); ?>
-<?php if (!defined("LIBXML_HTML_NOIMPLIED")) die("skip libxml2 2.7.7 required"); ?>
---FILE--
-<?php
-
-$dom = new DOMDocument();
-$dom->formatOutput = false;
-$html = '<div><div><a>test</a></div><div><a>test2</a></div></div>';
-$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
-$rootNode = $dom->documentElement;
-var_dump($dom->saveHTML($rootNode));
-var_dump($dom->saveHTML());
-
-?>
---EXPECT--
-string(56) "<div><div><a>test</a></div><div><a>test2</a></div></div>"
-string(57) "<div><div><a>test</a></div><div><a>test2</a></div></div>
-"