Index: client_side.c =================================================================== RCS file: /squid/squid/src/client_side.c,v retrieving revision 1.788 diff -u -p -r1.788 client_side.c --- client_side.c 29 Aug 2008 00:21:39 -0000 1.788 +++ client_side.c 8 Sep 2008 09:59:40 -0000 @@ -392,8 +392,11 @@ clientCreateStoreEntry(clientHttpRequest * For erroneous requests, we might not have a h->request, * so make a fake one. */ - if (h->request == NULL) + if (h->request == NULL) { h->request = requestLink(requestCreate(m, PROTO_NONE, null_string)); + if(h->conn && h->conn->transparent) + h->request->flags.reset_tcp = 1; + } e = storeCreateEntry(h->uri, flags, m); if (h->request->store_url) storeEntrySetStoreUrl(e, h->request->store_url); @@ -1698,7 +1701,8 @@ clientBuildRangeHeader(clientHttpRequest range_err = "origin server does ranges"; else if (rep->content_length < 0) range_err = "unknown length"; - else if (rep->content_length != http->entry->mem_obj->reply->content_length) + else if (http->entry && http->entry->mem_obj && http->entry->mem_obj->reply + && rep->content_length != http->entry->mem_obj->reply->content_length) range_err = "INCONSISTENT length"; /* a bug? */ else if (httpHeaderHas(&http->request->header, HDR_IF_RANGE) && !clientIfRangeMatch(http, rep)) range_err = "If-Range match failed"; @@ -3807,10 +3811,15 @@ parseHttpRequest(ConnStateData * conn, H *method_p = NULL; *status = -1; + if (conn->port->transparent && clientNatLookup(conn) == 0) + conn->transparent = 1; + /* Parse the request line */ ret = httpMsgParseRequestLine(hmsg); - if (ret == -1) + if (ret == -1) { + *method_p = urlMethodGetKnownByCode(METHOD_NONE); return parseHttpRequestAbort(conn, "error:invalid-request"); + } if (ret == 0) { debug(33, 5) ("Incomplete request, waiting for end of request line\n"); *status = 0; @@ -3833,6 +3842,7 @@ parseHttpRequest(ConnStateData * conn, H /* Enforce max_request_size */ if (req_sz >= Config.maxRequestHeaderSize) { debug(33, 5) ("parseHttpRequest: Too large request\n"); + *method_p = urlMethodGetKnownByCode(METHOD_NONE); return parseHttpRequestAbort(conn, "error:request-too-large"); } /* Wrap the request method */ @@ -3924,8 +3934,6 @@ parseHttpRequest(ConnStateData * conn, H } #endif } - if (conn->port->transparent && clientNatLookup(conn) == 0) - conn->transparent = 1; if (!host && conn->transparent) { port = ntohs(conn->me.sin_port); if (!host)