X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=parsers.c;h=35e2c330403d824e2d605ce30eb679c0950a7ed8;hb=8c6a51f039a882bf7dc8cd88362d22f9a8d4682a;hp=14aa99ea8cbbb3a603e8501a706fd281fab97fed;hpb=eb72eb48387f3d41f04b045b8f0ed5e51cc63a33;p=privoxy.git diff --git a/parsers.c b/parsers.c index 14aa99ea..35e2c330 100644 --- a/parsers.c +++ b/parsers.c @@ -540,7 +540,7 @@ jb_err decompress_iob(struct client_state *csp) cur = csp->iob->cur; - if (bufsize < (size_t)10) + if (old_size < (size_t)10) { /* * This is to protect the parsing of gzipped data, @@ -577,7 +577,8 @@ jb_err decompress_iob(struct client_state *csp) || ((*cur++ & 0xff) != GZIP_IDENTIFIER_2) || (*cur++ != Z_DEFLATED)) { - log_error(LOG_LEVEL_ERROR, "Invalid gzip header when decompressing"); + log_error(LOG_LEVEL_ERROR, + "Invalid gzip header when decompressing."); return JB_ERR_COMPRESS; } else @@ -586,7 +587,8 @@ jb_err decompress_iob(struct client_state *csp) if (flags & GZIP_FLAG_RESERVED_BITS) { /* The gzip header has reserved bits set; bail out. */ - log_error(LOG_LEVEL_ERROR, "Invalid gzip header flags when decompressing"); + log_error(LOG_LEVEL_ERROR, + "Invalid gzip header flags when decompressing."); return JB_ERR_COMPRESS; } @@ -616,12 +618,14 @@ jb_err decompress_iob(struct client_state *csp) if ((skip_bytes < 0) || (skip_bytes >= (csp->iob->eod - cur))) { log_error(LOG_LEVEL_ERROR, - "Unreasonable amount of bytes to skip (%d). Stopping decompression", + "Unreasonable amount of bytes to skip (%d). " + "Stopping decompression.", skip_bytes); return JB_ERR_COMPRESS; } log_error(LOG_LEVEL_INFO, - "Skipping %d bytes for gzip compression. Does this sound right?", + "Skipping %d bytes for gzip compression. " + "Does this sound right?", skip_bytes); cur += skip_bytes; } @@ -681,7 +685,7 @@ jb_err decompress_iob(struct client_state *csp) else { log_error(LOG_LEVEL_ERROR, - "Unable to determine compression format for decompression"); + "Unable to determine compression format for decompression."); return JB_ERR_COMPRESS; } @@ -698,19 +702,19 @@ jb_err decompress_iob(struct client_state *csp) */ if (inflateInit2(&zstr, -MAX_WBITS) != Z_OK) { - log_error(LOG_LEVEL_ERROR, "Error initializing decompression"); + log_error(LOG_LEVEL_ERROR, "Error initializing decompression."); return JB_ERR_COMPRESS; } /* * Next, we allocate new storage for the inflated data. * We don't modify the existing iob yet, so in case there - * is error in decompression we can recover gracefully. + * is an error in decompression we can recover gracefully. */ buf = zalloc(bufsize); if (NULL == buf) { - log_error(LOG_LEVEL_ERROR, "Out of memory decompressing iob"); + log_error(LOG_LEVEL_ERROR, "Out of memory decompressing iob."); return JB_ERR_MEMORY; } @@ -746,7 +750,8 @@ jb_err decompress_iob(struct client_state *csp) */ if (bufsize >= csp->config->buffer_limit) { - log_error(LOG_LEVEL_ERROR, "Buffer limit reached while decompressing iob"); + log_error(LOG_LEVEL_ERROR, + "Buffer limit reached while decompressing iob."); freez(buf); inflateEnd(&zstr); return JB_ERR_MEMORY; @@ -765,15 +770,17 @@ jb_err decompress_iob(struct client_state *csp) tmpbuf = realloc(buf, bufsize); if (NULL == tmpbuf) { - log_error(LOG_LEVEL_ERROR, "Out of memory decompressing iob"); + log_error(LOG_LEVEL_ERROR, + "Out of memory decompressing iob."); freez(buf); inflateEnd(&zstr); return JB_ERR_MEMORY; } else { +#ifndef NDEBUG char *oldnext_out = (char *)zstr.next_out; - +#endif /* * Update the fields for inflate() to use the new * buffer, which may be in a location different from @@ -818,6 +825,7 @@ jb_err decompress_iob(struct client_state *csp) log_error(LOG_LEVEL_ERROR, "Unexpected error while decompressing to the buffer (iob): %s", zstr.msg); + freez(buf); return JB_ERR_COMPRESS; } @@ -859,7 +867,8 @@ jb_err decompress_iob(struct client_state *csp) else { /* It seems that zlib did something weird. */ - log_error(LOG_LEVEL_ERROR, "Inconsistent buffer after decompression"); + log_error(LOG_LEVEL_ERROR, + "Inconsistent buffer after decompression."); return JB_ERR_COMPRESS; }