From 5c34a30bdbc8924f441c8def5abece46d3dbfe8a Mon Sep 17 00:00:00 2001 From: Joe Watkins Date: Wed, 1 Feb 2017 19:17:56 +0000 Subject: Revert "fixed bug #50989 (DOM support for LIBXML_NOXMLDECL)" This reverts commit 2fcf1259c6a9c1d70bcdfb96aeabc54c47e2a4a0. --- NEWS | 1 - ext/dom/document.c | 51 ++++++++++++++++++++++++++------------------- ext/dom/tests/bug50989.phpt | 12 ----------- 3 files changed, 29 insertions(+), 35 deletions(-) delete mode 100644 ext/dom/tests/bug50989.phpt diff --git a/NEWS b/NEWS index 5a11736deb..de90997d40 100644 --- a/NEWS +++ b/NEWS @@ -15,7 +15,6 @@ PHP NEWS - DOM: . Fixed bug #54382 (getAttributeNodeNS doesn't get xmlns* attributes). (aboks) - . Fixed bug #50989 (support for LIBXML_NOXMLDECL). (jhdxr) - DTrace: . Fixed bug #73965 (DTrace reported as enabled when disabled). (Remi) diff --git a/ext/dom/document.c b/ext/dom/document.c index 0086d13c41..18d652064e 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -26,7 +26,6 @@ #include "php.h" #if HAVE_LIBXML && HAVE_DOM #include "php_dom.h" -#include #include #ifdef LIBXML_SCHEMAS_ENABLED #include @@ -1617,51 +1616,59 @@ PHP_FUNCTION(dom_document_savexml) dom_doc_propsptr doc_props; int size, format, saveempty = 0; zend_long options = 0; - xmlSaveCtxtPtr xscp; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|O!l", &id, dom_document_class_entry, &nodep, dom_node_class_entry, &options) == FAILURE) { return; } - options = options | XML_SAVE_AS_XML; DOM_GET_OBJ(docp, id, xmlDocPtr, intern); doc_props = dom_get_doc_props(intern->document); format = doc_props->formatoutput; - buf = xmlBufferCreate(); - if (!buf) { - php_error_docref(NULL, E_WARNING, "Could not fetch buffer"); - RETURN_FALSE; - } - xscp = xmlSaveToBuffer(buf, docp->encoding, options); - if (nodep != NULL) { /* Dump contents of Node */ DOM_GET_OBJ(node, nodep, xmlNodePtr, nodeobj); if (node->doc != docp) { php_dom_throw_error(WRONG_DOCUMENT_ERR, dom_get_strict_error(intern->document)); - xmlBufferFree(buf); RETURN_FALSE; } - if(xmlSaveTree(xscp, node) < 0) { - xmlBufferFree(buf); + buf = xmlBufferCreate(); + if (!buf) { + php_error_docref(NULL, E_WARNING, "Could not fetch buffer"); RETURN_FALSE; } - } else { - if(xmlSaveDoc(xscp, docp) < 0) { + if (options & LIBXML_SAVE_NOEMPTYTAG) { + saveempty = xmlSaveNoEmptyTags; + xmlSaveNoEmptyTags = 1; + } + xmlNodeDump(buf, docp, node, 0, format); + if (options & LIBXML_SAVE_NOEMPTYTAG) { + xmlSaveNoEmptyTags = saveempty; + } + mem = (xmlChar*) xmlBufferContent(buf); + if (!mem) { xmlBufferFree(buf); RETURN_FALSE; } - } - xmlSaveClose(xscp); - mem = (xmlChar*) xmlBufferContent(buf); - if (!mem) { + RETVAL_STRING((char *) mem); xmlBufferFree(buf); - RETURN_FALSE; + } else { + if (options & LIBXML_SAVE_NOEMPTYTAG) { + saveempty = xmlSaveNoEmptyTags; + xmlSaveNoEmptyTags = 1; + } + /* Encoding is handled from the encoding property set on the document */ + xmlDocDumpFormatMemory(docp, &mem, &size, format); + if (options & LIBXML_SAVE_NOEMPTYTAG) { + xmlSaveNoEmptyTags = saveempty; + } + if (!size || !mem) { + RETURN_FALSE; + } + RETVAL_STRINGL((char *) mem, size); + xmlFree(mem); } - RETVAL_STRING((char *) mem); - xmlBufferFree(buf); } /* }}} end dom_document_savexml */ diff --git a/ext/dom/tests/bug50989.phpt b/ext/dom/tests/bug50989.phpt deleted file mode 100644 index 1ef554ac3e..0000000000 --- a/ext/dom/tests/bug50989.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -Bug #50989 add support LIBXML_NOXMLDECL for DOMDocument::saveXML() ---SKIPIF-- - ---FILE-- -loadXML(""); - -print $dom->saveXML(null,LIBXML_NOXMLDECL); ---EXPECT-- - \ No newline at end of file -- cgit v1.2.1