Actually this PR is not a mod_cache bug. According to RFC 2616,
LWS might be present at the end of an HTTP header.
Quote from RFC 2616:
implied *LWS
The grammar described by this specification is word-based. Except
where noted otherwise, linear white space (LWS) can be included
between any two adjacent words (token or quoted-string), and
between adjacent words and separators, without changing the
interpretation of a field. At least one delimiter (LWS and/or
separators) MUST exist between any two tokens (for the definition
of token below), since they would otherwise be interpreted as a
single token.
So, as PR 16520 states:
Authorization : scheme scheme param=value
is a valid header and should be treated as
Authorization: scheme scheme param=value
Currently Apache does not strip any trailing LWS from the header name.
The attached patch resolves this problem.
--
Index: server/protocol.c
===
RCS file: /home/cvspublic/httpd-2.0/server/protocol.c,v
retrieving revision 1.131
diff -u -r1.131 protocol.c
--- server/protocol.c 15 Apr 2003 22:47:57 - 1.131
+++ server/protocol.c 9 Jun 2003 14:33:42 -
@@ -702,7 +702,7 @@
apr_size_t last_len = 0;
apr_size_t alloc_len = 0;
char *field;
-char *value;
+char *value, *p;
apr_size_t len;
int fields_read = 0;
apr_table_t *tmp_headers;
@@ -790,7 +790,12 @@
return;
}
-*value = '\0';
+p = value - 1;
+while ((last_field p) (*p == ' ' || *p == '\t')) {
+--p;/* Skip to end of name */
+}
+*(p+1) = '\0';
+
++value;
while (*value == ' ' || *value == '\t') {
++value;/* Skip to start of value */