diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2004-08-29 17:16:20 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2004-08-29 17:16:20 +0000 |
commit | 9996b5f7312672fe7be97f173ac35247af14ac6c (patch) | |
tree | e472c35cf4afc2e69e853bf67124827275eebf7d | |
parent | 1901b9d90e2c0df99bb471868144db9172443445 (diff) | |
download | php-git-9996b5f7312672fe7be97f173ac35247af14ac6c.tar.gz |
Fixed leak when serializing protected & private properties.
-rw-r--r-- | ext/standard/var.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/ext/standard/var.c b/ext/standard/var.c index 2b5154e08d..525a1db432 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -594,6 +594,7 @@ static void php_var_serialize_class(smart_str *buf, zval **struc, zval *retval_p Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, ce->type & ZEND_INTERNAL_CLASS); if (zend_hash_find(Z_OBJPROP_PP(struc), priv_name, prop_name_length, (void *) &d) == SUCCESS) { php_var_serialize_string(buf, priv_name, prop_name_length-1); + efree(priv_name); php_var_serialize_intern(buf, d, var_hash TSRMLS_CC); break; } @@ -601,12 +602,16 @@ static void php_var_serialize_class(smart_str *buf, zval **struc, zval *retval_p Z_STRVAL_PP(name), Z_STRLEN_PP(name) + 1, ce->type & ZEND_INTERNAL_CLASS); if (zend_hash_find(Z_OBJPROP_PP(struc), prot_name, prop_name_length, (void *) &d) == SUCCESS) { php_var_serialize_string(buf, prot_name, prop_name_length - 1); + efree(prot_name); php_var_serialize_intern(buf, d, var_hash TSRMLS_CC); break; } php_error_docref(NULL TSRMLS_CC, E_NOTICE, "\"%s\" returned as member variable from __sleep() but does not exist", Z_STRVAL_PP(name)); php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name)); php_var_serialize_intern(buf, &nvalp, var_hash TSRMLS_CC); + + efree(prot_name); + efree(priv_name); } while (0); } else { php_var_serialize_string(buf, Z_STRVAL_PP(name), Z_STRLEN_PP(name)); |