From c10072d0672fdf13813ed07bc198a3e302a0e557 Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Wed, 31 Dec 2003 08:34:02 +0000 Subject: fixed memleak and segfault when constructor call failed --- ext/mysqli/php_mysqli.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'ext/mysqli/php_mysqli.h') diff --git a/ext/mysqli/php_mysqli.h b/ext/mysqli/php_mysqli.h index e4c1f01393..aaf80728ef 100644 --- a/ext/mysqli/php_mysqli.h +++ b/ext/mysqli/php_mysqli.h @@ -57,12 +57,13 @@ typedef struct { } PROFILER; typedef struct { - void *ptr; /* resource: (mysql, result, stmt) */ + void *ptr; /* resource: (mysql, result, stmt) */ } MYSQLI_RESOURCE; typedef struct _mysqli_object { zend_object zo; void *ptr; + char valid; HashTable *prop_handler; } mysqli_object; /* extends zend_object */ @@ -136,7 +137,8 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML } \ #define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval, __ce) \ - ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->ptr = __ptr; + ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->ptr = __ptr; \ + ((mysqli_object *) zend_object_store_get_object(__zval TSRMLS_CC))->valid = 1; #define MYSQLI_RETURN_RESOURCE(__ptr, __ce) \ Z_TYPE_P(return_value) = IS_OBJECT; \ @@ -162,6 +164,10 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry * TSRML php_error(E_WARNING, "Couldn't fetch %s", intern->zo.ce->name);\ RETURN_NULL();\ }\ + if (!intern->valid) { \ + php_error(E_WARNING, "invalid resource %s", intern->zo.ce->name); \ + RETURN_NULL(); \ + } \ __ptr = (__type)my_res->ptr; \ if (!strcmp((char *)__name, "mysqli_stmt")) {\ if (!((STMT *)__ptr)->stmt->mysql) {\ -- cgit v1.2.1