summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2015-04-16 22:31:13 -0700
committerStanislav Malyshev <stas@php.net>2015-04-18 15:48:09 -0700
commit494870fded9ede88d02f59b6333ffd9848ee512f (patch)
tree05e6e79cf3f9c6786bd682de753ef532c6698eb2
parentaef96d5169111db7e17f06ff6b13d56cd980cb8c (diff)
downloadphp-git-494870fded9ede88d02f59b6333ffd9848ee512f.tar.gz
Restore fix for bug #69337
-rw-r--r--ext/standard/http_fopen_wrapper.c22
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;
}
/* }}} */