com php-src: Revert "fixed bug #50989 (DOM support for LIBXML_NOXMLDECL)": NEWS ext/dom/document.c ext /dom/tests/bug50989.phpt

[email protected] (Joe Watkins)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    5c34a30bdbc8924f441c8def5abece46d3dbfe8a
Author:    Joe Watkins <[email protected]>         Wed, 1 Feb 2017 19:17:56 +0000
Parents:   8a0c388e11a720949897c0371ee4ac4daf4eea37
Branches:  PHP-7.1.2

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=5c34a30bdbc8924f441c8def5abece46d3dbfe8a

Log:
Revert "fixed bug #50989 (DOM support for LIBXML_NOXMLDECL)"

This reverts commit 2fcf1259c6a9c1d70bcdfb96aeabc54c47e2a4a0.

Bugs:
https://bugs.php.net/50989

Changed paths:
  M  NEWS
  M  ext/dom/document.c
  D  ext/dom/tests/bug50989.phpt


Diff:
diff --git a/NEWS b/NEWS
index 5a11736..de90997 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 0086d13..18d6520 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 1ef554a..0000000
--- 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.