]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug #1468: Crash on HttpHdrRange.cc line 568: assertion failed on "valid"
authorserassio <>
Tue, 6 Jun 2006 00:57:08 +0000 (00:57 +0000)
committerserassio <>
Tue, 6 Jun 2006 00:57:08 +0000 (00:57 +0000)
Patch provided by Doug Dixon

src/client_side_request.cc

index 150be600ec1cd8b5b8c631968a42bb44ac145484..5a2f1a9cc3044f5043ffd4d80366b0e743465263 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side_request.cc,v 1.69 2006/05/29 21:44:18 robertc Exp $
+ * $Id: client_side_request.cc,v 1.70 2006/06/05 18:57:08 serassio Exp $
  * 
  * DEBUG: section 85    Client-side Request Routines
  * AUTHOR: Robert Collins (Originally Duane Wessels in client_side.c)
@@ -618,7 +618,7 @@ static void
 clientInterpretRequestHeaders(ClientHttpRequest * http)
 {
     HttpRequest *request = http->request;
-    const HttpHeader *req_hdr = &request->header;
+    HttpHeader *req_hdr = &request->header;
     int no_cache = 0;
 #if !(ESI) || defined(USE_USERAGENT_LOG) || defined(USE_REFERER_LOG)
 
@@ -687,8 +687,8 @@ clientInterpretRequestHeaders(ClientHttpRequest * http)
             request->flags.nocache = 1;
     }
 
-    /* ignore range header in non-GETs */
-    if (request->method == METHOD_GET) {
+    /* ignore range header in non-GETs or non-HEADs */
+    if (request->method == METHOD_GET || request->method == METHOD_HEAD) {
         request->range = req_hdr->getRange();
 
         if (request->range) {
@@ -707,6 +707,15 @@ clientInterpretRequestHeaders(ClientHttpRequest * http)
         }
     }
 
+    /* Only HEAD and GET requests permit a Range or Request-Range header.
+     * If these headers appear on any other type of request, delete them now.
+     */
+    else {
+        req_hdr->delById(HDR_RANGE);
+        req_hdr->delById(HDR_REQUEST_RANGE);
+        request->range = NULL;
+    }
+
     if (req_hdr->has(HDR_AUTHORIZATION))
         request->flags.auth = 1;