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

[email protected] (Anatol Belski)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    68683a4338d74be3f8fb111d953ab51082b04357
Author:    Anatol Belski <[email protected]>         Wed, 1 Feb 2017 20:22:43 +0100
Parents:   61438e9d4b5f6fdf46bc33870003da92d9911f6f
Branches:  PHP-7.0.16

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

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

This reverts commit 2fcf1259c6a9c1d70bcdfb96aeabc54c47e2a4a0.

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

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


Diff:
diff --git a/ext/dom/document.c b/ext/dom/document.c
index c7e4f8e..cab0aa5 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.