summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli.c
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/mysqli.c
parentcd9342fb8441a6f100376b6f2950d5f3e5b9d88a (diff)
downloadphp-git-c10072d0672fdf13813ed07bc198a3e302a0e557.tar.gz
fixed memleak and segfault when constructor call failed
Diffstat (limited to 'ext/mysqli/mysqli.c')
-rw-r--r--ext/mysqli/mysqli.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index 55e06e7bb8..9138c07b01 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -165,6 +165,14 @@ zval *mysqli_read_property(zval *object, zval *member, zend_bool silent TSRMLS_D
zend_object_handlers *std_hnd;
int ret;
+ ret = FAILURE;
+ obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC);
+
+ if (!obj->valid) {
+ retval = EG(uninitialized_zval_ptr);
+ return(retval);
+ }
+
if (member->type != IS_STRING) {
tmp_member = *member;
zval_copy_ctor(&tmp_member);
@@ -172,9 +180,6 @@ zval *mysqli_read_property(zval *object, zval *member, zend_bool silent TSRMLS_D
member = &tmp_member;
}
- ret = FAILURE;
- obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC);
-
if (obj->prop_handler != NULL) {
ret = zend_hash_find(obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd);
}
@@ -198,7 +203,7 @@ zval *mysqli_read_property(zval *object, zval *member, zend_bool silent TSRMLS_D
}
/* }}} */
-/* {{{ mysqli_read_property */
+/* {{{ mysqli_write_property */
void mysqli_write_property(zval *object, zval *member, zval *value TSRMLS_DC)
{
zval tmp_member;
@@ -261,6 +266,7 @@ PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry *class_
intern->zo.in_get = 0;
intern->zo.in_set = 0;
intern->ptr = NULL;
+ intern->valid = 0;
intern->prop_handler = NULL;
zend_hash_find(&classes, class_type->name, class_type->name_length + 1, (void **) &intern->prop_handler);