--- AnyEvent/Changes 2011/08/25 03:08:48 1.490 +++ AnyEvent/Changes 2020/09/30 07:35:21 1.650 @@ -1,11 +1,330 @@ Revision history for Perl extension AnyEvent. TODO: document TCP_*** constants +TODO: add debug/trace logging to some modules +TODO: use the eval-with-cb-call trick also to speed up JSON? +TODO: FAQ: common pitfalls? invoke-before-return +TODO: FAQ: scope-ids? hosts file order? +TODO: AnyEvent::Handle with AnyEvent::IO? +TODO: invalid. and localhost. specialcasing inside AEDNS and not AESocket (rfc6761) +TODO: maybe implement env variable to give hosts precedence +TODO: more formats for parse_ipv6 (single ipv6 address without port, ...p80, ...#80) +TODO: inet_aton maybe pack C4? no, add a comment why not +TODO: socket prepare callbacks, can they easily signal failure as well? +TODO: Олег Г , empty A record response causes +AnyEvent::resolve_sockaddr to eventually call pack_sockaddr with undef - +broken dns server, but maybe improve the response. +TODO: AnyEvent::Loop should not use POSIIX when ti isn't used. + +TODO: AnyEvent::Log contexts should have a way to inject log messages received form elsewhere, using timestamp etc. +TODO: add some cheta-sheet to log synopsis regarding AE_LOG=AnyEvent::MP=+ +TODO: tcp_connect option for AnyEvent::Handle? +TODO: hosts files on windows probably contain \r, which is not stripped + - AnyEvent::Loop no longer loads the POSIX module if Time::HiRes + has monotonic clock support (suggested by Felipe Gasper). + - since Net::SSLeay (up to 1.88-1) is _still not ported to openssl 1.1 + and many distributions therefore will have a completely broken + Net::SSLeay module for the forseeable future, AnyEvent::TLS + will now log a warning (that is not seen by default unless you + increase log verbosity). + - expose error method of AnyEvent::Handle for general use. + - add tlsv1_3 disable switch to AnyEvent::TLS. + - add experimental "tls" method support for AnyEvent::TLS. + - tls methods were lowercase, but documented to be uppercase. + fix documentation. + - EV backend now uses EV::break when waiting for condvars, + making waiting for condvars more efficient. This might + "break" already-broken programs that recursively enter + the event loop even more. + - add a dependency on Coro 6.57 if the installed version is older, + to avoid an incompatibility. + - upgrade to UTS-46:13.0.0 ("Unicode 13"). + +7.17 Wed Sep 18 03:04:49 CEST 2019 + - work around antique openssl version in RHEL 7 by formatting + dh parameters differently (reported by several people). + - add t/13_weaken.t. + +7.16 Fri Jul 19 18:00:21 CEST 2019 + - add ffdhe group dh parameters from RFC 7919, and use ffdhe3072 + as new default, instead of schmorp1539. + - AnyEvent::Log did not reassess logging status of + AnyEvent::Log::logger's when contexts were changed with + ->attach/detach/slaves, causing them to not log even though a + recent attach should have caused them to log. + - added some more logging configuration examples. + - mention RFC 8482 in AnyEvent::DNS. + +7.15 Tue Feb 26 03:07:42 CET 2019 + - INCOMPATIBLE CHANGE: AnyEvent::Handle's tls_detect documentation gave + separate major and minor versions, while code passed only a single + value. This version follows the documentation and now passes separate + major and minor values. + - work around Net::SSLeay not having been ported to openssl 1.1, but many + distributions compiling it against openssl 1.1, which unfortunately + succeeds and results in a very broken module. + - AnyEvent::DNS::dns_unpack now stores the original DNS packet + in the __ member, to allow decoding of undecodable resouce records + containing compressed domian names. + - AnyEvent::Socket::parse_ipv6 would NOT, as advertised, accept ipv4 + addresses. It now does and converts them to ipv4 mapped addresses. + - support CAA records, based on patch by Steve Atkins. + - add freenom and cloudflare nameservers as dns fallback. + - AnyEvent::Strict would not properly ward against io watchers + on files when the handle passed was a file descriptor. + - document "internal" variables used by the dns en-/decoder to allow + enterprising users to extend them in a semi-official way. + +7.14 Sat Jun 24 01:44:19 CEST 2017 + - fix a crash bug in AnyEvent::Handle with openssl 1.1.0 (patched + by Paul Howarth and apparently tracked down by Mike McCauley). + - AnyEvent::Handle->keepalive was documented (and defined) twice + (found by Matt Merhar). + - AnyEvent::Socket::tcp_bind/tcp_server would immediately unlink a unix + listening socket unless a guard is used. Change this so that no + cleanup will be performed unless a guard is used and document this more + clearly. + - make tcp_bind/tcp_server error messages more regular. + - work around latest perl upstream breakage - this time, perl5porters were + apparently bullied by a bogus CVE (CVE-2016-1238), and since distros + stupidly apply anything that has "security fix" stamped on it, it's likely + going to be a problem in practise (and working around it is trivial on + windows and unix). + - add TCP_FASTOPEN/MSG_FASTOPEN and MSG_NOSIGNAL/MSG_MORE/MSG_DONTWAIT + to constants. + - update warnings to common::sense 3.74 standards. + +7.13 Sat Sep 17 04:31:49 CEST 2016 + - Only call tlsext_host_name for non-empty common names (reported + by Maxime Soulé). + - log a (single) notice message if SNI is not supported. + - upgrade to UTS-46:9.0.0 draft and switch to non-transitional + behaviour, beating thunderbird, ie, edge, chrome and safari to it :) + (see also https://bugzilla.mozilla.org/show_bug.cgi?id=1218179) + - turns out the UTS-46 IDNA testcase failures were indeed bugs in the + testcases and the specification and not in the code - the post-9.0.0 + unicode files have all known problems fixed, so finally the AnyEvent + IDNA implementation can pass the full IDNA testsuite - without needing + a single fix :) + - guarantee (and document) that condvar callbacks will be removed + on invocation - important to avoid circular references. + +7.12 Wed Jan 27 19:12:26 CET 2016 + - use common name as hostname for tls connects, if Net::SSLeay + supports SNI. + - fix documentation of tls_autostart read type in AnyEvent::Handle, + analyzed by Felix Ostmann. + +7.11 Thu Jul 16 14:36:00 CEST 2015 + - AnyEvent::Socket::parse_ipv6 could accept malformed ipv6 + addresses (extra "::" at end and similar cases). + - add a more explicit warning to AnyEvent::Handle that it doesn't + work on files, people keep getting confused. + - new function AnyEvent::Socket::tcp_bind. + - new functions AnyEvent::fh_block and AnyEvent::fh_unblock. + - aligned ipv6 address formatting with RFC 5952 (by not shortening + a single :0: to ::). + - added stability canary support. + +7.09 Sat May 2 16:38:53 CEST 2015 + - AnyEvent::Debug called an internal function (AnyEvent::Log::ft) + that was renamed to AnyEvent::Log:format_time. uinder its old name + (analyzed by Michael Stovenour). + - update AnyEvent::DNS fallback resolver addresses: + seems google effectively killed most other free dns resolvers, + so remove them, but add cable and wireless (ecrc) since it was + stable for 20 years or so, official or not, and there should be + an alternative to google. + - perl5porters broke windows error codes in 5.20, and mapped + WSAEWOULDBLOCK on the (different) EWOULDBLOCK error code, and + WSAEINPROGRESS into the incompatible ERINPROGRESS code, probably + because they were so cool. They probably broke other error codes + for no reason, too, but I didn't care for checking, it's too + depressing. This version only works around the WSAEWOULDBLOCK + issue, because I don't have a nice way to work around the + WSAEINPROGRESS bug. + +7.08 Wed Dec 10 05:27:17 CET 2014 + - work around a newly introduced bug in Socket 2.011 (an + errornous sun_length check) (analyzed by Maxime Soulé). + - AnyEvent::TLS didn't load (but refer to) AnyEvent::Socket + (analyzed by Ben Magistro). + - AnyEvent::Strict will now confess, not croak. This is in line with + it being a development/debugging tool. + - work around a number of libglib bugs (debug builds of libglib enforce + certain undocumented behaviour patterns such as not being able to + remove a child watch source after it has fired, which we will try + to emulate to avoid "criticals". what where they thinking...). + - mention json security issues in AnyEvent::Handle, now that Douglas + Crockford has foolishly and incompatibly changed JSON. + - changed default dns resolver "max_outstanding" value from 1 to 10, + the latter beinfg the intended value all along + (reported by Ilya Chesnokov). + - added new "AnyEvent::Impl::UV" interface module to the UV event lib + (written by Mike Lowell). + +7.07 Tue Dec 17 17:45:02 CET 2013 + - the documentation for custom tls verify schemes was wrong. make it agree + with the code (reported by Maxime Soulé). + - added cbor read and write types to AnyEvent::Handle (using CBOR::XS). + - work around an API change in openssl that could cause wrong tls connection + aborts, likely on windows only (analyzed by sten). + - calling AnyEvent->now_update with AnyEvent::Impl::Perl caused an + endless loop (reported by Dietrich Rebmann). + - add tlsv1_1 and tlsv1_2 protocols to AnyEvent::TLS + (patch by Maxime Soulé). + - document AnyEvent::Impl::IOAsync::set_loop and + $AnyEvent::Impl::IOAsync::LOOP. Though only documented now, this + functionality has _always_ been available. + - force a toplevel domain name in t/81_hosts.t (analyzed by + David Jack Wange Olrik). + - document that AnyEvent::Log uses AnyEvent::IO. + - warn about AnyEvent::Filesys::Notify performance. + - praise the joys of AnyEvent::Fork::*. + - time for an =encoding directive. + - do no longer use JSON to create a default json coder, use + JSON::XS or JSON::PP directly. + +7.05 Wed Aug 21 10:38:08 CEST 2013 + - uts46data.pl couldn't be found due to wrong naming of the file + (reported by Fulko Hew). + - handle lone \015's properly in AE::Handle's default line read + (reported by various people). + - untaint ip addresses found in /etc/hosts (patch by José Micó). + - the memleak fix in 7.03 caused resolving via /etc/hosts to always + fail on first use (reported and testcase by Andrew Whatson). + - expose AnyEvent::Log::format_time, and allow users to redefine it. + - expose AnyEvent::Log::default_format, and allow redefinition. + - expose AnyEvent::Log::fatal_exit, to allow redefinition. + - AnyEvent::Debug shell can now run coro shell commands, if available. + - t/63* tests were wrongly in MANIFEST. + - kernel.org's finger server went MIA, switch to freebsd.org and + icculus.org. + - clarify that IO::AIO and AnyEvent::AIO are needed for AnyEvent::IO + to function asynchronously (reported by Daniel Carosone). + - hard-disable $^W in most tests, it generates too much garbage output. + - use a (hopefully) more future-proof method to emulate common::sense. + - upgrade to UTS-46:6.2.0. + - switch to INSTLIB from INSTLIBDIR, as INSTLIBDIR was wrongly + documented. should not affect anything. + +7.04 Thu Nov 15 02:23:58 CET 2012 + - debugging code left in. + +7.03 Thu Nov 15 02:16:11 CET 2012 + - AnyEvent::Socket::inet_aton did not work when dns resolution was + used to find the addresses (analyzed and patch by Maxime Soulé). + - fix a memory leak in the /etc/hosts lookup code when hosts don't + resolve and are not in hosts (analyzed by sten). + +7.02 Tue Aug 14 04:27:58 CEST 2012 + - AnyEvent::Util::run_cmd could block indefinitely (analyzed and test + program by Yorhel). + - verified that AnyEvent::Socket follows RFC5952. + - try to parse "ADDR#PORT" in addition to "ADDR PORT". + +7.01 Sun May 13 01:03:17 CEST 2012 + - fail with EPROTO in AnyEvent::Handle wqhen TLS is requested but + not available, instead of throwing an exception. + - use File::Spec to get the tmpdir in t/*, to avoid needless + failures on (most, not mine :) windows boxes. + - new handle read types: tls_detect and tls_autostart. + +7.0 Fri Apr 13 06:33:30 CEST 2012 + - child watchers are broken in POE 1.352 (also many earlier + versions) and there seems to be no way to work around it, as POE + itself is inherently racy. Document this regression and add a delay + in t/68_poe_03_child.t for the time being. + - new module AnyEvent::IO, that is a frontend to either a pure-perl + synchronous I/O implementation (AnyEvent::IO::Perl), or to the + asynchronous I/O extension IO::AIO (AnyEvent::IO::IOAIO). + - load /etc/hosts only when DNS has no answer. + - stat /etc/hosts on every access and reload it if it changed. + - load /etc/hosts via AnyEvent::IO - potentially asynchronous. + - fix a buggy croak in the dh parameter reading in AnyEvent::TLS. + - AnyEvent::Log log_to_file and log_to_path now use AnyEvent::IO. As + a side effect, they now use true appending as opposed to libc + appending, and the file might not have been opened when the function + returns. + - the default logging level was not properly documented in a variety of + places, this has hopefully been rectified. + - updated uts46data.pl for unicode 6.1.0. + - made log messages generated by AnyEvent submodules not + include the package name anymore, as it will be logged + by default already. + - upgrade to the trick used by common-sense 3.5 to work + around extra warning torture/breakage under perl 5.15.x. + - log messages by anyevent are now ucfirst, are usually full + sentences and do no longer include the package name. + - the storable read type would sometimes throw an exception instead + of causing EBADMSG (analyzed by Maxime Soulé). + - work around a bug in openssl 1.0.1 which enforces a minimum rsa + keysize (reported by Paul Howarth). + - documented Rocco fabricating statements about AnyEvent and me. + +6.14 Tue Jan 31 20:00:24 CET 2012 + - AnyEvent::Impl::Tk was broken due to a mysterious "die" inside, + probably an editing mistake (reported by Darin McBride). + +6.13 Thu Jan 12 07:27:01 CET 2012 + - AnyEvent::Util::fork_call checked for POSIX availability in the wrong way, + causing it to fail if POSIX wasn't loaded already (analysed by Rock Power). + - AnyEvent::Handle::push_read (line => did pass $1 directly, so + regex-matching inside the callback would change the parameter, despite + $1 being dynamically scoped per-block. this perl bug is now being + worked around (testcase by Cindy Wang). + +6.12 Mon Dec 12 13:21:10 CET 2011 + - $! was clobbered by subsequent calls in tcp_connect, due to + the postpone not saving/restoring it (analyzed by Richard Garnish). + +6.11 Tue Nov 22 10:36:05 CET 2011 + - Tk cannot create windows when tainted unless you set a title, so + set a dummy title for AnyEvent's dummy mainwindow. How dummy. + - escape any nonprintable/nonascii characters when stringifying + backtraces. + - log the reason loading an interface module fails to load at level debug. + +6.1 Tue Oct 4 19:44:30 CEST 2011 + - INCOMPATIBLE CHANGE: the default log level is now "4" (error + and above), and some messages inside AnyEvent have been elevated + to higher log levels to print by default. + - AnyEvent::log, unlike AnyEvent::Log::log, did not always exit on fatal. + - work around yet another signal race bug, newly introduced by POE. My + how that module sucks. + - add google public ipv6 dns as fallback servers, so AE::DNS can finally + support ipv6-only operation even with defaults (also use ::1 instead + of 127.0.0.1). + - give better guidelines on how to chose a logging level. + - AnyEvent::Log can now cap (limit) log message priority by context. + - AE::log will now save and restore $! and $@, so callers don't have to. + - AE::Strict now checks that registered fds are still valid at regular + intervals. + - skip frequently called 'require' calls if the module appears loaded. + - increase signal latency test timer considerably for poor little osx, + which can't be bothered with basic posix functionality such as signal + delivery. + - mention some debugging aids in the tutorial. + - new env variable PERL_ANYEVENT_MAX_SIGNAL_LATENCY. + - private (%namespace) log contexts in PERL_ANYEVENT_LOG now have the name + of the context as title. + - AnyEvent::Strict would not restore read-write access to $_ when a callback + died - this is a user bug, but since AE::Strict exists to help dbeugging... + - detect the extremely evil IO::Async::Loop::AnyEvent module and refuse + to work with it - the author is well aware of the issues but refuses + to fix them. This extreme step has been taken because the module actively + attacks the goals of AnyEvent and makes it harder for module authors to use + AnyEvent. + +6.02 Fri Aug 26 20:08:31 CEST 2011 + - log_to_syslog now accepts facility strings. + - log_to_syslog would not allow facilities - "$facility|$level" + *literally* means that string. sheesh. + - the CPAN parser got confused and thought we provide Sys::Syslog, try + to work around. + - renamed AnyEvent::Impl::FLTK2 to FLTK. -TODO: ae::log examples -TODO: trace-per-watcher AnyEvent::Debug -TODO: logging during AnyEvent::detect -6.01 +6.01 Fri Aug 26 07:04:11 CEST 2011 - INCOMPATIBLE CHANGE: AnyEvent::DNS resource records now include the TTL as fourth element - this affects ->resolve, ->request and ->dns_unpack indirectly. Convenience functions such as @@ -35,13 +354,13 @@ - new env variable, PERL_ANYEVENT_DEBUG_WRAP, to automatically enable watcher instrumentation/wrapping (see AnyEvent::Debug::wrap). - new env variable, PERL_ANYEVENT_HOSTS, to override the place where - F can be found. + /etc/hosts can be found. - an empty PERL_ANYEVENT_RESOLV_CONF now selects the default configuration. - env variables can now be specified using AE_xyz instead of PERL_ANYEVENT_xyz, subject to some rules. - lots of new AnyEvent::Debug functionality. - - AnyEvent::Strict now checks for modifications $_ by the callback + - AnyEvent::Strict now checks for modifications of $_ by the callback (by setting it to readonly while executing the callback, if possible). - IO::Async sometimes cancels the wrong timer when you call cancel_timer. Invest extra overhead to work around this peculiar behaviour. @@ -72,7 +391,10 @@ - do not run event loop detection multiple times when programs call their cached copies of AnyEvent::detect. - parse_hostport now accepts absolute paths als unix domain sockets. + - suppress the idiotic warning inside POE by patching the POE::Kernel + run flags instead of asking the user to jump through contortions. - add Task::Weaken as dependency (as recommends only at this time). + - replace PF_UNSPEC by 0, for good old minix. 6.0 (not officially released, but was on CPAN for about 15 minutes :/) @@ -462,7 +784,7 @@ - add an additional error message parameter to AnyEvent::Handle's on_error callback (for TLS, $! is still available). - add AnyEvent::Handle on_starttls/on_stoptls callbacks. - - make AnyEvent::Handle more robust against early conenction + - make AnyEvent::Handle more robust against early connection failures (during new), and return C in that case from the constructor. - AnyEvent::Handle will now try to load only JSON::XS first,