diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2018-08-14 12:14:33 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2018-08-14 12:14:33 +0200 |
commit | 819cf5283bd53ae44b9d5645a42988c11ec50f67 (patch) | |
tree | ee0c55694c725bd05d74dd7c0ece78b950f3d2e8 | |
parent | 78d823d9c3a5854ff200fbce18dcebbaa5f71065 (diff) | |
download | php-git-819cf5283bd53ae44b9d5645a42988c11ec50f67.tar.gz |
Revert "DOMDocument::formatOutput attribute sometimes ignored"
This reverts commit ef9ed19ec7f141311feea1d42467f5773cfc09bc and its
follow-up 36f05a80d7cf11fffb827c7f0b6c8e73d3846e8e, since these caused
a serious regression (see bug #76738).
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/dom/document.c | 29 | ||||
-rw-r--r-- | ext/dom/tests/bug76285.phpt | 21 |
3 files changed, 11 insertions, 43 deletions
@@ -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) diff --git a/ext/dom/document.c b/ext/dom/document.c index 6bbc0500b9..2b029dc403 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -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 index c5fbd9627f..0000000000 --- a/ext/dom/tests/bug76285.phpt +++ /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> -" |