- From: James Gallagher <jimg@dcz.dods.org>
- Date: Tue, 14 Mar 2000 21:14:08 -0800 (PST)
- To: www-lib@w3.org
- Message-ID: <14543.7200.651465.289528@dcz.dods.org>
Hi, I've been using the HTTP 1.1 cache and think I've found a bug. If a URL has a query string and that query includes a comma, then the cache index file records bogus information for that URL. I *think* this is bug because I'm not sure that commas, etc. are really legal in URLs. However, I've got an application that uses them, so I needed a fix. Included are my patches for HTCache.c to enable the cache to work with URLs that contain "," ";" "=" "<,>" or "(,)" characters. Also, I discovered that the documentation for HTNextLWSToken (in HTWWWStr.c) was off a bit, so I'm including a patch for that, too.
--- src-old/HTCache.c Tue Mar 14 20:58:49 2000
+++ src/HTCache.c Tue Mar 14 20:51:44 2000
@@ -348,9 +348,22 @@
** Read the line and create the cache object
*/
{
+#if 0
char * url = HTNextField(&line);
char * cachename = HTNextField(&line);
char * etag = HTNextField(&line);
+#endif
+ /* Changed from HTNextField(...) to HTNextLWSToken(...).
+ HTNextField uses spaces "," ";" "<" etc. as delimiters.
+ However, some of those characters might appear in the query
+ section of a URL (e.g., http://...cgi?param=val). Using
+ HTNextField causes a bogus entry to appear in the cache index
+ file since `val' is parsed as the cache name and not part of
+ the url. Switching to HTNextLWSToken fixes this. 3/14/2000
+ jhrg */
+ char * url = HTNextLWSToken(&line);
+ char * cachename = HTNextLWSToken(&line);
+ char * etag = HTNextLWSToken(&line);
StrAllocCopy(cache->url, url);
StrAllocCopy(cache->cachename, cachename);
if (strcmp(etag, HT_CACHE_EMPTY_ETAG)) StrAllocCopy(cache->etag, etag);
@@ -1366,16 +1379,9 @@
HTParentAnchor * anchor = HTRequest_anchor(request);
HTCache * cache = HTCache_find(anchor);
if (cache) {
- /*
- ** If we receive a 204 and the method is unsafe then we have
- ** to delete the cache body but not the header information
- */
- if (status == 204) {
+ if (status == 204)
HTCache_updateMeta(cache, request, response);
- cache->size = 0;
- cache->range = YES;
- REMOVE(cache->cachename);
- } else
+ else
HTCache_remove(cache);
}
HTCache_touch(request, response, anchor);
--- src-old/HTWWWStr.c Tue Mar 14 20:58:56 2000
+++ src/HTWWWStr.c Tue Mar 14 20:52:38 2000
@@ -87,9 +87,7 @@
** -----------------------------
** On entry,
** *pstr points to a string containing a word separated
-** by white white space "," ";" or "=". The word
-** can optionally be quoted using <"> or "<" ">"
-** Comments surrrounded by '(' ')' are filtered out
+** by white white space.
**
** On exit,
** *pstr has been moved to the first delimiter past the
James -- __________________________________________________________________________ James Gallagher The Distributed Oceanographic Data System jgallagher@gso.uri.edu http://unidata.ucar.edu/packages/dods Voice: 541.757.7992 Fax: 541.758.3254
Received on Wednesday, 15 March 2000 00:14:19 UTC