diff options
author | Anatol Belski <ab@php.net> | 2017-02-01 19:59:24 +0100 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2017-02-01 19:59:24 +0100 |
commit | 3446e3b7496549ff8bfee31271744a6ec4fda03a (patch) | |
tree | eb7c29bd399cc83828400356381525448b98ffd0 /ext/dom | |
parent | 69a2e4ece2abf304c616831509d7870c13d23d3b (diff) | |
download | php-git-3446e3b7496549ff8bfee31271744a6ec4fda03a.tar.gz |
Revert "fixed bug #50989 (DOM support for LIBXML_NOXMLDECL)"
This reverts commit 2fcf1259c6a9c1d70bcdfb96aeabc54c47e2a4a0.
Diffstat (limited to 'ext/dom')
-rw-r--r-- | ext/dom/document.c | 51 | ||||
-rw-r--r-- | ext/dom/tests/bug50989.phpt | 12 |
2 files changed, 29 insertions, 34 deletions
diff --git a/ext/dom/document.c b/ext/dom/document.c index c7e4f8e7a5..cab0aa55ce 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 <libxml/xmlsave.h> #include <libxml/SAX.h> #ifdef LIBXML_SCHEMAS_ENABLED #include <libxml/relaxng.h> @@ -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-- -<?php require_once('skipif.inc'); ?> ---FILE-- -<?php -$dom = new DomDocument(); -$dom->loadXML("<foo />"); - -print $dom->saveXML(null,LIBXML_NOXMLDECL); ---EXPECT-- -<foo/>
\ No newline at end of file |