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

Reply via email to