X-Git-Url: http://www.privoxy.org/gitweb/gpl.html?a=blobdiff_plain;f=parsers.c;h=1cb46dfeb5d928087c27599f3057b6294843a40d;hb=f6dc2df5d674eced2c09fede4c041a4e76ea388e;hp=999c715e3d041adbe27c19b0d51ea9d22270dc0c;hpb=ebf8e996becaa6488e2d1e6073db0d3da5971beb;p=privoxy.git
diff --git a/parsers.c b/parsers.c
index 999c715e..1cb46dfe 100644
--- a/parsers.c
+++ b/parsers.c
@@ -608,6 +608,14 @@ jb_err decompress_iob(struct client_state *csp)
* XXX: this code is untested and should probably be removed.
*/
int skip_bytes;
+
+ if (cur + 2 >= csp->iob->eod)
+ {
+ log_error(LOG_LEVEL_ERROR,
+ "gzip extra field flag set but insufficient data available.");
+ return JB_ERR_COMPRESS;
+ }
+
skip_bytes = *cur++;
skip_bytes += (unsigned char)*cur++ << 8;
@@ -1293,6 +1301,17 @@ jb_err sed(struct client_state *csp, int filter_server_headers)
v++;
}
+ if (filter_server_headers &&
+ (csp->flags & CSP_FLAG_SERVER_CONTENT_LENGTH_SET) &&
+ (csp->flags & CSP_FLAG_CHUNKED))
+ {
+ /* RFC 2616 4.4 3 */
+ log_error(LOG_LEVEL_HEADER, "Ignoring the Content-Length header "
+ "sent by the server as the response is chunk-encoded.");
+ csp->flags &= ~CSP_FLAG_CONTENT_LENGTH_SET;
+ csp->expected_content_length = 0;
+ }
+
/* place additional headers on the csp->headers list */
while ((err == JB_ERR_OK) && (*f))
{
@@ -4609,7 +4628,10 @@ static jb_err parse_time_header(const char *header, time_t *result)
* through sed() which requires a header name followed by
* a colon.
*/
- assert(header_time != NULL);
+ if (header_time == NULL)
+ {
+ return JB_ERR_PARSE;
+ }
header_time++;
if (*header_time == ' ')