This Week on perl5-porters - 25-31 May 2008

grinder on 2008-06-05T20:54:00

This Week on perl5-porters - 25-31 May 2008

"I've fixed the bug itself as change #33952. (Whoo hoo! A bug that was easy to locate, fix, and test for. You don't see that very often :-)" -- Dave Mitchell, happy man.

Topics of Interest

File::Path::mkpath() incompatibility in perl-5.10

David Landgren replied to Jan Dubois on the subject of inodes on Win32. perlport says the second value in the return list from stat is always 0, and this throws off the code that detects race conditions. As such, there's no way to determine if an attacker is manipulating the filesystem for some nefarious purpose while a long-running rmtree() call is running.

As it turns out, Windows filesystems may be intrinsically immune to the attack, since you cannot move (or remove) a directory if any process whatsoever has set their current working directory to it, or any directory underneath it.

  different strokes for different folks
  http://xrl.us/bmj52 

Data::Dumper patch

Earlier this month, Rafaël Garcia-Suarez applied a patch from Alexandr Ciornii to get the bleading Data::Dumper to compile on older perls. Dave Mitchell wondered whether C compilers understood Perl comments. If not, this may mean that the patch needs patching.

  slash that hash
  http://xrl.us/bmj56 

Change 30608 (17 March 2007)

Bram looked at change #30608, which involved commenting out a study operation in op/taint.t. This results in the tests not really testing what they set out to test.

He asked if anyone could recall why the line was commented out. No takers, but I wonder if it has something to do with Yves Orton discovering and UTF-8 and study studiously ignored each other in the regexp engine.

  http://xrl.us/bmj58 

Consistent use of honor (instead of honour)

The British speller in me hates this idea.

  but consistency has a lot going for it
  http://xrl.us/bmj6a 

Module::Build changes for VMS

John E. Malmberg revived the stranded changes for Module::Build that were put aside in the lead up to 5.10.0. Essentially a number of Unixisms needed to be excised from the code.

Craig A. Berry went through the changes with a fine-toothed comb and picked up a number of glitches that needed work. John revised his work and then had a patch ready for consideration by Ken Williams.

Craig found it hard to reconcile blead's Module::Build with Ken's own repository. Ken found himself regretting Perforce's ability to track the integration of patches. The plan at the end of the week was to attack Ken's repository directly, and then dump something from that back into blead.

John also figured out what was going wrong with Archive::Tar creating an unopenable archive on VMS, which would have them within an inch of having Module::Build build and test perfectly on VMS.

  tales of the reconstruction
  http://xrl.us/bmj6c 

John detailed the Archive::Tar issue with VMS regarding Module/Build/t/ppm.t in more detail in another thread. The problem boils down to the different ways (stream and record oriented) that one may employ to read a file on VMS. After this is fixed all that will be needed is to mark VMS as having case-insensitive file names.

  http://xrl.us/bmj6e 

Confused about close STDIN

Bram was looking over an old bug report and trying to understand what happens when one closes STDIN, and wondered if the documentation for close needed improvement.

Mark Mielke explained the difference between file descriptor 0 and the STDIN file handle, which, through an extraordinary coincidence of fate are usually the same, but sometimes aren't.

In which case, the documentation about STDIN needs to be worked on, rather than close.

  closer
  http://xrl.us/bmj6g 

ext/POISX/t/sigaction.t failing under harness

(And the rest of the title of the thread is "...but not under test (and not failing with threads under harness)"). Bram spent some time working to reduce the problem down to the tiniest test case possible, and in getting down to about five lines of real code, succeeded.

When he asked if anyone had an explanation for what was happening, however, he met with less success.

  http://xrl.us/bmj6i 


TODO of the week

Something for a person with basic Perl skills.

Profile installman

The installman script is slow. All it is doing text processing, which we're told is something Perl is good at. So it would be nice to know what it is doing that is taking so much CPU, and where possible address it.

(And there's a hot new profiler in town, Devel::NYTProf).


Patches of Interest

Testing $/ with in memory files

Back in April, Bram had added some new regression tests for bug #44833, that had itself been resolved many moons ago. At the time, Rafaël applied them. Early in May, Ben Morrow suggested that Bram's technique was not very cross-platform compatible, relying as it did on a specific environment variable that specific Unix shells leave behind. At the same time, Ben suggested a better internal-to-Perl condition, so Bram rewrote the test to use that.

This week Bram pinged the list since the change still hadn't been committed.

  http://xrl.us/bmj6k 

Recent lib.pm change imposes dual-life

Steffen Mïller was keen to see an updated lib.pm make it out to CPAN, since that would allow him to upgrade older perl installations. This in turn would stop use lib 'foo.par' from issuing a useless warning.

He tracked down Tim Bunce, who was listed as the current author. Tim pleaded amnesia. Steffen took over maintenance, and posted a few tweaks that would allow him to ready the module for a CPAN release. Rafaël tweaked the license section to make it friendlier to license lawyers.

  lib liberation front
  http://xrl.us/bmj6n 


Watching the smoke signals

Smoke [5.11.0] 33949 FAIL(F) MSWin32 WinXP/.Net SP3 (x86/2 cpu)

Craig Berry glanced at one of Steve Hay's regular reports of smoke failures to the list, and suggested he try one of Craig's own tweaks to fix a failure that he had seen appearing on VMS.


  preserving bits with File::Copy
  http://xrl.us/bmj6p 


New and old bugs from RT

Document behaviour when optional match does not match (#3589)

Reini Urban wrote a patch for perlre in an attempt to resolve an eight year old bug report from Hugo van der Sanden, in which he was misled by the documentation (or rather, its ambiguity) to think that

  "babadad" =~ /^((.)?a\2)+$/

should succeed. Other porters explained the reasoning behind the observed behaviour, and it was agreed that the documentation needed to clarify this issue.

And so it came to pass that Reini added a paragraph to perlre to do just that. Bram considered the explanation without looking at the bug report, and admitted that he didn't have a clue as to what it meant.

  needs work
  http://xrl.us/bmj6r 

\n after $ in regex (was: Strange regex failure?) (#35877)

As Bram continued his culling of RT issues, he came across the issue of qq[>10\n] =~ />\d+$ \n/ix failing, where the original ticket author thought it should succeed.

As it turns out, on 5.10 and beyond, it does in fact succeed. But then Bram thought it might be worthwhile checking what happens when one omits the /x modifier, and was surprised to see that it failed, along with four other variations on a theme.

Zefram explained that this was to be expected, since the lack of spaces meant that "dollar something" turned into a real Perl scalar that contained something completely different, thus causing the match to fail.

  meta dollar
  http://xrl.us/bmj6t 

sub foo(@$) {} should generate an error (#36673)

Renée Bäcker thought that a prototyped function that has no body should be an error. Rafaël thought so too, but said that he needed to think about the ramifications a bit more. In the meantime, Renée revised the path.

  http://xrl.us/bmj6v 

Certain string handling functions don't warn on undef (#36875)

Now that uc, lc and the like warn if asked to operate on undef, Bram completed the picture by making reverse undef warn as well.


  http://xrl.us/bmj6x 

Threads + require IO causes segmentation fault (#37076)

Bram reported that this bug does not manifest itself on 5.8.9-tobe, nor on 5.10 and beyond. He concluded that the bug had likely been fixed, but asked for people on other platforms to take the test script for a spin.

  reflexions in a threaded perl
  http://xrl.us/bmj6z 

Back reference problem with quantified groups (#38133)

Bram supplied a TODO test for this problem, which was still waiting to be applied at the end of the week.

  http://xrl.us/bmj63 

Fix bit-fields for VC (GIMME_Vbroken with 5.10.0/GCC and XS?) (#50386)

Dave Mitchell asked if the patch that resolved this bug was safe for 5.10.1, but Jan Dubois admitted that it wasn't binary compatible. But it's not that bad, just a bit of bloat.

  http://xrl.us/bmj65 

Prototypes sneakily break :lvalue subs (#51408)

Rafaël Garcia-Suarez wondered if this problem could be solved through some judicious tweaking of ENTERSUB flags.

  http://xrl.us/bmj67 

Doubled <meta http-equiv> header (#51542)

Renée supplied a patch to fix the two code paths in CGI.pm which could lead to <meta http-equiv> headers being emitted twice.

  http://xrl.us/bmj69 

Trying to build perl5.8.3 under Maemo environment. (#53328)

After much to'ing and fro'ing, Bram managed to get Devendra Purbiya up and running. A symbolic link for pwd did the trick.

  http://xrl.us/bmj7b 

Bug with index() matching beyond end of string when \0 bytes (00000000) are involved (#53746)

Once he saw the TODO test, Dave Mitchell realised that there was a really simple fix for the bug.

  so he fixed it
  http://xrl.us/bmj7d 

usethread=no Configure compiler test file try.c is missing. (#54042)

H.Merijn Brand was puzzled as to why Reini Urban had only recently begun (for some definition of recent) to encounter this error, since the code in question has been touched in over a year. Andy Dougherty suspected that something must have changed in Reini's setup, to trigger a walk down a previously unvisited codepath.

Reini concurred, saying that an upgrade to cygwin2.dll could have changed the result from a fflush(NULL) call, which is what tripped up Configure.

  all fixed
  http://xrl.us/bmj7f 

Double free or corruption using threads and goto (#54756)

Luis Lencina reported this problem on 5.8.8, but Dave Mitchell was unable to reproduce it on 5.10 and beyond.

  a good reason to upgrade
  http://xrl.us/bmj7h 

Perl 5.10 memory corruption (#54758)

George Greer reported a problem with in-place sorts on 5.10. Rafaël tried to diagnose the problem, and Moritz Lenz tried to bisect the error to determine what patch caused the error. But while they were trying to work things out, Dave Mitchell strolled by and tweaked a couple of spots in pp_sort.c.

George was happy to report that Dave's patch corrected his cut-down test, as well as the real-life code from whence the problem came.

  wrap it up as a test
  http://xrl.us/bmkmo 

perlio.c has a problem (both 5.8 and 5.10) (#54828)

Goro Fuji reported an issue with PerlIORaw_pushed() and offered a patch to fix things up. Rafaël Garcia-Suarez agreed with the reasoning and applied one part of the patch. For the second part, he deferred to people with more experience with Windows, since he wasn't sure why it was needed.

  http://xrl.us/bmj7j 

Perl 5.10 segmentation fault using Net::SSH2::Channel (#54908)

Sebastien Rodriguez suffered segmentation faults with 5.10 when trying to use this module. Steve Peters built the module, and was alarmed by the number of compiler warnings it emitted. He also saw it fail an assertion.

Ævar Arnfjörð Bjarmason traced the problem down to the fact that it used the PV slot of a GV to store a pointer to a custom data structure, which reminded him of Math::Pari (another module that gave the porters grief a few weeks back).

On IRC, the concensus was that it would be very difficult to tweak the core to play nicely with the module, so the module will just have to adapt. What is more, despite the extensive test campaign that the porters conducted, it turns out that the test suite itself was hopelessly inadequate, since it passed, and yet the most basic real usage failed.

Which also meant that not a single person had tried 5.9.x with the module in the months leading up to 5.10.

  so when we say test, TEST!
  http://xrl.us/bmj7m 

IO on active pipes fails after ithread fork in 5.8.8 (#54926)

John Heidemann wrote about a simple program that performs differently depending on how it is run:

  cat data | prog
  # or
  prog <data

Specifically, according to strace, the internals perform an lseek after spinning off a new thread, and this appears to fail in the first example.

  that's not supposed to happen
  http://xrl.us/bmj7o 

Attempt to free unreferenced scalar fiddling with the symbol table (#54934)

Niko Tyni showed a tiny program that demonstrated a larger problem that occurs when one tries to blow away a dynamically created package. I give him bonus points for taking the time to bisect the change log and isolate the offending patch.

Armed with that information, Rafaël Garcia-Suarez was able to supply a patch that fixed up the problem, but he had a sneaking feeling that it might cause a memory leak. Alex Vandiver was pretty pleased, since a corollary of the bug fix was that SVK no longer segfaults on 5.10 and blead.

  heads up for 5.10.1
  http://xrl.us/bmj7q 

Building 5.6.2 Fails with -Duseshrplib on Leopard (#54952)

David Wheeler had problems with a build of 5.6.2, and despite its exceptional old age, a number of porters spent a surprising amount of time trying to figure out why it had stopped working and what one might to be able to do in order to get it working again.


  it's dead Jim
  http://xrl.us/bmj7u 

Crash on binary-or lvalue operation on qr// (#54956)

Steve Peters delved further into this problem and discovered that &= fails in the same way (which means ^= is probably a likely bet too) and any sort of reference to a non-numeric scalar would suffice.

He graciously stepped aside to wait in case anyone felt like jumping in and fixing it. He can dream, right?

  no, after you
  http://xrl.us/bmj7w 

Strange map {} behavior when returning two values (#54974)

David Wheeler was bitten by the tokeniser choosing between a code block and an anonymous hash and taking the wrong decision. The disambiguation involves using a leading semi-colon or parentheses. Debate raged as to what would be clearest to a maintenance programmer of little brain.


  http://xrl.us/bmj7y 

Initial make failing, but don't know why (#55008)

Steve Michel was mystified by a build failing. Andy Dougherty was quite puzzled as well, but thought some of the configure switches seemed a little unusual. Jim Cromie pinged the list about his patch from last year that would outlaw unrecognised switches.

  http://xrl.us/bmj72 

Problem with porting perl on Armel (#55038)

Devendra Purbiya continued to have build troubles, this time on an ARM platform. All sorts of weird failures were encountered. Bram patiently walked Devendra through a series of steps to try and get to the bottom of the issues.

  http://xrl.us/bmj74 

Debugger loops infinitely with __DIE__ and DESTROY (#55084)

Peter Scott showed a nifty technique to give the debugger a bad case of indigestion, and traced the problem all the way back to 5.004.

  time to die
  http://xrl.us/bmj76 

Perl5 Bug Summary

Hey, we cracked he 1600 barrier!

  280 new + 1309 open = 1589 (+12 -54)
  http://xrl.us/bmj78
  http://rt.perl.org/rt3/NoAuth/perl5/Overview.html 


New Core Modules

Thread::Queue 2.09

Jerry D. Hedden pushed a new version out that deals more gracefully with older perls.

  http://xrl.us/bmj8a 


In Brief

Andreas König filed bug #54776 concerning a failure with Archive::Extract on 5.10.1-tobe, and then later reported that change #33470 corrected the problem.

  http://xrl.us/bmj8c 

Renée Bäcker found some tickets in RT that had patches ready for the picking, as well as some more that could be closed.

  low hanging fruit
  http://xrl.us/bmj8e 

Renée also supplied documentation for attributes.pm to render it less recursive and incomplete (bug #36516)

  http://xrl.us/bmj8g 

H.Merijn Brand found some warnings in a Unicode test environment when dealing with Module::Build.

  nasty unexpected non-continuation bytes, we hates them
  http://xrl.us/bmj8i 

Steve Peters added some more -fstack-protector goodness. (bug #54120)

  http://xrl.us/bmj8k 

H.Merijn Brand issued a ping for Math::Complex regarding smoke failures on HP-UX. Since maintenance is currently in a state of flux, somewhere between Jarkko Hietaniemi and Zefram, the message went adrift.

  http://xrl.us/bmj8v 

Andy Dougherty and Craig Berry managed to propagate new i_gdbm*ndbm variables somewhere in the depths of Configure.

  http://xrl.us/bmj8x 

Last week's summary

I think these must have got wedged in a moderator queue somewhere.

  This Week on perl5-porters - 11-17 May 2008
  http://xrl.us/bmj8z 
  This Week on perl5-porters - 18-24 May 2008
  http://xrl.us/bmj83 

About this summary

This summary was written by David Landgren.

Weekly summaries are published on http://use.perl.org/ and posted on a mailing list, (subscription: perl5-summary-subscribe@perl.org ). The archive is at http://dev.perl.org/perl5/list-summaries/ . Corrections and comments are welcome.

If you found this summary useful, please consider contributing to the Perl Foundation or attending a YAPC to help support the development of Perl.