-*** Version 3.0.17 Stable ***
-
-- Fixed last-chunk-detection for responses where the content was small
- enough to be read with the body, causing Privoxy to wait for the
- end of the content until the server closed the connection or the
- request timed out. Reported by "Karsten" in #3028326.
-- Responses with status code 204 weren't properly detected as body-less
- like RFC2616 mandates. Like the previous bug, this caused Privoxy to
- wait for the end of the content until the server closed the connection
- or the request timed out. Fixes #3022042 and #3025553, reported by a
- user with no visible name. Most likely also fixes a bunch of other
- AJAX-related problem reports that got closed in the past due to
- insufficient information and lack of feedback.
-- Fixed an ACL bug that made it impossible to build a blacklist.
- Usually the ACL directives are used in a whitelist, which worked
- as expected, but blacklisting is still useful for public proxies
- where one only needs to deny known abusers access.
-- Added LOG_LEVEL_RECEIVED to log the not-yet-parsed data read from the
- network. This should make debugging various parsing issues a lot easier.
-- The IPv6 code is enabled by default on Windows versions that support it.
- Patch submitted by oCameLo in #2942729.
-- In mingw32 versions, the user.filter file is reachable through the
- GUI, just like default.filter is. Feature request 3040263.
-- Added the configure option --enable-large-file-support to set a few
- defines that are required by platforms like GNU/Linux to support files
- larger then 2GB. Mainly interesting for users without proper logfile
- management.
-- Logging with "debug 16" no longer stops at the first nul byte which is
- pretty useless. Non-printable characters are replaced with their hex value
- so the result can't span multiple lines making parsing them harder then
- necessary.
-- Privoxy logs when reading an action, filter or trust file.
-- Fixed incorrect regression test markup which caused a test in
- 3.0.16 to fail while Privoxy itself was working correctly.
- While Privoxy accepts hide-referer, too, the action name is actually
- hide-referrer which is also the name used one the final results page,
- where the test expected the alias.
-
-- CGI interface improvements:
- - In finish_http_response(), continue to add the 'Connection: close'
- header if the client connection will not be kept alive.
- Anonymously pointed out in #2987454.
- - Apostrophes in block messages no longer cause parse errors
- when the blocked page is viewed with JavaScript enabled.
- Reported by dg1727 in #3062296.
- - Fix a bunch of anchors that used underscores instead of dashes.
- - Allow to keep the client connection alive after crunching the previous request.
- Already opened server connections can be kept alive, too.
- - In cgi_show_url_info(), don't forget to prefix URLs that only contain
- http:// or https:// in the path. Fixes #2975765 reported by Adam Piggott.
- - Show the 404 CGI page if cgi_send_user_manual() is called while
- local user manual delivery is disabled.
+*** Version 3.0.18 stable ***
+
+- Bug fixes:
+ - If the redirect URL contains characters RFC 3986 doesn't permit,
+ they are (re)encoded. Not doing this makes Privoxy versions from
+ 3.0.5 to 3.0.17 susceptible to HTTP response splitting (CWE-113)
+ attacks if the +fast-redirects{check-decoded-url} action is used.
+ - Fix a logic bug that could cause Privoxy to reuse a server
+ socket after it got tainted by a server-header-tagger-induced
+ block that was triggered before the whole server response had
+ been read. If keep-alive was enabled and the request following
+ the blocked one was to the same host and using the same forwarding
+ settings, Privoxy would send it on the tainted server socket.
+ While the server would simply treat it as a pipelined request,
+ Privoxy would later on fail to properly parse the server's
+ response as it would try to parse the unread data from the
+ first response as server headers for the second one.
+ Regression introduced in 3.0.17.
+ - When implying keep-alive in client_connection(), remember that
+ the client didn't. Fixes a regression introduced in 3.0.13 that
+ would cause Privoxy to wait for additional client requests after
+ receiving a HTTP/1.1 request with "Connection: close" set
+ and connection sharing enabled.
+ With clients which terminates the client connection after detecting
+ that the whole body has been received it doesn't really matter,
+ but with clients that don't the connection would be kept open until
+ it timed out.
+ - Fix a subtle race condition between prepare_csp_for_next_request()
+ and sweep() A thread preparing itself for the next client request
+ could briefly appear to be inactive.
+ If all other threads were already using more recent files,
+ the thread could get its files swept away under its feet.
+ So far this has only been reproduced while stress testing in
+ valgrind while touching action files in a loop. It's unlikely
+ to have caused any actual problems in the real world.
+ - Disable filters if SDCH compression is used unless filtering is forced.
+ If SDCH was combined with a supported compression algorithm, Privoxy
+ previously could try to decompress it and ditch the Content-Encoding
+ header even though the SDCH compression wasn't dealt with.
+ Reported by zebul666 in #3225863.
+ - Make a copy of the --user value and only mess with that when splitting
+ user and group. On some operating systems modifying the value directly
+ is reflected in the output of ps and friends and can be misleading.
+ Reported by zepard in #3292710.
+ - If forwarded-connect-retries is set, only retry if Privoxy is actually
+ forwarding the request. Previously direct connections would be retried
+ as well.
+ - Fixed a small memory leak when retrying connections with IPv6
+ support enabled.
+ - Remove an incorrect assertion in compile_dynamic_pcrs_job_list()
+ It could be triggered by a pcrs job with an invalid pcre
+ pattern (for example one that contains a lone quantifier).
+ - If the --user argument user[.group] contains a dot, always bail out
+ if no group has been specified. Previously the intended, but undocumented
+ (and apparently untested), behaviour was to try interpreting the whole
+ argument as user name, but the detection was flawed and checked for '0'
+ instead of '\0', thus merely preventing group names beginning with a zero.
+ - In html_code_map[], use a numeric character reference instead of '
+ which wasn't standardized before XHTML 1.0.
+ - Fix an invalid free when compiled with FEATURE_GRACEFUL_TERMINATION
+ and shut down through http://config.privoxy.org/die
+ - In get_actions(), fix the "temporary" backwards compatibility hack
+ to accept block actions without reason.
+ It also covered other actions that should be rejected as invalid.
+ Reported by Billy Crook.
+
+- General improvements:
+ - Privoxy can (re)compress buffered content before delivering
+ it to the client. Disabled by default as most users wouldn't
+ benefit from it.
+ - The +fast-redirects{check-decoded-url} action checks URL
+ segments separately. If there are other parameters behind
+ the redirect URL, this makes it unnecessary to cut them off
+ by additionally using a +redirect{} pcrs command.
+ Initial patch submitted by Jamie Zawinski in #3429848.
+ - When loading action sections, verify that the referenced filters
+ exist. Currently missing filters only result in an error message,
+ but eventually the severity will be upgraded to fatal.
+ - Allow to bind to multiple separate addresses.
+ Patch set submitted by Petr Pisar in #3354485.
+ - Set socket_error to errno if connecting fails in rfc2553_connect_to()
+ Previously rejected direct connections could be incorrectly reported
+ as DNS issues if Privoxy was compiled with IPv6 support.
+ - Adjust url_code_map[] so spaces are replaced with %20 instead of '+'
+ While '+' can be used by client's submitting form data, this is not
+ actually what Privoxy is using the lookups for. This is more of a
+ cosmetic issue and doesn't fix any known problems.
+ - When compiled without FEATURE_FAST_REDIRECTS, do not silently
+ ignore +fast-redirect{} directives
+ - Added a workaround for GNU libc's strptime() reporting negative
+ year values when the parsed year is only specified with two digits.
+ On affected systems cookies with such a date would not be turned
+ into session cookies by the +session-cookies-only action.
+ Reported by Vaeinoe in #3403560
+ - Fixed bind failures with certain GNU libc versions if no non-loopback
+ IP address has been configured on the system. This is mainly an issue
+ if the system is using DHCP and Privoxy is started before the network
+ is completely configured.
+ Reported by Raphael Marichez in #3349356.
+ Additional insight from Petr Pisar.
+ - Privoxy log messages now use the ISO 8601 date format %Y-%m-%d.
+ It's only slightly longer than the old format, but contains
+ the full date including the year and allows sorting by date
+ (when grepping in multiple log files) without hassle.
+ - In get_last_url(), do not bother trying to decode URLs that do
+ not contain at least one '%' sign. It reduces the log noise and
+ a number of unnecessary memory allocations.
+ - In case of SOCKS5 failures, dump the socks response in the log message.
+ - Simplify the signal setup in main()
+ - Streamline socks5_connect() slightly
+ - In socks5_connect(), require a complete socks response from the server
+ Previously Privoxy didn't care how much data the server response
+ contained as long as the first two bytes contained the expected
+ values. While at it, shrink the buffer size so Privoxy can't read
+ more than a whole socks response.
+ - In chat(), do not bother to generate a client request in case of
+ direct CONNECT requests. It will not be used anyway.
+ - Reduce server_last_modified()'s stack size.
+ - Shorten get_http_time() by using strftime().
+ - Constify the known_http_methods pointers in unknown_method().
+ - Constify the time_formats pointers in parse_header_time().
+ - Constify the formerly_valid_actions pointers in action_used_to_be_valid().
+ - Introduce a GNUMakefile MAN_PAGE variable that defaults to privoxy.1.
+ The Debian package uses section 8 for the man page and this
+ should simplify the patch.
+ - Deduplicate the INADDR_NONE definition for Solaris by moving it to jbsockets.h
+ - In block_url(), ditch the obsolete workaround for ancient Netscape versions
+ that supposedly couldn't properly deal with status code 403.
+ - Remove a useless NULL pointer check in load_trustfile().
+ - Remove two useless NULL pointer checks in load_one_re_filterfile().
+ - Change url_code_map[] from an array of pointers to an array of arrays
+ It removes an unnecessary layer of indirection and on 64bit system reduces
+ the size of the binary a bit.
+ - Fix various typos. Fixes taken from Debian's 29_typos.dpatch by Roland Rosenfeld.
+ - Add a dok-tidy GNUMakefile target to clean up the messy HTML
+ generated by the other dok targets.
+ - GNUisms in the GNUMakefile have been removed.
+ - Change the HTTP version in static responses to 1.1
+ - Synced config.sub and config.guess with upstream
+ 2011-11-11/386c7218162c145f5f9e1ff7f558a3fbb66c37c5.
+ - Add a dedicated function to parse the values of toggles. Reduces duplicated
+ code in load_config() and provides better error handling. Invalid or missing
+ toggle values are now a fatal error instead of being silently ignored.
+ - Terminate HTML lines in static error messages with \n instead of \r\n.
+ - Simplify cgi_error_unknown() a bit.
+ - In LogPutString(), don't bother looking at pszText when not
+ actually logging anything.
+ - Change ssplit()'s fourth parameter from int to size_t.
+ Fixes a clang complaint.
+ - Add a warning that the statistics currently can't be trusted.
+ Mention Privoxy-Log-Parser's --statistics option as
+ an alternative for the time being.
+ - In rfc2553_connect_to(), start setting cgi->error_message on error
+ - Change the expected status code returned for http://p.p/die depending
+ on whether or not FEATURE_GRACEFUL_TERMINATION is available.
+ - In cgi_die(), mark the client connection for closing.
+ If the client will fetch the style sheet through another connection
+ it gets the main thread out of the accept() state and should thus
+ trigger the actual shutdown.
+ - Add a proper CGI message for cgi_die().
+ - Don't enforce a logical line length limit in read_config_line()
+ - Slightly refactor server_last_modified() to remove useless gmtime*() calls
+ - In get_content_type(), also recognize '.jpeg' as JPEG extension
+ - Add '.png' to the list of recognized file extensions in get_content_type()
+ - In block_url(), consistently use the block reason "Request blocked by Privoxy"
+ In two places the reason was "Request for blocked URL" which hides the
+ fact that the request got blocked by Privoxy and isn't necessarily
+ correct as the block may be due to tags.
+ - In listen_loop(), reload the configuration files after accepting
+ a new connection instead of before.
+ Previously the first connection that arrived after a configuration
+ change would still be handled with the old configuration.
+ - In chat()'s receive-data loop, skip a client socket check if
+ the socket will be written to right away anyway. This can
+ increase the transfer speed for unfiltered content on fast
+ network connections.
+ - The socket timeout is used for SOCKS negotiations as well which
+ previously couldn't timeout.
+ - Don't keep the client connection alive if any configuration file
+ changed since the time the connection came in. This is closer to
+ Privoxy's behaviour before keep-alive support for client connection
+ has been added and also less confusing in general.
+ - Treat all Content-Type header values containing the pattern
+ 'script' as a sign of text. Reported by pribog in #3134970.