tony2001                Mon Aug 14 15:01:29 2006 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src    NEWS 
    /php-src/main/streams       userspace.c 
  Log:
  MFH: fix #38450 (constructor is not called for classes used in userspace 
stream wrappers)
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.199&r2=1.2027.2.547.2.200&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.199 php-src/NEWS:1.2027.2.547.2.200
--- php-src/NEWS:1.2027.2.547.2.199     Mon Aug 14 11:59:24 2006
+++ php-src/NEWS        Mon Aug 14 15:01:29 2006
@@ -37,6 +37,8 @@
 - Fixed phpinfo() cutoff of variables at \0. (Ilia)
 - Fixed a bug in the filter extension that prevented magic_quotes_gpc from
   being applied when RAW filter is used. (Ilia)
+- Fixed bug #38450 (constructor is not called for classes used in userspace 
+  stream wrappers). (Tony)
 - Fixed bug #38438 (DOMNodeList->item(0) segfault on empty NodeList). (Ilia)
 - Fixed bug #38431 (xmlrpc_get_type() crashes PHP on objects). (Tony)
 - Fixed bug #38424 (Different attribute assignment if new or existing). (Rob)
http://cvs.php.net/viewvc.cgi/php-src/main/streams/userspace.c?r1=1.31.2.3&r2=1.31.2.3.2.1&diff_format=u
Index: php-src/main/streams/userspace.c
diff -u php-src/main/streams/userspace.c:1.31.2.3 
php-src/main/streams/userspace.c:1.31.2.3.2.1
--- php-src/main/streams/userspace.c:1.31.2.3   Sat Apr 22 17:17:40 2006
+++ php-src/main/streams/userspace.c    Mon Aug 14 15:01:29 2006
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: userspace.c,v 1.31.2.3 2006/04/22 17:17:40 wez Exp $ */
+/* $Id: userspace.c,v 1.31.2.3.2.1 2006/08/14 15:01:29 tony2001 Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -231,6 +231,40 @@
        object_init_ex(us->object, uwrap->ce);
        ZVAL_REFCOUNT(us->object) = 1;
        PZVAL_IS_REF(us->object) = 1;
+       
+       if (uwrap->ce->constructor) {
+               zend_fcall_info fci;
+               zend_fcall_info_cache fcc;
+               zval *retval_ptr;
+               
+               fci.size = sizeof(fci);
+               fci.function_table = &uwrap->ce->function_table;
+               fci.function_name = NULL;
+               fci.symbol_table = NULL;
+               fci.object_pp = &us->object;
+               fci.retval_ptr_ptr = &retval_ptr;
+               fci.param_count = 0;
+               fci.params = NULL;
+               fci.no_separation = 1;
+               
+               fcc.initialized = 1;
+               fcc.function_handler = uwrap->ce->constructor;
+               fcc.calling_scope = EG(scope);
+               fcc.object_pp = &us->object;
+
+               if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not 
execute %s::%s()", uwrap->ce->name, 
uwrap->ce->constructor->common.function_name);
+                       zval_dtor(us->object);
+                       FREE_ZVAL(us->object);
+                       efree(us);
+                       FG(user_stream_current_filename) = NULL;
+                       return NULL;
+               } else {
+                       if (retval_ptr) {
+                               zval_ptr_dtor(&retval_ptr);
+                       }
+               }
+       }
 
        if (context) {
                MAKE_STD_ZVAL(zcontext);

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

Reply via email to