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