]> granicus.if.org Git - php/commitdiff
- Bugfix 37587
authorMarcus Boerger <helly@php.net>
Thu, 25 May 2006 09:51:58 +0000 (09:51 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 25 May 2006 09:51:58 +0000 (09:51 +0000)
ext/wddx/tests/bug37587.phpt [new file with mode: 0755]
ext/wddx/wddx.c

diff --git a/ext/wddx/tests/bug37587.phpt b/ext/wddx/tests/bug37587.phpt
new file mode 100755 (executable)
index 0000000..81e4853
--- /dev/null
@@ -0,0 +1,41 @@
+--TEST--
+Bug #37587 (var without attribute causes segfault)
+--FILE--
+<?php
+
+var_dump(wddx_deserialize(file_get_contents(<<<EOF
+data:,<wddxPacket version='1.0'>
+<header/>
+<data>
+  <array length='1'>
+    <var>
+      <struct>
+        <var name='test'><string>Hello World</string></var>
+      </struct>
+    </var>
+  </array>
+</data>
+</wddxPacket>
+EOF
+)));
+
+?>
+===DONE===
+--EXPECT--
+array(1) {
+  [0]=>
+  array(1) {
+    ["test"]=>
+    string(11) "Hello World"
+  }
+}
+===DONE===
+--UEXPECT--
+array(1) {
+  [0]=>
+  array(1) {
+    [u"test"]=>
+    string(11) "Hello World"
+  }
+}
+===DONE===
index b7362c4f30345c5095f5fefff6e158b2c34d8e6f..3562c6e9f86d646bb5fc1fad77090e17f21432ac 100644 (file)
@@ -752,7 +752,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
        } else if (!strcmp(name, EL_CHAR)) {
                int i;
                
-               for (i = 0; atts[i]; i++) {
+               if (atts) for (i = 0; atts[i]; i++) {
                        if (!strcmp(atts[i], EL_CHAR_CODE) && atts[++i] && atts[i][0]) {
                                char tmp_buf[2];
 
@@ -772,7 +772,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
        } else if (!strcmp(name, EL_BOOLEAN)) {
                int i;
 
-               for (i = 0; atts[i]; i++) {
+               if (atts) for (i = 0; atts[i]; i++) {
                        if (!strcmp(atts[i], EL_VALUE) && atts[++i] && atts[i][0]) {
                                ent.type = ST_BOOLEAN;
                                SET_STACK_VARNAME;
@@ -813,7 +813,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
        } else if (!strcmp(name, EL_VAR)) {
                int i;
                
-               for (i = 0; atts[i]; i++) {
+               if (atts) for (i = 0; atts[i]; i++) {
                        if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
                                char *decoded;
                                int decoded_len;
@@ -830,7 +830,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
                MAKE_STD_ZVAL(ent.data);
                array_init(ent.data);
 
-               for (i = 0; atts[i]; i++) {
+               if (atts) for (i = 0; atts[i]; i++) {
                        if (!strcmp(atts[i], "fieldNames") && atts[++i] && atts[i][0]) {
                                zval *tmp;
                                char *key;
@@ -870,7 +870,7 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X
                ent.varname = NULL;
                ent.data = NULL;
 
-               for (i = 0; atts[i]; i++) {
+               if (atts) for (i = 0; atts[i]; i++) {
                        if (!strcmp(atts[i], EL_NAME) && atts[++i] && atts[i][0]) {
                                char *decoded;
                                int decoded_len;