]> granicus.if.org Git - php/commitdiff
fix leaks with class constants (bug #24699)
authorStanislav Malyshev <stas@php.net>
Sun, 27 Jul 2003 12:03:54 +0000 (12:03 +0000)
committerStanislav Malyshev <stas@php.net>
Sun, 27 Jul 2003 12:03:54 +0000 (12:03 +0000)
Zend/zend_compile.c
Zend/zend_constants.c

index 1c9f1f8314ca73fc75313e496be9b83db83a5605..8d1aa3d9456e734bda7e5f8d4e5bf243fe58561c 100644 (file)
@@ -2513,6 +2513,7 @@ void zend_do_fold_constant(znode *result, znode *constant_name TSRMLS_DC)
        if (zend_hash_find(&CG(active_class_entry)->constants_table, constant_name->u.constant.value.str.val,
                           constant_name->u.constant.value.str.len+1, (void **) &zresult) != SUCCESS) {
                if (zend_get_constant(constant_name->u.constant.value.str.val, constant_name->u.constant.value.str.len, &result->u.constant TSRMLS_CC)) {
+                       zval_dtor(&constant_name->u.constant);
                        return;
                } else {
                        zend_error(E_COMPILE_ERROR, "Cannot find %s constant in class %s\n", 
@@ -2522,6 +2523,7 @@ void zend_do_fold_constant(znode *result, znode *constant_name TSRMLS_DC)
 
        result->u.constant = **zresult;
        zval_copy_ctor(&result->u.constant);
+       zval_dtor(&constant_name->u.constant);
 }
 
 void zend_do_fetch_constant(znode *result, znode *constant_container, znode *constant_name, int mode TSRMLS_DC)
index 365f3cf4827a741017b2e209cc34f2645a59c693..2db90d35308b483e96b12de5dd2ee29d416d6319 100644 (file)
@@ -288,6 +288,8 @@ ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC
        if (retval) {
                *result = c->value;
                zval_copy_ctor(result);
+               result->refcount = 1;
+               result->is_ref = 0;
        }
 
        return retval;