dgaudet 98/06/10 02:02:15
Modified: src CHANGES src/include httpd.h src/main util.c util_script.c src/modules/standard mod_cern_meta.c mod_mime_magic.c Log: My "all content-types must be lowercase" change neglected param=value pairs... and would downcase the value, which is a case-sensitive thing. But, to be honest, the code prior to my changes neglected param=value pairs. Another case where we really should have some core parsing routines that understand HTTP rather than the hodge-podge we have now. PR: 2394 Revision Changes Path 1.906 +5 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.905 retrieving revision 1.906 diff -u -r1.905 -r1.906 --- CHANGES 1998/06/10 08:15:09 1.905 +++ CHANGES 1998/06/10 09:01:58 1.906 @@ -1,5 +1,10 @@ Changes with Apache 1.3.1 + *) Apache would incorrectly downcase the entire Content-Type passed from + CGIs. This affected server-push scripts and such which use + multipart/x-mixed-replace;boundary=ThisRandomString. + [Dean Gaudet] PR#2394 + *) PORT: QNX update to properly guess 32-bit systems. [Sean Boudreau <[EMAIL PROTECTED]>] PR#2390 1.223 +1 -0 apache-1.3/src/include/httpd.h Index: httpd.h =================================================================== RCS file: /export/home/cvs/apache-1.3/src/include/httpd.h,v retrieving revision 1.222 retrieving revision 1.223 diff -u -r1.222 -r1.223 --- httpd.h 1998/06/07 01:22:36 1.222 +++ httpd.h 1998/06/10 09:02:02 1.223 @@ -896,6 +896,7 @@ API_EXPORT(char *) ap_pregsub(pool *p, const char *input, const char *source, size_t nmatch, regmatch_t pmatch[]); +API_EXPORT(void) ap_content_type_tolower(char *); API_EXPORT(void) ap_str_tolower(char *); API_EXPORT(int) ap_ind(const char *, char); /* Sigh... */ API_EXPORT(int) ap_rind(const char *, char); 1.120 +24 -0 apache-1.3/src/main/util.c Index: util.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/main/util.c,v retrieving revision 1.119 retrieving revision 1.120 diff -u -r1.119 -r1.120 --- util.c 1998/06/06 19:30:48 1.119 +++ util.c 1998/06/10 09:02:09 1.120 @@ -1781,3 +1781,27 @@ return (time1 - time0); } #endif + +/* we want to downcase the type/subtype for comparison purposes + * but nothing else because ;parameter=foo values are case sensitive. + * XXX: in truth we want to downcase parameter names... but really, + * apache has never handled parameters and such correctly. You + * also need to compress spaces and such to be able to compare + * properly. -djg + */ +API_EXPORT(void) ap_content_type_tolower(char *str) +{ + char *semi; + + semi = strchr(str, ';'); + if (semi) { + *semi = '\0'; + } + while (*str) { + *str = tolower(*str); + ++str; + } + if (semi) { + *semi = ';'; + } +} 1.116 +1 -1 apache-1.3/src/main/util_script.c Index: util_script.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/main/util_script.c,v retrieving revision 1.115 retrieving revision 1.116 diff -u -r1.115 -r1.116 --- util_script.c 1998/05/28 23:26:41 1.115 +++ util_script.c 1998/06/10 09:02:09 1.116 @@ -466,7 +466,7 @@ *endp-- = '\0'; r->content_type = ap_pstrdup(r->pool, l); - ap_str_tolower(r->content_type); + ap_content_type_tolower(r->content_type); } /* * If the script returned a specific status, that's what 1.30 +1 -1 apache-1.3/src/modules/standard/mod_cern_meta.c Index: mod_cern_meta.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_cern_meta.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- mod_cern_meta.c 1998/06/09 05:22:11 1.29 +++ mod_cern_meta.c 1998/06/10 09:02:12 1.30 @@ -269,7 +269,7 @@ *endp-- = '\0'; r->content_type = ap_pstrdup(r->pool, l); - ap_str_tolower(r->content_type); + ap_content_type_tolower(r->content_type); } else if (!strcasecmp(w, "Status")) { sscanf(l, "%d", &r->status); 1.34 +1 -1 apache-1.3/src/modules/standard/mod_mime_magic.c Index: mod_mime_magic.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_mime_magic.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- mod_mime_magic.c 1998/05/28 22:09:57 1.33 +++ mod_mime_magic.c 1998/06/10 09:02:13 1.34 @@ -816,7 +816,7 @@ r->content_type = rsl_strdup(r, type_frag, type_pos, type_len); /* XXX: this could be done at config time I'm sure... but I'm * confused by all this magic_rsl stuff. -djg */ - ap_str_tolower(r->content_type); + ap_content_type_tolower(r->content_type); } if (state == rsl_encoding) { r->content_encoding = rsl_strdup(r, encoding_frag,