summaryrefslogtreecommitdiff
path: root/ext/standard/http_fopen_wrapper.c
diff options
context:
space:
mode:
authorSergey Akbarov <sergey@terranova.(none)>2013-03-15 09:54:18 -0700
committerStanislav Malyshev <stas@php.net>2013-03-30 21:22:30 -0700
commit1d4fcdff9f8a5b183cd99295f330bb92dbcf1105 (patch)
tree9d35984451a8d01ed569bd1b3459df5d54c25d4a /ext/standard/http_fopen_wrapper.c
parent92aa361bfc3bf9113f264e6700d8494ce4152897 (diff)
downloadphp-git-1d4fcdff9f8a5b183cd99295f330bb92dbcf1105.tar.gz
Fix bug #64433: does not follow redirects for non-3xx response codes
Diffstat (limited to 'ext/standard/http_fopen_wrapper.c')
-rw-r--r--ext/standard/http_fopen_wrapper.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index 870f904e9c..b8676bbba4 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -731,12 +731,15 @@ finish:
http_header_line[http_header_line_length] = '\0';
if (!strncasecmp(http_header_line, "Location: ", 10)) {
- /* we only care about Location for 300, 301, 302, 303 and 307 */
- /* see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1 */
- if ((response_code >= 300 && response_code < 304 || 307 == response_code) && context && php_stream_context_get_option(context, "http", "follow_location", &tmpzval) == SUCCESS) {
+ if (context && php_stream_context_get_option(context, "http", "follow_location", &tmpzval) == SUCCESS) {
SEPARATE_ZVAL(tmpzval);
convert_to_long_ex(tmpzval);
follow_location = Z_LVAL_PP(tmpzval);
+ } else if (!(response_code >= 300 && response_code < 304 || 307 == response_code)) {
+ /* we shouldn't redirect automatically
+ if follow_location isn't set and response_code not in (300, 301, 302, 303 and 307)
+ see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1 */
+ follow_location = 0;
}
strlcpy(location, http_header_line + 10, sizeof(location));
} else if (!strncasecmp(http_header_line, "Content-Type: ", 14)) {