1
0
mirror of https://github.com/php/php-src.git synced 2026-04-23 16:08:35 +02:00

http_fopen_wrapper.c - bug#73297 Skip past "100 Continue" responses

This commit is contained in:
Rowan Collins
2016-10-23 18:24:58 +00:00
committed by Julien Pauli
parent 6122526cea
commit aec1a5eccc
+18
View File
@@ -699,6 +699,24 @@ finish:
if ((options & STREAM_ONLY_GET_HEADERS) || ignore_errors) {
reqok = 1;
}
/* status codes of 1xx are "informational", and will be followed by a real response
* e.g "100 Continue". RFC 7231 states that unexpected 1xx status MUST be parsed,
* and MAY be ignored. As such, we need to skip ahead to the "real" status*/
if (response_code >= 100 && response_code < 200) {
/* consume lines until we find a line starting 'HTTP/1' */
while (
!php_stream_eof(stream)
&& php_stream_get_line(stream, tmp_line, sizeof(tmp_line) - 1, &tmp_line_len) != NULL
&& ( tmp_line_len < 6 || strncasecmp(tmp_line, "HTTP/1", 6) )
);
if (tmp_line_len > 9) {
response_code = atoi(tmp_line + 9);
} else {
response_code = 0;
}
}
/* all status codes in the 2xx range are defined by the specification as successful;
* all status codes in the 3xx range are for redirection, and so also should never
* fail */