tony2001 Thu Feb 16 20:58:59 2006 UTC Added files: (Branch: PHP_5_1) /php-src/ext/mysqli/tests bug36420.phpt
Modified files: /php-src/ext/mysqli mysqli_prop.c Log: MFH: add checks and fix possible reincarnations of bug #36420 http://cvs.php.net/viewcvs.cgi/php-src/ext/mysqli/mysqli_prop.c?r1=1.23.2.1&r2=1.23.2.2&diff_format=u Index: php-src/ext/mysqli/mysqli_prop.c diff -u php-src/ext/mysqli/mysqli_prop.c:1.23.2.1 php-src/ext/mysqli/mysqli_prop.c:1.23.2.2 --- php-src/ext/mysqli/mysqli_prop.c:1.23.2.1 Sun Jan 1 12:50:09 2006 +++ php-src/ext/mysqli/mysqli_prop.c Thu Feb 16 20:58:59 2006 @@ -15,7 +15,7 @@ | Author: Georg Richter <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: mysqli_prop.c,v 1.23.2.1 2006/01/01 12:50:09 sniper Exp $ + $Id: mysqli_prop.c,v 1.23.2.2 2006/02/16 20:58:59 tony2001 Exp $ */ #ifdef HAVE_CONFIG_H @@ -40,13 +40,34 @@ MYSQL *p; \ ALLOC_ZVAL(*retval);\ CHECK_OBJECT();\ -p = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql; +if (!obj->ptr || !(MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr) { \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name);\ + ZVAL_NULL(*retval);\ + return SUCCESS; \ +} else if (!obj->valid) { \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid resource %s", obj->zo.ce->name);\ + ZVAL_NULL(*retval);\ + return SUCCESS; \ +} else { \ + p = (MYSQL *)((MY_MYSQL *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr)->mysql; \ +} #define MYSQLI_GET_RESULT() \ MYSQL_RES *p; \ ALLOC_ZVAL(*retval);\ CHECK_OBJECT();\ -p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr +if (!obj->ptr) { \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %s", obj->zo.ce->name);\ + ZVAL_NULL(*retval);\ + return SUCCESS; \ +} else if (!obj->valid) { \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid resource %s", obj->zo.ce->name);\ + ZVAL_NULL(*retval);\ + return SUCCESS; \ +} else { \ + p = (MYSQL_RES *)((MYSQLI_RESOURCE *)(obj->ptr))->ptr; \ +} + #define MYSQLI_GET_STMT() \ MYSQL_STMT *p; \ http://cvs.php.net/viewcvs.cgi/php-src/ext/mysqli/tests/bug36420.phpt?view=markup&rev=1.1 Index: php-src/ext/mysqli/tests/bug36420.phpt +++ php-src/ext/mysqli/tests/bug36420.phpt --TEST-- bug #36420 (segfault when access result->num_rows after calling result->close()) --SKIPIF-- <?php require_once('skipif.inc'); ?> --FILE-- <?php include "connect.inc"; $mysqli = mysqli_connect($host, $user, $passwd); $result = $mysqli->query('select 1'); $result->close(); echo $result->num_rows; $mysqli->close(); echo $result->num_rows; echo "Done\n"; ?> --EXPECTF-- Warning: main(): Couldn't fetch mysqli_result in %s on line %d Warning: main(): Couldn't fetch mysqli_result in %s on line %d Done -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php