dmitry          Thu Nov 27 14:49:56 2008 UTC

  Added files:                 (Branch: PHP_5_3)
    /php-src/ext/soap/tests/bugs        bug44882.phpt bug44882.wsdl 

  Modified files:              
    /php-src/ext/soap   php_encoding.c 
  Log:
  Fixed bug #44882 (SOAP extension object decoding bug)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c?r1=1.103.2.21.2.37.2.10&r2=1.103.2.21.2.37.2.11&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.37.2.10 
php-src/ext/soap/php_encoding.c:1.103.2.21.2.37.2.11
--- php-src/ext/soap/php_encoding.c:1.103.2.21.2.37.2.10        Sun Oct 26 
02:00:44 2008
+++ php-src/ext/soap/php_encoding.c     Thu Nov 27 14:49:55 2008
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_encoding.c,v 1.103.2.21.2.37.2.10 2008/10/26 02:00:44 felipe Exp $ 
*/
+/* $Id: php_encoding.c,v 1.103.2.21.2.37.2.11 2008/11/27 14:49:55 dmitry Exp $ 
*/
 
 #include <time.h>
 
@@ -1458,7 +1458,7 @@
        sdlPtr sdl;
        sdlTypePtr sdlType = type->sdl_type;
        zend_class_entry *ce = ZEND_STANDARD_CLASS_DEF_PTR;
-       zend_bool redo_any = 0;
+       zval *redo_any = NULL;
        TSRMLS_FETCH();
 
        if (pce) {
@@ -1530,10 +1530,7 @@
                                if (soap_check_xml_ref(&ret, data TSRMLS_CC)) {
                                        return ret;
                                }
-                               if (get_zval_property(ret, "any" TSRMLS_CC) != 
NULL) {
-                                       unset_zval_property(ret, "any" 
TSRMLS_CC);
-                                       redo_any = 1;
-                               }
+                               redo_any = get_zval_property(ret, "any" 
TSRMLS_CC);
                                if (Z_TYPE_P(ret) == IS_OBJECT && ce != 
ZEND_STANDARD_CLASS_DEF_PTR) {
                                        zend_object *zobj = 
zend_objects_get_address(ret TSRMLS_CC);
                                        zobj->ce = ce;
@@ -1559,10 +1556,17 @@
                        object_init_ex(ret, ce);
                }
                if (sdlType->model) {
+                       if (redo_any) {
+                               Z_ADDREF_P(redo_any);
+                               unset_zval_property(ret, "any" TSRMLS_CC);
+                       }
                        model_to_zval_object(ret, sdlType->model, data, sdl 
TSRMLS_CC);
-                       if (redo_any && get_zval_property(ret, "any" TSRMLS_CC) 
== NULL) {
-                               model_to_zval_any(ret, data->children 
TSRMLS_CC);
-                 }
+                       if (redo_any) {
+                               if (get_zval_property(ret, "any" TSRMLS_CC) == 
NULL) {
+                                       model_to_zval_any(ret, data->children 
TSRMLS_CC);
+                               }
+                               zval_ptr_dtor(&redo_any);
+                       }
                }
                if (sdlType->attributes) {
                        sdlAttributePtr *attr;

http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bugs/bug44882.phpt?view=markup&rev=1.1
Index: php-src/ext/soap/tests/bugs/bug44882.phpt
+++ php-src/ext/soap/tests/bugs/bug44882.phpt

http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/bugs/bug44882.wsdl?view=markup&rev=1.1
Index: php-src/ext/soap/tests/bugs/bug44882.wsdl
+++ php-src/ext/soap/tests/bugs/bug44882.wsdl



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

Reply via email to