summaryrefslogtreecommitdiff
path: root/ext/mysqli/php_mysqli.h
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2003-12-31 08:34:02 +0000
committerGeorg Richter <georg@php.net>2003-12-31 08:34:02 +0000
commitc10072d0672fdf13813ed07bc198a3e302a0e557 (patch)
tree9c9ee4743d6244178cf31d36fe3d42c4f91b7f12 /ext/mysqli/php_mysqli.h
parentcd9342fb8441a6f100376b6f2950d5f3e5b9d88a (diff)
downloadphp-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.h10
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) {\