]> granicus.if.org Git - php/commitdiff
Revert "fixed bug #50989 (DOM support for LIBXML_NOXMLDECL)"
authorAnatol Belski <ab@php.net>
Wed, 1 Feb 2017 18:59:24 +0000 (19:59 +0100)
committerAnatol Belski <ab@php.net>
Wed, 1 Feb 2017 18:59:24 +0000 (19:59 +0100)
This reverts commit 2fcf1259c6a9c1d70bcdfb96aeabc54c47e2a4a0.

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

index c7e4f8e7a5307997e9c7bc3d9926b05846ff86ea..cab0aa55ce43a8d1983741b407e7232add83e5cc 100644 (file)
@@ -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 (file)
index 1ef554a..0000000
+++ /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