This Week on perl5-porters - 5-11 December 2005 This week had seen the development of the responses of Perl community to the Webmin security hole, with the usual assortment of activity on many other fronts in the advancement of the Perl interpreter. "Pod::Simple" integration, issues in newer Windows, better OpenVMS support illustrate the discussion diversity.
sprintf patches This week, the responses around the security breach found on Webmin had been dominated by patching the culprits, namely, "Sys::Syslog" and the Perl domestic implementation of "sprintf". Nicholas presented the bundle of prepared sprintf patches to 5.8.x and triggered a rather impressive cooperation to test them in the most varied architectures Perl runs in. Lots of people in Perl community reported on the (fortunately successful) outcomes of the fixes. Some tricks were needed (like using context rather than unified diffs) to get the maximum portability but it was worthy. http://xrl.us/i7zs "Sys::Syslog" Fixes Upon requests, Sébastien Aperghis-Tramoni prepared a CPAN release of "Sys::Syslog" which is now dual-lived. The release 0.09 sprouted from [EMAIL PROTECTED] (with the corresponding last week's fixes) and a few tweaks. To be honest, 0.10 is already there for public comsumption (in CPAN, *blead* and maybe *maint*). http://xrl.us/i7zt Still vulnerable? Brendan O'Dea essayed an answer to a bug report on Debian for the one-liner below, which suggested another security risk. To Steve Langaseek, even though it was not a buffer overflow, but a probable read of "uninitialized" locations in memory, it does not exclude the possibility of an exploit, as had already been done for C programs. Gisle Aas acknowledged "%vs" did strange things, as well as "%vc", "%vn", "%v%" and fixed them all with change #26321. $ perl -e 'printf("%2918905856\$vs")' Segmentation fault http://xrl.us/i7zu Improving Cwd.pm The thread started in the previous week on Cwd.pm continued this week. Nick Ing-Simmons seconded Ken William's proposal to mess with "getcwd()" for performance/enhancement purposes. Nicholas Clark asked about the behavior of current Perl implementation of "getcwd": a directory can be changed in a way that can't be recovered (unlike determined by POSIX)? Ken thought it could be done more safely, but the risk exists actually. Ken announced a new beta of "PathTools" to CPAN, where the scan of $ENV{PATH} that started this thread was "fixed", "Cwd::getcwd" maps to the underlying C "getcwd()" when possible, besides contributions by John E. Malmberg and Bryan Daimler. Ken awaits for comments and test reports towards a non-beta release. http://xrl.us/i7zv Takeuchi Benchmark Recai Oktas posted his concerns about a bad performance shown by Perl 5.8.7 running the Takeuchi benchmark test: too much memory and slow to a crawl. Dave Mitchell rewrote the code in a perl55 rather than perl4 style, cutting down execution time and memory usage. Rekai felt more confident, seeing an improvement from ~23 s to < 1 s and asked if Dave's version should replace the code in the "Computer Language Shootout". chromatic reminded "use Memoize" could make it even faster at the expense of memory, but that's not a fair technique for the benchmark purposes. http://xrl.us/i7zw Cross-compilation with uClibc Philippe Ney had been trying to cross-compile Perl with an eye for using uClibc, a C library for developing embedded Linux systems, and buildroot, a cross-compilation toolkit for "uClibc". In his way, Philippe stumbled with some strangeness and asked for help. Rafael Garcia-Suarez recommended the use of the same version of perl on the host machine as on the target system, since Philippe was using perl 5.8.4 as host for building a 5.8.7 target. Vadim Konovalov explained that the ./configpm script generates Config.pm (possibly for another target system) and, via Config.pm manipulations, a host miniperl produces binaries for the target platform. This used to work only for WinCE cross-compiling but had been worked out for general cross-compiling. Vadim also advised on the differences of Config.pm in 5.8.4 and 5.8.7 (where the later uses a second file Config_heavy.pl). http://xrl.us/i7zx APC Relocated Just to make sure you have heard about the relocation of the Archive of Perl Changes (APC) by Philippe "gozer" Chiasson, let me repeat the URLs below. rsync://public.activestate.com/ http://public.activestate.com/pub/apc/ ftp://public.activestate.com/pub/apc/ In the thread "-Duse64bitint on HP-UX", Jan Dubois reminded APC now also has the feature to fetch a tarball instead of all the files individually (which can speed FTP access). Jan also thought a symlink to the latest snapshot could be a good idea so that smoke code doesn't have to parse the directory listing. Yitzchak Scott-Thoennes suggested that .bz2 files would also be a good addition. Philippe did both of them. You find snapshots here http://public.activestate.com/pub/apc/perl-current-snap/ Including the latest one http://public.activestate.com/pub/apc/perl-current-snap/perl-current-latest.tar.gz ftp://public.activestate.com/pub/apc/perl-current-snap/perl-current-latest.tar.gz "-Duse64bitint" on HP-UX Jan Dubois found a little odd that H.Merijn Brand had stated that HP-UX does allow only 32/32 or 64/64 for int/pointer sizes. Jan was used to build Perl 5.8.7 with "-Duse64bitint" on HP-UX 11.00 PA-RISC successfully. H.Merijn Brand explained "-Duse64bitint" is automatically promoted to "-Duse64bitall" so that you always end with 64bit ints and pointers. http://xrl.us/i7zy While Merijn gave some touches to make the documentation more precise, Jan made some suggestions and asked why the HP-UX code/docs were so focused on PA-RISC and what to expect on IA64. Merijn explained this is due to the fact that most of the contributions was based on his use of those systems, and his limited access to Itanium. Spider Boardman volunteered to do some smoke with rx2600 machines - being concerned about the smoke interface not playing with firewalls that refuse rsync. Merijn pointed that ftp should work and Jan introduced the new features of APC (mentioned in the APC section above). What Andy Lester Did This Week The tireless Andy Lester brought a new patch of consting plus some stuff to embed.fnc and a couple of minor fixes. Vadim Konovalov had a small doubt about some of Andy's updates and Andy assured him that everything was fine. Contamplating Andy's work, Jim Cromie noticed what he thought was the way to share small bits of interface between core parts and asked about ideas for him to complete his work on arenas. Rafael applied Andy's patches and Jim's questions went on unanswered. http://xrl.us/i7zz Andy ruled that arguments of function in embed.fnc were a good idea, cleaned it up and added a check to ensure this in the future. He then noticed some pad funcs, which weren't called when DEBUGGING was off, were still getting compiled and changed that. And asked for some attention to make sure a few code changes he did wasn't on crack. Steve Peters reconciled Andy's patch with some recent changes and applied the changes. We need names http://xrl.us/i7z2 DEBUGGING code only when DEBUGGING http://xrl.us/i7z3 These changes look right? http://xrl.us/i7z4 stringification of v-string references Nicholas Clark noticed how v-strings were given different treatment on stringification of references. $ ./perl -Ilib -le 'print $_, " ", ref $_ foreach \v1, \\v1, [EMAIL PROTECTED], *STDOUT{IO}, qr/a/' SCALAR(0x8145f00) VSTRING REF(0x8145f30) REF ARRAY(0x8145f70) ARRAY IO::Handle=IO(0x8145b60) IO::Handle (?-xism:a) Regexp All other references stringify their name given by "sv_reftype". Nicholas asked if that was an intentional change and John Peacock told the story about how v-strings prior to 5.8.1 were evil and how the changes Nicholas found made v-strings into objects which act like scalars with a bit of magic inside. John then prepared a patch so that v-strings references now stringify according to the convention of everything else in Perl. Nicholas had already a patch to do this, besides some rearrangement and tidying up for a couple of things. $ ./perl -Ilib -le 'print $_, " ", ref $_ foreach \v1' VSTRING(0x8145f00) VSTRING http://xrl.us/i7z5 "podlators" 2.00 Russ Albery announced a new major release of "podlators", 2.00, which uses "Pod::Simple" rather than "Pod::Parser". Steve Peters added it to the core together with "Pod::Simple" itself and "Pod::Escapes". Steve observed that the new "Pod::Text" broke "Pod::Usage" and Russ Albery remembered to have submitted a patch to fix that a while ago. Steve applied Russ's patch to "Pod::Usage", even though things do not look perfect yet. http://xrl.us/i7z6 "Pod::Simple" Integration During "Pod::Simple" integration, Andreas Koenig noticed some issues with files from "Pod-Simple" distribution, worked out with Steve Peters. Craig Berry also found that "Pod::Simple" brought into the core directories with names like lib/Pod/Simple/t/other^test^lib which do not play well with the recommendations on filenames on perlport.pod and which cause trouble on VMS systems. Yves Orton pointed these caused some annoyances in Win32 as well. Yitzchak Scott-Thoennes reminded Porting/check83.pl checks for filenames portable enough to go in the perl distribution and showed the list of guilty parts where the script actually complains. I bet we'll see it fixed by the next week. Oops, next week is here and these are not issues anymore - but I am anticipating. http://xrl.us/i7z7 "alarm()" on Windows 2003 and Vista Jan Dubois noticed that the "alarm()" function isn't working on newer Windows (Windows 2003 64-bit and Windows Vista Beta 1 32-bit) and pointed the change in win32/win32.c that did the feat and opened it up for discussion. Nick Ing-Simmons, which wrote the original code and the change, entered the thread and he and Jan talked a lot about Windows programming tricks with events, while searching the simplest solution which fixed the problem without adding others. Nick even digged up a forgotten suggestion to change the code in question, which did not turn up to be a solution to the original problem. Jan envisioned an attempt to mix one of the Nick's ideas with some modifications to cope with additional complications, some Windows 2000 features and some nice improvements to current Perl handling of Windows message queue. Jan's report http://xrl.us/i7z8 From Nick's attic http://xrl.us/i7z9 switch Robin Houston had been quite busy this week advancing his idea on bringing the Perl 6 "switch" into Perl 5. He demonstrated how it was added with a new syntax enabled by a lexically-scoped pragma "use feature". Paul Johnson, David Nicol and Damian Conway contributed with comments. Maybe soon we'll see Robin's addition to standard Perl which is indeed a general mechanism for extending syntax and semantics of Perl programs. use feature "switch"; http://xrl.us/i72a What John E. Malmberg Did This Week * Patching lib/File/Spec/VMS.pm * John E. Malmberg went on with his work on the VMS front, paving the way for a more capable Perl on newer OpenVMS systems. John brought a patch to lib/File/Spec/VMS.pm to fix bugs in "abs2rel()" and "canonpath()" when handling the exquisite VMS paths like '[t1.t2.t3]file'. John remembered there is a lot to do yet for handling the OpenVMS file specifications. Ken Williams applied the patch and prodded John for tests to exercise the dead bugs. John noticed the tests were already included by someone else, which forced him to propose these fixes so that tests succeed again and let him go on with dealing with a bunch of unresolved issues with VAX legacy, support for Unix formats and ODS-5 features, and other scary things. http://xrl.us/i72b *Commands with Embedded New Lines* John questioned if there was a reason to truncate commands with embedded new lines (as done in vms/vms.c) and pointed that some tests on VMS succeed or improve if truncation is not done. OpenVMS will pass all non-null binary data though to the program without DCL interpreter processing. To Craig A. Berry, it looks probable that older versions of DCL would choke on newlines. http://xrl.us/i72c *Towards Long Filenames* John announced a code shakeup to remove the characteristic limitation of VMS filenames to 256 characters. Craig Berry listened, applied the changes and suggested some of the next actions towards the complete handling of long filenames on VMS http://xrl.us/i72d Perl5 Bug Summary Perl RT had a count of 1515 open tickets at Dec 12 2005 14:00 GMT. Robert Spier's summary http://xrl.us/i72e Perl RT just now http://rt.perl.org/rt3/NoAuth/perl5/Overview.html In Brief A While Back in the Last Summary there was a confusion about the %m format (which "Sys::Syslog::syslog()" replaces with the contents of $!) and %n (a special conversion of Perl "sprintf"), spotted by Ronald J. Kimball. Please consider it patched, "s/%n/%m/g". http://xrl.us/i72f *False Matches with Bad utf-8* Ralph Bolton opened RT ticket #37836 to tell about a very simple regex run on specific data causing a SEGV. Dave Mitchell immediately trimmed down the problem to the piece of code below. my $s = "\xa2\xf8"; open F, "<:utf8", \$s; while(<F>) { s/[\000]+//g; # Causes a SEGV } Nicholas Clark found that feeding in malformed uft8 was producing a bad length of -1 on a call to "memmove". Sadahiro Tomoyuki observed regexec.c (falsely) matched "[\000]" with malformed utf-8 and proposed a tiny patch to fix that, which was applied and the ticket closed. http://xrl.us/i72g *Bye to Autovivification Bug* Steve Peters revisited RT ticket #8409 about an autovivification bug that made some expressions to succeed when errors like "Modification of a read-only value attempted" should be expected. Steve confirmed all of the reported troublesome expressions produce consistent errors since 5.8.6. http://xrl.us/i72h * $Data::Dumper::Sortkeys *déjà vu* * Jerry Hebert rediscovered the trouble with "Data::Dumper::Sortkeys" causing "each()" failures which was already fixed in 5.8.8 codebase (change #25308) as reported by Paul Johnson and Yitzchak Scott-Thoennes. Yitzchak also pointed the current workaround of using a void-context "keys %hash" after dumping. http://xrl.us/i72i *the 'syntax error during sub, use or no' problem* In bug #37864, Brian Hirt showed up a syntax error that causes perl to crash. Paul Johnson pointed the issue was already fixed in bleadperl (since 5.9.2), and Dave Mitchell identified the bug as an instance of the standard 'syntax error during sub, use or no' problem, which required a fix in bleed too complex to be comfortably packported to 5.8.x. http://xrl.us/i72j *Improving *ithreads* clone time* Nicholas Clark noticed ithreads clone time is less than desirable. The clone code uses a custom hash table to keep track of copied parts and it seems the used hash function is lousy. So Nicholas proposed the task to find a better one and immediately did the first experiment with the regular perl hash function, posting stats and patches for others to try out. http://xrl.us/i72k * "timelocal" not reverse of "localtime" * Gisle Aas reported a failure on Windows XP when testing the behavior of "timelocal" as the reverse of "localtime" on a certain time zone and summer time adjustment. Steve Hay had something to add to the corresponding CPAN ticket #12068 ("libwww-perl") and Dave Rolsky noticed the problem can reproduced on Linux boxes as well. Dave also detected the problematic code in "Time::Local", posted a fix that worked for Gisle and a new release of "Time::Local" should be released in no time. The CPAN ticket for libwww-perl http://rt.cpan.org/Ticket/Display.html?id=12068 Gisle seeks the solution http://xrl.us/i72m * setting $SIG{ZERO} coredumps * In bug #37869, Yitzchak Scott-Thoennes reported how setting $SIG{ZERO} coredumps in perl 5.8.7. $ perl -e'$SIG{ZERO}=sub{}' Segmentation fault (core dumped) Andreas Koenig informed the SEGV came to blead with #18975 and went with #24406 and Steve Peters noticed it has been integrated to maint as well. http://xrl.us/i72n * "Term::ReadKey", Solaris, gcc * Jonathan Stowe, author of "Term::ReadKey", forwarded to the list a CPAN RT ticket where a user complained about trouble building "Term::ReadKey" on Solaris 10. Jonathan explained "Term::ReadKey" would not work unless the module has access to the same shared C runtime library objects as Perl do, a problem common to all modules with XS components. Yitzchak Scott-Thoennes remembered that building add-on modules for perl shipped with Solaris requires the CPAN modules "Solaris::PerlGcc". http://xrl.us/i72o *Coping with False Alarms* Jim Shi opened RT ticket #37855 to tell about what he thought to be an odd behavior from a simple Perl script and was taught by Ronald J. Kimball, Paul Johnson and chromatic to always turn warnings on, to read docs like perldata.pod and to not abuse prototypes and "&" sigils when none is necessary. http://xrl.us/i72p About this summary It rained while this summary was written (in fact, it rained during the last two or three weeks which is rather unusual at our sunny weather). But I am digressing, this is definitely not Monday and even so here's another p5p summary to your delight, written by Adriano Ferreira. Information concerning bugs referenced in this summary (as #nnnnn) may be viewed at http://rt.perl.org/rt3/Ticket/Display.html?id=nnnnn Information concerning patches to maint or blead referenced in this summary (as #nnnnn) may be viewed at http://public.activestate.com/cgi-bin/perlbrowse?patch=nnnnn Weekly summaries are published on http://use.perl.org/ and posted on a mailing list, (subscription: [EMAIL PROTECTED]). The archive is at http://dev.perl.org/perl5/list-summaries/. Corrections and comments are welcome. If you found this summary useful or enjoyable, please consider contributing to the Perl Foundation to help support the development of Perl.