com php-src: Fixed bug #63726 (Memleak with static properties and internal/user classes): NEWS Zend/zend_API.c Zend/zend_ compile.c
Zend/zend_object_handlers.c
| From: | Xinchen Hui | Date: | Mon, 10 Dec 2012 12:29:51 +0000 |
| Subject: | com php-src: Fixed bug #63726 (Memleak with static properties and internal/user classes): NEWS Zend/zend_API.c Zend/zend_ compile.c Zend/zend_object_handlers.c |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-70690@lists.php.net to get a copy of this message | ||
Commit: 3d86e6d881a5f425c3b37a85ea7f1eb5acd12b18
Author: Xinchen Hui <laruence@php.net> Mon, 10 Dec 2012 20:29:51 +0800
Parents: 8b8fb649dc8ca29e493f6342b87d1cc8acfb9d03
Branches: PHP-5.4
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=3d86e6d881a5f425c3b37a85ea7f1eb5acd12b18
Log:
Fixed bug #63726 (Memleak with static properties and internal/user classes)
No test scripts provided (will try to find one)
Bugs:
https://bugs.php.net/63726
Changed paths:
M NEWS
M Zend/zend_API.c
M Zend/zend_compile.c
M Zend/zend_object_handlers.c
Diff:
diff --git a/NEWS b/NEWS
index 2023198..29b62a3 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP NEWS
?? ??? 2012, PHP 5.4.10
- Core:
+ . Fixed bug #63726 (Memleak with static properties and internal/user
+ classes). (Laruence)
. Fixed bug #63635 (Segfault in gc_collect_cycles). (Dmitry)
. Fixed bug #63512 (parse_ini_file() with INI_SCANNER_RAW removes quotes
from value). (Pierrick)
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index c3d62c2..6dadd4d 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -3708,6 +3708,8 @@ ZEND_API int zend_update_static_property(zend_class_entry *scope, const char
*na
(*property)->value = value->value;
if (Z_REFCOUNT_P(value) > 0) {
zval_copy_ctor(*property);
+ } else {
+ efree(value);
}
} else {
zval *garbage = *property;
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index f25e7fa..917e0c1 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3333,7 +3333,7 @@ static zend_bool do_inherit_property_access_check(HashTable *target_ht,
zend_pro
if ((child_info->flags & ZEND_ACC_PPP_MASK) > (parent_info->flags &
ZEND_ACC_PPP_MASK)) {
zend_error(E_COMPILE_ERROR, "Access level to %s::$%s must be %s (as in class %s)%s",
ce->name, hash_key->arKey, zend_visibility_string(parent_info->flags), parent_ce->name,
(parent_info->flags&ZEND_ACC_PUBLIC) ? "" : " or weaker");
} else if ((child_info->flags & ZEND_ACC_STATIC) == 0) {
- Z_DELREF_P(ce->default_properties_table[parent_info->offset]);
+ zval_ptr_dtor(&(ce->default_properties_table[parent_info->offset]));
ce->default_properties_table[parent_info->offset] =
ce->default_properties_table[child_info->offset];
ce->default_properties_table[child_info->offset] = NULL;
child_info->offset = parent_info->offset;
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index d82493a..3374b0b 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -539,6 +539,8 @@ ZEND_API void zend_std_write_property(zval *object, zval *member, zval *value, c
(*variable_ptr)->value = value->value;
if (Z_REFCOUNT_P(value) > 0) {
zval_copy_ctor(*variable_ptr);
+ } else {
+ efree(value);
}
zval_dtor(&garbage);
} else {