dmitry          Wed Oct 17 12:09:14 2007 UTC

  Modified files:              
    /php-src/ext/soap   php_encoding.c 
    /php-src/ext/soap/tests     classmap004.phpt 
  Log:
  Fixed possible crash because of uninitialized value (Zdash Urf)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c?r1=1.164&r2=1.165&diff_format=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.164 
php-src/ext/soap/php_encoding.c:1.165
--- php-src/ext/soap/php_encoding.c:1.164       Sun Oct  7 05:15:05 2007
+++ php-src/ext/soap/php_encoding.c     Wed Oct 17 12:09:14 2007
@@ -17,7 +17,7 @@
   |          Dmitry Stogov <[EMAIL PROTECTED]>                             |
   +----------------------------------------------------------------------+
 */
-/* $Id: php_encoding.c,v 1.164 2007/10/07 05:15:05 davidw Exp $ */
+/* $Id: php_encoding.c,v 1.165 2007/10/17 12:09:14 dmitry Exp $ */
 
 #include <time.h>
 
@@ -1135,6 +1135,7 @@
                zval *data;
                zend_class_entry *old_scope;
 
+               INIT_PZVAL(&member);
                ZVAL_STRING(&member, name, 0);
                old_scope = EG(scope);
                EG(scope) = Z_OBJCE_P(object);
@@ -1169,6 +1170,7 @@
                zval member;
                zend_class_entry *old_scope;
 
+               INIT_PZVAL(&member);
                ZVAL_STRING(&member, name, 0);
                old_scope = EG(scope);
                EG(scope) = Z_OBJCE_P(object);
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/classmap004.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/soap/tests/classmap004.phpt
diff -u /dev/null php-src/ext/soap/tests/classmap004.phpt:1.2
--- /dev/null   Wed Oct 17 12:09:14 2007
+++ php-src/ext/soap/tests/classmap004.phpt     Wed Oct 17 12:09:14 2007
@@ -0,0 +1,66 @@
+--TEST--
+SOAP Classmap 4: encoding of objects with __get()
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+ini_set("soap.wsdl_cache_enabled",0);
+
+class A {
+  public $a;
+  function __construct($a){
+    $this->x = $a;
+  }
+  function __get($name) {
+    return @$this->a[$name];
+  }
+  function __set($name, $val) {
+    $this->a[$name] = $val;
+  }
+  function __unset($name) {
+    unset($this->a[$name]);
+  }
+}
+
+class B extends A {
+  function __construct($a){
+    parent::__construct($a);
+    $this->y = $a + 1;
+  }
+}
+
+function f(){
+  return new B(5);
+}
+
+class LocalSoapClient extends SoapClient {
+
+  function __construct($wsdl, $options) {
+    parent::__construct($wsdl, $options);
+    $this->server = new SoapServer($wsdl, $options);
+    $this->server->addFunction("f");
+  }
+
+  function __doRequest($request, $location, $action, $version) {
+    ob_start();
+    $this->server->handle($request);
+    $response = ob_get_contents();
+    ob_end_clean();
+    return $response;
+  }
+}
+
+$client = new LocalSoapClient(dirname(__FILE__)."/classmap003.wsdl",
+    array('classmap'=>array('A'=>'A','B'=>'B')));
+print_r($client->f());
+?>
+--EXPECT--
+B Object
+(
+    [a] => Array
+        (
+            [x] => 5
+            [y] => 6
+        )
+
+)

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

Reply via email to