From: Pierre Joye Date: Tue, 8 May 2007 21:40:25 +0000 (+0000) Subject: - #41326, writing empty tags with Xmlwriter::WriteElement[ns] X-Git-Tag: RELEASE_1_2_0~129 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bfb6f7001f60e140d9123527278f58d67cdbbf7b;p=php - #41326, writing empty tags with Xmlwriter::WriteElement[ns] --- diff --git a/ext/xmlwriter/php_xmlwriter.c b/ext/xmlwriter/php_xmlwriter.c index 5e6235eb56..68ab4bbd28 100644 --- a/ext/xmlwriter/php_xmlwriter.c +++ b/ext/xmlwriter/php_xmlwriter.c @@ -769,13 +769,13 @@ static PHP_FUNCTION(xmlwriter_write_element) zval *pind; xmlwriter_object *intern; xmlTextWriterPtr ptr; - char *name, *content; + char *name, *content = NULL; int name_len, content_len, retval; #ifdef ZEND_ENGINE_2 zval *this = getThis(); if (this) { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s&s&", + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s&|s&", &name, &name_len, UG(utf8_conv), &content, &content_len, UG(utf8_conv)) == FAILURE) { return; } @@ -783,7 +783,7 @@ static PHP_FUNCTION(xmlwriter_write_element) } else #endif { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs&s&", &pind, + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs&|s&", &pind, &name, &name_len, UG(utf8_conv), &content, &content_len, UG(utf8_conv)) == FAILURE) { return; } @@ -795,7 +795,18 @@ static PHP_FUNCTION(xmlwriter_write_element) ptr = intern->ptr; if (ptr) { - retval = xmlTextWriterWriteElement(ptr, (xmlChar *)name, (xmlChar *)content); + if (!content || content_len < 1) { + retval = xmlTextWriterStartElement(ptr, (xmlChar *)name); + if (retval == -1) { + RETURN_FALSE; + } + retval = xmlTextWriterEndElement(ptr); + if (retval == -1) { + RETURN_FALSE; + } + } else { + retval = xmlTextWriterWriteElement(ptr, (xmlChar *)name, (xmlChar *)content); + } if (retval != -1) { RETURN_TRUE; } @@ -839,7 +850,18 @@ static PHP_FUNCTION(xmlwriter_write_element_ns) ptr = intern->ptr; if (ptr) { - retval = xmlTextWriterWriteElementNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri, (xmlChar *)content); + if (!content || content_len < 1) { + retval = xmlTextWriterStartElementNS(ptr,(xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri); + if (retval == -1) { + RETURN_FALSE; + } + retval = xmlTextWriterEndElement(ptr); + if (retval == -1) { + RETURN_FALSE; + } + } else { + retval = xmlTextWriterWriteElementNS(ptr, (xmlChar *)prefix, (xmlChar *)name, (xmlChar *)uri, (xmlChar *)content); + } if (retval != -1) { RETURN_TRUE; } diff --git a/ext/xmlwriter/tests/bug41287.phpt b/ext/xmlwriter/tests/bug41287.phpt index 106ac3a3ec..3bd09beb84 100644 --- a/ext/xmlwriter/tests/bug41287.phpt +++ b/ext/xmlwriter/tests/bug41287.phpt @@ -30,14 +30,14 @@ print $xw->flush(true); --EXPECTF-- - - - + + + - - - + + + diff --git a/ext/xmlwriter/tests/bug41326.phpt b/ext/xmlwriter/tests/bug41326.phpt new file mode 100644 index 0000000000..f4a451fa3c --- /dev/null +++ b/ext/xmlwriter/tests/bug41326.phpt @@ -0,0 +1,44 @@ +--TEST-- +Bug #41287 (Writing empty tags with Xmlwriter::WriteElement[ns]) +--FILE-- +openMemory(); +$xml->setIndent(true); +$xml->startDocument(); +$xml->startElement('test'); +$xml->writeElement('foo', null); +$xml->writeElement('foo2', null); +$xml->startElement('bar'); +$xml->endElement('bar'); +$xml->endElement(); +print $xml->flush(true); + +print "\n"; + +$xw = new XMLWriter(); +$xw->openMemory(); +$xw->setIndent(true); +$xw->startDocument(); +$xw->startElementNS('test', 'test', 'urn:x-test:'); +$xw->writeElementNS('test', 'foo', null, ''); +$xw->writeElementNS(null, 'bar', 'urn:x-test:', ''); +$xw->writeElementNS(null, 'bar', '', ''); +$xw->endElement(); +$xw->endDocument(); +print $xw->flush(true); +?> +--EXPECTF-- + + + + + + + + + + + + +