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.