diff options
author | Stanislav Malyshev <stas@php.net> | 2015-04-16 22:31:13 -0700 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2015-04-18 15:48:09 -0700 |
commit | 494870fded9ede88d02f59b6333ffd9848ee512f (patch) | |
tree | 05e6e79cf3f9c6786bd682de753ef532c6698eb2 | |
parent | aef96d5169111db7e17f06ff6b13d56cd980cb8c (diff) | |
download | php-git-494870fded9ede88d02f59b6333ffd9848ee512f.tar.gz |
Restore fix for bug #69337
-rw-r--r-- | ext/standard/http_fopen_wrapper.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index ae4b13745b..0343e403e7 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -124,7 +124,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, size_t scratch_len = 0; int body = 0; char location[HTTP_HEADER_BLOCK_SIZE]; - zval *response_header = NULL; + zval response_header; int reqok = 0; char *http_header_line = NULL; char tmp_line[128]; @@ -146,6 +146,7 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, int response_code; zend_array *symbol_table; + ZVAL_UNDEF(&response_header); tmp_line[0] = '\0'; if (redirect_max < 1) { @@ -669,9 +670,14 @@ finish: zend_set_local_var_str("http_response_header", sizeof("http_response_header")-1, &ztmp, 0); } - response_header = zend_hash_str_find_ind(symbol_table, "http_response_header", sizeof("http_response_header")-1); - if (Z_TYPE_P(response_header) != IS_ARRAY) { - goto out; + { + zval *response_header_ptr = zend_hash_str_find_ind(symbol_table, "http_response_header", sizeof("http_response_header")-1); + if (!response_header_ptr || Z_TYPE_P(response_header_ptr) != IS_ARRAY) { + ZVAL_UNDEF(&response_header); + goto out; + } else { + ZVAL_COPY(&response_header, response_header_ptr); + } } if (!php_stream_eof(stream)) { @@ -720,7 +726,7 @@ finish: } } ZVAL_STRINGL(&http_response, tmp_line, tmp_line_len); - zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_response); + zend_hash_next_index_insert(Z_ARRVAL(response_header), &http_response); } } else { php_stream_wrapper_log_error(wrapper, options, "HTTP request failed, unexpected end of socket!"); @@ -793,7 +799,7 @@ finish: ZVAL_STRINGL(&http_header, http_header_line, http_header_line_length); - zend_hash_next_index_insert(Z_ARRVAL_P(response_header), &http_header); + zend_hash_next_index_insert(Z_ARRVAL(response_header), &http_header); } } else { break; @@ -907,7 +913,7 @@ out: if (stream) { if (header_init) { - ZVAL_COPY(&stream->wrapperdata, response_header); + ZVAL_COPY(&stream->wrapperdata, &response_header); } php_stream_notify_progress_init(context, 0, file_size); @@ -934,6 +940,8 @@ out: } } + zval_ptr_dtor(&response_header); + return stream; } /* }}} */ |