1
0
mirror of https://github.com/php/php-src.git synced 2026-04-26 17:38:14 +02:00

Fixed bug #41983 (Error Fetching http headers terminated by '\n')

This commit is contained in:
Dmitry Stogov
2007-07-24 09:28:12 +00:00
parent 46f26a1aac
commit 08bbb3269b
+34 -9
View File
@@ -1155,17 +1155,19 @@ static char *get_http_header_value(char *headers, char *type)
/* match */
tmp = pos + typelen;
eol = strstr(tmp, "\r\n");
eol = strchr(tmp, '\n');
if (eol == NULL) {
eol = headers + headerslen;
} else if (eol > tmp && *(eol-1) == '\r') {
eol--;
}
return estrndup(tmp, eol - tmp);
}
/* find next line */
pos = strstr(pos, "\r\n");
pos = strchr(pos, '\n');
if (pos) {
pos += 2;
pos++;
}
} while (pos);
@@ -1205,7 +1207,7 @@ static int get_http_body(php_stream *stream, int close, char *headers, char **r
}
if (header_chunked) {
char done, chunk_size[10];
char ch, done, chunk_size[10], headerbuf[8192];
done = FALSE;
@@ -1233,11 +1235,20 @@ static int get_http_body(php_stream *stream, int close, char *headers, char **r
len_size += len_read;
http_buf_size += len_read;
}
}
/* Eat up '\r' '\n' */
php_stream_getc(stream);
php_stream_getc(stream);
/* Eat up '\r' '\n' */
ch = php_stream_getc(stream);
if (ch == '\r') {
ch = php_stream_getc(stream);
}
if (ch != '\n') {
/* Somthing wrong in chunked encoding */
if (http_buf) {
efree(http_buf);
}
return FALSE;
}
}
} else {
/* Somthing wrong in chunked encoding */
if (http_buf) {
@@ -1250,6 +1261,19 @@ static int get_http_body(php_stream *stream, int close, char *headers, char **r
}
}
/* Ignore trailer headers */
while (1) {
if (!php_stream_gets(stream, ZSTR(headerbuf), sizeof(headerbuf))) {
break;
}
if ((headerbuf[0] == '\r' && headerbuf[1] == '\n') ||
(headerbuf[0] == '\n')) {
/* empty line marks end of headers */
break;
}
}
if (http_buf == NULL) {
http_buf = emalloc(1);
}
@@ -1296,7 +1320,8 @@ static int get_http_headers(php_stream *stream, char **response, int *out_size T
break;
}
if (strcmp(headerbuf, "\r\n") == 0) {
if ((headerbuf[0] == '\r' && headerbuf[1] == '\n') ||
(headerbuf[0] == '\n')) {
/* empty line marks end of headers */
done = TRUE;
break;