Known bugs and limitations in Polipo-1.0.4 ****************************************** Polipo will crash if an error happens while it is waiting for a 100-continue reply. This is a blocker for 1.0.5. ------------------------------------------------------------------------------ The local configuration interface is broken. This is a blocker for 1.0.5. ------------------------------------------------------------------------------ There's a race condition that causes a crash that I cannot reproduce. http://article.gmane.org/gmane.comp.web.polipo.user/2205 ------------------------------------------------------------------------------ Some range requests are handled incorrectly. This is fixed in 1.0.5. ------------------------------------------------------------------------------ Time handling is broken under Windows. This is fixed in 1.0.5. ------------------------------------------------------------------------------ When Polipo crashes, files in the disk cache could be corrupted. This is fixed in 1.0.5. ------------------------------------------------------------------------------ Under FreeBSD, the memory cache is sometimes sized incorrectly. This is fixed in 1.0.5. ------------------------------------------------------------------------------ Under some circumstances, Polipo will truncate a returned instance if the origin server marks it as uncachable. This will happen either when running out of memory when running with no on-disk cache, or when there are multiple fetches in progress for the same object and one of them is interrupted. The former is easy to work around -- you should give Polipo either enough memory or an on-disk cache (or both). The latter is not, but it is difficult to fix without adding a lot of housekeeping code. ------------------------------------------------------------------------------ Generated ``Warning'' headers are wrong. Right now, most user-agents ignore ``Warning'' headers (with the notable exception of Konqueror), but it really ought to be fixed. ------------------------------------------------------------------------------ Instances are limited to 2 GB. (The total size of the cache is only limited by the amount of disk space.) ------------------------------------------------------------------------------ The number of instances cached from a given server is limited by the number of files in a single directory that your filesystem can handle. While I consider this as a filesystem bug, Polipo should work around this brain-damage. ------------------------------------------------------------------------------ Polipo doesn't grok If-Range with a date (as opposed to an ETag). This is not strictly a bug, since a server is allowed to ignore If-Range, but it should be fixed. ------------------------------------------------------------------------------ Polipo assumes that all servers listed in /etc/resolv.conf are equivalent, and doesn't mimic the libc resolver's algorithm for choosing among them. This is not a bug as far as I'm concerned, but some users disagree. ------------------------------------------------------------------------------ The version of vsprintf_a in util.c used on systems that don't have vasprintf is not portable -- it walks an arglist multiple times without using va_copy. (This is fixed in 1.0.5.) ------------------------------------------------------------------------------ There is a bug in some SVR4-derived systems (notably Solaris 2.9 and HP-UX B.11.11) that prevents polipo from using the system resolver if IPv6 support is enabled. This is why IPv6 support is disabled on these systems by default. This will not be fixed, as it is a SVR4 bug, not a bug in Polipo. A simple fix is to upgrade to a Free Unix-like system. The following patch works around their bug: --- orig/dns.c +++ mod/dns.c @@ -558,7 +558,7 @@ while(entry) { HostAddressRec host; int host_valid = 0; - if(entry->ai_family == AF_INET && entry->ai_protocol == IPPROTO_TCP) { + if(entry->ai_family == AF_INET && entry->ai_protocol == IPPROTO_IP) { if(dnsQueryIPv6 < 3) { host.af = 4; memset(host.data, 0, sizeof(host.data)); @@ -568,7 +568,7 @@ host_valid = 1; } } else if(entry->ai_family == AF_INET6 && - entry->ai_protocol == IPPROTO_TCP) { + entry->ai_protocol == IPPROTO_IP) { if(dnsQueryIPv6 > 0) { host.af = 6; memset(&host.data, 0, sizeof(host.data)); ------------------------------------------------------------------------------