mirror of
https://github.com/php/php-src.git
synced 2026-03-28 10:12:18 +01:00
fix #36420 (segfault when access result->num_rows after calling result->close())
This commit is contained in:
@@ -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; \
|
||||
|
||||
25
ext/mysqli/tests/bug36420.phpt
Normal file
25
ext/mysqli/tests/bug36420.phpt
Normal file
@@ -0,0 +1,25 @@
|
||||
--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
|
||||
Reference in New Issue
Block a user