]> granicus.if.org Git - php/commitdiff
- #41326, writing empty tags with Xmlwriter::WriteElement[ns]
authorPierre Joye <pajoye@php.net>
Tue, 8 May 2007 21:40:25 +0000 (21:40 +0000)
committerPierre Joye <pajoye@php.net>
Tue, 8 May 2007 21:40:25 +0000 (21:40 +0000)
ext/xmlwriter/php_xmlwriter.c
ext/xmlwriter/tests/bug41287.phpt
ext/xmlwriter/tests/bug41326.phpt [new file with mode: 0644]

index 5e6235eb56a5b3f007fdd6386aa671514be3dc67..68ab4bbd288603150cdd1e67ea856be37e28d338 100644 (file)
@@ -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;
                }
index 106ac3a3ec5451230afaefd11b53d38ec3ce6e12..3bd09beb84caf503800a0887d5ec1fe8f362ec7d 100644 (file)
@@ -30,14 +30,14 @@ print $xw->flush(true);
 --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>
diff --git a/ext/xmlwriter/tests/bug41326.phpt b/ext/xmlwriter/tests/bug41326.phpt
new file mode 100644 (file)
index 0000000..f4a451f
--- /dev/null
@@ -0,0 +1,44 @@
+--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>