projects
/
privoxy.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
privoxy-log-parser: Highlight: "Tag 'change-tor-socks-port' for client 127.0.0.1...
[privoxy.git]
/
parsers.c
diff --git
a/parsers.c
b/parsers.c
index
69a8fb4
..
35e2c33
100644
(file)
--- a/
parsers.c
+++ b/
parsers.c
@@
-4,7
+4,7
@@
*
* Purpose : Declares functions to parse/crunch headers and pages.
*
*
* Purpose : Declares functions to parse/crunch headers and pages.
*
- * Copyright : Written by and Copyright (C) 2001-202
0
the
+ * Copyright : Written by and Copyright (C) 2001-202
1
the
* Privoxy team. https://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
* Privoxy team. https://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
@@
-540,7
+540,7
@@
jb_err decompress_iob(struct client_state *csp)
cur = csp->iob->cur;
cur = csp->iob->cur;
- if (
buf
size < (size_t)10)
+ if (
old_
size < (size_t)10)
{
/*
* This is to protect the parsing of gzipped data,
{
/*
* 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))
{
|| ((*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
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. */
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;
}
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,
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,
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;
}
skip_bytes);
cur += skip_bytes;
}
@@
-681,7
+685,7
@@
jb_err decompress_iob(struct client_state *csp)
else
{
log_error(LOG_LEVEL_ERROR,
else
{
log_error(LOG_LEVEL_ERROR,
- "Unable to determine compression format for decompression");
+ "Unable to determine compression format for decompression
.
");
return JB_ERR_COMPRESS;
}
return JB_ERR_COMPRESS;
}
@@
-698,19
+702,19
@@
jb_err decompress_iob(struct client_state *csp)
*/
if (inflateInit2(&zstr, -MAX_WBITS) != Z_OK)
{
*/
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
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)
{
*/
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;
}
return JB_ERR_MEMORY;
}
@@
-746,7
+750,8
@@
jb_err decompress_iob(struct client_state *csp)
*/
if (bufsize >= csp->config->buffer_limit)
{
*/
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;
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)
{
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
{
freez(buf);
inflateEnd(&zstr);
return JB_ERR_MEMORY;
}
else
{
+#ifndef NDEBUG
char *oldnext_out = (char *)zstr.next_out;
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
/*
* 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);
log_error(LOG_LEVEL_ERROR,
"Unexpected error while decompressing to the buffer (iob): %s",
zstr.msg);
+ freez(buf);
return JB_ERR_COMPRESS;
}
return JB_ERR_COMPRESS;
}
@@
-859,7
+867,8
@@
jb_err decompress_iob(struct client_state *csp)
else
{
/* It seems that zlib did something weird. */
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;
}
return JB_ERR_COMPRESS;
}
@@
-1211,8
+1220,8
@@
static void enforce_header_order(struct list *headers, const struct list *ordere
}
list_remove_all(headers);
}
list_remove_all(headers);
-
list_duplicate(headers, new_headers)
;
-
list_remove_all(new_headers)
;
+
headers->first = new_headers->first
;
+
headers->last = new_headers->last
;
return;
}
return;
}
@@
-1291,7
+1300,9
@@
jb_err sed(struct client_state *csp, int filter_server_headers)
f++;
}
f++;
}
- if (!filter_server_headers && !list_is_empty(csp->config->ordered_client_headers))
+ if (!filter_server_headers &&
+ !list_is_empty(csp->config->ordered_client_headers) &&
+ csp->headers->first->str != NULL)
{
enforce_header_order(csp->headers, csp->config->ordered_client_headers);
}
{
enforce_header_order(csp->headers, csp->config->ordered_client_headers);
}
@@
-1346,9
+1357,11
@@
jb_err sed_https(struct client_state *csp)
csp->flags |= CSP_FLAG_CLIENT_HEADER_PARSING_DONE;
/*
csp->flags |= CSP_FLAG_CLIENT_HEADER_PARSING_DONE;
/*
- * Update the last header which may have changed
- * due to header additions,
+ * Update the https headers list which may have
+ * been modified due to header additions or header
+ * reordering.
*/
*/
+ csp->https_headers->first = csp->headers->first;
csp->https_headers->last = csp->headers->last;
csp->headers->first = headers.first;
csp->https_headers->last = csp->headers->last;
csp->headers->first = headers.first;
@@
-1693,7
+1706,8
@@
static jb_err filter_header(struct client_state *csp, char **header)
if (NULL == joblist)
{
if (NULL == joblist)
{
- log_error(LOG_LEVEL_RE_FILTER, "Filter %s has empty joblist. Nothing to do.", b->name);
+ log_error(LOG_LEVEL_RE_FILTER,
+ "Filter %s has empty joblist. Nothing to do.", b->name);
continue;
}
continue;
}
@@
-1707,7
+1721,8
@@
static jb_err filter_header(struct client_state *csp, char **header)
if (0 < matches)
{
current_hits += matches;
if (0 < matches)
{
current_hits += matches;
- log_error(LOG_LEVEL_HEADER, "Transforming \"%s\" to \"%s\"", *header, newheader);
+ log_error(LOG_LEVEL_HEADER,
+ "Transforming \"%s\" to \"%s\"", *header, newheader);
freez(*header);
*header = newheader;
}
freez(*header);
*header = newheader;
}
@@
-1719,7
+1734,8
@@
static jb_err filter_header(struct client_state *csp, char **header)
else
{
/* RegEx failure */
else
{
/* RegEx failure */
- log_error(LOG_LEVEL_ERROR, "Filtering \'%s\' with \'%s\' didn't work out: %s",
+ log_error(LOG_LEVEL_ERROR,
+ "Filtering \'%s\' with \'%s\' didn't work out: %s",
*header, b->name, pcrs_strerror(matches));
if (newheader != NULL)
{
*header, b->name, pcrs_strerror(matches));
if (newheader != NULL)
{