From: Amos Jeffries Date: Wed, 14 Jul 2010 23:40:27 +0000 (-0600) Subject: Author: Alex Rousskov X-Git-Tag: SQUID_3_1_5_1~23 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b0dfb13949da058661e07662aeea08122991af47;p=thirdparty%2Fsquid.git Author: Alex Rousskov Fixed memory leaks related to Range requests. HttpRequest::range field could be cleared without destroying HttpHdrRange object in clientInterpretRequestHeaders(). The range field is essentially a cached value of the parsed Range header. Managing the cache outside its owner object is a bad idea. --- diff --git a/src/client_side_request.cc b/src/client_side_request.cc index c00dfc8343..6e8d3a6e89 100644 --- a/src/client_side_request.cc +++ b/src/client_side_request.cc @@ -830,7 +830,9 @@ clientInterpretRequestHeaders(ClientHttpRequest * http) /* ignore range header in non-GETs or non-HEADs */ if (request->method == METHOD_GET || request->method == METHOD_HEAD) { - request->range = req_hdr->getRange(); + // XXX: initialize if we got here without HttpRequest::parseHeader() + if (!request->range) + request->range = req_hdr->getRange(); if (request->range) { request->flags.range = 1; @@ -854,6 +856,7 @@ clientInterpretRequestHeaders(ClientHttpRequest * http) else { req_hdr->delById(HDR_RANGE); req_hdr->delById(HDR_REQUEST_RANGE); + delete request->range; request->range = NULL; }