com php-src: Fixed bug #63726 (Memleak with static properties and internal/user classes): NEWS Zend/zend_API.c Zend/zend_ object_handlers.c
| From: | Xinchen Hui | Date: | Mon, 10 Dec 2012 12:28:27 +0000 |
| Subject: | com php-src: Fixed bug #63726 (Memleak with static properties and internal/user classes): NEWS Zend/zend_API.c Zend/zend_ object_handlers.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-70689@lists.php.net to get a copy of this message | ||
Commit: ad553a7af237818f5d7690e97a03ffe66ec9ab37
Author: Xinchen Hui <laruence@php.net> Mon, 10 Dec 2012 20:28:27 +0800
Parents: db6d8e27247429746985cf1c424e73728449922f
Branches: PHP-5.3
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=ad553a7af237818f5d7690e97a03ffe66ec9ab37
Log:
Fixed bug #63726 (Memleak with static properties and internal/user classes)
Bugs:
https://bugs.php.net/63726
Changed paths:
M NEWS
M Zend/zend_API.c
M Zend/zend_object_handlers.c
Diff:
diff --git a/NEWS b/NEWS
index 1ec60e3..91306ca 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,8 @@ PHP NEWS
#### ADD NEWS TO 5.3.21 ONLY ####
- Zend Engine:
+ . 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 c1b501b..df11bdb 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -3472,6 +3472,8 @@ ZEND_API int zend_update_static_property(zend_class_entry *scope, char *name,
in
(*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_object_handlers.c b/Zend/zend_object_handlers.c
index eae47d9..c40a458 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -437,6 +437,8 @@ static void zend_std_write_property(zval *object, zval *member, zval *value TSRM
(*variable_ptr)->value = value->value;
if (Z_REFCOUNT_P(value) > 0) {
zval_copy_ctor(*variable_ptr);
+ } else {
+ efree(value);
}
zval_dtor(&garbage);
} else {