From 494870fded9ede88d02f59b6333ffd9848ee512f Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Thu, 16 Apr 2015 22:31:13 -0700 Subject: [PATCH] Restore fix for bug #69337 --- ext/standard/http_fopen_wrapper.c | 22 +++++++++++++++------- 1 file 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; } /* }}} */ -- 2.40.0