diff options
author | Georg Richter <georg@php.net> | 2003-12-31 08:34:02 +0000 |
---|---|---|
committer | Georg Richter <georg@php.net> | 2003-12-31 08:34:02 +0000 |
commit | c10072d0672fdf13813ed07bc198a3e302a0e557 (patch) | |
tree | 9c9ee4743d6244178cf31d36fe3d42c4f91b7f12 /ext/mysqli/php_mysqli.h | |
parent | cd9342fb8441a6f100376b6f2950d5f3e5b9d88a (diff) | |
download | php-git-c10072d0672fdf13813ed07bc198a3e302a0e557.tar.gz |
fixed memleak and segfault when constructor call failed
Diffstat (limited to 'ext/mysqli/php_mysqli.h')
-rw-r--r-- | ext/mysqli/php_mysqli.h | 10 |
1 files changed, 8 insertions, 2 deletions
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) {\ |