pajoye Tue May 8 21:41:36 2007 UTC Added files: (Branch: PHP_5_2) /php-src/ext/xmlwriter/tests bug41326.phpt
Modified files: /php-src NEWS /php-src/ext/xmlwriter php_xmlwriter.c /php-src/ext/xmlwriter/tests bug41287.phpt Log: - MFH: #41326, Writing empty tags with Xmlwriter::WriteElement[ns] http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.689&r2=1.2027.2.547.2.690&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.689 php-src/NEWS:1.2027.2.547.2.690 --- php-src/NEWS:1.2027.2.547.2.689 Tue May 8 18:38:20 2007 +++ php-src/NEWS Tue May 8 21:41:36 2007 @@ -7,6 +7,8 @@ (Ilia) - Fixed altering $this via argument named "this". (Dmitry) - Fixed PHP CLI to use the php.ini from the binary location. (Hannes) +- Fixed bug #41326 (Writing empty tags with Xmlwriter::WriteElement[ns]) + (Pierre) - Fixed bug #41321 (downgrade read errors in getimagesize() to E_NOTICE). (Ilia) - Fixed bug #41304 (compress.zlib temp files left). (Dmitry) http://cvs.php.net/viewvc.cgi/php-src/ext/xmlwriter/php_xmlwriter.c?r1=1.20.2.12.2.13&r2=1.20.2.12.2.14&diff_format=u Index: php-src/ext/xmlwriter/php_xmlwriter.c diff -u php-src/ext/xmlwriter/php_xmlwriter.c:1.20.2.12.2.13 php-src/ext/xmlwriter/php_xmlwriter.c:1.20.2.12.2.14 --- php-src/ext/xmlwriter/php_xmlwriter.c:1.20.2.12.2.13 Fri May 4 20:16:39 2007 +++ php-src/ext/xmlwriter/php_xmlwriter.c Tue May 8 21:41:36 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_xmlwriter.c,v 1.20.2.12.2.13 2007/05/04 20:16:39 rrichards Exp $ */ +/* $Id: php_xmlwriter.c,v 1.20.2.12.2.14 2007/05/08 21:41:36 pajoye Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -695,7 +695,6 @@ } /* }}} */ - /* {{{ proto bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri) Create start namespaced element tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_start_element_ns) @@ -756,20 +755,21 @@ } /* }}} */ -/* {{{ proto bool xmlwriter_write_element(resource xmlwriter, string name, string content) +/* {{{ proto bool xmlwriter_write_element(resource xmlwriter, string name[, string content]) Write full element tag - returns FALSE on error */ 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, "ss", + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &name, &name_len, &content, &content_len) == FAILURE) { return; } @@ -789,7 +789,18 @@ 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; + } + xmlTextWriterEndElement(ptr); + if (retval == -1) { + RETURN_FALSE; + } + } else { + retval = xmlTextWriterWriteElement(ptr, (xmlChar *)name, (xmlChar *)content); + } if (retval != -1) { RETURN_TRUE; } @@ -799,21 +810,21 @@ } /* }}} */ -/* {{{ proto bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri, string content) +/* {{{ proto bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content]) Write full namesapced element tag - returns FALSE on error */ static PHP_FUNCTION(xmlwriter_write_element_ns) { zval *pind; xmlwriter_object *intern; xmlTextWriterPtr ptr; - char *name, *prefix, *uri, *content; + char *name, *prefix, *uri, *content = NULL; int name_len, prefix_len, uri_len, content_len, retval; #ifdef ZEND_ENGINE_2 zval *this = getThis(); if (this) { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!ss!s", + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!ss!|s", &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) { return; } @@ -821,7 +832,7 @@ } else #endif { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!ss!s", &pind, + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!ss!|s", &pind, &prefix, &prefix_len, &name, &name_len, &uri, &uri_len, &content, &content_len) == FAILURE) { return; } @@ -833,7 +844,18 @@ 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; } http://cvs.php.net/viewvc.cgi/php-src/ext/xmlwriter/tests/bug41287.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u Index: php-src/ext/xmlwriter/tests/bug41287.phpt diff -u php-src/ext/xmlwriter/tests/bug41287.phpt:1.1.2.1 php-src/ext/xmlwriter/tests/bug41287.phpt:1.1.2.2 --- php-src/ext/xmlwriter/tests/bug41287.phpt:1.1.2.1 Fri May 4 20:16:39 2007 +++ php-src/ext/xmlwriter/tests/bug41287.phpt Tue May 8 21:41:36 2007 @@ -30,14 +30,14 @@ --EXPECTF-- <?xml version="1.0"?> <test:test xmlns:test="urn:x-test:"> - <test:foo></test:foo> - <bar xmlns="urn:x-test:"></bar> - <bar xmlns=""></bar> + <test:foo/> + <bar xmlns="urn:x-test:"/> + <bar xmlns=""/> </test:test> <?xml version="1.0"?> <test:test xmlns:test="urn:x-test:"> - <test:foo></test:foo> - <bar xmlns="urn:x-test:"></bar> - <bar xmlns=""></bar> + <test:foo/> + <bar xmlns="urn:x-test:"/> + <bar xmlns=""/> </test:test> http://cvs.php.net/viewvc.cgi/php-src/ext/xmlwriter/tests/bug41326.phpt?view=markup&rev=1.1 Index: php-src/ext/xmlwriter/tests/bug41326.phpt +++ php-src/ext/xmlwriter/tests/bug41326.phpt --TEST-- Bug #41287 (Writing empty tags with Xmlwriter::WriteElement[ns]) --FILE-- <?php $xml = new XmlWriter(); $xml->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-- <?xml version="1.0"?> <test> <foo/> <foo2/> <bar/> </test> <?xml version="1.0"?> <test:test xmlns:test="urn:x-test:"> <test:foo/> <bar xmlns="urn:x-test:"/> <bar xmlns=""/> </test:test> -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php