From 5ad6febd2ac22f7397ce6ff4f200d65896b575a3 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sun, 12 May 2024 19:40:07 +0200 Subject: [PATCH] Add support for LIBXML_NOXMLDECL for modern documents This wasn't supported before, but should be. --- .../modern/xml/serialize_LIBXML_NOXMLDECL.phpt | 13 +++++++++++++ ext/dom/xml_document.c | 11 ++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 ext/dom/tests/modern/xml/serialize_LIBXML_NOXMLDECL.phpt diff --git a/ext/dom/tests/modern/xml/serialize_LIBXML_NOXMLDECL.phpt b/ext/dom/tests/modern/xml/serialize_LIBXML_NOXMLDECL.phpt new file mode 100644 index 0000000000000..59d1ea149231e --- /dev/null +++ b/ext/dom/tests/modern/xml/serialize_LIBXML_NOXMLDECL.phpt @@ -0,0 +1,13 @@ +--TEST-- +Serialize modern document with LIBXML_NOXMLDECL +--EXTENSIONS-- +dom +--FILE-- +'); +echo $dom->saveXml(options: LIBXML_NOXMLDECL), "\n"; + +?> +--EXPECT-- + diff --git a/ext/dom/xml_document.c b/ext/dom/xml_document.c index 2ad0ebc895d16..fd5ded5b1a66d 100644 --- a/ext/dom/xml_document.c +++ b/ext/dom/xml_document.c @@ -257,12 +257,12 @@ static int php_new_dom_write_smart_str(void *context, const char *buffer, int le return len; } -static zend_string *php_new_dom_dump_node_to_str(xmlDocPtr doc, xmlNodePtr node, bool format, const char *encoding) +static zend_string *php_new_dom_dump_node_to_str_ex(xmlNodePtr node, int options, bool format, const char *encoding) { smart_str str = {0}; int status = -1; - xmlSaveCtxtPtr ctxt = xmlSaveToIO(php_new_dom_write_smart_str, NULL, &str, encoding, XML_SAVE_AS_XML); + xmlSaveCtxtPtr ctxt = xmlSaveToIO(php_new_dom_write_smart_str, NULL, &str, encoding, XML_SAVE_AS_XML | options); if (EXPECTED(ctxt != NULL)) { xmlCharEncodingHandlerPtr handler = xmlFindCharEncodingHandler(encoding); xmlOutputBufferPtr out = xmlOutputBufferCreateIO(php_new_dom_write_smart_str, NULL, &str, handler); @@ -284,9 +284,14 @@ static zend_string *php_new_dom_dump_node_to_str(xmlDocPtr doc, xmlNodePtr node, return smart_str_extract(&str); } +static zend_string *php_new_dom_dump_node_to_str(xmlDocPtr doc, xmlNodePtr node, bool format, const char *encoding) +{ + return php_new_dom_dump_node_to_str_ex(node, 0, format, encoding); +} + static zend_string *php_new_dom_dump_doc_to_str(xmlDocPtr doc, int options, const char *encoding) { - return php_new_dom_dump_node_to_str(doc, (xmlNodePtr) doc, options & XML_SAVE_FORMAT, encoding); + return php_new_dom_dump_node_to_str_ex((xmlNodePtr) doc, options, options & XML_SAVE_FORMAT, encoding); } zend_long php_new_dom_dump_node_to_file(const char *filename, xmlDocPtr doc, xmlNodePtr node, bool format, const char *encoding)