tony2001                Wed Nov 23 06:15:11 2005 EDT

  Added files:                 (Branch: PHP_5_1)
    /php-src/ext/pdo_sqlite/tests       bug35336.phpt 

  Modified files:              
    /php-src    NEWS 
    /ZendEngine2        zend_API.c 
  Log:
  fix #35336 (crash on PDO::FETCH_CLASS + __set())
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2027.2.216&r2=1.2027.2.217&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.216 php-src/NEWS:1.2027.2.217
--- php-src/NEWS:1.2027.2.216   Wed Nov 23 04:26:42 2005
+++ php-src/NEWS        Wed Nov 23 06:15:08 2005
@@ -3,6 +3,7 @@
 ?? Nov 2005, PHP 5.1
 - Fixed bug #35342 (isset(DOMNodeList->length) returns false). (Rob)
 - Fixed bug #35341 (Fix for bug #33760 breaks build with older curl). (Tony)
+- Fixed bug #35336 (crash on PDO::FETCH_CLASS + __set()). (Tony)
 - Fixed bug #35303 (PDO prepare() crashes with invalid parameters). (Ilia)
 - Fixed bug #35293 (PDO segfaults when using persistent connections). (Tony)
 - Fixed bug #35278 (Multiple virtual() calls crash Apache 2 php module). (Ilia)
http://cvs.php.net/diff.php/ZendEngine2/zend_API.c?r1=1.296.2.10&r2=1.296.2.11&ty=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.296.2.10 ZendEngine2/zend_API.c:1.296.2.11
--- ZendEngine2/zend_API.c:1.296.2.10   Wed Nov 16 19:19:23 2005
+++ ZendEngine2/zend_API.c      Wed Nov 23 06:15:10 2005
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_API.c,v 1.296.2.10 2005/11/17 00:19:23 iliaa Exp $ */
+/* $Id: zend_API.c,v 1.296.2.11 2005/11/23 11:15:10 tony2001 Exp $ */
 
 #include "zend.h"
 #include "zend_execute.h"
@@ -723,11 +723,13 @@
        if (hash_key->nKeyLength) {
                zval *obj = va_arg(args, zval *);
                zend_object_handlers *obj_ht = va_arg(args, 
zend_object_handlers *);
-               zval member;
+               zval *member;
                TSRMLS_FETCH();
 
-               ZVAL_STRINGL(&member, hash_key->arKey, hash_key->nKeyLength-1, 
0);
-               obj_ht->write_property(obj, &member, *value TSRMLS_CC);
+               MAKE_STD_ZVAL(member);
+               ZVAL_STRINGL(member, hash_key->arKey, hash_key->nKeyLength-1, 
1);
+               obj_ht->write_property(obj, member, *value TSRMLS_CC);
+               zval_ptr_dtor(&member);
        }
        return ZEND_HASH_APPLY_KEEP;
 }
@@ -791,7 +793,7 @@
                                        
                                        ALLOC_ZVAL(q);
                                        *q = **p;
-                                       INIT_PZVAL(q)
+                                       INIT_PZVAL(q);
                                        zval_copy_ctor(q);
                                        
zend_hash_add(class_type->static_members, str_index, str_length, (void**)&q, 
sizeof(zval*), NULL);
                                }
@@ -1169,58 +1171,68 @@
 ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long n 
TSRMLS_DC)
 {
        zval *tmp;
-       zval z_key;
+       zval *z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_LONG(tmp, n);
-       ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+       
+       MAKE_STD_ZVAL(z_key);
+       ZVAL_STRINGL(z_key, key, key_len-1, 1);
 
-       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, z_key, tmp TSRMLS_CC);
        zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+       zval_ptr_dtor(&z_key);
        return SUCCESS;
 }
 
 ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b 
TSRMLS_DC)
 {
        zval *tmp;
-       zval z_key;
+       zval *z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_BOOL(tmp, b);
 
-       ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+       MAKE_STD_ZVAL(z_key);
+       ZVAL_STRINGL(z_key, key, key_len-1, 1);
 
-       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, z_key, tmp TSRMLS_CC);
        zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+       zval_ptr_dtor(&z_key);
        return SUCCESS;
 }
 
 ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len TSRMLS_DC)
 {
        zval *tmp;
-       zval z_key;
+       zval *z_key;
        
        MAKE_STD_ZVAL(tmp);
        ZVAL_NULL(tmp);
        
-       ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+       MAKE_STD_ZVAL(z_key);
+       ZVAL_STRINGL(z_key, key, key_len-1, 1);
 
-       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, z_key, tmp TSRMLS_CC);
        zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+       zval_ptr_dtor(&z_key);
        return SUCCESS;
 }
 
 ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long 
n TSRMLS_DC)
 {
        zval *tmp;
-       zval z_key;
+       zval *z_key;
        
        MAKE_STD_ZVAL(tmp);
        ZVAL_RESOURCE(tmp, n);
-       ZVAL_STRINGL(&z_key, key, key_len-1, 0);
 
-       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       MAKE_STD_ZVAL(z_key);
+       ZVAL_STRINGL(z_key, key, key_len-1, 1);
+
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, z_key, tmp TSRMLS_CC);
        zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+       zval_ptr_dtor(&z_key);
        return SUCCESS;
 }
 
@@ -1228,14 +1240,17 @@
 ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double 
d TSRMLS_DC)
 {
        zval *tmp;
-       zval z_key;
+       zval *z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_DOUBLE(tmp, d);
-       ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+       
+       MAKE_STD_ZVAL(z_key);
+       ZVAL_STRINGL(z_key, key, key_len-1, 1);
 
-       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, z_key, tmp TSRMLS_CC);
        zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+       zval_ptr_dtor(&z_key);
        return SUCCESS;
 }
 
@@ -1243,40 +1258,46 @@
 ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char 
*str, int duplicate TSRMLS_DC)
 {
        zval *tmp;
-       zval z_key;
+       zval *z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_STRING(tmp, str, duplicate);
 
-       ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+       MAKE_STD_ZVAL(z_key);
+       ZVAL_STRINGL(z_key, key, key_len-1, 1);
 
-       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, z_key, tmp TSRMLS_CC);
        zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+       zval_ptr_dtor(&z_key);
        return SUCCESS;
 }
 
 ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char 
*str, uint length, int duplicate TSRMLS_DC)
 {
        zval *tmp;
-       zval z_key;
+       zval *z_key;
 
        MAKE_STD_ZVAL(tmp);
        ZVAL_STRINGL(tmp, str, length, duplicate);
 
-       ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+       MAKE_STD_ZVAL(z_key);
+       ZVAL_STRINGL(z_key, key, key_len-1, 1);
 
-       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, z_key, tmp TSRMLS_CC);
        zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
+       zval_ptr_dtor(&z_key);
        return SUCCESS;
 }
 
 ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval 
*value TSRMLS_DC)
 {
-       zval z_key;
+       zval *z_key;
 
-       ZVAL_STRINGL(&z_key, key, key_len-1, 0);
+       MAKE_STD_ZVAL(z_key);
+       ZVAL_STRINGL(z_key, key, key_len-1, 1);
 
-       Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, value TSRMLS_CC);
+       Z_OBJ_HANDLER_P(arg, write_property)(arg, z_key, value TSRMLS_CC);
+       zval_ptr_dtor(&z_key);
        return SUCCESS;
 }
 
@@ -2402,7 +2423,7 @@
 
 ZEND_API void zend_update_property(zend_class_entry *scope, zval *object, char 
*name, int name_length, zval *value TSRMLS_DC)
 {
-       zval property;
+       zval *property;
        zend_class_entry *old_scope = EG(scope);
        
        EG(scope) = scope;
@@ -2415,8 +2436,10 @@
                
                zend_error(E_CORE_ERROR, "Property %s of class %s cannot be 
updated", name, class_name);
        }
-       ZVAL_STRINGL(&property, name, name_length, 0);
-       Z_OBJ_HT_P(object)->write_property(object, &property, value TSRMLS_CC);
+       MAKE_STD_ZVAL(property);
+       ZVAL_STRINGL(property, name, name_length, 1);
+       Z_OBJ_HT_P(object)->write_property(object, property, value TSRMLS_CC);
+       zval_ptr_dtor(&property);
 
        EG(scope) = old_scope;
 }

http://cvs.php.net/co.php/php-src/ext/pdo_sqlite/tests/bug35336.phpt?r=1.1&p=1
Index: php-src/ext/pdo_sqlite/tests/bug35336.phpt
+++ php-src/ext/pdo_sqlite/tests/bug35336.phpt

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

Reply via email to