marc 97/07/12 13:33:05
Modified: src/modules/proxy proxy_http.c Log: First problem: if a client sends a Host: header with a different case than "Host:", the proxy won't see it and it will end up with two Host: headers with different capitalization. Second problem: if the proxy connects to a HTTP/0.9 server, the first line returned will be corrupt because len was tampered with. Reviewed by: Dean Gaudet, Marc Slemko Submitted by: Kenichi Hori <[EMAIL PROTECTED]> PR: 813,814 Revision Changes Path 1.20 +3 -5 apache/src/modules/proxy/proxy_http.c Index: proxy_http.c =================================================================== RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_http.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C3 -r1.19 -r1.20 *** proxy_http.c 1997/06/16 19:32:53 1.19 --- proxy_http.c 1997/07/12 20:33:04 1.20 *************** *** 260,266 **** for (i=0; i < reqhdrs_arr->nelts; i++) { if (reqhdrs[i].key == NULL || reqhdrs[i].val == NULL ! || !strcmp(reqhdrs[i].key, "Host")) /* already sent if there */ continue; bvputs(f, reqhdrs[i].key, ": ", reqhdrs[i].val, "\015\012", NULL); } --- 260,266 ---- for (i=0; i < reqhdrs_arr->nelts; i++) { if (reqhdrs[i].key == NULL || reqhdrs[i].val == NULL ! || !strcasecmp(reqhdrs[i].key, "Host")) /* already sent if there */ continue; bvputs(f, reqhdrs[i].key, ": ", reqhdrs[i].val, "\015\012", NULL); } *************** *** 331,339 **** * one type */ - len = resp_hdrs->nelts; hdr = (struct hdr_entry *)resp_hdrs->elts; ! for (i=0; i < len; i++) { if (hdr[i].value[0] == '\0') continue; p = hdr[i].field; --- 331,338 ---- * one type */ hdr = (struct hdr_entry *)resp_hdrs->elts; ! for (i=0; i < resp_hdrs->nelts; i++) { if (hdr[i].value[0] == '\0') continue; p = hdr[i].field; *************** *** 371,378 **** cache = proxy_cache_error(c); /* send headers */ ! len = resp_hdrs->nelts; ! for (i=0; i < len; i++) { if (hdr[i].field == NULL || hdr[i].value == NULL || hdr[i].value[0] == '\0') continue; --- 370,376 ---- cache = proxy_cache_error(c); /* send headers */ ! for (i=0; i < resp_hdrs->nelts; i++) { if (hdr[i].field == NULL || hdr[i].value == NULL || hdr[i].value[0] == '\0') continue;