]> granicus.if.org Git - php/commitdiff
fix leak, take on 7.x
authorAnatol Belski <ab@php.net>
Tue, 6 Dec 2016 13:42:59 +0000 (14:42 +0100)
committerAnatol Belski <ab@php.net>
Tue, 6 Dec 2016 13:42:59 +0000 (14:42 +0100)
ext/wddx/tests/bug73631.phpt
ext/wddx/wddx.c

index 880ada5a5d683ae5ae6f779061631e06fa819bc6..1fcde72dfeedb645049132a4aef01ba39380f827 100644 (file)
@@ -2,8 +2,6 @@
 Bug #73631 (Memory leak due to invalid wddx stack processing)
 --SKIPIF--
 <?php if (!extension_loaded("wddx")) print "skip"; ?>
---XFAIL--
-Still has memory leaks, not sure how to fix them.
 --FILE--
 <?php
 $xml = <<<EOF
index 662b95736937ff5dee23e280723b7fd9adf68212..d58a564593cb0c075767bee8eee6bd7b7cc335c7 100644 (file)
@@ -907,8 +907,13 @@ static void php_wddx_pop_element(void *user_data, const XML_Char *name)
                }
 
                if (!strcmp((char *)name, EL_BINARY)) {
-                       zend_string *new_str = php_base64_decode(
-                               (unsigned char *)Z_STRVAL(ent1->data), Z_STRLEN(ent1->data));
+                       zend_string *new_str = NULL;
+                       
+                       if (ZSTR_EMPTY_ALLOC() != Z_STR(ent1->data)) {
+                               new_str = php_base64_decode(
+                                       (unsigned char *)Z_STRVAL(ent1->data), Z_STRLEN(ent1->data));
+                       }
+
                        zval_ptr_dtor(&ent1->data);
                        if (new_str) {
                                ZVAL_STR(&ent1->data, new_str);