First rebuild for 3.0.18 stable
[privoxy.git] / doc / webserver / user-manual / whatsnew.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2 "http://www.w3.org/TR/html4/loose.dtd">
3
4 <html>
5 <head>
6   <meta name="generator" content=
7   "HTML Tidy for Linux/x86 (vers 7 December 2008), see www.w3.org">
8
9   <title>What's New in this Release</title>
10   <meta name="GENERATOR" content=
11   "Modular DocBook HTML Stylesheet Version 1.79">
12   <link rel="HOME" title="Privoxy 3.0.18 User Manual" href="index.html">
13   <link rel="PREVIOUS" title="Installation" href="installation.html">
14   <link rel="NEXT" title="Quickstart to Using Privoxy" href=
15   "quickstart.html">
16   <link rel="STYLESHEET" type="text/css" href="../p_doc.css">
17   <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
18   <link rel="STYLESHEET" type="text/css" href="p_doc.css">
19   <style type="text/css">
20 body {
21   background-color: #EEEEEE;
22   color: #000000;
23   }
24   :link { color: #0000FF }
25   :visited { color: #840084 }
26   :active { color: #0000FF }
27   hr.c1 {text-align: left}
28   </style>
29 </head>
30
31 <body class="SECT1">
32   <div class="NAVHEADER">
33     <table summary="Header navigation table" width="100%" border="0"
34     cellpadding="0" cellspacing="0">
35       <tr>
36         <th colspan="3" align="center">Privoxy 3.0.18 User Manual</th>
37       </tr>
38
39       <tr>
40         <td width="10%" align="left" valign="bottom"><a href=
41         "installation.html" accesskey="P">Prev</a></td>
42
43         <td width="80%" align="center" valign="bottom"></td>
44
45         <td width="10%" align="right" valign="bottom"><a href=
46         "quickstart.html" accesskey="N">Next</a></td>
47       </tr>
48     </table>
49     <hr class="c1" width="100%">
50   </div>
51
52   <div class="SECT1">
53     <h1 class="SECT1"><a name="WHATSNEW" id="WHATSNEW">3. What's New in this
54     Release</a></h1>
55
56     <p><span class="APPLICATION">Privoxy 3.0.18</span> is a stable release.
57     The changes since 3.0.17 stable are:</p>
58
59     <ul>
60       <li>
61         <p>Bug fixes:</p>
62
63         <ul>
64           <li>
65             <p>Fix a logic bug that could cause Privoxy to reuse a tainted
66             server socket. It could happen for server sockets that got
67             tainted by a server-header-tagger-induced block, in which case
68             Privoxy doesn't necessarily read the whole server response. If
69             keep-alive was enabled and the request following the blocked one
70             was to the same host and using the same forwarding settings,
71             Privoxy would send it on the tainted server socket. While the
72             server would simply treat it as a pipelined request, Privoxy
73             would later on fail to properly parse the server's response as it
74             would try to parse the unread data from the first response as
75             server headers for the second one. Regression introduced in
76             3.0.17.</p>
77           </li>
78
79           <li>
80             <p>When implying keep-alive in client_connection(), remember that
81             the client didn't Fixes a regression introduced in 3.0.13 that
82             would cause Privoxy to wait for additional client requests after
83             receiving a HTTP/1.1 request with "Connection: close" set and
84             connection sharing enabled. With clients like curl which
85             terminates the client connection after detecting that the whole
86             body has been received it doesn't really matter, but with clients
87             like FreeBSD's fetch the client connection would be kept open
88             until it timed out.</p>
89           </li>
90
91           <li>
92             <p>Fix a subtle race condition between
93             prepare_csp_for_next_request() and sweep() A thread preparing
94             itself for the next client request could briefly appear to be
95             inactive. If all other threads were already using more recent
96             files, the thread could get its files swept away under its feet.
97             I've only seen it while stress testing in valgrind while touching
98             action files in a loop. It's unlikely to have caused any actual
99             problems in the real world.</p>
100           </li>
101         </ul>
102       </li>
103
104       <li>
105         <p>General improvements:</p>
106
107         <ul>
108           <li>
109             <p>Privoxy can (re)compress buffered content before delivering it
110             to the client. Disabled by default as most users wouldn't benefit
111             from it.</p>
112           </li>
113
114           <li>
115             <p>The +fast-redirects{check-decoded-url} action checks URL
116             segments separately. If there are other parameters behind the
117             redirect URL, this makes it unnecessary to cut them of by
118             additionally using a +redirect{} pcrs command. Initial patch
119             submitted by Jamie Zawinski in #3429848.</p>
120           </li>
121
122           <li>
123             <p>Properly deal with FEATURE_TOGGLE being disabled</p>
124           </li>
125
126           <li>
127             <p>Adjust url_code_map[] so spaces are replaced with %20 instead
128             of '+' While '+' can be used by client's submitting form data,
129             this is not actually what Privoxy is using the lookups for. This
130             is more of a cosmetic issue and doesn't fix any actual problems
131             I'm aware of.</p>
132           </li>
133
134           <li>
135             <p>When compiled without FEATURE_FAST_REDIRECTS, do not silently
136             ignore +fast-redirect{} directives</p>
137           </li>
138
139           <li>
140             <p>Added a workaround for GNU libc's strptime() reporting
141             negative year values when the parsed year is only specified with
142             two digits. On affected systems cookies with such a date would
143             not be turned into session cookies by the +session-cookies-only
144             action. Reported by Vaeinoe in #3403560</p>
145           </li>
146
147           <li>
148             <p>When loading action sections, verify that the referenced
149             filters exist Currently missing filters only result in an error
150             message, but eventually the severity will be upgraded to
151             fatal.</p>
152           </li>
153
154           <li>
155             <p>Allow to bind to multiple separate addresses. Patch set
156             submitted by Petr Pisar in #3354485.</p>
157           </li>
158
159           <li>
160             <p>Set socket_error to errno if connecting fails in
161             rfc2553_connect_to() Previously rejected direct connections could
162             be incorrectly reported as DNS issues.</p>
163           </li>
164
165           <li>
166             <p>Fixed bind failures with certain GNU libc versions if no
167             non-loopback IP address has been configured on the system. This
168             is mainly an issue if the system is using DHCP and Privoxy is
169             started before the network is completely configured. Reported by
170             Raphael Marichez in #3349356. Additional insight from Petr
171             Pisar.</p>
172           </li>
173
174           <li>
175             <p>Disable filters if SDCH compression is used unless filtering
176             is forced. If SDCH was combined with a supported compression
177             algorithm, we'd previously try to decompress it, when successful
178             apply the enabled filters and ditch the Content-Encoding header
179             even though the SDCH compression wasn't removed. Reported by
180             zebul666 in #3225863.</p>
181           </li>
182
183           <li>
184             <p>Privoxy log messages now use the ISO 8601 date format
185             %Y-%m-%d. It's only slightly longer than the old format, but
186             contains the full date including the year and allows sorting by
187             date (when grepping in multiple log files) without hassle.</p>
188           </li>
189
190           <li>
191             <p>Make a copy of the --user value and only mess with that when
192             splitting user and group. On some operating systems modifying the
193             value directly is reflected in the output of ps and friends and
194             can be misleading. Reported by zepard in #3292710.</p>
195           </li>
196
197           <li>
198             <p>If forwarded-connect-retries is set, only retry if the we are
199             actually forwarding the request. Previously direct connections
200             would be retried as well.</p>
201           </li>
202
203           <li>
204             <p>Fixed a small memory leak when retrying connection</p>
205           </li>
206
207           <li>
208             <p>Remove an incorrect assertion in
209             compile_dynamic_pcrs_job_list() It could be triggered by a pcrs
210             job with an invalid pcre pattern (for example one that contains a
211             lone quantifier).</p>
212           </li>
213         </ul>
214       </li>
215
216       <li>
217         <p>Action file improvements:</p>
218
219         <ul>
220           <li>
221             <p>Moved the site-specific block pattern section below the one
222             for the generic patterns so for requests that are matched in
223             both, the block reason for the domain is shown which is usually
224             more useful than showing the one for the generic pattern.</p>
225           </li>
226
227           <li>
228             <p>Add a (disabled) section to block various Facebook tracking
229             URLs Reported by Dan Stahlke in #3421764.</p>
230           </li>
231
232           <li>
233             <p>Add a (disabled) section to rewrite and redirect
234             click-tracking URLs used on news.google.com Reported by Dan
235             Stahlke in #3421755.</p>
236           </li>
237
238           <li>
239             <p>Unblock linuxcounter.net/ Reported by Dan Stahlke in
240             #3422612.</p>
241           </li>
242
243           <li>
244             <p>Block 'www91.intel.com/' which is used by Omniture. Reported
245             by Adam Piggott in #3167370.</p>
246           </li>
247
248           <li>
249             <p>Disable the handle-as-empty-doc-returns-ok option and mark it
250             as deprecated. Reminded by tceverling in #2790091.</p>
251           </li>
252
253           <li>
254             <p>Add ".ivwbox.de/" to the "Cross-site user tracking" section.
255             Reported by Nettozahler in #3172525.</p>
256           </li>
257
258           <li>
259             <p>Unblock and fast-redirect ".awin1.com/.*=http://" Reported by
260             Adam Piggott in #3170921.</p>
261           </li>
262
263           <li>
264             <p>Block "b.collective-media.net/".</p>
265           </li>
266
267           <li>
268             <p>Widen the Debian popcon exception to "qa.debian.org/popcon".
269             Seen in Debian's 05_default_action.dpatch by Roland
270             Rosenfeld.</p>
271           </li>
272
273           <li>
274             <p>Block ".gemius.pl/" which only seems to be used for user
275             tracking. Reported by johnd16 in #3002731. Additional input from
276             Lee and movax.</p>
277           </li>
278
279           <li>
280             <p>Disable banners-by-size filters for '.thinkgeek.com/' The
281             filter only seems to catch pictures of the inventory.</p>
282           </li>
283
284           <li>
285             <p>Block requests for 'go.idmnet.bbelements.com/please/showit/'
286             Reported by kacperdominik in #3372959.</p>
287           </li>
288
289           <li>
290             <p>Unblock adainitiative.org/</p>
291           </li>
292
293           <li>
294             <p>Add a fast-redirects exception for
295             '.googleusercontent.com/.*=cache'</p>
296           </li>
297
298           <li>
299             <p>Add a fast-redirects exception for
300             webcache.googleusercontent.com/</p>
301           </li>
302
303           <li>
304             <p>Remove -prevent-compression from the fragile alias It's no
305             longer used anywhere by default and isn't known to break stuff
306             anyway.</p>
307           </li>
308
309           <li>
310             <p>Unblock http://adassier.wordpress.com/ and
311             http://adassier.files.wordpress.com/</p>
312           </li>
313         </ul>
314       </li>
315
316       <li>
317         <p>Filter file improvements:</p>
318
319         <ul>
320           <li>
321             <p>Let the yahoo filter hide '.ads'</p>
322           </li>
323
324           <li>
325             <p>Let the msn filter hide overlay ads for Facebook 'likes' in
326             search results.</p>
327           </li>
328
329           <li>
330             <p>Let the msn filter hide elements with the id 's_notf_div'.
331             They only seem to be used to advertise site 'enhancements'.</p>
332           </li>
333
334           <li>
335             <p>Let the js-events filter additionally disarm setInterval()
336             Suggested by dg1727 in #3423775.</p>
337           </li>
338         </ul>
339       </li>
340
341       <li>
342         <p>Documentation improvements:</p>
343
344         <ul>
345           <li>
346             <p>Clarify the effect of compiling Privoxy with zlib support
347             Suggested by dg1727 in #3423782.</p>
348           </li>
349
350           <li>
351             <p>Point out that the SourceForge messaging system works like a
352             blackhole and should thus not be used</p>
353           </li>
354
355           <li>
356             <p>Mention some of the problems one can experience when not
357             explicitly configuring an IP addresses as listen address.</p>
358           </li>
359
360           <li>
361             <p>Explicitly mention that hostnames can be used instead of IP
362             addresses for the listen-address, that only the first address
363             returned will be used and what happens if the address is invalid.
364             Requested by Calestyo in #3302213.</p>
365           </li>
366         </ul>
367       </li>
368
369       <li>
370         <p>Log message improvements:</p>
371
372         <ul>
373           <li>
374             <p>If only the server connection is kept alive, do not pretent to
375             wait for a new client request.</p>
376           </li>
377
378           <li>
379             <p>Remove a superfluos log message in forget_connection()</p>
380           </li>
381
382           <li>
383             <p>In chat(), properly report missing server responses as such
384             instead of calling them empty</p>
385           </li>
386
387           <li>
388             <p>In forwarded_connect(), fix a log message nobody should ever
389             see</p>
390           </li>
391
392           <li>
393             <p>Fix a log message in socks5_connect(), a failed write
394             operation was logged as failed read operation</p>
395           </li>
396
397           <li>
398             <p>Let load_one_actions_file() properly complain about a missing
399             '{' at the beginning of the file Simply stating that a line is
400             invalid isn't particularly helpful.</p>
401           </li>
402
403           <li>
404             <p>Do not claim to listen on a socket until we actually do. Patch
405             submitted by Petr Pisar #3354485</p>
406           </li>
407
408           <li>
409             <p>Prevent a duplicated LOG_LEVEL_CLF message when sending out
410             the "no-server-data" response</p>
411           </li>
412
413           <li>
414             <p>Also log the client socket when dropping a connection.</p>
415           </li>
416
417           <li>
418             <p>Include the destination host in the 'Request ... marked for
419             blocking. limit-connect{...} doesn't allow CONNECT ...' message
420             Patch submitted by Saperski in #3296250.</p>
421           </li>
422
423           <li>
424             <p>Prevent a duplicated log message if none of the resolved IP
425             addresses were reachable</p>
426           </li>
427
428           <li>
429             <p>In connect_to(), do not pretend to retry if
430             forwarded-connect-retries is zero or unset.</p>
431           </li>
432
433           <li>
434             <p>When a specified user or group can't be found, put the name in
435             single-quotes when logging it.</p>
436           </li>
437
438           <li>
439             <p>In rfc2553_connect_to(), explain getnameinfo() errors
440             differently.</p>
441           </li>
442
443           <li>
444             <p>Remove a useless log message in chat()</p>
445           </li>
446
447           <li>
448             <p>When retrying to connect, also log the maximum number of
449             connection attempts</p>
450           </li>
451
452           <li>
453             <p>Rephrase a log message in compile_dynamic_pcrs_job_list()
454             Divide the error code and its meaning with a colon. Call the pcrs
455             job dynamic and not the filter. Filters may contain dynamic and
456             non-dynamic pcrs jobs at the same time. Only mention the name of
457             the filter or tagger, but don't claim it's a filter when it could
458             be a tagger.</p>
459           </li>
460
461           <li>
462             <p>In a fatal error message in load_one_actions_file(), cover
463             both URL and TAG patterns</p>
464           </li>
465
466           <li>
467             <p>In pcrs_strerror(), properly report unknown positive error
468             code values as unknown. Previously they were handled like 0 (no
469             error).</p>
470           </li>
471
472           <li>
473             <p>In compile_dynamic_pcrs_job_list(), also log the actual error
474             code as pcrs_strerror() doesn't handle all errors reported by
475             pcre</p>
476           </li>
477
478           <li>
479             <p>Don't bother trying to continue chatting if the client didn't
480             ask for it. Reduces log noise a bit.</p>
481           </li>
482
483           <li>
484             <p>Make two fatal error message in load_one_actions_file() more
485             descriptive</p>
486           </li>
487
488           <li>
489             <p>In cgi_send_user_manual(), log when rejecting a file name due
490             to '/' or '..'</p>
491           </li>
492
493           <li>
494             <p>In load_file(), log a message if opening a file failed The CGI
495             error message alone isn't too helpful.</p>
496           </li>
497
498           <li>
499             <p>In connection_destination_matches(), improve two log messages
500             to help understand why the destinations don't match</p>
501           </li>
502
503           <li>
504             <p>Rephrase a log message in serve(). Client request arrival
505             should be differentiated from closed client connections now.</p>
506           </li>
507
508           <li>
509             <p>In serve(), log if a client connection isn't reused due to a
510             configuration file change.</p>
511           </li>
512
513           <li>
514             <p>Let mark_server_socket_tainted() always mark the server socket
515             tainted, just don't talk about it in cases where it has no
516             effect. It doesn't change Privoxy's behaviour, but makes
517             understanding the log file easier.</p>
518           </li>
519         </ul>
520       </li>
521
522       <li>
523         <p>Miscellaneous Privoxy improvements:</p>
524
525         <ul>
526           <li>
527             <p>In get_last_url(), do not bother trying to decode URLs that do
528             not contain at least one '%' sign. It reduces the log noise and a
529             number of unnecessary memory allocations.</p>
530           </li>
531
532           <li>
533             <p>If the --user argument user[.group] contains a dot, always
534             bail out if no group has been specified. Previously the intended,
535             but undocumented (and apparently untested), behaviour was to try
536             interpreting the whole argument as user name, but the detection
537             was flawed and checked for '0' isntead of '\0', thus merely
538             preventing group names beginning with a zero.</p>
539           </li>
540
541           <li>
542             <p>Simplify the signal setup in main()</p>
543           </li>
544
545           <li>
546             <p>Streamline socks5_connect() slightly</p>
547           </li>
548
549           <li>
550             <p>In case of SOCKS5 failures, dump the socks response</p>
551           </li>
552
553           <li>
554             <p>In socks5_connect(), require a complete socks response from
555             the server Previously we didn't care how much data the server
556             response contained as long as the first two bytes contained the
557             expected values. While at it, shrink the buffer size so we can't
558             read more than a whole socks response. This is required to
559             support Tor's optimistic data extension.</p>
560           </li>
561
562           <li>
563             <p>In chat(), do not bother to generate a client request in case
564             of direct CONNECT requests</p>
565           </li>
566
567           <li>
568             <p>Reduce server_last_modified()'s stack size</p>
569           </li>
570
571           <li>
572             <p>Shorten get_http_time() by using strftime()</p>
573           </li>
574
575           <li>
576             <p>Constify the known_http_methods pointers in
577             unknown_method()</p>
578           </li>
579
580           <li>
581             <p>Constify the time_formats pointers in parse_header_time()</p>
582           </li>
583
584           <li>
585             <p>Constify the formerly_valid_actions pointers in
586             action_used_to_be_valid()</p>
587           </li>
588
589           <li>
590             <p>In html_code_map[], use a numeric character reference instead
591             of ' which wasn't standardized before XHTML 1.0</p>
592           </li>
593
594           <li>
595             <p>Introduce a MAN_PAGE variable that defaults to privoxy.1. The
596             Debian package uses section 8 for the man page and this should
597             simplify the patch.</p>
598           </li>
599
600           <li>
601             <p>Deduplicate the INADDR_NONE definition for Solaris by moving
602             it to jbsockets.h</p>
603           </li>
604
605           <li>
606             <p>In block_url(), ditch the obsolete workaround for ancient
607             Netscape versions that supposedly couldn't properly deal with
608             status code 403.</p>
609           </li>
610
611           <li>
612             <p>Remove a useless NULL pointer check in load_trustfile()</p>
613           </li>
614
615           <li>
616             <p>Remove two useless NULL pointer checks in
617             load_one_re_filterfile().</p>
618           </li>
619
620           <li>
621             <p>Change url_code_map[] from an array of pointers to an array of
622             arrays It removes an unnecessary layer of indirection and on
623             64bit system reduces the size of the binary a bit.</p>
624           </li>
625
626           <li>
627             <p>Fix various typos. Fixes taken from Debian's 29_typos.dpatch
628             by Roland Rosenfeld.</p>
629           </li>
630
631           <li>
632             <p>Add a dok-tidy GNUMakefile target to clean up the messy HTML
633             generated by the other dok targets.</p>
634           </li>
635
636           <li>
637             <p>GNUisms in the GNUMakefile have been removed.</p>
638           </li>
639
640           <li>
641             <p>Change the HTTP version in static responses to 1.1</p>
642           </li>
643
644           <li>
645             <p>Synced config.sub and config.guess with upstream
646             2011-11-11/386c7218162c145f5f9e1ff7f558a3fbb66c37c5.</p>
647           </li>
648
649           <li>
650             <p>Add a dedicated function to parse the values of toggles
651             Reduces duplicated code in load_config() and provides better
652             error handling. Invalid or missing toggle values are now a fatal
653             error instead of being silently ignored.</p>
654           </li>
655
656           <li>
657             <p>Terminate HTML lines in static error messages with \n instead
658             of \r\n.</p>
659           </li>
660
661           <li>
662             <p>Simplify cgi_error_unknown() a bit.</p>
663           </li>
664
665           <li>
666             <p>In LogPutString(), don't bother looking at pszText when not
667             actually logging anything</p>
668           </li>
669
670           <li>
671             <p>Change ssplit()'s fourth parameter from int to size_t. Fixes a
672             clang complaint.</p>
673           </li>
674
675           <li>
676             <p>Add a warning that the statistics currently can't be trusted.
677             Mention Privoxy-Log-Parser's --statistics option as an
678             alternative for the time being.</p>
679           </li>
680
681           <li>
682             <p>In rfc2553_connect_to(), start setting cgi-&gt;error_message
683             on error</p>
684           </li>
685
686           <li>
687             <p>Change the expected status code returned for http://p.p/die
688             depending on whether or not FEATURE_GRACEFUL_TERMINATION is
689             available.</p>
690           </li>
691
692           <li>
693             <p>In cgi_die(), mark the client connection for closing. If the
694             client will fetch the style sheet through another connection it
695             gets the main thread out of the accept() state and should thus
696             trigger the actual shutdown.</p>
697           </li>
698
699           <li>
700             <p>Add a proper CGI message for cgi_die().</p>
701           </li>
702
703           <li>
704             <p>Fix an invalid free when compiled with
705             FEATURE_GRACEFUL_TERMINATION and shut down through
706             http://config.privoxy.org/die</p>
707           </li>
708
709           <li>
710             <p>Don't enforce a logical line length limit in
711             read_config_line()</p>
712           </li>
713
714           <li>
715             <p>Slightly refactor server_last_modified() to remove useless
716             gmtime*() calls</p>
717           </li>
718
719           <li>
720             <p>In get_content_type(), also recognize '.jpeg' as JPEG
721             extension</p>
722           </li>
723
724           <li>
725             <p>Add '.png' to the list of recognized file extenstions in
726             get_content_type()</p>
727           </li>
728
729           <li>
730             <p>In block_url(), consistently use the block reason "Request
731             blocked by Privoxy" In two places the reason was "Request for
732             blocked URL" which hides the fact that the request got blocked by
733             Privoxy and isn't necessarly correct as the block may be due to
734             tags.</p>
735           </li>
736
737           <li>
738             <p>In get_actions(), fix the "temporary" backwards compatibility
739             hack to accept block actions without reason. It also covered
740             other actions that should be rejected as invalid. Reported by
741             Billy Crook.</p>
742           </li>
743
744           <li>
745             <p>In listen_loop(), reload the configuration files after
746             accepting a new connection instead of before. Previously the
747             first connection that arrived after a configuration change would
748             still be handled with the old configuration.</p>
749           </li>
750
751           <li>
752             <p>In chat()'s receive-data loop, skip a client socket check if
753             the socket will be written to right away anyway. This can
754             increase the transfer speed for unfiltered content on fast
755             network connections.</p>
756           </li>
757
758           <li>
759             <p>The socket timeout is used for SOCKS negotiation as well.</p>
760           </li>
761
762           <li>
763             <p>Don't keep the client connection alive if any configuration
764             file changed since the time the connection came in. This is
765             closer to Privoxy's behaviour before keep-alive support for
766             client connection has been added and also less confusing in
767             general.</p>
768           </li>
769
770           <li>
771             <p>Treat all Content-Type header values containing the pattern
772             'script' as a sign of text. Reported by pribog in #3134970.</p>
773           </li>
774         </ul>
775       </li>
776
777       <li>
778         <p>configure:</p>
779
780         <ul>
781           <li>
782             <p>Added a --disable-ipv6-support switch for platforms where
783             support is detected but doesn't actually work.</p>
784           </li>
785
786           <li>
787             <p>Do not check for the existence of strerror() and memmove()
788             twice</p>
789           </li>
790
791           <li>
792             <p>Remove a useless test for setpgrp(2). Privoxy doesn't need it
793             and it can cause problems when cross-compiling</p>
794           </li>
795
796           <li>
797             <p>Rename the --disable-acl-files switch to --disable-acl-support
798             Since about 2001, ACL directives are specified in the standard
799             config file.</p>
800           </li>
801
802           <li>
803             <p>Update the URL of the 'Removing outdated PCRE version after
804             the next stable release' posting. The old URL stopped working
805             after one of SF's recent layout pessimizations. Reported by Han
806             Liu.</p>
807           </li>
808         </ul>
809       </li>
810
811       <li>
812         <p>Privoxy-Regression-Test:</p>
813
814         <ul>
815           <li>
816             <p>Added --shuffle-tests option to increase the chances of
817             detection race conditions</p>
818           </li>
819
820           <li>
821             <p>Added a --local-test-file option that allows to use
822             Privoxy-Regression-Test without Privoxy</p>
823           </li>
824
825           <li>
826             <p>Added tests for missing socks4 and socks4a forwarders</p>
827           </li>
828
829           <li>
830             <p>The --privoxy-address option now works with IPv6 addresses
831             containing brackets, too</p>
832           </li>
833
834           <li>
835             <p>Perform limited sanity checks for parameters that are supposed
836             to have numerical values.</p>
837           </li>
838
839           <li>
840             <p>Added a --sleep-time option to specify a number of seconds to
841             sleep between tests, defaults to 0.</p>
842           </li>
843
844           <li>
845             <p>Disable the range-requests tagger for tests that break if it's
846             enabled</p>
847           </li>
848
849           <li>
850             <p>Log messages use the ISO 8601 date format %Y-%m-%d.</p>
851           </li>
852
853           <li>
854             <p>Fix spelling in two error messages.</p>
855           </li>
856
857           <li>
858             <p>In the --help output, include a list of supported tests and
859             their default levels.</p>
860           </li>
861         </ul>
862       </li>
863
864       <li>
865         <p>Privoxy-Log-Parser:</p>
866
867         <ul>
868           <li>
869             <p>Perform limited sanity checks for parameters that are supposed
870             to have numerical values.</p>
871           </li>
872
873           <li>
874             <p>Implement a --unbreak-lines-only option to try to revert MUA
875             breakage.</p>
876           </li>
877
878           <li>
879             <p>Accept and highlight: Added header: Content-Encoding:
880             deflate</p>
881           </li>
882
883           <li>
884             <p>Accept and highlight: Compressed content from 29258 to 8630
885             bytes.</p>
886           </li>
887
888           <li>
889             <p>Accept and highlight: Client request arrived in time on socket
890             21.</p>
891           </li>
892
893           <li>
894             <p>Highlight: Didn't receive data in time: a.fsdn.com:443</p>
895           </li>
896
897           <li>
898             <p>Accept log messages with ISO 8601 time stamps, too</p>
899           </li>
900         </ul>
901       </li>
902
903       <li>
904         <p>uagen:</p>
905
906         <ul>
907           <li>
908             <p>Bump generated Firefox version to 9.0</p>
909           </li>
910
911           <li>
912             <p>Only randomize the release date if the new
913             --randomize-release-date option is enabled. Firefox versions
914             after 4 use a fixed date string without meaning.</p>
915           </li>
916         </ul>
917       </li>
918     </ul>
919
920     <div class="SECT2">
921       <h2 class="SECT2"><a name="UPGRADERSNOTE" id="UPGRADERSNOTE">3.1. Note
922       to Upgraders</a></h2>
923
924       <p>A quick list of things to be aware of before upgrading from earlier
925       versions of <span class="APPLICATION">Privoxy</span>:</p>
926
927       <ul>
928         <li>
929           <p>The recommended way to upgrade <span class=
930           "APPLICATION">Privoxy</span> is to backup your old configuration
931           files, install the new ones, verify that <span class=
932           "APPLICATION">Privoxy</span> is working correctly and finally merge
933           back your changes using <span class="APPLICATION">diff</span> and
934           maybe <span class="APPLICATION">patch</span>.</p>
935
936           <p>There are a number of new features in each <span class=
937           "APPLICATION">Privoxy</span> release and most of them have to be
938           explicitly enabled in the configuration files. Old configuration
939           files obviously don't do that and due to syntax changes using old
940           configuration files with a new <span class=
941           "APPLICATION">Privoxy</span> isn't always possible anyway.</p>
942         </li>
943
944         <li>
945           <p>Note that some installers remove earlier versions completely,
946           including configuration files, therefore you should really save any
947           important configuration files!</p>
948         </li>
949
950         <li>
951           <p>On the other hand, other installers don't overwrite existing
952           configuration files, thinking you will want to do that
953           yourself.</p>
954         </li>
955
956         <li>
957           <p><tt class="FILENAME">standard.action</tt> has been merged into
958           the <tt class="FILENAME">default.action</tt> file.</p>
959         </li>
960
961         <li>
962           <p>In the default configuration only fatal errors are logged now.
963           You can change that in the <a href="config.html#DEBUG">debug
964           section</a> of the configuration file. You may also want to enable
965           more verbose logging until you verified that the new <span class=
966           "APPLICATION">Privoxy</span> version is working as expected.</p>
967         </li>
968
969         <li>
970           <p>Three other config file settings are now off by default:
971           <a href="config.html#ENABLE-REMOTE-TOGGLE">enable-remote-toggle</a>,
972           <a href=
973           "config.html#ENABLE-REMOTE-HTTP-TOGGLE">enable-remote-http-toggle</a>,
974           and <a href=
975           "config.html#ENABLE-EDIT-ACTIONS">enable-edit-actions</a>. If you
976           use or want these, you will need to explicitly enable them, and be
977           aware of the security issues involved.</p>
978         </li>
979       </ul>
980     </div>
981   </div>
982
983   <div class="NAVFOOTER">
984     <hr class="c1" width="100%">
985
986     <table summary="Footer navigation table" width="100%" border="0"
987     cellpadding="0" cellspacing="0">
988       <tr>
989         <td width="33%" align="left" valign="top"><a href="installation.html"
990         accesskey="P">Prev</a></td>
991
992         <td width="34%" align="center" valign="top"><a href="index.html"
993         accesskey="H">Home</a></td>
994
995         <td width="33%" align="right" valign="top"><a href="quickstart.html"
996         accesskey="N">Next</a></td>
997       </tr>
998
999       <tr>
1000         <td width="33%" align="left" valign="top">Installation</td>
1001
1002         <td width="34%" align="center" valign="top">&nbsp;</td>
1003
1004         <td width="33%" align="right" valign="top">Quickstart to Using
1005         Privoxy</td>
1006       </tr>
1007     </table>
1008   </div>
1009 </body>
1010 </html>