tony2001                Thu Feb 16 16:08:52 2006 UTC

  Added files:                 
    /php-src/ext/mysqli/tests   bug36420.phpt 

  Modified files:              
    /php-src/ext/mysqli mysqli_prop.c 
  Log:
  fix #36420 (segfault when access result->num_rows after calling 
result->close())
  
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/mysqli/mysqli_prop.c?r1=1.24&r2=1.25&diff_format=u
Index: php-src/ext/mysqli/mysqli_prop.c
diff -u php-src/ext/mysqli/mysqli_prop.c:1.24 
php-src/ext/mysqli/mysqli_prop.c:1.25
--- php-src/ext/mysqli/mysqli_prop.c:1.24       Sun Jan  1 13:09:52 2006
+++ php-src/ext/mysqli/mysqli_prop.c    Thu Feb 16 16:08:52 2006
@@ -15,7 +15,7 @@
   | Author: Georg Richter <[EMAIL PROTECTED]>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_prop.c,v 1.24 2006/01/01 13:09:52 sniper Exp $ 
+  $Id: mysqli_prop.c,v 1.25 2006/02/16 16:08:52 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

Reply via email to