[PHP-CVS] svn: /php/php-src/ branches/PHP_5_2/ext/pdo/pdo_stmt.c branches/PHP_5_3/ext/pdo/pdo_stmt.c trunk/ext/pdo/pdo_stmt.c
felipe Wed, 16 Jun 2010 23:13:29 + Revision: http://svn.php.net/viewvc?view=revisionrevision=300503 Log: - Fix crash when calling a method of a class that inherits PDOStatement if instantiated directly Changed paths: U php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c U php/php-src/branches/PHP_5_3/ext/pdo/pdo_stmt.c U php/php-src/trunk/ext/pdo/pdo_stmt.c Modified: php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c === --- php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c 2010-06-16 19:01:13 UTC (rev 300502) +++ php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c 2010-06-16 23:13:29 UTC (rev 300503) @@ -2289,6 +2289,10 @@ if (zend_hash_find(Z_OBJCE_P(object)-function_table, lc_method_name, method_len+1, (void**)fbc) == FAILURE) { pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(object TSRMLS_CC); + /* instance not created by PDO object */ + if (!stmt-dbh) { + goto out; + } /* not a pre-defined method, nor a user-defined method; check * the driver specific methods */ if (!stmt-dbh-cls_methods[PDO_DBH_DRIVER_METHOD_KIND_STMT]) { Modified: php/php-src/branches/PHP_5_3/ext/pdo/pdo_stmt.c === --- php/php-src/branches/PHP_5_3/ext/pdo/pdo_stmt.c 2010-06-16 19:01:13 UTC (rev 300502) +++ php/php-src/branches/PHP_5_3/ext/pdo/pdo_stmt.c 2010-06-16 23:13:29 UTC (rev 300503) @@ -2282,6 +2282,10 @@ if (zend_hash_find(Z_OBJCE_P(object)-function_table, lc_method_name, method_len+1, (void**)fbc) == FAILURE) { pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(object TSRMLS_CC); + /* instance not created by PDO object */ + if (!stmt-dbh) { + goto out; + } /* not a pre-defined method, nor a user-defined method; check * the driver specific methods */ if (!stmt-dbh-cls_methods[PDO_DBH_DRIVER_METHOD_KIND_STMT]) { Modified: php/php-src/trunk/ext/pdo/pdo_stmt.c === --- php/php-src/trunk/ext/pdo/pdo_stmt.c2010-06-16 19:01:13 UTC (rev 300502) +++ php/php-src/trunk/ext/pdo/pdo_stmt.c2010-06-16 23:13:29 UTC (rev 300503) @@ -2282,6 +2282,10 @@ if (zend_hash_find(Z_OBJCE_P(object)-function_table, lc_method_name, method_len+1, (void**)fbc) == FAILURE) { pdo_stmt_t *stmt = (pdo_stmt_t*)zend_object_store_get_object(object TSRMLS_CC); + /* instance not created by PDO object */ + if (!stmt-dbh) { + goto out; + } /* not a pre-defined method, nor a user-defined method; check * the driver specific methods */ if (!stmt-dbh-cls_methods[PDO_DBH_DRIVER_METHOD_KIND_STMT]) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/branches/PHP_5_2/ext/ pdo/pdo_stmt.c pdo_sqlite/tests/bug49521.phpt
felipe Thu, 18 Mar 2010 22:07:51 + Revision: http://svn.php.net/viewvc?view=revisionrevision=296361 Log: Revert 290786: Fixed bug #49521 (PDO fetchObject sets values before calling constructor) Bug: http://bugs.php.net/49521 (Re-Opened) PDO fetchObject sets values before calling constructor Changed paths: U php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c U php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug49521.phpt Modified: php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c === --- php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c 2010-03-18 21:53:50 UTC (rev 296360) +++ php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c 2010-03-18 22:07:51 UTC (rev 296361) @@ -1103,32 +1103,6 @@ } } - switch (how) { - case PDO_FETCH_CLASS: - if (ce-constructor !(flags PDO_FETCH_PROPS_LATE)) { - stmt-fetch.cls.fci.object_pp = return_value; - stmt-fetch.cls.fcc.object_pp = return_value; - if (zend_call_function(stmt-fetch.cls.fci, stmt-fetch.cls.fcc TSRMLS_CC) == FAILURE) { - pdo_raise_impl_error(stmt-dbh, stmt, HY000, could not call class constructor TSRMLS_CC); - return 0; - } else { - if (stmt-fetch.cls.retval_ptr) { - zval_ptr_dtor(stmt-fetch.cls.retval_ptr); - } - } - } - if (flags PDO_FETCH_CLASSTYPE) { - do_fetch_opt_finish(stmt, 0 TSRMLS_CC); - stmt-fetch.cls.ce = old_ce; - stmt-fetch.cls.ctor_args = old_ctor_args; - stmt-fetch.cls.fci.param_count = old_arg_count; - } - break; - - default: - break; - } - for (idx = 0; i stmt-column_count; i++, idx++) { zval *val; MAKE_STD_ZVAL(val); @@ -1262,6 +1236,27 @@ } switch (how) { + case PDO_FETCH_CLASS: + if (ce-constructor !(flags PDO_FETCH_PROPS_LATE)) { + stmt-fetch.cls.fci.object_pp = return_value; + stmt-fetch.cls.fcc.object_pp = return_value; + if (zend_call_function(stmt-fetch.cls.fci, stmt-fetch.cls.fcc TSRMLS_CC) == FAILURE) { + pdo_raise_impl_error(stmt-dbh, stmt, HY000, could not call class constructor TSRMLS_CC); + return 0; + } else { + if (stmt-fetch.cls.retval_ptr) { + zval_ptr_dtor(stmt-fetch.cls.retval_ptr); + } + } + } + if (flags PDO_FETCH_CLASSTYPE) { + do_fetch_opt_finish(stmt, 0 TSRMLS_CC); + stmt-fetch.cls.ce = old_ce; + stmt-fetch.cls.ctor_args = old_ctor_args; + stmt-fetch.cls.fci.param_count = old_arg_count; + } + break; + case PDO_FETCH_FUNC: stmt-fetch.func.fci.param_count = idx; stmt-fetch.func.fci.retval_ptr_ptr = retval; Modified: php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug49521.phpt === --- php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug49521.phpt 2010-03-18 21:53:50 UTC (rev 296360) +++ php/php-src/branches/PHP_5_2/ext/pdo_sqlite/tests/bug49521.phpt 2010-03-18 22:07:51 UTC (rev 296361) @@ -33,7 +33,7 @@ Book::__construct object(Book)#%d (2) { [%u|b%title]= - string(3) PHP + string(0) [%u|b%author]= string(6) Rasmus } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: php/php-src/branches/PHP_5_2/ext/pdo/ pdo_stmt.c
felipe Thu, 16 Jul 2009 01:00:22 + URL: http://svn.php.net/viewvc?view=revisionrevision=284164 Changed paths: U php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c Log: - MFH: Removed trailing zeros on double to string conversion (noticed on #48924) Modified: php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c === --- php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c 2009-07-16 00:59:34 UTC (rev 284163) +++ php/php-src/branches/PHP_5_2/ext/pdo/pdo_stmt.c 2009-07-16 01:00:22 UTC (rev 284164) @@ -329,7 +329,7 @@ if (PDO_PARAM_TYPE(param-param_type) == PDO_PARAM_STR param-max_value_len = 0 ! ZVAL_IS_NULL(param-parameter)) { if (Z_TYPE_P(param-parameter) == IS_DOUBLE) { char *p; - int len = spprintf(p, 0, %F, Z_DVAL_P(param-parameter)); + int len = spprintf(p, 0, %.*H, (int) EG(precision), Z_DVAL_P(param-parameter)); ZVAL_STRINGL(param-parameter, p, len, 0); } else { convert_to_string(param-parameter); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php