--------------------------------------------------------------------
ChangeLog for Privoxy
--------------------------------------------------------------------
-*** Version 3.0.19 Stable ***
+*** Version 3.0.20 Beta ***
+
+- Bug fixes:
+ - Fix --disable-ipv6-support compile option for the Windows platform
+ - Attempt to work around (or at least reduce the) video playback issues with
+ various Apple clients as reported in #3426305. In client_range(), let
+ headers pass if the range starts at the beginning.
+ - In pcrs_get_delimiter(), do not use delimiters ouside the ASCII range.
+ Fixes a clang complaint.
+ - In socks5_connect(), do not try to print a negative number of socks
+ response bytes if the read() for the socks5 negotiation failed
+ completely. It's an API violation and can trigger an assert() in debug
+ builds with "debug 2" enabled. Except for the assert(), log_error()
+ already handled negative %N values gracefully so this commit only makes a
+ difference for debug builds.
+ - Fix a Windows-specific log viewer thread safety issue, as reported by Tim
+ H. in #3525694.
+ - Do not confuse a client hanging up with a connection time out. If a client
+ closes its side of the connection without sending a request line, do not
+ send the CLIENT_CONNECTION_TIMEOUT_RESPONSE, but report the condition
+ properly.
+ - Fix latency calculation for shared connections; broken since a regression
+ in 2009. The calculated latency for most connections would be 0 due to
+ remember_connection() always putting the timestamps in the first slot.
+ - Let fatal_error() write to the logfile right away, before showing the
+ Windows-specific error message which blocks until the user acknowledges it,
+ thus complicating automatic error detection. Reported by Adriaan in
+ #3593603.
+ - Fix an error message in get_last_url() nobody is supposed to see. Reported
+ by Matthew Fischer in #3507301.
+ - Fix a typo in the no-zlib-support complaint. Patch submitted by Matthew
+ Fischer in #3507304.
+ - Update an error message that still tried to print directive_hash as long
+ - Let server_set_cookie() stay silent when the cookie isn't modified. It
+ previously would claim to have created a session cookie after letting a
+ session cookie pass unmodified.
+ - Make any_loaded_file_changed() more reliable. Using the timestamps from. If
+ an action or filter file is reloaded the timestamps aren't updated so
+ any_loaded_file_changed() continued to report file changes.
+
+- General improvements:
+ - New debug log level 65536 which logs all actions that were applied to each
+ request that Privoxy acts upon.
+ - New directive client-header-order can be used to forward client headers in
+ a different order than that in which they arrived.
+ - New directive tolerate-pipelining can be used to enable client-side
+ pipelining. If enabled (3.0.20 beta enables it by default), Privoxy will
+ keep pipelined client requests around to deal with them once the current
+ request has been served. At the moment this is only done if the current
+ request is known to have no body.
+ - New --config-test option lets Privoxy exit after checking whether or not
+ the configuration seems valid. The limitations noted in TODO #22 and #23
+ still apply. Logging the problem to the logfile if one is configured and
+ --no-daemon isn't used could be considered non-intuitive and might also
+ clobber messages emitted by an already running instance. Based on a patch
+ by Ramkumar Chinchani.
+ - Add limit-cookie-lifetime{} action. It can be used to let cookies expire
+ before the end of the session. limit-cookie-lifetime{0} creates session
+ cookies and can thus replace the session-cookies-only action in the future.
+ Idea originally suggested by Rick Sykes in #1049575.
+ - Increase the maximum number of actions files from 10 to 30. This is set by
+ the compiler directive MAX_AF_FILES so could always be modified by
+ recompilation, but the default value was too low since an unused file slot
+ is pretty inexpensive.
+ - Significantly improved reuse of open connections.
+ - Add support for chunk-encoded client request bodies. Previously
+ chunk-encoded request bodies weren't guaranteed to be forwarded correctly,
+ so this can also be considered a bug fix although chunk-encoded request
+ bodies aren't commonly used in the real world.
+ - Add support for Tor's optimistic-data SOCKS extension, which can reduce the
+ latency for requests on newly created connections. Currently only the
+ headers are sent optimistically and only if the client request has already
+ been read completely which rules out requests with large bodies.
+ - After preventing the client from pipelining, don't signal keep-alive
+ intentions. When looking at the response headers alone, it previously
+ wasn't obvious from the client's perspective that no additional responses
+ should be expected. This might improve compatibility with Opera (#3464439).
+ - Use new drain_and_close_socket() when closing client sockets in serve().
+ Hopefully this fixes the page truncation issue reported with Opera in
+ #3464439. Apparently on some platforms immediately closing a client socket
+ with both unread and written-but-not-yet-transmitted data may result in the
+ connection being torn down prematurely, in which case the client ends up
+ with an incomplete response. To prevent this, drain_and_close_socket()
+ shuts down our side of the connection (on platforms with shutdown()),
+ drains the unread data on the socket and finally calls close_socket().
+ - Reject URLs with invalid port. Previously they were parsed incorrectly and
+ characters between the port number and the first slash were silently
+ dropped as shown by curl test 187.
+ - Stop considering client sockets tainted after receving a request with body.
+ It hasn't been necessary for a while now and unnecessarily causes test
+ failures when using curl's test suite.
+ - Allow HTTP/1.0 clients to signal interest in keep-alive through the
+ Proxy-Connection header. While such client are rare in the real world, it
+ doesn't hurt and couple of curl tests rely on it.
+ - Only remove duplicated headers when filters are enabled. If they are not it
+ doesn't cause ill effects and the user might not want it. While at it,
+ downgrade the removal message to LOG_LEVEL_HEADER to clarify that it's not
+ an error in Privoxy and is unlikely to cause any problems in general.
+ Anonymously reported in #3599335.
+ - Accept a default-server-timeout of 0. It's the default after all.
+ - Accept a socket-timeout value of 0 seconds. Impatience isn't necessarily a
+ syntax problem.
+ - Set the socket option SO_LINGER for the client socket in
+ accept_connection(). This should further reduce the chances of the client
+ getting an incomplete response, even though Privoxy wrote it in its
+ entirety to the socket.
+ - Let serve() wait for keep-alive-timeout seconds for new requests. The
+ server connection timeout is no longer relevant.
+ - Improve connection handling when connection sharing is enabled.
+ - Do not keep the client connection open if it has to be closed to mark the
+ end of the response.
+ - Shorten ssplit()'s prototype by removing the last two arguments. We always
+ want to skip empty fields and ignore leading delimiters, so having
+ parameters for this only complicates the API.
+ - Use an enum for the type of the action value.
+ - Rename action_name's member takes_value to value_type as it isn't used as
+ boolean.
+ - Turn family mismatches in match_sockaddr() into fatal errors
+ - Let enlist_unique_header() verify that the caller didn't pass a header
+ containing either \r or \n.
+ - Change the hashes used in load_config() to unsigned int.
+ That's what hash_string() actually returns and using a potentiallly larger
+ type is at best useless.
+ - Use privoxy_tolower() instead of vanilla tolower() with manual casting of
+ the argument.
+ - Move several variable declarations to the beginning of their code block.
+ It's how we usually do it and is apparently also required when compiling
+ with gcc 2.95. Initial patch submitted by Simon South in #3564815.
+ - Optionally let parse_header_time() sanity check strptime() results before
+ trusting them. Broken strptime() implementations have caused problems in
+ the past and the most recent offender seems to be FreeBSD's libc:
+ http://www.freebsd.org/cgi/query-pr.cgi?pr=173421
+
+- Action file improvements:
+ - Remove the comment that indicated that updated versions of this file are
+ released on their own.
+ - Allow closing curly braces as part of action values as long as they are
+ escaped.
+ - Block 'optimize.indieclick.com/' and 'optimized-by.rubiconproject.com/'
+ - Unblock 'adjamblog.wordpress.com/' and 'adjamblog.files.wordpress.com/'.
+ Reported by Ryan Farmer in #3496116.
+ - Unblock '/.*Bugtracker'. Reported by pwhk in #3522341.
+ - Add test URLs for '.freebsd.org' and '.watson.org'.
+ - Unblock '.urbandictionary.com/popular'.
+ - Block '.adnxs.com/'.
+ - Block 'farm.plista.com/widgetdata.php'.
+ - Block 'rotation.linuxnewmedia.com/'.
+ - Block 'reklamy.sfd.pl/'. Reported by kacperdominik in #3399948.
+ - Block 'g.adspeed.net/'.
+ - Unblock 'websupport.wdc.com/'. Reported by Adam Piggot in #3577851.
+ - Block '/openx/www/delivery/'.
+ - Disable fast-redirects for '.googleapis.com/'.
+ - Block 'imp.double.net/'. Reported by David Bo in #3070411.
+ - Block 'gm-link.com/' whis is used for email tracking. Reported by David Bo
+ in #1812733.
+ - Verify that requests to "bwp." are blocked. URL taken from #1736879
+ submitted by Francois Marier.
+ - Block '/.*bannerid='. Reported by Adam Piggott in #2975779.
+ - Block 'cltomedia.info/delivery/' and '.adexprt.com/'. Anonymously reported
+ in #2965254.
+ - Block 'de17a.com/'. Reported by David Bo in #3061472.
+ - Block 'oskar.tradera.com/'. Reported by David Bo in #3060596.
+ - Block '/scripts/webtrends\.js'. Reported by johnd16 in #3002729.
+ - Block requests for 'pool.*.adhese.com/'. Reported by johnd16 in #3002716.
+ - Update path pattern for Coremetrics and add tests. Pattern and URLs
+ submitted by Adam Piggott #3168443.
+ - Enable +fast-redirects{check-decoded-url} for 'tr.anp.se/'. Reported by
+ David Bo in #3268832.
+ - Unblock '.conrad.se/newsletter/banners/'. Reported by David Bo in #3413824.
+ - Block '.tynt.com/'. Reported by Dan Stahlke in #3421767.
+ - Unblock '.bbci.co.uk/radio/'. Reported by Adam Piggott in #3569603.
+ - Block requests to 'service.maxymiser.net/'. Reported by johnd16 in #3118401
+ (with a previous URL).
+ - Disable fast-redirects for Google's "let's pretend your computer is
+ infected" page.
+ - Unblock '/.*download' to resolve actionsfile feedback #3498129 submitted by
+ Steven Kolins (soundcloud.com not working).
+ - Unblock '.wlxrs.com/' to resolve actionsfile feedback #3413827 (hotmail.com
+ not working) submitted by David Bo.
+ - Add two unblock patterns for popup radio and TV players. Submitted by Adam
+ Piggott in #3596089.
+
+- Filter file improvements & bug fixes:
+ - Add a referer tagger
+ - Reduce the likelihood that the google filter messes up HTML-generating
+ JavaScript. Reported by Zeno Kugy in #3520260.
+
+- Documentation improvements:
+ - Revised all OS X sections due to new packaging module (OSXPackageBuilder).
+ - Update the list of supported operating systems to clarify that all Windows
+ versions after 95 are expected to work and note that the platform-specific
+ code for AmigaOS and QNX currently isn't maintained.
+ - Update 'Signals' section, the only explicitly handled signals are SIGINT,
+ SIGTERM and SIGHUP.
+ - Add Haiku to the list of operating systems on which Privoxy is known to
+ run.
+ - Add DragonFly to the list of BSDs on which Privoxy is known to run.
+ - Removed references to redhat-specific documentation set since it no longer
+ exists.
+ - Removed references to building PDFs since we no longer do so.
+ - Multiple listen-address directives are supported since 3.0.18, correct the
+ documentation to say so.
+ - Remove bogus section about long and short being preferable to int.
+ - Corrected some Internet JunkBuster references to Privoxy.
+ - Removed references to www.junkbusters.com since it is no longer
+ maintained. Reported by Angelina Matson.
+ - Various grammar and spelling corrections
+ - Add a client-header-tagger{} example for disabling filtering for range
+ requests.
+ - Correct a URL the "Privoxy with Tor" FAQ
+ - Spell 'refresh-tags' correctly. Reported by Don in #3571927.
+ - Sort manpage options alphabetically
+ - Remove an incorrect sentence in the toggle section. The toggle state
+ doesn't affect whether or not the Windows version uses the tray icon and
+ having to toggle Privoxy off to not show the icon makes no sense anyway.
+ Reported by Zeno Kugy in #3596395.
+ - Add the DNT header to the client-header-order example.
+ - Add new contributors since 3.0.19.
+
+- Log message improvements:
+ - When stopping to watch a client socket due to pipelining, additionally log
+ the socket number.
+ - log the client socket and its condition before closing it. This makes it
+ more obvious that the socket actually gets closed and should help when
+ diagnosing problems like #3464439.
+ - In case of SOCKS5 failures, do not explicitly log the server's response.
+ It hasn't helped so far and the response can already be logged by enabling
+ "debug 32768" anyway. This reverts v1.81 and the follow-up bug fix v1.84.
+ - Relocate the connection-accepted message from listen_loop() to serve().
+ This way it's printed by the thread that is actually serving the
+ connection which is nice when grepping for thread ids in log files. While
+ at it, use an upper-case first character which is more consistent with the
+ other log messages.
+
+- Code cleanups:
+ - Remove compatibility layer for versions prior to 3.0 since it has been
+ obsolete for more than 10 years now.
+ - Remove the ijb_isupper() and ijb_tolower() macros from parsers.c since
+ they aren't used in this file.
+ - Removed the 'Functions declared include:' comment sections since they tend
+ to be incomplete, incorrect and out of date and the benefit seems
+ questionable.
+ - Various comment grammar and comprehensibility improvements.
+ - Remove a pointless fflush() call in chat(). Flushing all streams pretty
+ much all the time for no obvious reason is ridiculous.
+ - Relocate ijb_isupper()'s definition to project.h and get the ijb_tolower()
+ definition from there, too.
+ - Relocate ijb_isdigit()'s definition to project.h.
+ - Rename ijb_foo macros to privoxy_foo.
+ - Add malloc_or_die() which will allow to simplify code paths where malloc()
+ failures don't need to be handled gracefully.
+ - Add strdup_or_die() which will allow to simplify code paths where strdup()
+ failures don't need to be handled gracefully.
+ - Replace strdup() calls with strdup_or_die() calls where it's safe and
+ simplifies the code.
+ - Fix white-space around parentheses.
+ - Add missing white-space behind if's and the following parentheses.
+ - Unwrap a memcpy() call in resolve_hostname_to_ip().
+ - Declare pcrs_get_delimiter()'s delimiters[] static const.
+ - Various optimisations to remove dead code and merge inefficient code
+ structures for improved clarity, performance or code compactness.
+ - Various data type corrections.
+ - Change visibility of several code segments when compiling without
+ FEATURE_CONNECTION_KEEP_ALIVE enabled for clarity.
+ - Fix an assertion in pcrs_compile_replacement(), nul bytes are actually
+ fine.
+
+- Privoxy-Regression-Test:
+ - Various grammar and spelling corrections in documentation and code.
+ - Additional tests for range requests with filtering enabled.
+ - Tests with mostly invalid range request.
+ - Log to STDOUT instead of STDERR.
+ - Add a couple of hide-if-modified-since{} tests with different date formats.
+ - Cleaned up the format of the regression-tests.action file to match the
+ format of default.action.
+ - Remove the "Copyright" line from print_version(). When using --help, every
+ line of screen space matters and thus shouldn't be wasted on things the
+ user doesn't care about.
+ - Fix comment typos
+ - Add an 'Overwrite condition' directive to skip any matching tests before
+ it. As it has a global scope, using it is more convenient than clowning
+ around with the Ignore directive.
+ - Include the Privoxy version in the output.
+- Privoxy-Log-Parser:
+ - Improve the --statistics performance by skipping sanity checks for input
+ that shouldn't affect the results anyway. In my non-scientific benchmarks
+ this reduces the runtime by about 45%. Also add a --strict-checks option
+ that enables some of the checks again, just in case anybody cares.
+ - Accept and highlight: Stopping to watch the client socket. There's already
+ another request waiting.
+ - Cleanup variable initialization in print_non_clf_message().
+ - Properly highlight the new log messages from get_request_line().
+ - Let get_percentage() show 0 of x as 0% even if x is 0 as well.
+ - Accept and ignore: Enlisting (sorted|left-over) header ...
+ - Accept the shiny new LOG_LEVEL_ACTIONS.
+ - Accept and highlight: Closing client socket 5. Keep-alive: 0, Socket
+ alive: 1. Data available: 0.
+ - Stop suppressing messages about accepted client connections and highlight
+ them properly.
+ - Accept and highlight: Accepted connection from 10.0.0.1 on socket 5.
+ - Accept and highlight: Continuing buffering server headers from socket 5.
+ Bytes most recently read: 498.
+ - Accept and highlight: Client request 4 arrived in time on socket 7.
+ - Accept and highlight: Closing client socket 8. Keep-alive: 1. Socket
+ alive: 0. Data available: 0. Configuration file change detected: 0.
+ Requests received: 11.
+ - Accept and highlight: Drained 180 bytes before closing socket 6.
+ - Accept and highlight the extended log message for client sockets.
+ - Accept and highlight: Tainting client socket 7 due to unread data.
+ - Accept and highlight: Optimistically sending 318 bytes of client
+ headers intended for www.privoxy.org.
+ - Accept and highlight: Client request 8 has been pipelined on socket 7 and
+ the socket is still alive.
+ - Accept: There better be a request body.
+ - Accept and highlight: Shifting 360 pipelined bytes by 360 bytes.
+ - Accept and highlight: Multiple Content-Type headers detected. Removing and
+ ignoring: Content-Type: text/html.
+
+- uagen:
+ - Bump generated Firefox version to 16.
+
+- CGI interface improvements & bug fixes:
+ - Remove an unreasonable parameter limit in parse_cgi_parameters(). The new
+ parameter limit depends on the memory available and is currently unlikely
+ to be reachable, due to other limits in both Privoxy and common clients.
+ Reported by Andrew on ijbswa-users@.
+ - Catch ssplit() failures in parse_cgi_parameters().
+ - Deal with unsupported methods sent to the CGI pages by discarding any
+ data following the headers.
+
+- GNUmakefile improvements:
+ - The dok-tidy target no longer taints documents with a tidy-mark
+ - Change RA_MODE from 0664 to 0644. Suggested by Markus Dittrich in
+ #3505445.
+ - Remove tidy's clean flag as it changes the scope of attributes.
+ Link-specific colors end up being applied to all text. Reported by Adam
+ Piggott in #3569551.
+ - Leave it up to the user whether or not smart tags are inserted.
+ - Let w3m itself do the line wrapping for the config file. It works better
+ than fmt as it can honour pre tags causing less unintentional line breaks.
+ - Ditch a pointless '-r' passed to rm to delete files.
+ - Prevent completely empty lines in configure and try to unfold
+ unintentional line breaks.
+ - Let the config-file target optimistically update the original. Most of the
+ issues are fixed now and it makes diffing with git easier.
+ - Change WDUMP to generate ASCII. Add WDUMP_UTF8 to allow UTF-8 in the
+ AUTHORS file so the names are right.
+ - Stop pretending that lynx and links are supported for the documentation.
+
+- configure improvements:
+ - On Haiku, do not pass -lpthread to the compiler. Haiku's pthreads
+ implementation is contained in its system library, libroot, so no
+ additional library needs to be searched. Patch submitted by Simon South in
+ #3564815.
+ - Additional Haiku-specific improvements. Disable checks intended for
+ multi-user systems as Haiku is presently single-user. Group Haiku-specific
+ settings in their own section, following the pattern for Solaris, OS/2 and
+ AmigaOS. Add additional library-related settings to remove the need for
+ providing configure with custom LDFLAGS. Submitted by Simon South in
+ #3574538.
+ - Several improvements for clarity, diffability and logic.
+
+ *** Version 3.0.19 Stable ***
- Bug fixes:
- Prevent a segmentation fault when de-chunking buffered content.