Dmitry,

This is not a critical fix, please revert it and hold off until 5.2.0 release before applying it to the 5.2 branch.

Thanks


On 23-Oct-06, at 2:46 AM, Dmitry Stogov wrote:

dmitry          Mon Oct 23 06:46:38 2006 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/soap   php_encoding.c
  Log:
Fixed decoding of list of arrays in non-WSDL mode. (releated to bug #39121)


http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c? r1=1.103.2.21.2.11&r2=1.103.2.21.2.12&diff_format=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.103.2.21.2.11 php-src/ext/ soap/php_encoding.c:1.103.2.21.2.12 --- php-src/ext/soap/php_encoding.c:1.103.2.21.2.11 Tue Oct 3 07:00:35 2006
+++ php-src/ext/soap/php_encoding.c     Mon Oct 23 06:46:38 2006
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> | +--------------------------------------------------------------------- -+
 */
-/* $Id: php_encoding.c,v 1.103.2.21.2.11 2006/10/03 07:00:35 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.103.2.21.2.12 2006/10/23 06:46:38 dmitry Exp $ */

 #include <time.h>

@@ -1102,23 +1102,23 @@
                                        }
                                        add_string_to_string(val, val, val2);
                                        zval_ptr_dtor(&val2);
-                                 node = node->next;
+                                       node = node->next;
                                }
                        }
                        if (any == NULL) {
                                any = val;
                        } else {
                                if (Z_TYPE_P(any) != IS_ARRAY) {
-                           /* Convert into array */
-                           zval *arr;
+                                       /* Convert into array */
+                                       zval *arr;

-                           MAKE_STD_ZVAL(arr);
-                           array_init(arr);
-                                 add_next_index_zval(arr, any);
-                                 any = arr;
-                         }
-                         /* Add array element */
-                         add_next_index_zval(any, val);
+                                       MAKE_STD_ZVAL(arr);
+                                       array_init(arr);
+                                       add_next_index_zval(arr, any);
+                                       any = arr;
+                               }
+                               /* Add array element */
+                               add_next_index_zval(any, val);
                        }
                }
                node = node->next;
@@ -1378,22 +1378,31 @@

                                prop = get_zval_property(ret, (char*)trav->name 
TSRMLS_CC);
                                if (!prop) {
- set_zval_property(ret, (char*)trav->name, tmpVal TSRMLS_CC);
+                                       if (!trav->next || !get_node(trav->next, 
(char*)trav->name)) {
+                                               set_zval_property(ret, 
(char*)trav->name, tmpVal TSRMLS_CC);
+                                       } else {
+                                               zval *arr;
+
+                                               MAKE_STD_ZVAL(arr);
+                                               array_init(arr);
+                                               add_next_index_zval(arr, 
tmpVal);
+                                               set_zval_property(ret, 
(char*)trav->name, arr TSRMLS_CC);
+                                       }
                                } else {
-                                 /* Property already exist - make array */
-                                 if (Z_TYPE_P(prop) != IS_ARRAY) {
-                                   /* Convert into array */
-                                   zval *arr;
-
-                                   MAKE_STD_ZVAL(arr);
-                                   array_init(arr);
-                                   prop->refcount++;
-                                         add_next_index_zval(arr, prop);
-                 set_zval_property(ret, (char*)trav->name, arr TSRMLS_CC);
-                                         prop = arr;
-                                 }
-                                 /* Add array element */
-                                 add_next_index_zval(prop, tmpVal);
+                                       /* Property already exist - make array 
*/
+                                       if (Z_TYPE_P(prop) != IS_ARRAY) {
+                                               /* Convert into array */
+                                               zval *arr;
+
+                                               MAKE_STD_ZVAL(arr);
+                                               array_init(arr);
+                                               prop->refcount++;
+                                               add_next_index_zval(arr, prop);
+                                               set_zval_property(ret, 
(char*)trav->name, arr TSRMLS_CC);
+                                               prop = arr;
+                                       }
+                                       /* Add array element */
+                                       add_next_index_zval(prop, tmpVal);
                                }
                        }
                        trav = trav->next;

--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Ilia Alshanetsky

--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to