diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2015-10-29 20:06:55 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2015-10-29 20:06:55 +0300 |
| commit | c67fc6bb090d3faecc93691626e891540405fbf9 (patch) | |
| tree | 6a415fcde5e6918b0463089d22fd1f748109324c /main/streams/streams.c | |
| parent | 241e340f782dd1d2bbd15df684a210a878c3be35 (diff) | |
| download | php-git-c67fc6bb090d3faecc93691626e891540405fbf9.tar.gz | |
Fixed memory leak in php_stream_context_set_option()
Diffstat (limited to 'main/streams/streams.c')
| -rw-r--r-- | main/streams/streams.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/main/streams/streams.c b/main/streams/streams.c index 7f919ca834..3ad44b07a9 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -2233,19 +2233,20 @@ PHPAPI int php_stream_context_set_option(php_stream_context *context, const char *wrappername, const char *optionname, zval *optionvalue) { zval *wrapperhash; - zval category, copied_val; + zval category; - ZVAL_DUP(&copied_val, optionvalue); - - if (NULL == (wrapperhash = zend_hash_str_find(Z_ARRVAL(context->options), wrappername, strlen(wrappername)))) { + wrapperhash = zend_hash_str_find(Z_ARRVAL(context->options), wrappername, strlen(wrappername)); + if (NULL == wrapperhash) { array_init(&category); - if (NULL == zend_hash_str_update(Z_ARRVAL(context->options), (char*)wrappername, strlen(wrappername), &category)) { + wrapperhash = zend_hash_str_update(Z_ARRVAL(context->options), (char*)wrappername, strlen(wrappername), &category); + if (NULL == wrapperhash) { return FAILURE; } - - wrapperhash = &category; } - return zend_hash_str_update(Z_ARRVAL_P(wrapperhash), optionname, strlen(optionname), &copied_val) ? SUCCESS : FAILURE; + if (Z_REFCOUNTED_P(optionvalue)) { + Z_ADDREF_P(optionvalue); + } + return zend_hash_str_update(Z_ARRVAL_P(wrapperhash), optionname, strlen(optionname), optionvalue) ? SUCCESS : FAILURE; } /* }}} */ |
