summaryrefslogtreecommitdiff
path: root/ext/standard/http_fopen_wrapper.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/http_fopen_wrapper.c')
-rw-r--r--ext/standard/http_fopen_wrapper.c91
1 files changed, 63 insertions, 28 deletions
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index 9632bd344e..ffdb53ccbf 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -459,41 +459,76 @@ finish:
strip_header(user_headers, t, "content-type:");
}
- if ((s = strstr(t, "user-agent:")) &&
- (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
- *(s-1) == '\t' || *(s-1) == ' ')) {
- have_header |= HTTP_HEADER_USER_AGENT;
+ s = t;
+ while ((s = strstr(s, "user-agent:"))) {
+ if (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
+ *(s-1) == '\t' || *(s-1) == ' ') {
+ have_header |= HTTP_HEADER_USER_AGENT;
+ break;
+ }
+ s++;
}
- if ((s = strstr(t, "host:")) &&
- (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
- *(s-1) == '\t' || *(s-1) == ' ')) {
- have_header |= HTTP_HEADER_HOST;
+
+ s = t;
+ while ((s = strstr(s, "host:"))) {
+ if (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
+ *(s-1) == '\t' || *(s-1) == ' ') {
+ have_header |= HTTP_HEADER_HOST;
+ break;
+ }
+ s++;
}
- if ((s = strstr(t, "from:")) &&
- (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
- *(s-1) == '\t' || *(s-1) == ' ')) {
- have_header |= HTTP_HEADER_FROM;
+
+ s = t;
+ while ((s = strstr(s, "from:"))) {
+ if (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
+ *(s-1) == '\t' || *(s-1) == ' ') {
+ have_header |= HTTP_HEADER_FROM;
+ break;
}
- if ((s = strstr(t, "authorization:")) &&
- (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
- *(s-1) == '\t' || *(s-1) == ' ')) {
- have_header |= HTTP_HEADER_AUTH;
+ s++;
}
- if ((s = strstr(t, "content-length:")) &&
- (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
- *(s-1) == '\t' || *(s-1) == ' ')) {
- have_header |= HTTP_HEADER_CONTENT_LENGTH;
+
+ s = t;
+ while ((s = strstr(s, "authorization:"))) {
+ if (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
+ *(s-1) == '\t' || *(s-1) == ' ') {
+ have_header |= HTTP_HEADER_AUTH;
+ break;
+ }
+ s++;
}
- if ((s = strstr(t, "content-type:")) &&
- (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
- *(s-1) == '\t' || *(s-1) == ' ')) {
- have_header |= HTTP_HEADER_TYPE;
+
+ s = t;
+ while ((s = strstr(s, "content-length:"))) {
+ if (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
+ *(s-1) == '\t' || *(s-1) == ' ') {
+ have_header |= HTTP_HEADER_CONTENT_LENGTH;
+ break;
+ }
+ s++;
}
- if ((s = strstr(t, "connection:")) &&
- (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
- *(s-1) == '\t' || *(s-1) == ' ')) {
- have_header |= HTTP_HEADER_CONNECTION;
+
+ s = t;
+ while ((s = strstr(s, "content-type:"))) {
+ if (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
+ *(s-1) == '\t' || *(s-1) == ' ') {
+ have_header |= HTTP_HEADER_TYPE;
+ break;
+ }
+ s++;
}
+
+ s = t;
+ while ((s = strstr(s, "connection:"))) {
+ if (s == t || *(s-1) == '\r' || *(s-1) == '\n' ||
+ *(s-1) == '\t' || *(s-1) == ' ') {
+ have_header |= HTTP_HEADER_CONNECTION;
+ break;
+ }
+ s++;
+ }
+
/* remove Proxy-Authorization header */
if (use_proxy && use_ssl && (s = strstr(t, "proxy-authorization:")) &&
(s == t || *(s-1) == '\r' || *(s-1) == '\n' ||