]> granicus.if.org Git - php/commitdiff
Fixed memory leaks
authorDmitry Stogov <dmitry@zend.com>
Thu, 2 Nov 2017 00:04:27 +0000 (03:04 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 2 Nov 2017 00:04:27 +0000 (03:04 +0300)
Zend/zend_list.c
main/streams/filter.c
main/streams/streams.c
main/streams/transports.c

index c3401d85c04a3626135a437c2b4a397a9b9252d9..1f97af9c0c5f983b6d31721a33efb562d1b00a22 100644 (file)
@@ -360,10 +360,7 @@ ZEND_API zend_resource* zend_register_persistent_resource(const char *key, size_
        zend_string *str = zend_string_init(key, key_len, 1);
        zend_resource *ret  = zend_register_persistent_resource_ex(str, rsrc_pointer, rsrc_type);
 
-       if (UNEXPECTED(ret == NULL)) {
-               free(str);
-       }
-
+       zend_string_release(str);
        return ret;
 }
 
index 5d8fccfca758df70ac90bb0eb928fe07dffced3f..16c99998f9b668593e0514f64869051a6af75eb9 100644 (file)
@@ -46,8 +46,11 @@ PHPAPI HashTable *_php_get_stream_filters_hash(void)
 /* API for registering GLOBAL filters */
 PHPAPI int php_stream_filter_register_factory(const char *filterpattern, php_stream_filter_factory *factory)
 {
+       int ret;
        zend_string *str = zend_string_init_interned(filterpattern, strlen(filterpattern), 1);
-       return zend_hash_add_ptr(&stream_filters_hash, str, factory) ? SUCCESS : FAILURE;
+       ret = zend_hash_add_ptr(&stream_filters_hash, str, factory) ? SUCCESS : FAILURE;
+       zend_string_release(str);
+       return ret;
 }
 
 PHPAPI int php_stream_filter_unregister_factory(const char *filterpattern)
index 1c3a144e9bb8af0c382fe801f72c99ce983d7c19..1f82871ab30b2bf86838ac88bfd7357fc9356f4d 100644 (file)
@@ -1665,12 +1665,17 @@ static inline int php_stream_wrapper_scheme_validate(const char *protocol, unsig
 PHPAPI int php_register_url_stream_wrapper(const char *protocol, php_stream_wrapper *wrapper)
 {
        unsigned int protocol_len = (unsigned int)strlen(protocol);
+       int ret;
+       zend_string *str;
 
        if (php_stream_wrapper_scheme_validate(protocol, protocol_len) == FAILURE) {
                return FAILURE;
        }
 
-       return zend_hash_add_ptr(&url_stream_wrappers_hash, zend_string_init_interned(protocol, protocol_len, 1), wrapper) ? SUCCESS : FAILURE;
+       str = zend_string_init_interned(protocol, protocol_len, 1);
+       ret = zend_hash_add_ptr(&url_stream_wrappers_hash, str, wrapper) ? SUCCESS : FAILURE;
+       zend_string_release(str);
+       return ret;
 }
 
 PHPAPI int php_unregister_url_stream_wrapper(const char *protocol)
index 9bd78426f9e1019fa861ad80338727fc28569af0..2bf4230870079efee90f47433e39526094eeeb3b 100644 (file)
@@ -31,7 +31,12 @@ PHPAPI HashTable *php_stream_xport_get_hash(void)
 
 PHPAPI int php_stream_xport_register(const char *protocol, php_stream_transport_factory factory)
 {
-       return zend_hash_update_ptr(&xport_hash, zend_string_init_interned(protocol, strlen(protocol), 1), factory) ? SUCCESS : FAILURE;
+       int ret;
+       zend_string *str = zend_string_init_interned(protocol, strlen(protocol), 1);
+
+       ret = zend_hash_update_ptr(&xport_hash, str, factory) ? SUCCESS : FAILURE;
+       zend_string_release(str);
+       return ret;
 }
 
 PHPAPI int php_stream_xport_unregister(const char *protocol)