Update CHANGES.
[polipo.git] / CHANGES
blob2415153ae64d1234805a891c776a0d1e2b2d3903
1 6 March 2007: Polipo 1.0.0
3         No changes since 0.9.99.2.
5 7 February 2007: Polipo 0.9.99.2
7         Fixed a buffer overflow in urlDirname (the 0.9 branch is not
8         vulnerable) (reported by J. P. Larocque).
9         Implemented use of IPv6 temporary source addresses (Frank Behrens).
10         Disabled use of unaligned range requests by default.  This is
11         controlled by the variable allowUnalignedRangeRequests (reported
12         by Chris Moore).
13         Fixed descriptor leaks in SOCKS error handling (reported by
14         Roger Dingledine).
15         Implemented maxSideBuffering.
17 6 February 2007: Polipo 0.9.12
19         Fixed incorrect caching of redirects (reported by Lawrence Lu).
20         Fixed a possible hang when falling back to gethostbyname
21         (reported by Chris Moore).
23 28 December 2006: Polipo 0.9.99.1
25         Validation improvements and bug fixes.
26         Don't use cached data when receiving the output from an HTTP/1.0 CGI.
27         Allowed tunnelling of IMAP and POP traffic by default.
28         Changed the disk cache expiry and indexing functions to use chunks.
29         Made the disk cache unreadable by others by default.
30         Fixed a bug that could cause stale data to be served after
31         a connection failure (reported by Hondza).
32         Fixed computation of age and rtt for pipelined requests.
33         Fixed incorrect cachability of redirects (reported by J.-P. Larocque).
34         Fixed a bug that would cause uncachable objects to become
35         cachable after being reloaded from the on-disk cache (reported
36         by J.-P. Larocque).
37         Implemented dontTrustVaryETag.
39 7 December 2006: Polipo 0.9.11
41         Fixed a crash that could happen when a network interface went down
42         while a DNS query was in progress (reported by Francesco Zappa).
44 20 November 2006: Polipo 0.9.99.0:
46         Implemented large buffers for headers larger than a chunk's worth.
47         Made the HTTP parser lax by default (ignores unknown headers).
48         Implemented the infrastructure for local POST requests and
49         implemented a real configuration interface (thanks to Theo Honohan).
50         Made timeouts user-configurable and enforced an invariant between
51         timeouts.
52         Made logging configurable at runtime (thanks to Frank Behrens).
53         Implemented the infrastructure for asynchronous handling of 
54         forbidden URLs.
55         Implemented the ability to redirect instead of returning an
56         error for forbidden URLs.
57         Implemented support for Squid-style redirectors.
58         Implemented User-configurable uncacheable URLs, analogous to
59         forbidden URLs (thanks to Joachim Haga).
60         Implemented the ability to avoid caching pages with cookies
61         and redirects.
62         Implemented maxPipelineTrain, which can be used to moderate
63         Polipo's eagerness to pipeline.
64         Unified parentHost and parentPort into parentProxy.
65         Ported Polipo to native Windows (thanks to Dan Kennedy).
66         Implemented disableVia.
67         Implemented SOCKS support.
68         Made disableVia and cacheIsShared to be true by default.
69         Increased the default value of serverMaxSlots to 8.
70         Made the disk cache code quote all characters except for a
71         small number of ``known safe'' ones.  This is an incompatible
72         change to the on-disk format.
73         Changed HTTP parser to pass all Pragma headers to the next
74         hop; this should make some media players work through Polipo.
75         Changed the connection scheduler to avoid pipelining when
76         there are idle connections to a given server.
77         Made Polipo obey parentProxy when tunnelling (proxying https).
78         Changed the default value of allowedPorts to be slightly more
79         permissive.
80         Implemented tweakables for selectively disabling parts of the
81         configuration interface.  Indexing and listing known servers
82         are now disabled by default.
83         Hide variables containing passwords.
84         Fixed a bug that could cause incorrect validation when speaking
85         to an HTTP/1.0 server.
86         Fixed a bug that could cause incorrect validation of Vary objects.
87         Fixed a crash in the redirector code.
88         Made disableVia the default, and changed the default value of idleTime.
89         Made polipo delay serving of partial objects until after a
90         a successful validation.  This should fix Mozilla's prefetching.
91         On 64-bit blatforms, made CHUNK_SIZE default to 8kB.
93 2 September 2006: Polipo 0.9.10:
95         Fixed a crash when a client closes a connection at just the
96         wrong time.
97         Fixed a crash that could happen when a server returned
98         incorrect headers and closed the connection at just the wrong
99         time.
100         Fixed restarting of connections on a server-side read error;
101         this should avoid the ``connection reset by peer'' problem.
102         Corrected work-around for DNS servers that export both AAAA
103         and CNAME.
104         Fix incorrect error handling when overflowing the buffer when
105         saving an entity to disk.
106         IPv6 tweaks for OpenBSD (thanks to Jun-ichiro itojun Hagino).
107         Fixed incorrect error-handling on failure to parse a date.
108         Fixed a deadlock when a tunnel is shut down and the buffer is
109         full.
110         Fixed an incorrect use of va_start (guaranteed crash on AMD64).
111         Fixed a possible race condition with a heavily pipelining client.
112         Fixed a crash due to incorrect handling of write errors in POST.
114 23 September 2005: Polipo 0.9.9:
116         Fixed a bug that could cause objects to be incorrectly
117         determined to be dynamic (thanks to Joachim B. Haga).
118         Fixed a bug that could cause the local web server to expose
119         files that are not under the local root (thanks to Wessel
120         Dankers).
121         Fixed an off-by-one bug when parsing NL-terminated headers.
122         Made Polipo forget about failures when finishing on the client
123         side.
124         Polipo now sends Host headers even when speaking to an upstream
125         proxy.  Some proxies take RFC 2616 literally, and require that
126         (thanks to Zoltan Ivanfi).
127         Fixed some bugs in staleness computation, and implemented
128         server-side max-age directives (oops!) (thanks to Charley Chu).
130 24 January 2005: Polipo 0.9.8:
132         Backported the lax HTTP parser from the head branch.
133         Fixed a race condition that could cause a crash if a single
134         object was being superseded twice at the same time.
135         Fixed an incorrect test that caused Polipo to pipeline to all
136         HTTP/1.1 servers, even when they were determined as broken (thanks
137         to Daniel Koukola).
138         Implemented maxPipelineTrain.
139         Tweaked for uclibc (thanks to Detlef Riekenberg).
141 27 December 2004: Polipo 0.9.7:
143         Fixed a possible crash when tunnelling.
144         Fixed spurious updates of object sizes when connection is
145         dropped by client.
146         Fixed parsing of URLs with explicit port number (thanks to
147         Frank Behrens).
148         Fixed a possible crash when exiting POST in error.
149         Fixed a protocol violation when an empty object is not superseded.
151 31 October 2004: Polipo 0.9.6:
152         Fixed a possible crash in ServeObject.
153         Fixed two possible crashes when relaxTransparency is not false.
154         Modified the config file parser to make it possible to have
155         backslashes in atoms.
156         Fixed a violated invariant (leading to a crash) when 
157         superseding objects.
158         Fixed a possible crash in ClientFinish when a pipelined
159         request carries no object.
160         Fixed a bug in handling of client-side Expect: 100-continue
161         (reported by Charley Chu).
162         Fixed a scheduling bug that caused server-side requests to be
163         issued in the order opposite to a client-side pipeline (many
164         thanks to Joachim Haga).
165         Abort when the config file couldn't be parsed (thanks to
166         Joachim Haga).
167         Fixed error handling in POST and PUT requests, which could
168         cause a crash on an I/O error.
170 17 June 2004: Polipo 0.9.5:
171         Implemented upstream proxy authentication (HTTP Basic only).
172         Fixed a possible crash when unable to schedule servicing a
173         request.
174         Fixed a possible crash when tunnelling (proxying https).
175         Fixed signedness issues to make allowedClients work on PPC
176         (from Gergely Nagy).
178 10 May 2004: Polipo 0.9.4:
179         Fixed a bug (introduced in 0.9.3) that could cause a crash
180         when the download of an object was interrupted and then immediately
181         restarted.
182         Fixed a bug that could cause stale non-200 repliles to be
183         served.
184         Fixed compilation on FreeBSD 5.2.1 (from Samuel Tardieu).
185         Fixed definition of *_ROOT in diskcache.c
187 6 April 2004: Polipo 0.9.3:
188         Fix incorrect handling of EPIPE when tunnelling; this could
189         cause crashes if a peer closed a connection when we're
190         writing.
191         Fix a race condition that could cause ``error message lost in
192         transit'' errors if a request was cancelled during connect.
193         Check for exitFlag in workToDo: faster reaction to signals.
195 28 March 2004: Polipo 0.9.2:
196         Fixed a bug that could cause crashes when writing out small
197         objects (thanks to Frank Behrens).
198         Made buffer allocation in httpParseHeaders dynamic.
199         Fixed the declaration of pipelineAdditionalRequests.
200         Fixed a bug that could cause empty directories to be missed
201         when expiring the disk cache.
202         Switched the forbidden file to use extended regexps, the
203         previous usage was non-portable (thanks to Frank Behrens).
205 9 March 2004: Polipo 0.9.1:
206         Fixed a bug that could cause chunked encoding failures when
207         going from a 1.0 server to a 1.1 client.
208         Fixed a bug that prevented comments after some config lines
209         (thanks to Tom Huckstep).
210         Fixed a possible buffer overflow in dnsDecodeReply.
211         Fixed portability to systems where rmdir returns EEXIST
212         instead of ENOTEMPTY.
213         Fixed error handling on fork failures in fillSpecialObject.
214         Fixed handling of EINTR in wait in specialRequestHandler.
215         Fixed a bug that caused objects with no headers to fail.
216         Fixed a minor memory leak in the config file parser.
217         Minor build fixes for NetBSD.
218         Added the 68020 and later to the list of architectures that
219         support unaligned access.
221 18 February 2004: Polipo 0.9:
222         Reworked the DNS code to parse ids even when a reply's qdcount
223         is 0.  No longer falls back to gethostbyname when DNS server
224         returns FormErr.
225         Made the DNS code parse resolv.conf.
227 11 Feburary 2004: Polipo 0.8.99.3:
228         Minor changes to work around Cygwin mis-design.
229         Fixed printing of n-state variables.
230         Fixed proxyOffline handling.
231         Fixed a bug that would cause errors to be reported with the
232         wrong content-type.
233         Fixed a bug that would cause ``object vanished'' errors when
234         using HEAD for revalidation.
235         Fixed a bug that could cause failed requests due to ``client
236         reset connection'' errors.
238 24 January 2004: Polipo 0.8.99.2:
239         Cleaned up authentication.
240         Made authenticated replies cachable in one of the cases allowed
241         by RFC 2616.
242         Fixed a bug that could, under some circumstances, cause a
243         password-protected object to be cached and returned to a
244         non-authorized client.
245         Implemented 100-continue, controlled by the variable expectContinue.
246         Implemented tristate, 4- and 5-state variables.  Split
247         proxyOffline into proxyOffline and relaxTransparency.  This is
248         an incompatible change to the config file format.
249         Cleaned up the handling of allowed port ranges.  New
250         configuration variable allowedPorts (and new type intlist).
251         Implemented tunnelling through the CONNECT method (https
252         proxying).
253         Will now read a request body on error (avoids a deadlock).
254         Reworked the PUT/POST code to read the reply eagerly rather
255         than waiting for the write to finish (avoids writing the full
256         body on error and avoids the same deadlock as above).
257         Made server addresses sticky: will now remember which of a
258         servers addresses worked last time, and use that address first.
260 16 january 2004: Polipo 0.8.99.1:
261         Fixed an expiry bug that caused DNS queries to be repeated on
262         each request.
263         Added the variable ``preciseExpiry'' that prevents trusting
264         the mtime during expiry.
266 14 January 2004: Polipo 0.8.99.0:
267         Implemented IP address-based authentication.
268         Implemented HTTP ``basic'' authentication.
269         Implemented variable body offsets for the on-disk cache; this
270         makes the on-disk cache format incompatible with previous versions.
271         Made the number of server slots configurable.
272         Partially rewrote the disk cache code.
273         Fixed a file descriptor leak in the early error handling code.
274         Fixed a bug in the base64 encoder; this makes the on-disk cache
275         format incompatible with previous versions.
276         Implemented proper reporting for 100-Continue replies
277         (100-Continue is not implemented yet).
278         Made the number of server slots configurable at runtime.
280 9 January 2004: Polipo 0.8.4:
281         Log file is now line buffered.
282         Will reopen the log file on SIGUSR1 and SIGUSR2.
283         censoredHeaders now defaults to none, and censorReferer to 0.
284         Fixed a memory allocation bug that could cause a crash.
286 21 December 2003: Polipo 0.8.3:
287         Fixed a potential buffer overflow on C89 systems in snnprintf.
288         Fixed checking of Via headers.
289         Added configurable log file.
290         Added code to run as a daemon.
291         Made the resolver grok names ending in a ``.''.
292         Changed Makefile to fit Debian better.
294 7 December 2003: Polipo 0.8.2:
295         Implemented a version of fts for SVR4 systems.
296         Implemented a version of mktime_gmt that doesn't use setenv.
297         Fixed code used to determine FQDN.
298         More unaligned access fixes.
299         Disabled queryIPv6 when there is no IPv6 support in kernel.
300         Enabled IPv6 support by default on FreeBSD and NetBSD.
302 2 December 2003: Polipo 0.8.1:
304         Fix a possible crash when doing a POST on a busy server.
305         Fix a possible crash when socket(2) fails; implement switching
306         to a different address when socket(2) fails (e.g. when
307         accessing a double-stack host from an IPv4-only client).
308         Fix a problem with servers stuck in the ``probing'' state.
309         Work around a bug in Konqueror that strips question marks from
310         URLs.
311         Fix incorrect error handling when dealing with connection
312         failures.
313         Fix a compile problem in dns.c.
314         Remove dependency on SSL, include MD5 code instead.
315         Fix signedness of s_maxage.
317 23 November 2003: Polipo 0.8:
319         IPv6 support, on both the client and server side, including
320         DNS support and RFC 2732.
321         Reworked the DNS code.
322         Made it possible to compile without any particular resolver
323         and without the on-disk cache.
324         Fixed a problem with the chunking encoder.
325         Made the config file parser grok octal and hex values, allowed
326         colons and tildes in unquoted strings.
327         Implemented tilde expansion in some config variables.
328         Made Polipo slightly less eager to honour range requests for
329         dynamic instances.  Marked generated objects as dynamic. These
330         changes should solve some of the problems with PMM.
331         Implemented the If-Range header (on both the client and server
332         side).
333         Implemented support for range requests smaller than one chunk
334         (and hence for pmmSize being smaller than CHUNK_SIZE).
335         Fixed a bug that caused a deadlock (until a server timeout)
336         when doing a POST/PUT request with no free connection slots.
337         Fixed a problem when diskCacheRoot didn't end in `/'.
338         Fixed a refcounting problem that could cause Polipo to crash
339         on a DNS timeout.
340         Fixed an alignment problem that could cause crashes on 
341         architectures that don't like unaligned memory accesses
342         (thanks to Rob Byrnes).
343         Fixed a bug with the disk cache that caused spurious ``disk
344         entry changed behind our back'' warnings (and in principle
345         could cause data corruption, although that's very unlikely).
346         Made opening connections slightly less aggressive -- Polipo
347         would sometimes open two connections where only one was needed.
348         Modified client-side code to notice client shutdowns earlier
349         and notify the server side straight away.
351 7 October 2003: Polipo 0.7
353         Made the Request function a method of objects.
354         Fixed a bug that could sometimes cause data corruption.
355         Fixed a bug that could cause sending of incorrect data to
356         the client on a range request.
357         Fixed POST and PUT requests.
358         Fixed a bug that could sometimes cause a POST request to use a
359         stale connection.
360         Included code to do poor man's multiplexing.
361         Will now open multiple connections to non-persistent servers.
362         Fixed a bug that could lead to idle connections dying without
363         being noticed.
364         Fixed probing for pipelining.
365         Actually use the new time function introduced in 0.5.
366         Fixed a bug in strcasecmp_n.
367         ForbiddenFile can now be a directory.
369 26 September 2003: Polipo 0.6
371         Fixed precondition handling.
372         Fixed a bug that could lead to lockups when revalidating an
373         object.
375 27 June 2003: Polipo 0.5
377         Made the presence of a reader or writer explicit on the client
378         side.
379         Reworked closing client connections.
380         Reworked reporting of server-side errors.
381         Made buffer allocation lazy; idle clients and servers no
382         longer use up buffers.
383         Reworked UTC time handling to use timegm(3) when available.
385 12 March 2003: Polipo 0.4
387         Implemented expiry of the on-disk cache.
388         Implemented reliable aborting of connections; Polipo should no
389         longer deadlock when a server falls into a black hole.
390         Changed direct reads to be more aggressive by using readv in
391         three pieces.
392         Changed serving of chunked data to be more eager about
393         serving a chunk's end marker.
394         Implemented better reporting of DNS errors.
395         Fixed a deadlock with pipelining on the client side.
396         Removed most of the remaining copies when reading on the
397         server side.
398         Fixed a bug that caused some headers to disappear in transit.
399         Fixed a possible livelock when reading chunked encoding.
400         Fixed an overflow when pipelining on the server side.
401         Fixed generation of indexes from the on-disk cache.
402         Fixed a DNS crash when falling back on gethostbyname.
404 1 March 2003: Polipo 0.3
406         Implemented retrying of timed-out DNS requests.
407         Implemented configuration mechanisms for case-insensitive
408         atoms, time values and atom lists; censoredHeaders can now be
409         configured.
410         No longer censors User-Agent.  Blame Beppe and Alain.
411         Changed the handling of hop-by-hop HTTP headers to deal with
412         multiple Connection headers.
413         Made client-side errors and successful revalidation no longer
414         close the connection.
415         Fixed a bug that caused the allocation of an extraneous 2MB (!)
416         at startup.  Polipo can run in 100KB once again.
417         Fixed a refcounting bug and some incorrect frees that could
418         lead to crashes when recovering from a server-side error.
419         Fixed a bug with POST/PUT that could trigger a failed assertion.
420         Made sure that POST/PUT don't get scheduled in multiple pieces.
422 17 February 2003: Polipo 0.2
424         Fixed an incorrect assertion that could cause crashes when the
425         server is fast.
426         Fixed (hopefully) logic for 304 replies.
427         Minor tweaks to scheduling that cause some speed increase when the
428         client is pipelining and the server is fast.
429         Minor bug fixes and cleanups.
430         Macro-ified do_log and friends.
432 3 February 2003: Polipo 0.1
434         Initial public release.