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];
int response_code;
zend_array *symbol_table;
+ ZVAL_UNDEF(&response_header);
tmp_line[0] = '\0';
if (redirect_max < 1) {
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)) {
}
}
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!");
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;
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);
}
}
+ zval_ptr_dtor(&response_header);
+
return stream;
}
/* }}} */