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