From 5a52a7761eddaf8f83e7e8be27132df24d1196a9 Mon Sep 17 00:00:00 2001 From: Roman I Khimov Date: Mon, 20 Sep 2010 16:22:21 +0400 Subject: [PATCH] perl 5.10.1: update patches to Debian's 5.10.1-14 * Debian's source package changed its format in 5.10.1-10, so we can't just apply one patch as it was with initial 5.10.1 release. * fixes CVE-2010-1974 * fixes MD5 on ARM * fixes several other bugs (see changelog from http://packages.debian.org/source/sid/perl) Signed-off-by: Roman I Khimov --- .../perl/perl-5.10.1/abstract-sockets.diff | 122 ++ .../perl/perl-5.10.1/anon-tmpfile-dir.diff | 102 ++ .../archive-tar-instance-error.diff | 109 ++ recipes/perl/perl-5.10.1/arm-alignment.diff | 39 + .../arm_thread_stress_timeout.diff | 23 + recipes/perl/perl-5.10.1/assorted_docs.diff | 25 + recipes/perl/perl-5.10.1/autodie-flock.diff | 98 ++ .../perl/perl-5.10.1/cpan_config_path.diff | 22 + .../perl/perl-5.10.1/cpan_definstalldirs.diff | 35 + .../perl-5.10.1/cpanplus_config_path.diff | 43 + .../perl-5.10.1/cpanplus_definstalldirs.diff | 52 + .../crash-on-undefined-destroy.diff | 58 + recipes/perl/perl-5.10.1/db_file_ver.diff | 32 + .../perl-5.10.1/devel-ppport-ia64-optim.diff | 32 + .../perl-5.10.1/disable-zlib-bundling.diff | 29 + recipes/perl/perl-5.10.1/doc_info.diff | 55 + recipes/perl/perl-5.10.1/enc2xs_inc.diff | 49 + recipes/perl/perl-5.10.1/errno_ver.diff | 32 + recipes/perl/perl-5.10.1/extutils_hacks.diff | 313 ++++ recipes/perl/perl-5.10.1/fakeroot.diff | 43 + recipes/perl/perl-5.10.1/fcgi-test.diff | 31 + .../perl/perl-5.10.1/format-write-crash.diff | 1255 +++++++++++++++++ .../perl/perl-5.10.1/hppa-thread-eagain.diff | 72 + recipes/perl/perl-5.10.1/hurd-ccflags.diff | 26 + recipes/perl/perl-5.10.1/hurd_cppsymbols.diff | 25 + recipes/perl/perl-5.10.1/instmodsh_doc.diff | 26 + .../perl-5.10.1/kfreebsd-filecopy-pipes.diff | 68 + .../perl/perl-5.10.1/kfreebsd_cppsymbols.diff | 28 + recipes/perl/perl-5.10.1/ld_run_path.diff | 23 + .../perl/perl-5.10.1/libnet_config_path.diff | 35 + .../perl/perl-5.10.1/m68k_thread_stress.diff | 43 + recipes/perl/perl-5.10.1/mod_paths.diff | 117 ++ .../module_build_man_extensions.diff | 31 + recipes/perl/perl-5.10.1/net_smtp_docs.diff | 23 + .../perl/perl-5.10.1/perl_5.10.1-8.diff.gz | Bin 100662 -> 0 bytes recipes/perl/perl-5.10.1/perl_synopsis.diff | 96 ++ recipes/perl/perl-5.10.1/perlivp.diff | 38 + .../perl-5.10.1/pod2man-index-backslash.diff | 54 + recipes/perl/perl-5.10.1/positive-gpos.diff | 36 + recipes/perl/perl-5.10.1/processPL.diff | 43 + recipes/perl/perl-5.10.1/prune_libs.diff | 36 + recipes/perl/perl-5.10.1/safe-upgrade.diff | 836 +++++++++++ recipes/perl/perl-5.10.1/tainted-errno.diff | 85 ++ recipes/perl/perl-5.10.1/tell-crash.diff | 33 + .../perl/perl-5.10.1/trie-logic-match.diff | 111 ++ recipes/perl/perl-5.10.1/use_gdbm.diff | 39 + recipes/perl/perl_5.10.1.bb | 49 +- 47 files changed, 4570 insertions(+), 2 deletions(-) create mode 100644 recipes/perl/perl-5.10.1/abstract-sockets.diff create mode 100644 recipes/perl/perl-5.10.1/anon-tmpfile-dir.diff create mode 100644 recipes/perl/perl-5.10.1/archive-tar-instance-error.diff create mode 100644 recipes/perl/perl-5.10.1/arm-alignment.diff create mode 100644 recipes/perl/perl-5.10.1/arm_thread_stress_timeout.diff create mode 100644 recipes/perl/perl-5.10.1/assorted_docs.diff create mode 100644 recipes/perl/perl-5.10.1/autodie-flock.diff create mode 100644 recipes/perl/perl-5.10.1/cpan_config_path.diff create mode 100644 recipes/perl/perl-5.10.1/cpan_definstalldirs.diff create mode 100644 recipes/perl/perl-5.10.1/cpanplus_config_path.diff create mode 100644 recipes/perl/perl-5.10.1/cpanplus_definstalldirs.diff create mode 100644 recipes/perl/perl-5.10.1/crash-on-undefined-destroy.diff create mode 100644 recipes/perl/perl-5.10.1/db_file_ver.diff create mode 100644 recipes/perl/perl-5.10.1/devel-ppport-ia64-optim.diff create mode 100644 recipes/perl/perl-5.10.1/disable-zlib-bundling.diff create mode 100644 recipes/perl/perl-5.10.1/doc_info.diff create mode 100644 recipes/perl/perl-5.10.1/enc2xs_inc.diff create mode 100644 recipes/perl/perl-5.10.1/errno_ver.diff create mode 100644 recipes/perl/perl-5.10.1/extutils_hacks.diff create mode 100644 recipes/perl/perl-5.10.1/fakeroot.diff create mode 100644 recipes/perl/perl-5.10.1/fcgi-test.diff create mode 100644 recipes/perl/perl-5.10.1/format-write-crash.diff create mode 100644 recipes/perl/perl-5.10.1/hppa-thread-eagain.diff create mode 100644 recipes/perl/perl-5.10.1/hurd-ccflags.diff create mode 100644 recipes/perl/perl-5.10.1/hurd_cppsymbols.diff create mode 100644 recipes/perl/perl-5.10.1/instmodsh_doc.diff create mode 100644 recipes/perl/perl-5.10.1/kfreebsd-filecopy-pipes.diff create mode 100644 recipes/perl/perl-5.10.1/kfreebsd_cppsymbols.diff create mode 100644 recipes/perl/perl-5.10.1/ld_run_path.diff create mode 100644 recipes/perl/perl-5.10.1/libnet_config_path.diff create mode 100644 recipes/perl/perl-5.10.1/m68k_thread_stress.diff create mode 100644 recipes/perl/perl-5.10.1/mod_paths.diff create mode 100644 recipes/perl/perl-5.10.1/module_build_man_extensions.diff create mode 100644 recipes/perl/perl-5.10.1/net_smtp_docs.diff delete mode 100644 recipes/perl/perl-5.10.1/perl_5.10.1-8.diff.gz create mode 100644 recipes/perl/perl-5.10.1/perl_synopsis.diff create mode 100644 recipes/perl/perl-5.10.1/perlivp.diff create mode 100644 recipes/perl/perl-5.10.1/pod2man-index-backslash.diff create mode 100644 recipes/perl/perl-5.10.1/positive-gpos.diff create mode 100644 recipes/perl/perl-5.10.1/processPL.diff create mode 100644 recipes/perl/perl-5.10.1/prune_libs.diff create mode 100644 recipes/perl/perl-5.10.1/safe-upgrade.diff create mode 100644 recipes/perl/perl-5.10.1/tainted-errno.diff create mode 100644 recipes/perl/perl-5.10.1/tell-crash.diff create mode 100644 recipes/perl/perl-5.10.1/trie-logic-match.diff create mode 100644 recipes/perl/perl-5.10.1/use_gdbm.diff diff --git a/recipes/perl/perl-5.10.1/abstract-sockets.diff b/recipes/perl/perl-5.10.1/abstract-sockets.diff new file mode 100644 index 0000000000..954f9cbb3f --- /dev/null +++ b/recipes/perl/perl-5.10.1/abstract-sockets.diff @@ -0,0 +1,122 @@ +Author: Lubomir Rintel +Subject: Add support for Abstract namespace sockets. +Bug-Debian: http://bugs.debian.org/490660 +Bug-Debian: http://bugs.debian.org/329291 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/99f13d4c3419e967e95c5ac6a3af61e9bb0fd3c0 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/89904c08923161afd23c629d5c2c7472a09c16bb + +trivially backported for 5.10.1 by Niko Tyni + + +--- + ext/Socket/Socket.xs | 33 ++++++++++++++++++++++++--------- + ext/Socket/t/Socket.t | 14 ++++++++++++-- + 2 files changed, 36 insertions(+), 11 deletions(-) + +diff --git a/ext/Socket/Socket.xs b/ext/Socket/Socket.xs +index 076297f..3522303 100644 +--- a/ext/Socket/Socket.xs ++++ b/ext/Socket/Socket.xs +@@ -303,6 +303,7 @@ pack_sockaddr_un(pathname) + struct sockaddr_un sun_ad; /* fear using sun */ + STRLEN len; + char * pathname_pv; ++ int addr_len; + + Zero( &sun_ad, sizeof sun_ad, char ); + sun_ad.sun_family = AF_UNIX; +@@ -336,7 +337,17 @@ pack_sockaddr_un(pathname) + Copy( pathname_pv, sun_ad.sun_path, len, char ); + # endif + if (0) not_here("dummy"); +- ST(0) = sv_2mortal(newSVpvn((char *)&sun_ad, sizeof sun_ad)); ++ if (len > 1 && sun_ad.sun_path[0] == '\0') { ++ /* Linux-style abstract-namespace socket. ++ * The name is not a file name, but an array of arbitrary ++ * character, starting with \0 and possibly including \0s, ++ * therefore the length of the structure must denote the ++ * end of that character array */ ++ addr_len = (void *)&sun_ad.sun_path - (void *)&sun_ad + len; ++ } else { ++ addr_len = sizeof sun_ad; ++ } ++ ST(0) = sv_2mortal(newSVpvn((char *)&sun_ad, addr_len)); + #else + ST(0) = (SV *) not_here("pack_sockaddr_un"); + #endif +@@ -352,7 +363,7 @@ unpack_sockaddr_un(sun_sv) + struct sockaddr_un addr; + STRLEN sockaddrlen; + char * sun_ad = SvPVbyte(sun_sv,sockaddrlen); +- char * e; ++ int addr_len; + # ifndef __linux__ + /* On Linux sockaddrlen on sockets returned by accept, recvfrom, + getpeername and getsockname is not equal to sizeof(addr). */ +@@ -371,13 +382,17 @@ unpack_sockaddr_un(sun_sv) + addr.sun_family, + AF_UNIX); + } +- e = (char*)addr.sun_path; +- /* On Linux, the name of abstract unix domain sockets begins +- * with a '\0', so allow this. */ +- while ((*e || (e == addr.sun_path && e[1] && sockaddrlen > 1)) +- && e < (char*)addr.sun_path + sizeof addr.sun_path) +- ++e; +- ST(0) = sv_2mortal(newSVpvn(addr.sun_path, e - (char*)addr.sun_path)); ++ ++ if (addr.sun_path[0] == '\0') { ++ /* Linux-style abstract socket address begins with a nul ++ * and can contain nuls. */ ++ addr_len = (void *)&addr - (void *)&addr.sun_path + sockaddrlen; ++ } else { ++ for (addr_len = 0; addr.sun_path[addr_len] ++ && addr_len < sizeof addr.sun_path; addr_len++); ++ } ++ ++ ST(0) = sv_2mortal(newSVpvn(addr.sun_path, addr_len)); + #else + ST(0) = (SV *) not_here("unpack_sockaddr_un"); + #endif +diff --git a/ext/Socket/t/Socket.t b/ext/Socket/t/Socket.t +index f707999..d1e7447 100755 +--- a/ext/Socket/t/Socket.t ++++ b/ext/Socket/t/Socket.t +@@ -14,7 +14,7 @@ BEGIN { + + use Socket qw(:all); + +-print "1..17\n"; ++print "1..18\n"; + + $has_echo = $^O ne 'MSWin32'; + $alarmed = 0; +@@ -152,7 +152,7 @@ print (($@ =~ /^Bad arg length for Socket::sockaddr_family, length is 0, should + + if ($^O eq 'linux') { + # see if we can handle abstract sockets +- my $test_abstract_socket = chr(0) . '/tmp/test-perl-socket'; ++ my $test_abstract_socket = chr(0) . '/org/perl/hello'. chr(0) . 'world'; + my $addr = sockaddr_un ($test_abstract_socket); + my ($path) = sockaddr_un ($addr); + if ($test_abstract_socket eq $path) { +@@ -163,7 +163,17 @@ if ($^O eq 'linux') { + print "# got <$path>\n"; + print "not ok 17\n"; + } ++ ++ # see if we calculate the address structure length correctly ++ if (length ($test_abstract_socket) + 2 == length $addr) { ++ print "ok 18\n"; ++ } else { ++ print "# got ".(length $addr)."\n"; ++ print "not ok 18\n"; ++ } ++ + } else { + # doesn't have abstract socket support + print "ok 17 - skipped on this platform\n"; ++ print "ok 18 - skipped on this platform\n"; + } +-- +tg: (daf8b46..) fixes/abstract-sockets (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/anon-tmpfile-dir.diff b/recipes/perl/perl-5.10.1/anon-tmpfile-dir.diff new file mode 100644 index 0000000000..a010a6ac9a --- /dev/null +++ b/recipes/perl/perl-5.10.1/anon-tmpfile-dir.diff @@ -0,0 +1,102 @@ +From: Niko Tyni +Subject: Honor TMPDIR when open()ing an anonymous temporary file +Bug-Debian: http://bugs.debian.org/528544 +Bug: http://rt.perl.org/rt3/Public/Bug/Display.html?id=66452 + +[perl #66452] + +As reported by Norbert Buchmuller , opening an anonymous +temporary file with the magical open($fh, '+>', undef) ignores TMPDIR. + + +--- + perlio.c | 20 ++++++++++++++++---- + t/io/perlio.t | 15 ++++++++++++++- + 2 files changed, 30 insertions(+), 5 deletions(-) + +diff --git a/perlio.c b/perlio.c +index 3803247..3ce579f 100644 +--- a/perlio.c ++++ b/perlio.c +@@ -5167,18 +5167,30 @@ PerlIO_tmpfile(void) + f = PerlIO_fdopen(fd, "w+b"); + #else /* WIN32 */ + # if defined(HAS_MKSTEMP) && ! defined(VMS) && ! defined(OS2) +- SV * const sv = newSVpvs("/tmp/PerlIO_XXXXXX"); ++ int fd = -1; ++ char tempname[] = "/tmp/PerlIO_XXXXXX"; ++ const char * const tmpdir = PL_tainting ? NULL : PerlEnv_getenv("TMPDIR"); ++ SV * const sv = tmpdir && *tmpdir ? newSVpv(tmpdir, 0) : NULL; + /* + * I have no idea how portable mkstemp() is ... NI-S + */ +- const int fd = mkstemp(SvPVX(sv)); ++ if (sv) { ++ /* if TMPDIR is set and not empty, we try that first */ ++ sv_catpv(sv, tempname + 4); ++ fd = mkstemp(SvPVX(sv)); ++ } ++ if (fd < 0) { ++ /* else we try /tmp */ ++ fd = mkstemp(tempname); ++ } + if (fd >= 0) { + f = PerlIO_fdopen(fd, "w+"); + if (f) + PerlIOBase(f)->flags |= PERLIO_F_TEMP; +- PerlLIO_unlink(SvPVX_const(sv)); ++ PerlLIO_unlink(sv ? SvPVX_const(sv) : tempname); + } +- SvREFCNT_dec(sv); ++ if (sv) ++ SvREFCNT_dec(sv); + # else /* !HAS_MKSTEMP, fallback to stdio tmpfile(). */ + FILE * const stdio = PerlSIO_tmpfile(); + +diff --git a/t/io/perlio.t b/t/io/perlio.t +index c145945..c1eebec 100755 +--- a/t/io/perlio.t ++++ b/t/io/perlio.t +@@ -8,13 +8,14 @@ BEGIN { + } + } + +-use Test::More tests => 37; ++use Test::More tests => 39; + + use_ok('PerlIO'); + + my $txt = "txt$$"; + my $bin = "bin$$"; + my $utf = "utf$$"; ++my $nonexistent = "nex$$"; + + my $txtfh; + my $binfh; +@@ -89,6 +90,17 @@ ok(close($utffh)); + # report after STDOUT is restored + ok($status, ' re-open STDOUT'); + close OLDOUT; ++ ++ SKIP: { ++ skip("TMPDIR not honored on this platform", 2) ++ if !$Config{d_mkstemp} ++ || $^O eq 'VMS' || $^O eq 'MSwin32' || $^O eq 'os2'; ++ local $ENV{TMPDIR} = $nonexistent; ++ ok( open(my $x,"+<",undef), 'TMPDIR honored by magic temp file via 3 arg open with undef - works if TMPDIR points to a non-existent dir'); ++ ++ mkdir $ENV{TMPDIR}; ++ ok(open(my $x,"+<",undef), 'TMPDIR honored by magic temp file via 3 arg open with undef - works if TMPDIR points to an existent dir'); ++ } + } + + # in-memory open +@@ -136,5 +148,6 @@ END { + 1 while unlink $txt; + 1 while unlink $bin; + 1 while unlink $utf; ++ rmdir $nonexistent; + } + +-- +tg: (daf8b46..) fixes/anon-tmpfile-dir (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/archive-tar-instance-error.diff b/recipes/perl/perl-5.10.1/archive-tar-instance-error.diff new file mode 100644 index 0000000000..23c45ef3b7 --- /dev/null +++ b/recipes/perl/perl-5.10.1/archive-tar-instance-error.diff @@ -0,0 +1,109 @@ +From: Niko Tyni +Subject: Separate Archive::Tar instance error strings from each other +Bug-Debian: http://bugs.debian.org/539355 +Bug: http://rt.cpan.org/Public/Bug/Display.html?id=48879 + +Included upstream in Archive-Tar-1.54. + + +--- + lib/Archive/Tar.pm | 17 +++++++++++++++-- + lib/Archive/Tar/t/06_error.t | 39 +++++++++++++++++++++++++++++++++++++++ + 2 files changed, 54 insertions(+), 2 deletions(-) + +diff --git a/lib/Archive/Tar.pm b/lib/Archive/Tar.pm +index 022a172..bc97c0e 100644 +--- a/lib/Archive/Tar.pm ++++ b/lib/Archive/Tar.pm +@@ -117,7 +117,7 @@ sub new { + + ### copying $tmpl here since a shallow copy makes it use the + ### same aref, causing for files to remain in memory always. +- my $obj = bless { _data => [ ], _file => 'Unknown' }, $class; ++ my $obj = bless { _data => [ ], _file => 'Unknown', _error => '' }, $class; + + if (@_) { + unless ( $obj->read( @_ ) ) { +@@ -1445,6 +1445,10 @@ method call instead. + my $self = shift; + my $msg = $error = shift; + $longmess = Carp::longmess($error); ++ if (ref $self) { ++ $self->{_error} = $error; ++ $self->{_longmess} = $longmess; ++ } + + ### set Archive::Tar::WARN to 0 to disable printing + ### of errors +@@ -1457,7 +1461,11 @@ method call instead. + + sub error { + my $self = shift; +- return shift() ? $longmess : $error; ++ if (ref $self) { ++ return shift() ? $self->{_longmess} : $self->{_error}; ++ } else { ++ return shift() ? $longmess : $error; ++ } + } + } + +@@ -1817,6 +1825,11 @@ use is very much discouraged. Use the C method instead: + + warn $tar->error unless $tar->extract; + ++Note that in older versions of this module, the C method ++would return an effectively global value even when called an instance ++method as above. This has since been fixed, and multiple instances of ++C now have separate error strings. ++ + =head2 $Archive::Tar::INSECURE_EXTRACT_MODE + + This variable indicates whether C should allow +diff --git a/lib/Archive/Tar/t/06_error.t b/lib/Archive/Tar/t/06_error.t +new file mode 100644 +index 0000000..5c728bc +--- /dev/null ++++ b/lib/Archive/Tar/t/06_error.t +@@ -0,0 +1,39 @@ ++BEGIN { ++ if( $ENV{PERL_CORE} ) { ++ chdir '../lib/Archive/Tar' if -d '../lib/Archive/Tar'; ++ } ++ use lib '../../..'; ++} ++ ++BEGIN { chdir 't' if -d 't' } ++ ++use Test::More 'no_plan'; ++use strict; ++use lib '../lib'; ++ ++use Archive::Tar; ++use File::Spec; ++ ++$Archive::Tar::WARN = 0; ++ ++my $t1 = Archive::Tar->new; ++my $t2 = Archive::Tar->new; ++ ++is($Archive::Tar::error, "", "global error string is empty"); ++is($t1->error, "", "error string of object 1 is empty"); ++is($t2->error, "", "error string of object 2 is empty"); ++ ++ok(!$t1->read(), "can't read without a file"); ++ ++isnt($t1->error, "", "error string of object 1 is set"); ++is($Archive::Tar::error, $t1->error, "global error string equals that of object 1"); ++is($Archive::Tar::error, Archive::Tar->error, "the class error method returns the global error"); ++is($t2->error, "", "error string of object 2 is still empty"); ++ ++my $src = File::Spec->catfile( qw[src short b] ); ++ok(!$t2->read($src), "error when opening $src"); ++ ++isnt($t2->error, "", "error string of object 1 is set"); ++isnt($t2->error, $t1->error, "error strings of objects 1 and 2 differ"); ++is($Archive::Tar::error, $t2->error, "global error string equals that of object 2"); ++is($Archive::Tar::error, Archive::Tar->error, "the class error method returns the global error"); +-- +tg: (daf8b46..) fixes/archive-tar-instance-error (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/arm-alignment.diff b/recipes/perl/perl-5.10.1/arm-alignment.diff new file mode 100644 index 0000000000..28038b7115 --- /dev/null +++ b/recipes/perl/perl-5.10.1/arm-alignment.diff @@ -0,0 +1,39 @@ +From: Niko Tyni +Subject: Prevent gcc from optimizing the alignment test away on armel +Bug-Debian: http://bugs.debian.org/289884 +Author: Marc Pignat +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/f1c7503b9028d20741c9a01345ba8704998ea381 + +As hunted down by Marc Pignat, gcc optimizations make the check for +u32align (U32_ALIGNMENT_REQUIRED) a no-op on armel, breaking the MD5 +module. + +--- + Configure | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/Configure b/Configure +index 01fa3c0..f39b2f9 100755 +--- a/Configure ++++ b/Configure +@@ -18533,6 +18533,7 @@ $cat <try.c < +@@ -18549,8 +18550,8 @@ $signal_t bletch(int s) { exit(4); } + #endif + int main() { + #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321 +- U8 buf[8]; +- U32 *up; ++ $volatile U8 buf[8]; ++ $volatile U32 *up; + int i; + + if (sizeof(U32) != 4) { +-- +tg: (daf8b46..) fixes/arm-alignment (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/arm_thread_stress_timeout.diff b/recipes/perl/perl-5.10.1/arm_thread_stress_timeout.diff new file mode 100644 index 0000000000..785ac46361 --- /dev/null +++ b/recipes/perl/perl-5.10.1/arm_thread_stress_timeout.diff @@ -0,0 +1,23 @@ +Subject: Raise the timeout of ext/threads/shared/t/stress.t to accommodate slower build hosts +Bug-Debian: http://bugs.debian.org/501970 + + +--- + ext/threads-shared/t/stress.t | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/ext/threads-shared/t/stress.t b/ext/threads-shared/t/stress.t +index e36ab0a..33aa3b8 100755 +--- a/ext/threads-shared/t/stress.t ++++ b/ext/threads-shared/t/stress.t +@@ -34,7 +34,7 @@ use threads::shared; + { + my $cnt = 50; + +- my $TIMEOUT = 60; ++ my $TIMEOUT = 150; + + my $mutex = 1; + share($mutex); +-- +tg: (daf8b46..) debian/arm_thread_stress_timeout (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/assorted_docs.diff b/recipes/perl/perl-5.10.1/assorted_docs.diff new file mode 100644 index 0000000000..49c509ff4e --- /dev/null +++ b/recipes/perl/perl-5.10.1/assorted_docs.diff @@ -0,0 +1,25 @@ +Subject: Math::BigInt::CalcEmu documentation grammar fix +Bug-Debian: http://bugs.debian.org/443733 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/384f06ae49854089e0cf13ffe34560627ea86f8a + +This is fixed in blead by change 33129 but was skipped for maint-5.10. + +--- + lib/Math/BigInt/CalcEmu.pm | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/lib/Math/BigInt/CalcEmu.pm b/lib/Math/BigInt/CalcEmu.pm +index 79efac6..5810f5d 100644 +--- a/lib/Math/BigInt/CalcEmu.pm ++++ b/lib/Math/BigInt/CalcEmu.pm +@@ -295,7 +295,7 @@ Math::BigInt::CalcEmu - Emulate low-level math with BigInt code + =head1 DESCRIPTION + + Contains routines that emulate low-level math functions in BigInt, e.g. +-optional routines the low-level math package does not provide on it's own. ++optional routines the low-level math package does not provide on its own. + + Will be loaded on demand and called automatically by BigInt. + +-- +tg: (daf8b46..) fixes/assorted_docs (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/autodie-flock.diff b/recipes/perl/perl-5.10.1/autodie-flock.diff new file mode 100644 index 0000000000..19ea3aae67 --- /dev/null +++ b/recipes/perl/perl-5.10.1/autodie-flock.diff @@ -0,0 +1,98 @@ +From: Niko Tyni +Subject: Allow for flock returning EAGAIN instead of EWOULDBLOCK on linux/parisc +Bug-Debian: http://bugs.debian.org/543731 +Origin: upstream, http://github.com/pfenwick/autodie/commit/037738e11a6097734b0e1dabdd77b92e5fe35219 + + +--- + lib/Fatal.pm | 14 +++++++++++++- + lib/autodie/t/flock.t | 12 ++++++++++-- + 2 files changed, 23 insertions(+), 3 deletions(-) + +diff --git a/lib/Fatal.pm b/lib/Fatal.pm +old mode 100644 +new mode 100755 +index 18e71ed..c17a257 +--- a/lib/Fatal.pm ++++ b/lib/Fatal.pm +@@ -5,6 +5,7 @@ use Carp; + use strict; + use warnings; + use Tie::RefHash; # To cache subroutine refs ++use Config; + + use constant PERL510 => ( $] >= 5.010 ); + +@@ -52,6 +53,10 @@ our %_EWOULDBLOCK = ( + MSWin32 => 33, + ); + ++# the linux parisc port has separate EAGAIN and EWOULDBLOCK, ++# and the kernel returns EAGAIN ++my $try_EAGAIN = ($^O eq 'linux' and $Config{archname} =~ /hppa|parisc/) ? 1 : 0; ++ + # We have some tags that can be passed in for use with import. + # These are all assumed to be CORE:: + +@@ -720,6 +725,11 @@ sub _one_invocation { + my $EWOULDBLOCK = eval { POSIX::EWOULDBLOCK(); } + || $_EWOULDBLOCK{$^O} + || _autocroak("Internal error - can't overload flock - EWOULDBLOCK not defined on this system."); ++ my $EAGAIN = $EWOULDBLOCK; ++ if ($try_EAGAIN) { ++ $EAGAIN = eval { POSIX::EAGAIN(); } ++ || _autocroak("Internal error - can't overload flock - EAGAIN not defined on this system."); ++ } + + require Fcntl; # For Fcntl::LOCK_NB + +@@ -735,7 +745,9 @@ sub _one_invocation { + # If we failed, but we're using LOCK_NB and + # returned EWOULDBLOCK, it's not a real error. + +- if (\$_[1] & Fcntl::LOCK_NB() and \$! == $EWOULDBLOCK ) { ++ if (\$_[1] & Fcntl::LOCK_NB() and ++ (\$! == $EWOULDBLOCK or ++ ($try_EAGAIN and \$! == $EAGAIN ))) { + return \$retval; + } + +diff --git a/lib/autodie/t/flock.t b/lib/autodie/t/flock.t +index a7550ba..6421a56 100755 +--- a/lib/autodie/t/flock.t ++++ b/lib/autodie/t/flock.t +@@ -2,7 +2,8 @@ + use strict; + use Test::More; + use Fcntl qw(:flock); +-use POSIX qw(EWOULDBLOCK); ++use POSIX qw(EWOULDBLOCK EAGAIN); ++use Config; + + require Fatal; + +@@ -10,6 +11,9 @@ my $EWOULDBLOCK = eval { EWOULDBLOCK() } + || $Fatal::_EWOULDBLOCK{$^O} + || plan skip_all => "EWOULDBLOCK not defined on this system"; + ++my $try_EAGAIN = ($^O eq 'linux' and $Config{archname} =~ /hppa|parisc/) ? 1 : 0; ++my $EAGAIN = eval { EAGAIN() }; ++ + my ($self_fh, $self_fh2); + + eval { +@@ -55,7 +59,11 @@ eval { + $return = flock($self_fh2, LOCK_EX | LOCK_NB); + }; + +-is($!+0, $EWOULDBLOCK, "Double-flocking should be EWOULDBLOCK"); ++if (!$try_EAGAIN) { ++ is($!+0, $EWOULDBLOCK, "Double-flocking should be EWOULDBLOCK"); ++} else { ++ ok($!+0 == $EWOULDBLOCK || $!+0 == $EAGAIN, "Double-flocking should be EWOULDBLOCK or EAGAIN"); ++} + ok(!$return, "flocking a file twice should fail"); + is($@, "", "Non-blocking flock should not fail on EWOULDBLOCK"); + +-- +tg: (daf8b46..) fixes/autodie-flock (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/cpan_config_path.diff b/recipes/perl/perl-5.10.1/cpan_config_path.diff new file mode 100644 index 0000000000..c4f161977c --- /dev/null +++ b/recipes/perl/perl-5.10.1/cpan_config_path.diff @@ -0,0 +1,22 @@ +Subject: Set location of CPAN::Config to /etc/perl as /usr may not be writable. + + +--- + lib/CPAN/HandleConfig.pm | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/lib/CPAN/HandleConfig.pm b/lib/CPAN/HandleConfig.pm +index 903b414..ba7dae8 100644 +--- a/lib/CPAN/HandleConfig.pm ++++ b/lib/CPAN/HandleConfig.pm +@@ -541,7 +541,7 @@ sub load { + $configpm = $INC{"CPAN/MyConfig.pm"}; + $redo++; + } else { +- my($path_to_cpan) = File::Basename::dirname($INC{"CPAN.pm"}); ++ my($path_to_cpan) = '/etc/perl'; + my($configpmdir) = File::Spec->catdir($path_to_cpan,"CPAN"); + my($configpmtest) = File::Spec->catfile($configpmdir,"Config.pm"); + my $inc_key; +-- +tg: (daf8b46..) debian/cpan_config_path (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/cpan_definstalldirs.diff b/recipes/perl/perl-5.10.1/cpan_definstalldirs.diff new file mode 100644 index 0000000000..1b306aba12 --- /dev/null +++ b/recipes/perl/perl-5.10.1/cpan_definstalldirs.diff @@ -0,0 +1,35 @@ +Subject: Provide a sensible INSTALLDIRS default for modules installed from CPAN. + +Some modules which are included in core set INSTALLDIRS => 'perl' +explicitly in Makefile.PL or Build.PL. This makes sense for the normal @INC +ordering, but not ours. + + +--- + lib/CPAN/FirstTime.pm | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/CPAN/FirstTime.pm b/lib/CPAN/FirstTime.pm +index 50bebc3..0136fef 100644 +--- a/lib/CPAN/FirstTime.pm ++++ b/lib/CPAN/FirstTime.pm +@@ -952,7 +952,7 @@ sub init { + my_prompt_loop(prefer_installer => 'MB', $matcher, 'MB|EUMM|RAND'); + + if (!$matcher or 'makepl_arg make_arg' =~ /$matcher/) { +- my_dflt_prompt(makepl_arg => "", $matcher); ++ my_dflt_prompt(makepl_arg => "INSTALLDIRS=site", $matcher); + my_dflt_prompt(make_arg => "", $matcher); + if ( $CPAN::Config->{makepl_arg} =~ /LIBS=|INC=/ ) { + $CPAN::Frontend->mywarn( +@@ -974,7 +974,7 @@ sub init { + my_dflt_prompt(make_install_arg => $CPAN::Config->{make_arg} || "", + $matcher); + +- my_dflt_prompt(mbuildpl_arg => "", $matcher); ++ my_dflt_prompt(mbuildpl_arg => "--installdirs site", $matcher); + my_dflt_prompt(mbuild_arg => "", $matcher); + + if (exists $CPAN::HandleConfig::keys{mbuild_install_build_command} +-- +tg: (daf8b46..) debian/cpan_definstalldirs (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/cpanplus_config_path.diff b/recipes/perl/perl-5.10.1/cpanplus_config_path.diff new file mode 100644 index 0000000000..321ac451d2 --- /dev/null +++ b/recipes/perl/perl-5.10.1/cpanplus_config_path.diff @@ -0,0 +1,43 @@ +From: Niko Tyni +Subject: Save local versions of CPANPLUS::Config::System into /etc/perl. + +This is a configuration file and needs to go in /etc by policy. +Besides, /usr may not even be writable. + +This mirrors the Debian setup of CPAN.pm in debian/cpan_config_path. + +See #533707. + +--- + lib/CPANPLUS/Configure.pm | 1 + + lib/CPANPLUS/Internals/Constants.pm | 3 +++ + 2 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/lib/CPANPLUS/Configure.pm b/lib/CPANPLUS/Configure.pm +index 2d249e5..bbed1b8 100644 +--- a/lib/CPANPLUS/Configure.pm ++++ b/lib/CPANPLUS/Configure.pm +@@ -276,6 +276,7 @@ Saves the configuration to the package name you provided. + If this package is not C, it will + be saved in your C<.cpanplus> directory, otherwise it will + be attempted to be saved in the system wide directory. ++(On Debian systems, this system wide directory is /etc/perl.) + + If no argument is provided, it will default to your personal + config. +diff --git a/lib/CPANPLUS/Internals/Constants.pm b/lib/CPANPLUS/Internals/Constants.pm +index 1d05c98..7a5cef8 100644 +--- a/lib/CPANPLUS/Internals/Constants.pm ++++ b/lib/CPANPLUS/Internals/Constants.pm +@@ -194,6 +194,9 @@ use constant CONFIG_USER_FILE => sub { + ) . '.pm'; + }; + use constant CONFIG_SYSTEM_FILE => sub { ++ # Debian-specific shortcut ++ return '/etc/perl/CPANPLUS/Config/System.pm'; ++ + require CPANPLUS::Internals; + require File::Basename; + my $dir = File::Basename::dirname( +-- +tg: (daf8b46..) debian/cpanplus_config_path (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/cpanplus_definstalldirs.diff b/recipes/perl/perl-5.10.1/cpanplus_definstalldirs.diff new file mode 100644 index 0000000000..eeeff4347f --- /dev/null +++ b/recipes/perl/perl-5.10.1/cpanplus_definstalldirs.diff @@ -0,0 +1,52 @@ +From: Niko Tyni +Subject: Configure CPANPLUS to use the site directories by default. +Closes: 533707 + +The core modules usually default to INSTALLDIRS=perl (ExtUtils::MakeMaker) +or installdirs=core (Module::Build), so we need to explicitly ask for +the site destination to get upgraded versions into /usr/local. + +See also the sister patch, debian/cpan_definstalldirs . + +--- + lib/CPANPLUS/Config/System.pm | 30 ++++++++++++++++++++++++++++++ + 1 files changed, 30 insertions(+), 0 deletions(-) + +diff --git a/lib/CPANPLUS/Config/System.pm b/lib/CPANPLUS/Config/System.pm +new file mode 100644 +index 0000000..5e6e11e +--- /dev/null ++++ b/lib/CPANPLUS/Config/System.pm +@@ -0,0 +1,30 @@ ++### minimal pod, so you can find it with perldoc -l, etc ++=pod ++ ++=head1 NAME ++ ++CPANPLUS::Config::System ++ ++=head1 DESCRIPTION ++ ++This is a CPANPLUS configuration file that sets appropriate default ++settings on Debian systems. ++ ++The only preconfigured settings are C (set to ++C) and C (set to C<--installdirs site>). ++ ++These settings will not have any effect if ++C is present. ++ ++=cut ++ ++ ++package CPANPLUS::Config::System; ++ ++sub setup { ++ my $conf = shift; ++ $conf->set_conf( makemakerflags => 'INSTALLDIRS=site' ); ++ $conf->set_conf( buildflags => '--installdirs site' ); ++} ++ ++1; +-- +tg: (daf8b46..) debian/cpanplus_definstalldirs (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/crash-on-undefined-destroy.diff b/recipes/perl/perl-5.10.1/crash-on-undefined-destroy.diff new file mode 100644 index 0000000000..6991140cd1 --- /dev/null +++ b/recipes/perl/perl-5.10.1/crash-on-undefined-destroy.diff @@ -0,0 +1,58 @@ +From: Niko Tyni +Subject: Fix a NULL pointer dereference when looking for a DESTROY method +Bug-Debian: http://bugs.debian.org/564074 +Bug: http://rt.perl.org/rt3/Public/Bug/Display.html?id=71952 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/1f15e670edb515b744e9021b4a42a7955da83093 + +The empty DESTROY method optimization introduced by upstream commit +fbb3ee5af3d would crash the interpreter if a DESTROY method was declared +but not actually defined. + + +--- + sv.c | 3 ++- + t/op/method.t | 11 ++++++++++- + 2 files changed, 12 insertions(+), 2 deletions(-) + +diff --git a/sv.c b/sv.c +index d2fcb0c..ec1ac82 100644 +--- a/sv.c ++++ b/sv.c +@@ -5419,7 +5419,8 @@ Perl_sv_clear(pTHX_ register SV *sv) + if (destructor + /* Don't bother calling an empty destructor */ + && (CvISXSUB(destructor) +- || CvSTART(destructor)->op_next->op_type != OP_LEAVESUB)) ++ || (CvSTART(destructor) ++ && (CvSTART(destructor)->op_next->op_type != OP_LEAVESUB)))) + { + SV* const tmpref = newRV(sv); + SvREADONLY_on(tmpref); /* DESTROY() could be naughty */ +diff --git a/t/op/method.t b/t/op/method.t +index 46c4642..8e91c48 100755 +--- a/t/op/method.t ++++ b/t/op/method.t +@@ -10,7 +10,7 @@ BEGIN { + require "test.pl"; + } + +-print "1..78\n"; ++print "1..79\n"; + + @A::ISA = 'B'; + @B::ISA = 'C'; +@@ -293,3 +293,12 @@ EOT + "check if UNIVERSAL::AUTOLOAD works", + ); + } ++{ ++ fresh_perl_is(<<'EOT', ++sub M::DESTROY; bless {}, "M" ; print "survived\n"; ++EOT ++ "survived", ++ {}, ++ "no crash with a declared but missing DESTROY method" ++ ); ++} +-- +tg: (daf8b46..) fixes/crash-on-undefined-destroy (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/db_file_ver.diff b/recipes/perl/perl-5.10.1/db_file_ver.diff new file mode 100644 index 0000000000..921942901c --- /dev/null +++ b/recipes/perl/perl-5.10.1/db_file_ver.diff @@ -0,0 +1,32 @@ +Subject: Remove overly restrictive DB_File version check. +Bug-Debian: http://bugs.debian.org/340047 + +Package dependencies ensure the correct library is linked at run-time. + + +--- + ext/DB_File/version.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/ext/DB_File/version.c b/ext/DB_File/version.c +index 47158d3..67ccdff 100644 +--- a/ext/DB_File/version.c ++++ b/ext/DB_File/version.c +@@ -48,6 +48,7 @@ __getBerkeleyDBInfo() + + (void)db_version(&Major, &Minor, &Patch) ; + ++#ifndef DEBIAN + /* Check that the versions of db.h and libdb.a are the same */ + if (Major != DB_VERSION_MAJOR || Minor != DB_VERSION_MINOR ) + /* || Patch != DB_VERSION_PATCH) */ +@@ -55,6 +56,7 @@ __getBerkeleyDBInfo() + croak("\nDB_File was build with libdb version %d.%d.%d,\nbut you are attempting to run it with libdb version %d.%d.%d\n", + DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, + Major, Minor, Patch) ; ++#endif /* DEBIAN */ + + /* check that libdb is recent enough -- we need 2.3.4 or greater */ + if (Major == 2 && (Minor < 3 || (Minor == 3 && Patch < 4))) +-- +tg: (daf8b46..) debian/db_file_ver (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/devel-ppport-ia64-optim.diff b/recipes/perl/perl-5.10.1/devel-ppport-ia64-optim.diff new file mode 100644 index 0000000000..98bdc109bf --- /dev/null +++ b/recipes/perl/perl-5.10.1/devel-ppport-ia64-optim.diff @@ -0,0 +1,32 @@ +From: Niko Tyni +Subject: Work around an ICE on ia64 +Closes: 548943 + +Temporarily work around an internal compiler error in Devel::PPPort +on ia64+gcc-4.3. + + +--- + ext/Devel-PPPort/Makefile.PL | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +diff --git a/ext/Devel-PPPort/Makefile.PL b/ext/Devel-PPPort/Makefile.PL +index 67eebc1..f1ef7a2 100644 +--- a/ext/Devel-PPPort/Makefile.PL ++++ b/ext/Devel-PPPort/Makefile.PL +@@ -75,6 +75,13 @@ sub configure + push @moreopts, INSTALLDIRS => ($] >= 5.007003 ? 'perl' : 'site'); + } + ++ ++ # temporary Debian hack, see http://bugs.debian.org/548943 ++ require Config; ++ if ($Config::Config{archname} =~ /^ia64/) { ++ push @moreopts, OPTIMIZE => '-g -O0'; ++ } ++ + if ($opt{'apicheck'}) { + $PL_FILES{'apicheck_c.PL'} = 'apicheck.c'; + push @C_FILES, qw{ apicheck.c }; +-- +tg: (daf8b46..) debian/devel-ppport-ia64-optim (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/disable-zlib-bundling.diff b/recipes/perl/perl-5.10.1/disable-zlib-bundling.diff new file mode 100644 index 0000000000..0a3e6d1a22 --- /dev/null +++ b/recipes/perl/perl-5.10.1/disable-zlib-bundling.diff @@ -0,0 +1,29 @@ +From: Niko Tyni +Subject: Disable zlib bundling in Compress::Raw::Zlib + +Compress::Raw::Zlib statically links its bundled version of zlib +by default, but we use the system library instead. + +--- + ext/Compress-Raw-Zlib/config.in | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/ext/Compress-Raw-Zlib/config.in b/ext/Compress-Raw-Zlib/config.in +index c56cc03..2c6659b 100644 +--- a/ext/Compress-Raw-Zlib/config.in ++++ b/ext/Compress-Raw-Zlib/config.in +@@ -16,9 +16,9 @@ + # Setting the Gzip OS Code + # + +-BUILD_ZLIB = True +-INCLUDE = ./zlib-src +-LIB = ./zlib-src ++BUILD_ZLIB = False ++INCLUDE = /usr/include ++LIB = /usr/lib + + OLD_ZLIB = False + GZIP_OS_CODE = AUTO_DETECT +-- +tg: (daf8b46..) debian/disable-zlib-bundling (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/doc_info.diff b/recipes/perl/perl-5.10.1/doc_info.diff new file mode 100644 index 0000000000..14d872ca55 --- /dev/null +++ b/recipes/perl/perl-5.10.1/doc_info.diff @@ -0,0 +1,55 @@ +Subject: Replace generic man(1) instructions with Debian-specific information. + +Indicate that the user needs to install the perl-doc package. + + +--- + pod/perl.pod | 30 +++++++----------------------- + 1 files changed, 7 insertions(+), 23 deletions(-) + +diff --git a/pod/perl.pod b/pod/perl.pod +index 939c683..134bb77 100644 +--- a/pod/perl.pod ++++ b/pod/perl.pod +@@ -227,32 +227,16 @@ For ease of access, the Perl manual has been split up into several sections. + perlwin32 Perl notes for Windows + + +-By default, the manpages listed above are installed in the +-F directory. ++On Debian systems, you need to install the B package which ++contains the majority of the standard Perl documentation and the ++F program. + +-Extensive additional documentation for Perl modules is available. The +-default configuration for perl will place this additional documentation +-in the F directory (or else in the F +-subdirectory of the Perl library directory). Some of this additional +-documentation is distributed standard with Perl, but you'll also find +-documentation for third-party modules there. ++Extensive additional documentation for Perl modules is available, both ++those distributed with Perl and third-party modules which are packaged ++or locally installed. + + You should be able to view Perl's documentation with your man(1) +-program by including the proper directories in the appropriate start-up +-files, or in the MANPATH environment variable. To find out where the +-configuration has installed the manpages, type: +- +- perl -V:man.dir +- +-If the directories have a common stem, such as F +-and F, you need only to add that stem +-(F) to your man(1) configuration files or your MANPATH +-environment variable. If they do not share a stem, you'll have to add +-both stems. +- +-If that doesn't work for some reason, you can still use the +-supplied F script to view module information. You might +-also look into getting a replacement man program. ++program or perldoc(1). + + If something strange has gone wrong with your program and you're not + sure where you should look for help, try the B<-w> switch first. It +-- +tg: (daf8b46..) debian/doc_info (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/enc2xs_inc.diff b/recipes/perl/perl-5.10.1/enc2xs_inc.diff new file mode 100644 index 0000000000..57cee24f39 --- /dev/null +++ b/recipes/perl/perl-5.10.1/enc2xs_inc.diff @@ -0,0 +1,49 @@ +Subject: Tweak enc2xs to follow symlinks and ignore missing @INC directories. +Bug-Debian: http://bugs.debian.org/290336 + +- ignore missing directories, +- follow symlinks (/usr/share/perl/5.8 -> 5.8.4). + + +--- + ext/Encode/bin/enc2xs | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/ext/Encode/bin/enc2xs b/ext/Encode/bin/enc2xs +index 233ca54..502baec 100644 +--- a/ext/Encode/bin/enc2xs ++++ b/ext/Encode/bin/enc2xs +@@ -924,11 +924,11 @@ use vars qw( + sub find_e2x{ + eval { require File::Find; }; + my (@inc, %e2x_dir); +- for my $inc (@INC){ ++ for my $inc (grep -d, @INC){ + push @inc, $inc unless $inc eq '.'; #skip current dir + } + File::Find::find( +- sub { ++ { wanted => sub { + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, + $atime,$mtime,$ctime,$blksize,$blocks) + = lstat($_) or return; +@@ -938,7 +938,7 @@ sub find_e2x{ + $e2x_dir{$File::Find::dir} ||= $mtime; + } + return; +- }, @inc); ++ }, follow => 1}, @inc); + warn join("\n", keys %e2x_dir), "\n"; + for my $d (sort {$e2x_dir{$a} <=> $e2x_dir{$b}} keys %e2x_dir){ + $_E2X = $d; +@@ -1005,7 +1005,7 @@ sub make_configlocal_pm { + $LocalMod{$enc} ||= $mod; + } + }; +- File::Find::find({wanted => $wanted}, @INC); ++ File::Find::find({wanted => $wanted, follow => 1}, grep -d, @INC); + $_ModLines = ""; + for my $enc ( sort keys %LocalMod ) { + $_ModLines .= +-- +tg: (daf8b46..) debian/enc2xs_inc (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/errno_ver.diff b/recipes/perl/perl-5.10.1/errno_ver.diff new file mode 100644 index 0000000000..49c4901c63 --- /dev/null +++ b/recipes/perl/perl-5.10.1/errno_ver.diff @@ -0,0 +1,32 @@ +Subject: Remove Errno version check due to upgrade problems with long-running processes. +Bug-Debian: http://bugs.debian.org/343351 + +Remove version check which can cause problems for long running +processes embedding perl when upgrading to a newer version, +compatible, but built on a different machine. + + +--- + ext/Errno/Errno_pm.PL | 5 ----- + 1 files changed, 0 insertions(+), 5 deletions(-) + +diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL +index 124b8fc..b554cd4 100644 +--- a/ext/Errno/Errno_pm.PL ++++ b/ext/Errno/Errno_pm.PL +@@ -341,13 +341,8 @@ EOF + package Errno; + our (\@EXPORT_OK,\%EXPORT_TAGS,\@ISA,\$VERSION,\%errno,\$AUTOLOAD); + use Exporter (); +-use Config; + use strict; + +-"\$Config{'archname'}-\$Config{'osvers'}" eq +-"$Config{'archname'}-$Config{'osvers'}" or +- die "Errno architecture ($Config{'archname'}-$Config{'osvers'}) does not match executable architecture (\$Config{'archname'}-\$Config{'osvers'})"; +- + \$VERSION = "$VERSION"; + \$VERSION = eval \$VERSION; + \@ISA = qw(Exporter); +-- +tg: (daf8b46..) debian/errno_ver (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/extutils_hacks.diff b/recipes/perl/perl-5.10.1/extutils_hacks.diff new file mode 100644 index 0000000000..94120cb1c8 --- /dev/null +++ b/recipes/perl/perl-5.10.1/extutils_hacks.diff @@ -0,0 +1,313 @@ +Subject: Various debian-specific ExtUtils changes + + * Respect umask during installation, and set as appropriate for each of + perl, vendor and site (policy requires group writable site dirs). + + * Don't install .packlist or perllocal.pod for perl or vendor. + * Fiddle with *PREFIX and variables written to the makefile so that + install directories may be changed when make is run by passing + PREFIX= to the "make install" command (used when packaging + modules). + + * Set location of libperl.a to /usr/lib. + * Note that libperl-dev package is required for embedded linking. + * Change install target dependencies to facilitate parallel makes. + + +--- + lib/ExtUtils/Embed.pm | 3 ++ + lib/ExtUtils/Install.pm | 18 ++++++++-------- + lib/ExtUtils/MM_Any.pm | 12 +++++----- + lib/ExtUtils/MM_Unix.pm | 44 +++++++++-------------------------------- + lib/ExtUtils/t/INST.t | 4 +-- + lib/ExtUtils/t/INST_PREFIX.t | 10 ++++---- + 6 files changed, 34 insertions(+), 57 deletions(-) + +diff --git a/lib/ExtUtils/Embed.pm b/lib/ExtUtils/Embed.pm +index 24ae909..12d421d 100644 +--- a/lib/ExtUtils/Embed.pm ++++ b/lib/ExtUtils/Embed.pm +@@ -305,6 +305,9 @@ and extensions in your C/C++ applications. + Typically, an application B will invoke ExtUtils::Embed + functions while building your application. + ++Note that on Debian systems the B package is required for ++compiling applications which embed an interpreter. ++ + =head1 @EXPORT + + ExtUtils::Embed exports the following functions: +diff --git a/lib/ExtUtils/Install.pm b/lib/ExtUtils/Install.pm +index c886c69..7a0c24e 100644 +--- a/lib/ExtUtils/Install.pm ++++ b/lib/ExtUtils/Install.pm +@@ -457,7 +457,7 @@ sub _can_write_dir { + + =pod + +-=item _mkpath($dir,$show,$mode,$verbose,$dry_run) ++=item _mkpath($dir,$show,$verbose,$dry_run) + + Wrapper around File::Path::mkpath() to handle errors. + +@@ -474,13 +474,13 @@ writable. + =cut + + sub _mkpath { +- my ($dir,$show,$mode,$verbose,$dry_run)=@_; ++ my ($dir,$show,$verbose,$dry_run)=@_; + if ( $verbose && $verbose > 1 && ! -d $dir) { + $show= 1; +- printf "mkpath(%s,%d,%#o)\n", $dir, $show, $mode; ++ printf "mkpath(%s,%d)\n", $dir, $show; + } + if (!$dry_run) { +- if ( ! eval { File::Path::mkpath($dir,$show,$mode); 1 } ) { ++ if ( ! eval { File::Path::mkpath($dir,$show); 1 } ) { + _choke("Can't create '$dir'","$@"); + } + +@@ -787,7 +787,7 @@ sub install { #XXX OS-SPECIFIC + _chdir($cwd); + } + foreach my $targetdir (sort keys %check_dirs) { +- _mkpath( $targetdir, 0, 0755, $verbose, $dry_run ); ++ _mkpath( $targetdir, 0, $verbose, $dry_run ); + } + foreach my $found (@found_files) { + my ($diff, $ffd, $origfile, $mode, $size, $atime, $mtime, +@@ -801,7 +801,7 @@ sub install { #XXX OS-SPECIFIC + $targetfile= _unlink_or_rename( $targetfile, 'tryhard', 'install' ) + unless $dry_run; + } elsif ( ! -d $targetdir ) { +- _mkpath( $targetdir, 0, 0755, $verbose, $dry_run ); ++ _mkpath( $targetdir, 0, $verbose, $dry_run ); + } + print "Installing $targetfile\n"; + +@@ -841,7 +841,7 @@ sub install { #XXX OS-SPECIFIC + + if ($pack{'write'}) { + $dir = install_rooted_dir(dirname($pack{'write'})); +- _mkpath( $dir, 0, 0755, $verbose, $dry_run ); ++ _mkpath( $dir, 0, $verbose, $dry_run ); + print "Writing $pack{'write'}\n" if $verbose; + $packlist->write(install_rooted_file($pack{'write'})) unless $dry_run; + } +@@ -1181,7 +1181,7 @@ be prepended as a directory to each installed file (and directory). + sub pm_to_blib { + my($fromto,$autodir,$pm_filter) = @_; + +- _mkpath($autodir,0,0755); ++ _mkpath($autodir,0); + while(my($from, $to) = each %$fromto) { + if( -f $to && -s $from == -s $to && -M $to < -M $from ) { + print "Skip $to (unchanged)\n"; +@@ -1204,7 +1204,7 @@ sub pm_to_blib { + # we wont try hard here. its too likely to mess things up. + forceunlink($to); + } else { +- _mkpath(dirname($to),0,0755); ++ _mkpath(dirname($to),0); + } + if ($need_filtering) { + run_filter($pm_filter, $from, $to); +diff --git a/lib/ExtUtils/MM_Any.pm b/lib/ExtUtils/MM_Any.pm +index a7afe20..402e0c0 100644 +--- a/lib/ExtUtils/MM_Any.pm ++++ b/lib/ExtUtils/MM_Any.pm +@@ -701,8 +701,6 @@ all POD files in MAN1PODS and MAN3PODS. + sub manifypods_target { + my($self) = shift; + +- my $man1pods = ''; +- my $man3pods = ''; + my $dependencies = ''; + + # populate manXpods & dependencies: +@@ -718,7 +716,7 @@ END + foreach my $section (qw(1 3)) { + my $pods = $self->{"MAN${section}PODS"}; + push @man_cmds, $self->split_command(<{SITEPREFIX} ||= $sprefix; + $self->{VENDORPREFIX} ||= $vprefix; + +- # Lots of MM extension authors like to use $(PREFIX) so we +- # put something sensible in there no matter what. +- $self->{PREFIX} = '$('.uc $self->{INSTALLDIRS}.'PREFIX)'; ++ my $p = $self->{PREFIX} = $self->{PERLPREFIX}; ++ for my $t (qw/PERL SITE VENDOR/) ++ { ++ $self->{"${t}PREFIX"} =~ s!^\Q$p\E(?=/|$)!\$(PREFIX)!; ++ } + } + + my $arch = $Config{archname}; +diff --git a/lib/ExtUtils/MM_Unix.pm b/lib/ExtUtils/MM_Unix.pm +index ad28b22..c3504b6 100644 +--- a/lib/ExtUtils/MM_Unix.pm ++++ b/lib/ExtUtils/MM_Unix.pm +@@ -2046,9 +2046,7 @@ doc__install : doc_site_install + $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site + + pure_perl_install :: all +- $(NOECHO) $(MOD_INSTALL) \ +- read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \ +- write }.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \ ++ $(NOECHO) umask 022; $(MOD_INSTALL) \ + $(INST_LIB) $(DESTINSTALLPRIVLIB) \ + $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \ + $(INST_BIN) $(DESTINSTALLBIN) \ +@@ -2060,7 +2058,7 @@ pure_perl_install :: all + + + pure_site_install :: all +- $(NOECHO) $(MOD_INSTALL) \ ++ $(NOECHO) umask 02; $(MOD_INSTALL) \ + read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \ + write }.$self->catfile('$(DESTINSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \ + $(INST_LIB) $(DESTINSTALLSITELIB) \ +@@ -2073,9 +2071,7 @@ pure_site_install :: all + }.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{ + + pure_vendor_install :: all +- $(NOECHO) $(MOD_INSTALL) \ +- read }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \ +- write }.$self->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \ ++ $(NOECHO) umask 022; $(MOD_INSTALL) \ + $(INST_LIB) $(DESTINSTALLVENDORLIB) \ + $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \ + $(INST_BIN) $(DESTINSTALLVENDORBIN) \ +@@ -2084,37 +2080,19 @@ pure_vendor_install :: all + $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR) + + doc_perl_install :: all +- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod +- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB) +- -$(NOECHO) $(DOC_INSTALL) \ +- "Module" "$(NAME)" \ +- "installed into" "$(INSTALLPRIVLIB)" \ +- LINKTYPE "$(LINKTYPE)" \ +- VERSION "$(VERSION)" \ +- EXE_FILES "$(EXE_FILES)" \ +- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{ + + doc_site_install :: all +- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod +- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB) +- -$(NOECHO) $(DOC_INSTALL) \ ++ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod ++ -$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH) ++ -$(NOECHO) umask 02; $(DOC_INSTALL) \ + "Module" "$(NAME)" \ + "installed into" "$(INSTALLSITELIB)" \ + LINKTYPE "$(LINKTYPE)" \ + VERSION "$(VERSION)" \ + EXE_FILES "$(EXE_FILES)" \ +- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{ ++ >> }.$self->catfile('$(DESTINSTALLSITEARCH)','perllocal.pod').q{ + + doc_vendor_install :: all +- $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod +- -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB) +- -$(NOECHO) $(DOC_INSTALL) \ +- "Module" "$(NAME)" \ +- "installed into" "$(INSTALLVENDORLIB)" \ +- LINKTYPE "$(LINKTYPE)" \ +- VERSION "$(VERSION)" \ +- EXE_FILES "$(EXE_FILES)" \ +- >> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{ + + }; + +@@ -2123,13 +2101,12 @@ uninstall :: uninstall_from_$(INSTALLDIRS)dirs + $(NOECHO) $(NOOP) + + uninstall_from_perldirs :: +- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ + + uninstall_from_sitedirs :: + $(NOECHO) $(UNINSTALL) }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ + + uninstall_from_vendordirs :: +- $(NOECHO) $(UNINSTALL) }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ ++ + }; + + join("",@m); +@@ -2402,7 +2379,7 @@ MAP_PRELIBS = $Config{perllibs} $Config{cryptlib} + ($lperl = $libperl) =~ s/\$\(A\)/$self->{LIB_EXT}/; + } + unless ($libperl && -f $lperl) { # Ilya's code... +- my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE"; ++ my $dir = $self->{PERL_SRC} || "/usr/lib"; + $dir = "$self->{PERL_ARCHLIB}/.." if $self->{UNINSTALLED_PERL}; + $libperl ||= "libperl$self->{LIB_EXT}"; + $libperl = "$dir/$libperl"; +@@ -2986,8 +2963,7 @@ sub prefixify { + print STDERR " prefixify $var => $path\n" if $Verbose >= 2; + print STDERR " from $sprefix to $rprefix\n" if $Verbose >= 2; + +- if( $self->{ARGS}{PREFIX} && +- $path !~ s{^\Q$sprefix\E\b}{$rprefix}s ) ++ if( $path !~ s{^\Q$sprefix\E\b}{$rprefix}s && $self->{ARGS}{PREFIX} ) + { + + print STDERR " cannot prefix, using default.\n" if $Verbose >= 2; +diff --git a/lib/ExtUtils/t/INST.t b/lib/ExtUtils/t/INST.t +index 49938cb..562e3de 100755 +--- a/lib/ExtUtils/t/INST.t ++++ b/lib/ExtUtils/t/INST.t +@@ -65,9 +65,7 @@ isa_ok( $mm, 'ExtUtils::MakeMaker' ); + is( $mm->{NAME}, 'Big::Dummy', 'NAME' ); + is( $mm->{VERSION}, 0.01, 'VERSION' ); + +-my $config_prefix = $Config{installprefixexp} || $Config{installprefix} || +- $Config{prefixexp} || $Config{prefix}; +-is( $mm->{PERLPREFIX}, $config_prefix, 'PERLPREFIX' ); ++is( $mm->{PERLPREFIX}, '$(PREFIX)', 'PERLPREFIX' ); + + is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' ); + +diff --git a/lib/ExtUtils/t/INST_PREFIX.t b/lib/ExtUtils/t/INST_PREFIX.t +index 57e7eb2..337c3b8 100755 +--- a/lib/ExtUtils/t/INST_PREFIX.t ++++ b/lib/ExtUtils/t/INST_PREFIX.t +@@ -16,7 +16,7 @@ BEGIN { + } + + use strict; +-use Test::More tests => 52; ++use Test::More tests => 47; + use MakeMaker::Test::Utils; + use MakeMaker::Test::Setup::BFD; + use ExtUtils::MakeMaker; +@@ -62,16 +62,16 @@ like( $stdout->read, qr{ + Writing\ $Makefile\ for\ Big::Dummy\n + }x ); + +-is( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' ); ++#is( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' ); + + isa_ok( $mm, 'ExtUtils::MakeMaker' ); + + is( $mm->{NAME}, 'Big::Dummy', 'NAME' ); + is( $mm->{VERSION}, 0.01, 'VERSION' ); + +-foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) { +- unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ ); +-} ++#foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) { ++# unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ ); ++#} + + + my $PREFIX = File::Spec->catdir('foo', 'bar'); +-- +tg: (daf8b46..) debian/extutils_hacks (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/fakeroot.diff b/recipes/perl/perl-5.10.1/fakeroot.diff new file mode 100644 index 0000000000..806f38ea39 --- /dev/null +++ b/recipes/perl/perl-5.10.1/fakeroot.diff @@ -0,0 +1,43 @@ +Subject: Postpone LD_LIBRARY_PATH evaluation to the binary targets. + +Modify the setting of LD_LIBRARY_PATH to append pre-existing values at the +time the rule is evaluated rather than when the Makefile is created. + +This is required when building packages with dpkg-buildpackage and fakeroot, +since fakeroot (which now sets LD_LIBRARY_PATH) is not used for the "build" +rule where the Makefile is created, but is for the clean/binary* targets. + + +--- + Makefile.SH | 9 ++------- + 1 files changed, 2 insertions(+), 7 deletions(-) + +diff --git a/Makefile.SH b/Makefile.SH +index 12d84ff..2eb7109 100755 +--- a/Makefile.SH ++++ b/Makefile.SH +@@ -56,12 +56,7 @@ case "$useshrplib" in + true) + # Prefix all runs of 'miniperl' and 'perl' with + # $ldlibpth so that ./perl finds *this* shared libperl. +- case "$LD_LIBRARY_PATH" in +- '') +- ldlibpth="LD_LIBRARY_PATH=`pwd`";; +- *) +- ldlibpth="LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}";; +- esac ++ ldlibpth=LD_LIBRARY_PATH=`pwd`'$${LD_LIBRARY_PATH:+:}$$LD_LIBRARY_PATH' + + pldlflags="$cccdlflags" + static_ldflags='' +@@ -132,7 +127,7 @@ true) + ;; + esac + case "$ldlibpthname" in +- '') ;; ++ ''|LD_LIBRARY_PATH) ;; + *) + case "$osname" in + os2) +-- +tg: (daf8b46..) debian/fakeroot (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/fcgi-test.diff b/recipes/perl/perl-5.10.1/fcgi-test.diff new file mode 100644 index 0000000000..740547011c --- /dev/null +++ b/recipes/perl/perl-5.10.1/fcgi-test.diff @@ -0,0 +1,31 @@ +From: Niko Tyni +Subject: Fix a failure in CGI/t/fast.t when FCGI is installed +Origin: upstream + +Cherry picked from CGI-3.48. + +The test is skipped in clean build environments because FCGI is not in +the core. + +Upstream has dropped the whole test from the Perl core distribution for +the 5.12 series because it relies on external modules. Possibly we should +do that instead. + +--- + lib/CGI/t/fast.t | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/lib/CGI/t/fast.t b/lib/CGI/t/fast.t +index 45f8e12..264e047 100755 +--- a/lib/CGI/t/fast.t ++++ b/lib/CGI/t/fast.t +@@ -32,6 +32,6 @@ SKIP: { + + # if this is false, the package var will be empty + $ENV{FCGI_SOCKET_PATH} = 0; +- is( $CGI::Fast::Ext_Request, '', 'checking no active request' ); ++ is( $CGI::Fast::Ext_Request, undef, 'checking no active request' ); + + } +-- +tg: (daf8b46..) fixes/fcgi-test (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/format-write-crash.diff b/recipes/perl/perl-5.10.1/format-write-crash.diff new file mode 100644 index 0000000000..946f5f1ff5 --- /dev/null +++ b/recipes/perl/perl-5.10.1/format-write-crash.diff @@ -0,0 +1,1255 @@ +From: Niko Tyni +Subject: Fix a crash in format/write +Bug-Debian: http://bugs.debian.org/579537 +Bug: http://rt.perl.org/rt3/Public/Bug/Display.html?id=22977 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/421f30ed1e95009450bdc7905bf3433ee806ea4f + +The perly.act and perly.tab changes were generated with flex 2.5.35-6 +and bison 1:2.3.dfsg-5 from Debian Lenny to avoid unnecessary changes. + +--- + MANIFEST | 1 + + perly.act | 284 ++++++++++++++++++++++++++------------------------- + perly.tab | 30 +++--- + perly.y | 8 ++- + t/comp/form_scope.t | 18 ++++ + 5 files changed, 186 insertions(+), 155 deletions(-) + +diff --git a/MANIFEST b/MANIFEST +index 2b5a968..15ce1c7 100644 +--- a/MANIFEST ++++ b/MANIFEST +@@ -3944,6 +3944,7 @@ t/comp/cpp.aux main file for cpp.t + t/comp/cpp.t See if C preprocessor works + t/comp/decl.t See if declarations work + t/comp/fold.t See if constant folding works ++t/comp/form_scope.t See if format scoping works + t/comp/hints.t See if %^H works + t/comp/multiline.t See if multiline strings work + t/comp/opsubs.t See if q() etc. are not parsed as functions +diff --git a/perly.act b/perly.act +index b610294..e426f9e 100644 +--- a/perly.act ++++ b/perly.act +@@ -450,7 +450,9 @@ case 2: + + case 60: + #line 509 "perly.y" +- { SvREFCNT_inc_simple_void(PL_compcv); ++ { ++ CV *fmtcv = PL_compcv; ++ SvREFCNT_inc_simple_void(PL_compcv); + #ifdef MAD + (yyval.opval) = newFORM((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval), (ps[(4) - (4)].val.opval)); + prepend_madprops((ps[(1) - (4)].val.i_tkval)->tk_mad, (yyval.opval), 'F'); +@@ -460,21 +462,25 @@ case 2: + newFORM((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval), (ps[(4) - (4)].val.opval)); + (yyval.opval) = (OP*)NULL; + #endif ++ if (CvOUTSIDE(fmtcv) && !CvUNIQUE(CvOUTSIDE(fmtcv))) { ++ SvREFCNT_inc_simple_void(fmtcv); ++ pad_add_anon((SV*)fmtcv, OP_NULL); ++ } + ;} + break; + + case 61: +-#line 522 "perly.y" ++#line 528 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 62: +-#line 523 "perly.y" ++#line 529 "perly.y" + { (yyval.opval) = (OP*)NULL; ;} + break; + + case 63: +-#line 528 "perly.y" ++#line 534 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + #ifdef MAD + (yyval.opval) = newMYSUB((ps[(2) - (6)].val.ival), (ps[(3) - (6)].val.opval), (ps[(4) - (6)].val.opval), (ps[(5) - (6)].val.opval), (ps[(6) - (6)].val.opval)); +@@ -487,7 +493,7 @@ case 2: + break; + + case 64: +-#line 541 "perly.y" ++#line 547 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + #ifdef MAD + { +@@ -510,25 +516,25 @@ case 2: + break; + + case 65: +-#line 563 "perly.y" ++#line 569 "perly.y" + { (yyval.ival) = start_subparse(FALSE, 0); + SAVEFREESV(PL_compcv); ;} + break; + + case 66: +-#line 569 "perly.y" ++#line 575 "perly.y" + { (yyval.ival) = start_subparse(FALSE, CVf_ANON); + SAVEFREESV(PL_compcv); ;} + break; + + case 67: +-#line 574 "perly.y" ++#line 580 "perly.y" + { (yyval.ival) = start_subparse(TRUE, 0); + SAVEFREESV(PL_compcv); ;} + break; + + case 68: +-#line 579 "perly.y" ++#line 585 "perly.y" + { const char *const name = SvPV_nolen_const(((SVOP*)(ps[(1) - (1)].val.opval))->op_sv); + if (strEQ(name, "BEGIN") || strEQ(name, "END") + || strEQ(name, "INIT") || strEQ(name, "CHECK") +@@ -538,24 +544,24 @@ case 2: + break; + + case 69: +-#line 589 "perly.y" ++#line 595 "perly.y" + { (yyval.opval) = (OP*)NULL; ;} + break; + + case 71: +-#line 595 "perly.y" ++#line 601 "perly.y" + { (yyval.opval) = (OP*)NULL; ;} + break; + + case 72: +-#line 597 "perly.y" ++#line 603 "perly.y" + { (yyval.opval) = (ps[(2) - (2)].val.opval); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':'); + ;} + break; + + case 73: +-#line 601 "perly.y" ++#line 607 "perly.y" + { (yyval.opval) = IF_MAD( + newOP(OP_NULL, 0), + (OP*)NULL +@@ -565,14 +571,14 @@ case 2: + break; + + case 74: +-#line 611 "perly.y" ++#line 617 "perly.y" + { (yyval.opval) = (ps[(2) - (2)].val.opval); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':'); + ;} + break; + + case 75: +-#line 615 "perly.y" ++#line 621 "perly.y" + { (yyval.opval) = IF_MAD( + newOP(OP_NULL, 0), + (OP*)NULL +@@ -582,12 +588,12 @@ case 2: + break; + + case 76: +-#line 624 "perly.y" ++#line 630 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 77: +-#line 625 "perly.y" ++#line 631 "perly.y" + { (yyval.opval) = IF_MAD( + newOP(OP_NULL,0), + (OP*)NULL +@@ -598,7 +604,7 @@ case 2: + break; + + case 78: +-#line 635 "perly.y" ++#line 641 "perly.y" + { + #ifdef MAD + (yyval.opval) = package((ps[(2) - (3)].val.opval)); +@@ -612,12 +618,12 @@ case 2: + break; + + case 79: +-#line 648 "perly.y" ++#line 654 "perly.y" + { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ ;} + break; + + case 80: +-#line 650 "perly.y" ++#line 656 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + #ifdef MAD + (yyval.opval) = utilize(IVAL((ps[(1) - (7)].val.i_tkval)), (ps[(2) - (7)].val.ival), (ps[(4) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval)); +@@ -634,28 +640,28 @@ case 2: + break; + + case 81: +-#line 667 "perly.y" ++#line 673 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 82: +-#line 671 "perly.y" ++#line 677 "perly.y" + { (yyval.opval) = newLOGOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 83: +-#line 675 "perly.y" ++#line 681 "perly.y" + { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 85: +-#line 683 "perly.y" ++#line 689 "perly.y" + { + #ifdef MAD + OP* op = newNULLLIST(); +@@ -668,7 +674,7 @@ case 2: + break; + + case 86: +-#line 693 "perly.y" ++#line 699 "perly.y" + { + OP* term = (ps[(3) - (3)].val.opval); + DO_MAD( +@@ -680,7 +686,7 @@ case 2: + break; + + case 88: +-#line 706 "perly.y" ++#line 712 "perly.y" + { (yyval.opval) = convert(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_STACKED, + prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (3)].val.i_tkval)),(ps[(2) - (3)].val.opval)), (ps[(3) - (3)].val.opval)) ); + TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o'); +@@ -688,7 +694,7 @@ case 2: + break; + + case 89: +-#line 711 "perly.y" ++#line 717 "perly.y" + { (yyval.opval) = convert(IVAL((ps[(1) - (5)].val.i_tkval)), OPf_STACKED, + prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (5)].val.i_tkval)),(ps[(3) - (5)].val.opval)), (ps[(4) - (5)].val.opval)) ); + TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o'); +@@ -698,7 +704,7 @@ case 2: + break; + + case 90: +-#line 718 "perly.y" ++#line 724 "perly.y" + { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, + prepend_elem(OP_LIST, scalar((ps[(1) - (6)].val.opval)), (ps[(5) - (6)].val.opval)), +@@ -710,7 +716,7 @@ case 2: + break; + + case 91: +-#line 727 "perly.y" ++#line 733 "perly.y" + { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, scalar((ps[(1) - (3)].val.opval)), + newUNOP(OP_METHOD, 0, (ps[(3) - (3)].val.opval)))); +@@ -719,7 +725,7 @@ case 2: + break; + + case 92: +-#line 733 "perly.y" ++#line 739 "perly.y" + { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, + prepend_elem(OP_LIST, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval)), +@@ -728,7 +734,7 @@ case 2: + break; + + case 93: +-#line 739 "perly.y" ++#line 745 "perly.y" + { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, + prepend_elem(OP_LIST, (ps[(2) - (5)].val.opval), (ps[(4) - (5)].val.opval)), +@@ -739,14 +745,14 @@ case 2: + break; + + case 94: +-#line 747 "perly.y" ++#line 753 "perly.y" + { (yyval.opval) = convert(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 95: +-#line 751 "perly.y" ++#line 757 "perly.y" + { (yyval.opval) = convert(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval)); + TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o'); + TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'('); +@@ -755,13 +761,13 @@ case 2: + break; + + case 96: +-#line 757 "perly.y" ++#line 763 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + (yyval.opval) = newANONATTRSUB((ps[(2) - (3)].val.ival), 0, (OP*)NULL, (ps[(3) - (3)].val.opval)); ;} + break; + + case 97: +-#line 760 "perly.y" ++#line 766 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, + prepend_elem(OP_LIST, (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)), (ps[(1) - (5)].val.opval))); +@@ -769,7 +775,7 @@ case 2: + break; + + case 100: +-#line 775 "perly.y" ++#line 781 "perly.y" + { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[(1) - (5)].val.opval), scalar((ps[(3) - (5)].val.opval))); + PL_parser->expect = XOPERATOR; + TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{'); +@@ -779,7 +785,7 @@ case 2: + break; + + case 101: +-#line 782 "perly.y" ++#line 788 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[(1) - (4)].val.opval)), scalar((ps[(3) - (4)].val.opval))); + TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'['); + TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']'); +@@ -787,7 +793,7 @@ case 2: + break; + + case 102: +-#line 787 "perly.y" ++#line 793 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, + ref(newAVREF((ps[(1) - (5)].val.opval)),OP_RV2AV), + scalar((ps[(4) - (5)].val.opval))); +@@ -798,7 +804,7 @@ case 2: + break; + + case 103: +-#line 795 "perly.y" ++#line 801 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, + ref(newAVREF((ps[(1) - (4)].val.opval)),OP_RV2AV), + scalar((ps[(3) - (4)].val.opval))); +@@ -808,7 +814,7 @@ case 2: + break; + + case 104: +-#line 802 "perly.y" ++#line 808 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[(1) - (5)].val.opval)), jmaybe((ps[(3) - (5)].val.opval))); + PL_parser->expect = XOPERATOR; + TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{'); +@@ -818,7 +824,7 @@ case 2: + break; + + case 105: +-#line 809 "perly.y" ++#line 815 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, + ref(newHVREF((ps[(1) - (6)].val.opval)),OP_RV2HV), + jmaybe((ps[(4) - (6)].val.opval))); +@@ -831,7 +837,7 @@ case 2: + break; + + case 106: +-#line 819 "perly.y" ++#line 825 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, + ref(newHVREF((ps[(1) - (5)].val.opval)),OP_RV2HV), + jmaybe((ps[(3) - (5)].val.opval))); +@@ -843,7 +849,7 @@ case 2: + break; + + case 107: +-#line 828 "perly.y" ++#line 834 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + newCVREF(0, scalar((ps[(1) - (4)].val.opval)))); + TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'a'); +@@ -853,7 +859,7 @@ case 2: + break; + + case 108: +-#line 835 "perly.y" ++#line 841 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, (ps[(4) - (5)].val.opval), + newCVREF(0, scalar((ps[(1) - (5)].val.opval))))); +@@ -864,7 +870,7 @@ case 2: + break; + + case 109: +-#line 844 "perly.y" ++#line 850 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, (ps[(3) - (4)].val.opval), + newCVREF(0, scalar((ps[(1) - (4)].val.opval))))); +@@ -874,7 +880,7 @@ case 2: + break; + + case 110: +-#line 851 "perly.y" ++#line 857 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + newCVREF(0, scalar((ps[(1) - (3)].val.opval)))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'('); +@@ -883,7 +889,7 @@ case 2: + break; + + case 111: +-#line 857 "perly.y" ++#line 863 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[(5) - (6)].val.opval), (ps[(2) - (6)].val.opval)); + TOKEN_GETMAD((ps[(1) - (6)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(3) - (6)].val.i_tkval),(yyval.opval),')'); +@@ -893,7 +899,7 @@ case 2: + break; + + case 112: +-#line 864 "perly.y" ++#line 870 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[(4) - (5)].val.opval), (OP*)NULL); + TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),')'); +@@ -903,21 +909,21 @@ case 2: + break; + + case 113: +-#line 874 "perly.y" ++#line 880 "perly.y" + { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[(1) - (3)].val.opval), IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(3) - (3)].val.opval)); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 114: +-#line 878 "perly.y" ++#line 884 "perly.y" + { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 115: +-#line 882 "perly.y" ++#line 888 "perly.y" + { if (IVAL((ps[(2) - (3)].val.i_tkval)) != OP_REPEAT) + scalar((ps[(1) - (3)].val.opval)); + (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), scalar((ps[(3) - (3)].val.opval))); +@@ -926,49 +932,49 @@ case 2: + break; + + case 116: +-#line 888 "perly.y" ++#line 894 "perly.y" + { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 117: +-#line 892 "perly.y" ++#line 898 "perly.y" + { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 118: +-#line 896 "perly.y" ++#line 902 "perly.y" + { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 119: +-#line 900 "perly.y" ++#line 906 "perly.y" + { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 120: +-#line 904 "perly.y" ++#line 910 "perly.y" + { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 121: +-#line 908 "perly.y" ++#line 914 "perly.y" + { (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 122: +-#line 912 "perly.y" ++#line 918 "perly.y" + { + (yyval.opval) = newRANGE(IVAL((ps[(2) - (3)].val.i_tkval)), scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval))); + DO_MAD({ +@@ -983,28 +989,28 @@ case 2: + break; + + case 123: +-#line 924 "perly.y" ++#line 930 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 124: +-#line 928 "perly.y" ++#line 934 "perly.y" + { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 125: +-#line 932 "perly.y" ++#line 938 "perly.y" + { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 126: +-#line 936 "perly.y" ++#line 942 "perly.y" + { (yyval.opval) = bind_match(IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval)); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval), + ((yyval.opval)->op_type == OP_NOT +@@ -1014,14 +1020,14 @@ case 2: + break; + + case 127: +-#line 946 "perly.y" ++#line 952 "perly.y" + { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[(2) - (2)].val.opval))); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 128: +-#line 950 "perly.y" ++#line 956 "perly.y" + { (yyval.opval) = IF_MAD( + newUNOP(OP_NULL, 0, (ps[(2) - (2)].val.opval)), + (ps[(2) - (2)].val.opval) +@@ -1031,21 +1037,21 @@ case 2: + break; + + case 129: +-#line 957 "perly.y" ++#line 963 "perly.y" + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval))); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 130: +-#line 961 "perly.y" ++#line 967 "perly.y" + { (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((ps[(2) - (2)].val.opval))); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 131: +-#line 965 "perly.y" ++#line 971 "perly.y" + { (yyval.opval) = newUNOP(OP_POSTINC, 0, + mod(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC)); + TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o'); +@@ -1053,7 +1059,7 @@ case 2: + break; + + case 132: +-#line 970 "perly.y" ++#line 976 "perly.y" + { (yyval.opval) = newUNOP(OP_POSTDEC, 0, + mod(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC)); + TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o'); +@@ -1061,7 +1067,7 @@ case 2: + break; + + case 133: +-#line 975 "perly.y" ++#line 981 "perly.y" + { (yyval.opval) = newUNOP(OP_PREINC, 0, + mod(scalar((ps[(2) - (2)].val.opval)), OP_PREINC)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); +@@ -1069,7 +1075,7 @@ case 2: + break; + + case 134: +-#line 980 "perly.y" ++#line 986 "perly.y" + { (yyval.opval) = newUNOP(OP_PREDEC, 0, + mod(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); +@@ -1077,7 +1083,7 @@ case 2: + break; + + case 135: +-#line 989 "perly.y" ++#line 995 "perly.y" + { (yyval.opval) = newANONLIST((ps[(2) - (3)].val.opval)); + TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'['); + TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),']'); +@@ -1085,7 +1091,7 @@ case 2: + break; + + case 136: +-#line 994 "perly.y" ++#line 1000 "perly.y" + { (yyval.opval) = newANONLIST((OP*)NULL); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'['); + TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),']'); +@@ -1093,7 +1099,7 @@ case 2: + break; + + case 137: +-#line 999 "perly.y" ++#line 1005 "perly.y" + { (yyval.opval) = newANONHASH((ps[(2) - (4)].val.opval)); + TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{'); + TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),';'); +@@ -1102,7 +1108,7 @@ case 2: + break; + + case 138: +-#line 1005 "perly.y" ++#line 1011 "perly.y" + { (yyval.opval) = newANONHASH((OP*)NULL); + TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'{'); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),';'); +@@ -1111,7 +1117,7 @@ case 2: + break; + + case 139: +-#line 1011 "perly.y" ++#line 1017 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + (yyval.opval) = newANONATTRSUB((ps[(2) - (5)].val.ival), (ps[(3) - (5)].val.opval), (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)); + TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o'); +@@ -1121,21 +1127,21 @@ case 2: + break; + + case 140: +-#line 1022 "perly.y" ++#line 1028 "perly.y" + { (yyval.opval) = dofile((ps[(2) - (2)].val.opval), IVAL((ps[(1) - (2)].val.i_tkval))); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 141: +-#line 1026 "perly.y" ++#line 1032 "perly.y" + { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, scope((ps[(2) - (2)].val.opval))); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'D'); + ;} + break; + + case 142: +-#line 1030 "perly.y" ++#line 1036 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, + OPf_SPECIAL|OPf_STACKED, + prepend_elem(OP_LIST, +@@ -1150,7 +1156,7 @@ case 2: + break; + + case 143: +-#line 1042 "perly.y" ++#line 1048 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, + OPf_SPECIAL|OPf_STACKED, + append_elem(OP_LIST, +@@ -1166,7 +1172,7 @@ case 2: + break; + + case 144: +-#line 1055 "perly.y" ++#line 1061 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, + prepend_elem(OP_LIST, + scalar(newCVREF(0,scalar((ps[(2) - (4)].val.opval)))), (OP*)NULL)); dep(); +@@ -1177,7 +1183,7 @@ case 2: + break; + + case 145: +-#line 1063 "perly.y" ++#line 1069 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, + prepend_elem(OP_LIST, + (ps[(4) - (5)].val.opval), +@@ -1189,7 +1195,7 @@ case 2: + break; + + case 150: +-#line 1079 "perly.y" ++#line 1085 "perly.y" + { (yyval.opval) = newCONDOP(0, (ps[(1) - (5)].val.opval), (ps[(3) - (5)].val.opval), (ps[(5) - (5)].val.opval)); + TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'?'); + TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),':'); +@@ -1197,26 +1203,26 @@ case 2: + break; + + case 151: +-#line 1084 "perly.y" ++#line 1090 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, mod((ps[(2) - (2)].val.opval),OP_REFGEN)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 152: +-#line 1088 "perly.y" ++#line 1094 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 153: +-#line 1090 "perly.y" ++#line 1096 "perly.y" + { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval))); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'k'); + ;} + break; + + case 154: +-#line 1094 "perly.y" ++#line 1100 "perly.y" + { (yyval.opval) = sawparens(IF_MAD(newUNOP(OP_NULL,0,(ps[(2) - (3)].val.opval)), (ps[(2) - (3)].val.opval))); + TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')'); +@@ -1224,7 +1230,7 @@ case 2: + break; + + case 155: +-#line 1099 "perly.y" ++#line 1105 "perly.y" + { (yyval.opval) = sawparens(newNULLLIST()); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')'); +@@ -1232,37 +1238,37 @@ case 2: + break; + + case 156: +-#line 1104 "perly.y" ++#line 1110 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 157: +-#line 1106 "perly.y" ++#line 1112 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 158: +-#line 1108 "perly.y" ++#line 1114 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 159: +-#line 1110 "perly.y" ++#line 1116 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 160: +-#line 1112 "perly.y" ++#line 1118 "perly.y" + { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));;} + break; + + case 161: +-#line 1114 "perly.y" ++#line 1120 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 162: +-#line 1116 "perly.y" ++#line 1122 "perly.y" + { (yyval.opval) = prepend_elem(OP_ASLICE, + newOP(OP_PUSHMARK, 0), + newLISTOP(OP_ASLICE, 0, +@@ -1274,7 +1280,7 @@ case 2: + break; + + case 163: +-#line 1125 "perly.y" ++#line 1131 "perly.y" + { (yyval.opval) = prepend_elem(OP_HSLICE, + newOP(OP_PUSHMARK, 0), + newLISTOP(OP_HSLICE, 0, +@@ -1288,17 +1294,17 @@ case 2: + break; + + case 164: +-#line 1136 "perly.y" ++#line 1142 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 165: +-#line 1138 "perly.y" ++#line 1144 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); ;} + break; + + case 166: +-#line 1140 "perly.y" ++#line 1146 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (3)].val.opval))); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')'); +@@ -1306,7 +1312,7 @@ case 2: + break; + + case 167: +-#line 1145 "perly.y" ++#line 1151 "perly.y" + { + (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, (ps[(3) - (4)].val.opval), scalar((ps[(1) - (4)].val.opval)))); +@@ -1322,7 +1328,7 @@ case 2: + break; + + case 168: +-#line 1158 "perly.y" ++#line 1164 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, (ps[(3) - (3)].val.opval), scalar((ps[(2) - (3)].val.opval)))); + TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o'); +@@ -1330,7 +1336,7 @@ case 2: + break; + + case 169: +-#line 1163 "perly.y" ++#line 1169 "perly.y" + { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), OPf_SPECIAL); + PL_hints |= HINT_BLOCK_SCOPE; + TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o'); +@@ -1338,74 +1344,74 @@ case 2: + break; + + case 170: +-#line 1168 "perly.y" ++#line 1174 "perly.y" + { (yyval.opval) = newLOOPEX(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 171: +-#line 1172 "perly.y" ++#line 1178 "perly.y" + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval))); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 172: +-#line 1176 "perly.y" ++#line 1182 "perly.y" + { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0); + TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 173: +-#line 1180 "perly.y" ++#line 1186 "perly.y" + { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 174: +-#line 1184 "perly.y" ++#line 1190 "perly.y" + { (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 175: +-#line 1188 "perly.y" ++#line 1194 "perly.y" + { (yyval.opval) = newOP(OP_REQUIRE, (ps[(1) - (1)].val.i_tkval) ? OPf_SPECIAL : 0); + TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 176: +-#line 1192 "perly.y" ++#line 1198 "perly.y" + { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[(1) - (2)].val.i_tkval) ? OPf_SPECIAL : 0, (ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 177: +-#line 1196 "perly.y" ++#line 1202 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); ;} + break; + + case 178: +-#line 1198 "perly.y" ++#line 1204 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); ;} + break; + + case 179: +-#line 1201 "perly.y" ++#line 1207 "perly.y" + { (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0); + TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o'); + ;} + break; + + case 180: +-#line 1205 "perly.y" ++#line 1211 "perly.y" + { (yyval.opval) = newOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0); + TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o'); + TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'('); +@@ -1414,13 +1420,13 @@ case 2: + break; + + case 181: +-#line 1211 "perly.y" ++#line 1217 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + scalar((ps[(1) - (1)].val.opval))); ;} + break; + + case 182: +-#line 1214 "perly.y" ++#line 1220 "perly.y" + { (yyval.opval) = (IVAL((ps[(1) - (3)].val.i_tkval)) == OP_NOT) + ? newUNOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0))) + : newOP(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_SPECIAL); +@@ -1432,7 +1438,7 @@ case 2: + break; + + case 183: +-#line 1223 "perly.y" ++#line 1229 "perly.y" + { (yyval.opval) = newUNOP(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval)); + TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o'); + TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'('); +@@ -1441,7 +1447,7 @@ case 2: + break; + + case 184: +-#line 1229 "perly.y" ++#line 1235 "perly.y" + { (yyval.opval) = pmruntime((ps[(1) - (4)].val.opval), (ps[(3) - (4)].val.opval), 1); + TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')'); +@@ -1449,7 +1455,7 @@ case 2: + break; + + case 187: +-#line 1239 "perly.y" ++#line 1245 "perly.y" + { (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval)); + DO_MAD( + token_getmad((ps[(1) - (3)].val.i_tkval),(yyval.opval),'d'); +@@ -1460,14 +1466,14 @@ case 2: + break; + + case 188: +-#line 1247 "perly.y" ++#line 1253 "perly.y" + { (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval))); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'d'); + ;} + break; + + case 189: +-#line 1254 "perly.y" ++#line 1260 "perly.y" + { (yyval.opval) = sawparens((ps[(2) - (3)].val.opval)); + TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')'); +@@ -1475,7 +1481,7 @@ case 2: + break; + + case 190: +-#line 1259 "perly.y" ++#line 1265 "perly.y" + { (yyval.opval) = sawparens(newNULLLIST()); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'('); + TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')'); +@@ -1483,42 +1489,42 @@ case 2: + break; + + case 191: +-#line 1264 "perly.y" ++#line 1270 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 192: +-#line 1266 "perly.y" ++#line 1272 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 193: +-#line 1268 "perly.y" ++#line 1274 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 194: +-#line 1273 "perly.y" ++#line 1279 "perly.y" + { (yyval.opval) = (OP*)NULL; ;} + break; + + case 195: +-#line 1275 "perly.y" ++#line 1281 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 196: +-#line 1279 "perly.y" ++#line 1285 "perly.y" + { (yyval.opval) = (OP*)NULL; ;} + break; + + case 197: +-#line 1281 "perly.y" ++#line 1287 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + + case 198: +-#line 1283 "perly.y" ++#line 1289 "perly.y" + { + #ifdef MAD + OP* op = newNULLLIST(); +@@ -1532,69 +1538,69 @@ case 2: + break; + + case 199: +-#line 1298 "perly.y" ++#line 1304 "perly.y" + { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;} + break; + + case 200: +-#line 1302 "perly.y" ++#line 1308 "perly.y" + { (yyval.opval) = newCVREF(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'&'); + ;} + break; + + case 201: +-#line 1308 "perly.y" ++#line 1314 "perly.y" + { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$'); + ;} + break; + + case 202: +-#line 1314 "perly.y" ++#line 1320 "perly.y" + { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@'); + ;} + break; + + case 203: +-#line 1320 "perly.y" ++#line 1326 "perly.y" + { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%'); + ;} + break; + + case 204: +-#line 1326 "perly.y" ++#line 1332 "perly.y" + { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l'); + ;} + break; + + case 205: +-#line 1332 "perly.y" ++#line 1338 "perly.y" + { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval)); + TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*'); + ;} + break; + + case 206: +-#line 1339 "perly.y" ++#line 1345 "perly.y" + { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;} + break; + + case 207: +-#line 1341 "perly.y" ++#line 1347 "perly.y" + { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;} + break; + + case 208: +-#line 1343 "perly.y" ++#line 1349 "perly.y" + { (yyval.opval) = scope((ps[(1) - (1)].val.opval)); ;} + break; + + case 209: +-#line 1346 "perly.y" ++#line 1352 "perly.y" + { (yyval.opval) = (ps[(1) - (1)].val.opval); ;} + break; + +diff --git a/perly.tab b/perly.tab +index 8dd02ed..5980559 100644 +--- a/perly.tab ++++ b/perly.tab +@@ -171,21 +171,21 @@ static const yytype_uint16 yyrline[] = + 311, 314, 320, 321, 328, 341, 353, 364, 374, 384, + 416, 424, 434, 440, 441, 446, 449, 453, 458, 462, + 466, 472, 481, 485, 487, 489, 491, 493, 498, 502, +- 508, 522, 523, 527, 540, 563, 569, 574, 579, 589, +- 590, 595, 596, 600, 610, 614, 624, 625, 634, 648, +- 647, 666, 670, 674, 678, 682, 692, 701, 705, 710, +- 717, 726, 732, 738, 746, 750, 757, 756, 767, 768, +- 772, 781, 786, 794, 801, 808, 818, 827, 834, 843, +- 850, 856, 863, 873, 877, 881, 887, 891, 895, 899, +- 903, 907, 911, 923, 927, 931, 935, 945, 949, 956, +- 960, 964, 969, 974, 979, 988, 993, 998, 1004, 1010, +- 1021, 1025, 1029, 1041, 1054, 1062, 1074, 1075, 1076, 1077, +- 1078, 1083, 1087, 1089, 1093, 1098, 1103, 1105, 1107, 1109, +- 1111, 1113, 1115, 1124, 1135, 1137, 1139, 1144, 1157, 1162, +- 1167, 1171, 1175, 1179, 1183, 1187, 1191, 1195, 1197, 1200, +- 1204, 1210, 1213, 1222, 1228, 1233, 1234, 1238, 1246, 1253, +- 1258, 1263, 1265, 1267, 1272, 1274, 1279, 1280, 1282, 1297, +- 1301, 1307, 1313, 1319, 1325, 1331, 1338, 1340, 1342, 1345 ++ 508, 528, 529, 533, 546, 569, 575, 580, 585, 595, ++ 596, 601, 602, 606, 616, 620, 630, 631, 640, 654, ++ 653, 672, 676, 680, 684, 688, 698, 707, 711, 716, ++ 723, 732, 738, 744, 752, 756, 763, 762, 773, 774, ++ 778, 787, 792, 800, 807, 814, 824, 833, 840, 849, ++ 856, 862, 869, 879, 883, 887, 893, 897, 901, 905, ++ 909, 913, 917, 929, 933, 937, 941, 951, 955, 962, ++ 966, 970, 975, 980, 985, 994, 999, 1004, 1010, 1016, ++ 1027, 1031, 1035, 1047, 1060, 1068, 1080, 1081, 1082, 1083, ++ 1084, 1089, 1093, 1095, 1099, 1104, 1109, 1111, 1113, 1115, ++ 1117, 1119, 1121, 1130, 1141, 1143, 1145, 1150, 1163, 1168, ++ 1173, 1177, 1181, 1185, 1189, 1193, 1197, 1201, 1203, 1206, ++ 1210, 1216, 1219, 1228, 1234, 1239, 1240, 1244, 1252, 1259, ++ 1264, 1269, 1271, 1273, 1278, 1280, 1285, 1286, 1288, 1303, ++ 1307, 1313, 1319, 1325, 1331, 1337, 1344, 1346, 1348, 1351 + }; + #endif + +diff --git a/perly.y b/perly.y +index 6b8b4e3..9164cab 100644 +--- a/perly.y ++++ b/perly.y +@@ -506,7 +506,9 @@ peg : PEG + ; + + format : FORMAT startformsub formname block +- { SvREFCNT_inc_simple_void(PL_compcv); ++ { ++ CV *fmtcv = PL_compcv; ++ SvREFCNT_inc_simple_void(PL_compcv); + #ifdef MAD + $$ = newFORM($2, $3, $4); + prepend_madprops($1->tk_mad, $$, 'F'); +@@ -516,6 +518,10 @@ format : FORMAT startformsub formname block + newFORM($2, $3, $4); + $$ = (OP*)NULL; + #endif ++ if (CvOUTSIDE(fmtcv) && !CvUNIQUE(CvOUTSIDE(fmtcv))) { ++ SvREFCNT_inc_simple_void(fmtcv); ++ pad_add_anon((SV*)fmtcv, OP_NULL); ++ } + } + ; + +diff --git a/t/comp/form_scope.t b/t/comp/form_scope.t +new file mode 100644 +index 0000000..3ef891e +--- /dev/null ++++ b/t/comp/form_scope.t +@@ -0,0 +1,18 @@ ++#!./perl ++# ++# Tests bug #22977. Test case from Dave Mitchell. ++ ++print "1..2\n"; ++ ++sub f ($); ++sub f ($) { ++my $test = $_[0]; ++write; ++format STDOUT = ++ok @<<<<<<< ++$test ++. ++} ++ ++f(1); ++f(2); +-- +tg: (daf8b46..) fixes/format-write-crash (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/hppa-thread-eagain.diff b/recipes/perl/perl-5.10.1/hppa-thread-eagain.diff new file mode 100644 index 0000000000..b967752629 --- /dev/null +++ b/recipes/perl/perl-5.10.1/hppa-thread-eagain.diff @@ -0,0 +1,72 @@ +From: Niko Tyni +Subject: make the threads-shared test suite more robust, fixing failures on hppa +Closes: 554218 + +Fix from threads-shared-1.31: + Handle thread creation failures in tests due to lack of memory, etc. + + +--- + ext/threads-shared/t/stress.t | 28 ++++++++++++++++++++++++---- + 1 files changed, 24 insertions(+), 4 deletions(-) + +diff --git a/ext/threads-shared/t/stress.t b/ext/threads-shared/t/stress.t +index e36ab0a..adfd1ed 100755 +--- a/ext/threads-shared/t/stress.t ++++ b/ext/threads-shared/t/stress.t +@@ -39,7 +39,11 @@ use threads::shared; + my $mutex = 1; + share($mutex); + ++ my $warning; ++ $SIG{__WARN__} = sub { $warning = shift; }; ++ + my @threads; ++ + for (reverse(1..$cnt)) { + $threads[$_] = threads->create(sub { + my $tnum = shift; +@@ -71,10 +75,26 @@ use threads::shared; + cond_broadcast($mutex); + return ('okay'); + }, $_); ++ ++ # Handle thread creation failures ++ if ($warning) { ++ my $printit = 1; ++ if ($warning =~ /returned 11/) { ++ $warning = "Thread creation failed due to 'No more processes'\n"; ++ $printit = (! $ENV{'PERL_CORE'}); ++ } elsif ($warning =~ /returned 12/) { ++ $warning = "Thread creation failed due to 'No more memory'\n"; ++ $printit = (! $ENV{'PERL_CORE'}); ++ } ++ print(STDERR "# Warning: $warning") if ($printit); ++ lock($mutex); ++ $mutex = $_ + 1; ++ last; ++ } + } + + # Gather thread results +- my ($okay, $failures, $timeouts, $unknown) = (0, 0, 0, 0); ++ my ($okay, $failures, $timeouts, $unknown) = (0, 0, 0, 0, 0); + for (1..$cnt) { + if (! $threads[$_]) { + $failures++; +@@ -92,10 +112,10 @@ use threads::shared; + } + } + } ++ + if ($failures) { +- # Most likely due to running out of memory +- print(STDERR "# Warning: $failures threads failed\n"); +- print(STDERR "# Note: errno 12 = ENOMEM\n"); ++ my $only = $cnt - $failures; ++ print(STDERR "# Warning: Intended to use $cnt threads, but could only muster $only\n"); + $cnt -= $failures; + } + +-- +tg: (daf8b46..) fixes/hppa-thread-eagain (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/hurd-ccflags.diff b/recipes/perl/perl-5.10.1/hurd-ccflags.diff new file mode 100644 index 0000000000..b103154aa3 --- /dev/null +++ b/recipes/perl/perl-5.10.1/hurd-ccflags.diff @@ -0,0 +1,26 @@ +Author: Samuel Thibault +Subject: Make hints/gnu.sh append to $ccflags rather than overriding them +Bug-Debian: http://bugs.debian.org/587901 + +Don't override possible extra $ccflags values given to Configure +on GNU/Hurd. + +--- + hints/gnu.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hints/gnu.sh b/hints/gnu.sh +index 2cfce54..c1ba2db 100644 +--- a/hints/gnu.sh ++++ b/hints/gnu.sh +@@ -19,7 +19,7 @@ lddlflags='-shared' + ccdlflags='-Wl,-E' + + # Debian bug #258618 +-ccflags='-D_GNU_SOURCE' ++ccflags="-D_GNU_SOURCE $ccflags" + + # The following routines are only available as stubs in GNU libc. + # XXX remove this once metaconf detects the GNU libc stubs. +-- +tg: (daf8b46..) fixes/hurd-ccflags (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/hurd_cppsymbols.diff b/recipes/perl/perl-5.10.1/hurd_cppsymbols.diff new file mode 100644 index 0000000000..d4802319c9 --- /dev/null +++ b/recipes/perl/perl-5.10.1/hurd_cppsymbols.diff @@ -0,0 +1,25 @@ +From: Samuel Thibault +Subject: Add gcc predefined macros to $Config{cppsymbols} on GNU/Hurd. +Bug-Debian: http://bugs.debian.org/544307 +Origin: http://perl5.git.perl.org/perl.git/commit/eeb92b76fda504cc34bcd98ba2dbc73d933c0208 + + +--- + Configure | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/Configure b/Configure +index 5e863b3..eed6f9b 100755 +--- a/Configure ++++ b/Configure +@@ -21375,7 +21375,7 @@ $eunicefix Cppsym.try + ./Cppsym < Cppsym.know > Cppsym.true + : Add in any linux cpp "predefined macros": + case "$osname::$gccversion" in +- *linux*::*.*|*gnukfreebsd*::*.*) ++ *linux*::*.*|*gnukfreebsd*::*.*|gnu::*.*) + tHdrH=_tmpHdr + rm -f $tHdrH'.h' $tHdrH + touch $tHdrH'.h' +-- +tg: (89dcf0f..) fixes/hurd_cppsymbols (depends on: fixes/kfreebsd_cppsymbols) diff --git a/recipes/perl/perl-5.10.1/instmodsh_doc.diff b/recipes/perl/perl-5.10.1/instmodsh_doc.diff new file mode 100644 index 0000000000..10b743d32c --- /dev/null +++ b/recipes/perl/perl-5.10.1/instmodsh_doc.diff @@ -0,0 +1,26 @@ +Subject: Debian policy doesn't install .packlist files for core or vendor. + + +--- + lib/ExtUtils/instmodsh | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/lib/ExtUtils/instmodsh b/lib/ExtUtils/instmodsh +index 5874aa6..6a2f03e 100644 +--- a/lib/ExtUtils/instmodsh ++++ b/lib/ExtUtils/instmodsh +@@ -18,9 +18,11 @@ instmodsh - A shell to examine installed modules + + =head1 DESCRIPTION + +-A little interface to ExtUtils::Installed to examine installed modules, ++A little interface to ExtUtils::Installed to examine locally* installed modules, + validate your packlists and even create a tarball from an installed module. + ++*On Debian system, B and B modules are managed by C. ++ + =head1 SEE ALSO + + ExtUtils::Installed +-- +tg: (daf8b46..) debian/instmodsh_doc (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/kfreebsd-filecopy-pipes.diff b/recipes/perl/perl-5.10.1/kfreebsd-filecopy-pipes.diff new file mode 100644 index 0000000000..839d06465e --- /dev/null +++ b/recipes/perl/perl-5.10.1/kfreebsd-filecopy-pipes.diff @@ -0,0 +1,68 @@ +From: Niko Tyni +Subject: Fix File::Copy::copy with pipes on GNU/kFreeBSD +Bug-Debian: http://bugs.debian.org/537555 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/16f708c9bc0dc48713b200031295a40bed83bbfc + +Quoting Petr Salinger: +The Copy tries to detect whether source and dest are the same files. +Unfortunately, on the GNU/kFreeBSD the kernel returns for all pipes +as device and inode numbers just zero. See pipe_stat() in +http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/sys_pipe.c + +Patch by Petr Salinger, tests by Niko Tyni. + +Backported from blead change 16f708c9bc0dc48713b200031295a40bed83bbfc + +--- + lib/File/Copy.pm | 2 +- + lib/File/Copy.t | 15 ++++++++++++++- + 2 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/lib/File/Copy.pm b/lib/File/Copy.pm +index e1d7724..1da5437 100644 +--- a/lib/File/Copy.pm ++++ b/lib/File/Copy.pm +@@ -115,7 +115,7 @@ sub copy { + my @fs = stat($from); + if (@fs) { + my @ts = stat($to); +- if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1]) { ++ if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1] && !-p $from) { + carp("'$from' and '$to' are identical (not copied)"); + return 0; + } +diff --git a/lib/File/Copy.t b/lib/File/Copy.t +index bcfa207..2e5ce9c 100755 +--- a/lib/File/Copy.t ++++ b/lib/File/Copy.t +@@ -14,7 +14,7 @@ use Test::More; + + my $TB = Test::More->builder; + +-plan tests => 115; ++plan tests => 117; + + # We're going to override rename() later on but Perl has to see an override + # at compile time to honor it. +@@ -272,6 +272,19 @@ for my $cross_partition_test (0..1) { + } + } + ++SKIP: { ++ skip("fork required to test pipe copying", 2) ++ if (!$Config{'d_fork'}); ++ ++ open(my $IN, "-|") || exec $^X, '-e', 'print "Hello, world!\n"'; ++ open(my $OUT, "|-") || exec $^X, '-ne', 'exit(/Hello/ ? 55 : 0)'; ++ ++ ok(copy($IN, $OUT), "copy pipe to another"); ++ close($OUT); ++ is($? >> 8, 55, "content copied through the pipes"); ++ close($IN); ++} ++ + END { + 1 while unlink "file-$$"; + 1 while unlink "lib/file-$$"; +-- +tg: (daf8b46..) fixes/kfreebsd-filecopy-pipes (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/kfreebsd_cppsymbols.diff b/recipes/perl/perl-5.10.1/kfreebsd_cppsymbols.diff new file mode 100644 index 0000000000..41c43b12dc --- /dev/null +++ b/recipes/perl/perl-5.10.1/kfreebsd_cppsymbols.diff @@ -0,0 +1,28 @@ +From: Niko Tyni +Subject: Add gcc predefined macros to $Config{cppsymbols} on GNU/kFreeBSD. +Bug-Debian: http://bugs.debian.org/533098 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/3b910a06633f63976a6da223b122193040fbe96d + +This is needed at least by h2ph, otherwise the generated .ph files +choke on missing __LONG_MAX__ and similar definitions. + + +--- + Configure | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/Configure b/Configure +index 01fa3c0..5e863b3 100755 +--- a/Configure ++++ b/Configure +@@ -21375,7 +21375,7 @@ $eunicefix Cppsym.try + ./Cppsym < Cppsym.know > Cppsym.true + : Add in any linux cpp "predefined macros": + case "$osname::$gccversion" in +- *linux*::*.*) ++ *linux*::*.*|*gnukfreebsd*::*.*) + tHdrH=_tmpHdr + rm -f $tHdrH'.h' $tHdrH + touch $tHdrH'.h' +-- +tg: (daf8b46..) fixes/kfreebsd_cppsymbols (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/ld_run_path.diff b/recipes/perl/perl-5.10.1/ld_run_path.diff new file mode 100644 index 0000000000..8ab25c9481 --- /dev/null +++ b/recipes/perl/perl-5.10.1/ld_run_path.diff @@ -0,0 +1,23 @@ +Subject: Remove standard libs from LD_RUN_PATH as per Debian policy. + + +--- + lib/ExtUtils/Liblist/Kid.pm | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/lib/ExtUtils/Liblist/Kid.pm b/lib/ExtUtils/Liblist/Kid.pm +index 380d4f8..6e6ed5a 100644 +--- a/lib/ExtUtils/Liblist/Kid.pm ++++ b/lib/ExtUtils/Liblist/Kid.pm +@@ -53,6 +53,9 @@ sub _unix_os2_ext { + my($pwd) = cwd(); # from Cwd.pm + my($found) = 0; + ++ # Debian-specific: don't use LD_RUN_PATH for standard dirs ++ $ld_run_path_seen{$_}++ for qw(/lib /usr/lib /usr/X11R6/lib); ++ + foreach my $thislib (split ' ', $potential_libs) { + + # Handle possible linker path arguments. +-- +tg: (daf8b46..) debian/ld_run_path (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/libnet_config_path.diff b/recipes/perl/perl-5.10.1/libnet_config_path.diff new file mode 100644 index 0000000000..da7a4c1c30 --- /dev/null +++ b/recipes/perl/perl-5.10.1/libnet_config_path.diff @@ -0,0 +1,35 @@ +Subject: Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable. + + +--- + lib/Net/Config.pm | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/lib/Net/Config.pm b/lib/Net/Config.pm +index db51c1f..8404593 100644 +--- a/lib/Net/Config.pm ++++ b/lib/Net/Config.pm +@@ -57,9 +57,8 @@ my %nc = ( + } + TRY_INTERNET_CONFIG + +-my $file = __FILE__; ++my $file = '/etc/perl/Net/libnet.cfg'; + my $ref; +-$file =~ s/Config.pm/libnet.cfg/; + if (-f $file) { + $ref = eval { local $SIG{__DIE__}; do $file }; + if (ref($ref) eq 'HASH') { +@@ -132,8 +131,8 @@ Net::Config - Local configuration data for libnet + C holds configuration data for the modules in the libnet + distribution. During installation you will be asked for these values. + +-The configuration data is held globally in a file in the perl installation +-tree, but a user may override any of these values by providing their own. This ++The configuration data is held globally in C, ++but a user may override any of these values by providing their own. This + can be done by having a C<.libnetrc> file in their home directory. This file + should return a reference to a HASH containing the keys described below. + For example +-- +tg: (daf8b46..) debian/libnet_config_path (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/m68k_thread_stress.diff b/recipes/perl/perl-5.10.1/m68k_thread_stress.diff new file mode 100644 index 0000000000..f45fa36c50 --- /dev/null +++ b/recipes/perl/perl-5.10.1/m68k_thread_stress.diff @@ -0,0 +1,43 @@ +Subject: Disable some threads tests on m68k for now due to missing TLS. +Closes: #495826, #517938 + + +--- + ext/threads-shared/t/stress.t | 4 ++++ + ext/threads-shared/t/waithires.t | 6 ++++++ + 2 files changed, 10 insertions(+), 0 deletions(-) + +diff --git a/ext/threads-shared/t/stress.t b/ext/threads-shared/t/stress.t +index e36ab0a..eb591ff 100755 +--- a/ext/threads-shared/t/stress.t ++++ b/ext/threads-shared/t/stress.t +@@ -11,6 +11,10 @@ BEGIN { + print("1..0 # SKIP Broken under HP-UX 10.20\n"); + exit(0); + } ++ if ($^O eq 'linux' && $Config{archname} =~ /^m68k/) { ++ print("1..0 # Skip: no TLS on m68k yet \n"); ++ exit(0); ++ } + } + + use ExtUtils::testlib; +diff --git a/ext/threads-shared/t/waithires.t b/ext/threads-shared/t/waithires.t +index ae82448..e17c471 100755 +--- a/ext/threads-shared/t/waithires.t ++++ b/ext/threads-shared/t/waithires.t +@@ -16,6 +16,12 @@ BEGIN { + if (! eval 'use Time::HiRes "time"; 1') { + Test::skip_all('Time::HiRes not available'); + } ++ ++ if ($^O eq 'linux' && $Config{archname} =~ /^m68k/) { ++ print("1..0 # Skip: no TLS on m68k yet \n"); ++ exit(0); ++ } ++ + } + + use ExtUtils::testlib; +-- +tg: (daf8b46..) debian/m68k_thread_stress (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/mod_paths.diff b/recipes/perl/perl-5.10.1/mod_paths.diff new file mode 100644 index 0000000000..c32f3dea14 --- /dev/null +++ b/recipes/perl/perl-5.10.1/mod_paths.diff @@ -0,0 +1,117 @@ +Subject: Tweak @INC ordering for Debian + +Our order is: + + etc (for config files) + site (5.8.1) + vendor (all) + core (5.8.1) + site (version-indep) + site (pre-5.8.1) + +The rationale being that an admin (via site), or module packager +(vendor) can chose to shadow core modules when there is a newer +version than is included in core. + + +--- + perl.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 62 insertions(+), 0 deletions(-) + +diff --git a/perl.c b/perl.c +index 94f2b13..5a6744a 100644 +--- a/perl.c ++++ b/perl.c +@@ -4879,9 +4879,14 @@ S_init_perllib(pTHX) + incpush(APPLLIB_EXP, TRUE, TRUE, TRUE, TRUE); + #endif + ++#ifdef DEBIAN ++ /* for configuration where /usr is mounted ro (CPAN::Config, Net::Config) */ ++ incpush("/etc/perl", FALSE, FALSE, FALSE, FALSE); ++#else + #ifdef ARCHLIB_EXP + incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, TRUE); + #endif ++#endif + #ifdef MACOS_TRADITIONAL + { + Stat_t tmpstatbuf; +@@ -4906,11 +4911,13 @@ S_init_perllib(pTHX) + #ifndef PRIVLIB_EXP + # define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl" + #endif ++#ifndef DEBIAN + #if defined(WIN32) + incpush(PRIVLIB_EXP, TRUE, FALSE, TRUE, TRUE); + #else + incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, TRUE); + #endif ++#endif + + #ifdef SITEARCH_EXP + /* sitearch is always relative to sitelib on Windows for +@@ -4954,6 +4961,61 @@ S_init_perllib(pTHX) + incpush(PERL_VENDORLIB_STEM, FALSE, TRUE, TRUE, TRUE); + #endif + ++#ifdef DEBIAN ++ incpush(ARCHLIB_EXP, FALSE, FALSE, TRUE, FALSE); ++ incpush(PRIVLIB_EXP, FALSE, FALSE, TRUE, FALSE); ++ ++ /* Non-versioned site directory for local modules and for ++ compatability with the previous packages' site dirs */ ++ incpush("/usr/local/lib/site_perl", TRUE, FALSE, FALSE, FALSE); ++ ++#ifdef PERL_INC_VERSION_LIST ++ { ++ struct stat s; ++ ++ /* add small buffer in case old versions are longer than the ++ current version */ ++ char sitearch[sizeof(SITEARCH_EXP)+16] = SITEARCH_EXP; ++ char sitelib[sizeof(SITELIB_EXP)+16] = SITELIB_EXP; ++ char const *vers[] = { PERL_INC_VERSION_LIST }; ++ char const **p; ++ ++ char *arch_vers = strrchr(sitearch, '/'); ++ char *lib_vers = strrchr(sitelib, '/'); ++ ++ if (arch_vers && isdigit(*++arch_vers)) ++ *arch_vers = 0; ++ else ++ arch_vers = 0; ++ ++ if (lib_vers && isdigit(*++lib_vers)) ++ *lib_vers = 0; ++ else ++ lib_vers = 0; ++ ++ /* there is some duplication here as incpush does something ++ similar internally, but required as sitearch is not a ++ subdirectory of sitelib */ ++ for (p = vers; *p; p++) ++ { ++ if (arch_vers) ++ { ++ strcpy(arch_vers, *p); ++ if (PerlLIO_stat(sitearch, &s) >= 0 && S_ISDIR(s.st_mode)) ++ incpush(sitearch, FALSE, FALSE, FALSE, FALSE); ++ } ++ ++ if (lib_vers) ++ { ++ strcpy(lib_vers, *p); ++ if (PerlLIO_stat(sitelib, &s) >= 0 && S_ISDIR(s.st_mode)) ++ incpush(sitelib, FALSE, FALSE, FALSE, FALSE); ++ } ++ } ++ } ++#endif ++#endif ++ + #ifdef PERL_OTHERLIBDIRS + incpush(PERL_OTHERLIBDIRS, TRUE, TRUE, TRUE, TRUE); + #endif +-- +tg: (daf8b46..) debian/mod_paths (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/module_build_man_extensions.diff b/recipes/perl/perl-5.10.1/module_build_man_extensions.diff new file mode 100644 index 0000000000..bbe53a618d --- /dev/null +++ b/recipes/perl/perl-5.10.1/module_build_man_extensions.diff @@ -0,0 +1,31 @@ +Subject: Adjust Module::Build manual page extensions for the Debian Perl policy +Bug-Debian: http://bugs.debian.org/479460 + +--- + lib/Module/Build/Base.pm | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/Module/Build/Base.pm b/lib/Module/Build/Base.pm +index ade64c8..b580423 100644 +--- a/lib/Module/Build/Base.pm ++++ b/lib/Module/Build/Base.pm +@@ -2732,7 +2732,7 @@ sub manify_bin_pods { + foreach my $file (keys %$files) { + # Pod::Simple based parsers only support one document per instance. + # This is expected to change in a future version (Pod::Simple > 3.03). +- my $parser = Pod::Man->new( section => 1 ); # binaries go in section 1 ++ my $parser = Pod::Man->new( section => '1p' ); # binaries go in section 1p + my $manpage = $self->man1page_name( $file ) . '.' . + $self->config( 'man1ext' ); + my $outfile = File::Spec->catfile($mandir, $manpage); +@@ -2756,7 +2756,7 @@ sub manify_lib_pods { + while (my ($file, $relfile) = each %$files) { + # Pod::Simple based parsers only support one document per instance. + # This is expected to change in a future version (Pod::Simple > 3.03). +- my $parser = Pod::Man->new( section => 3 ); # libraries go in section 3 ++ my $parser = Pod::Man->new( section => '3pm' ); # libraries go in section 3pm + my $manpage = $self->man3page_name( $relfile ) . '.' . + $self->config( 'man3ext' ); + my $outfile = File::Spec->catfile( $mandir, $manpage); +-- +tg: (daf8b46..) debian/module_build_man_extensions (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/net_smtp_docs.diff b/recipes/perl/perl-5.10.1/net_smtp_docs.diff new file mode 100644 index 0000000000..520172f831 --- /dev/null +++ b/recipes/perl/perl-5.10.1/net_smtp_docs.diff @@ -0,0 +1,23 @@ +Subject: Document the Net::SMTP 'Port' option +Bug-Debian: http://bugs.debian.org/100195 +Bug: http://rt.cpan.org/Public/Bug/Display.html?id=36038 + + +--- + lib/Net/SMTP.pm | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/lib/Net/SMTP.pm b/lib/Net/SMTP.pm +index a28496d..07b2498 100644 +--- a/lib/Net/SMTP.pm ++++ b/lib/Net/SMTP.pm +@@ -625,6 +625,7 @@ Net::SMTP will attempt to extract the address from the value passed. + + B - Enable debugging information + ++B - Select a port on the remote host to connect to (default is 25) + + Example: + +-- +tg: (daf8b46..) fixes/net_smtp_docs (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/perl_5.10.1-8.diff.gz b/recipes/perl/perl-5.10.1/perl_5.10.1-8.diff.gz deleted file mode 100644 index 011fd5f2964f0b4175ef18fec5e0b6e2e019f52b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100662 zcmV(pK=8jGiwFR+IS5Mv1H?Q1SK3OjKkHvHrJnMcAox*>)z(_PoC?YA?Ck7(&+b;!GzdiKYCC#uQ?KcM==7>q*EM@m zZ+}=Xm&@7iOwZf5plxmLR9-@verh#%`*t1Z69h%r-%p; zG(&?N%jtV4dX_&>L~D!KaqN3trx%Cf0XwEW#E#n5&UR%F%KZD1`OyF=B8a7szI7wP z_aN#Em<$7)cwl-qxQ-_v@Izqxoz{vC>?rn9!^u|7p z^@Ok`h}$SML33|!Zz~YQ5zgjIVjY;!cf1I?jw|$a4Y5f=BJ6{l>^eSAh=g_=qy_X`1Muw50DAPL{$OCbu5W?u;y)zY1{r&~S%e$Y7Z`vQj)MrfU_l%?E?8g%zI1Lu zeaBV@I?{%B?f1F$at2Gjm(FaEaLkA%$5{u2fl%gY{eKAvLcfDN8#7agg;J2pKsAvCAMb$BY69}|S(dbC@GSqGm8V|Yddb#A z52^a-)#D(L;{m(|^`PH){s<1!wDPES;*d)G%3DCCI^rULSc(8l8JIKt`r8 ziayxkhXW%T1o)7c*Z{OHY;aFr@8^@p1m2HPUeiv+j{4^IHnRgCwi0&Ghpe_#OqW5@ za+z@M+)(SiBfi{y8UOtaY0}tfkQsi4iDXFAX2pVYx~%PQ;cb4})LYz?D&=g?Ls(Q= zYWNO`?|Kp$zc^<)1E?ALPB%)P$yL!5Xp^N}()O5>L(EoRNX-la*AeyuS2y2JLfWis zqPMGTZ;^D$w&*yfmjYIkSM<|HH_&aT+g%32E_@|a)DMMe8!`%olm?CvXopKjS%K*x z!@zSMtRf21^n7b{#pb zVM-!ywGQdAYs%$XVmp%ZC+!C^N9)9%jghOjViL`BqQH67N)%ig@eGRtZ^w7#N>38F zvHTTpG8wbdCT3~U$Ol<|FxCPm5KEU~dcLP&V5Sio60{VygLYsxSBNy z+BouUM`&G4BX5=hVixBNg%+8i#w_$Kp`rKl!{q{%PDI0c__SPC#89|e5Cmud8d;vU z+VbqNXS%*=i%?TST1HBQ38v=yJ;%}p)UlL-L11diy=lVinU1HR7l $&W}#^|(z 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
s584BuABFeMZR;^P?3#RHdDK4;yqDkAS_)3_ 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 diff --git a/recipes/perl/perl-5.10.1/perl_synopsis.diff b/recipes/perl/perl-5.10.1/perl_synopsis.diff new file mode 100644 index 0000000000..584a065ba2 --- /dev/null +++ b/recipes/perl/perl-5.10.1/perl_synopsis.diff @@ -0,0 +1,96 @@ +Subject: Rearrange perl.pod +Bug-Debian: http://bugs.debian.org/278323 + +The TOC in perl.pod should probably not be in the synopsis. + +Note the debian/ prefix rather than fixes/ since upstream doesn't agree. + + +--- + pod/perl.pod | 64 +++++++++++++++++++++++++++++----------------------------- + 1 files changed, 32 insertions(+), 32 deletions(-) + +diff --git a/pod/perl.pod b/pod/perl.pod +index 939c683..9bc461d 100644 +--- a/pod/perl.pod ++++ b/pod/perl.pod +@@ -16,6 +16,38 @@ B S<[ B<-sTtuUWX> ]> + S<[ B<-i>[I] ]> + S<[ [B<-e>|B<-E>] I<'command'> ] [ B<--> ] [ I ] [ I ]...> + ++=head1 DESCRIPTION ++ ++Perl is a language optimized for scanning arbitrary ++text files, extracting information from those text files, and printing ++reports based on that information. It's also a good language for many ++system management tasks. The language is intended to be practical ++(easy to use, efficient, complete) rather than beautiful (tiny, ++elegant, minimal). ++ ++Perl combines (in the author's opinion, anyway) some of the best ++features of C, B, B, and B, so people familiar with ++those languages should have little difficulty with it. (Language ++historians will also note some vestiges of B, Pascal, and even ++BASIC-PLUS.) Expression syntax corresponds closely to C ++expression syntax. Unlike most Unix utilities, Perl does not ++arbitrarily limit the size of your data--if you've got the memory, ++Perl can slurp in your whole file as a single string. Recursion is of ++unlimited depth. And the tables used by hashes (sometimes called ++"associative arrays") grow as necessary to prevent degraded ++performance. Perl can use sophisticated pattern matching techniques to ++scan large amounts of data quickly. Although optimized for ++scanning text, Perl can also deal with binary data, and can make dbm ++files look like hashes. Setuid Perl scripts are safer than C programs ++through a dataflow tracing mechanism that prevents many stupid ++security holes. ++ ++If you have a problem that would ordinarily use B or B or ++B, but it exceeds their capabilities or must run a little faster, ++and you don't want to write the silly thing in C, then Perl may be for ++you. There are also translators to turn your B and B ++scripts into Perl scripts. ++ + If you're new to Perl, you should start with L, which is a + general intro for beginners and provides some background to help you + navigate the rest of Perl's extensive documentation. +@@ -258,38 +290,6 @@ If something strange has gone wrong with your program and you're not + sure where you should look for help, try the B<-w> switch first. It + will often point out exactly where the trouble is. + +-=head1 DESCRIPTION +- +-Perl is a language optimized for scanning arbitrary +-text files, extracting information from those text files, and printing +-reports based on that information. It's also a good language for many +-system management tasks. The language is intended to be practical +-(easy to use, efficient, complete) rather than beautiful (tiny, +-elegant, minimal). +- +-Perl combines (in the author's opinion, anyway) some of the best +-features of C, B, B, and B, so people familiar with +-those languages should have little difficulty with it. (Language +-historians will also note some vestiges of B, Pascal, and even +-BASIC-PLUS.) Expression syntax corresponds closely to C +-expression syntax. Unlike most Unix utilities, Perl does not +-arbitrarily limit the size of your data--if you've got the memory, +-Perl can slurp in your whole file as a single string. Recursion is of +-unlimited depth. And the tables used by hashes (sometimes called +-"associative arrays") grow as necessary to prevent degraded +-performance. Perl can use sophisticated pattern matching techniques to +-scan large amounts of data quickly. Although optimized for +-scanning text, Perl can also deal with binary data, and can make dbm +-files look like hashes. Setuid Perl scripts are safer than C programs +-through a dataflow tracing mechanism that prevents many stupid +-security holes. +- +-If you have a problem that would ordinarily use B or B or +-B, but it exceeds their capabilities or must run a little faster, +-and you don't want to write the silly thing in C, then Perl may be for +-you. There are also translators to turn your B and B +-scripts into Perl scripts. +- + But wait, there's more... + + Begun in 1993 (see L), Perl version 5 is nearly a complete +-- +tg: (daf8b46..) debian/perl_synopsis (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/perlivp.diff b/recipes/perl/perl-5.10.1/perlivp.diff new file mode 100644 index 0000000000..bf5c728a5d --- /dev/null +++ b/recipes/perl/perl-5.10.1/perlivp.diff @@ -0,0 +1,38 @@ +From: Niko Tyni +Subject: Make perlivp skip include directories in /usr/local +Closes: 510895 + +On Sat, Jan 10, 2009 at 12:37:18AM +1100, Brendan O'Dea wrote: +> On Wed, Jan 7, 2009 at 12:21 AM, Niko Tyni wrote: + +> > We could create the directories in a postinst script, but I'm not sure +> > I see the point. They will be created automatically when installing +> > CPAN modules. +> +> The directories are intentionally not created, as this way they are +> excluded from the search path at start-up, saving a bunch of wasted +> stats at use/require time in the common case that the user has not +> installed any local packages. As Niko points out, they will be +> created as required. + + +Signed-off-by: Niko Tyni + +--- + utils/perlivp.PL | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/utils/perlivp.PL b/utils/perlivp.PL +index 762b4b3..20f6579 100644 +--- a/utils/perlivp.PL ++++ b/utils/perlivp.PL +@@ -142,6 +142,7 @@ my $INC_total = 0; + my $INC_there = 0; + foreach (@INC) { + next if $_ eq '.'; # skip -d test here ++ next if m|/usr/local|; # not shipped on Debian + if ($^O eq 'MacOS') { + next if $_ eq ':'; # skip -d test here + next if $_ eq 'Dev:Pseudo:'; # why is this in @INC? +-- +tg: (daf8b46..) debian/perlivp (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/pod2man-index-backslash.diff b/recipes/perl/perl-5.10.1/pod2man-index-backslash.diff new file mode 100644 index 0000000000..30708e9edb --- /dev/null +++ b/recipes/perl/perl-5.10.1/pod2man-index-backslash.diff @@ -0,0 +1,54 @@ +From: Niko Tyni +Subject: Escape backslashes in .IX entries +Bug-Debian: http://bugs.debian.org/521256 +Origin: upstream, http://git.eyrie.org/?p=perl/podlators.git;a=commit;h=8de2177170c79800d81d480227643c1c2ce84a0a + +Applicable parts of podlators upstream git commit +release/2.2.2-6-g8de2177 + + +--- + lib/Pod/Man.pm | 1 + + lib/Pod/t/man.t | 11 ++++++++++- + 2 files changed, 11 insertions(+), 1 deletions(-) + +diff --git a/lib/Pod/Man.pm b/lib/Pod/Man.pm +index 71a4d7a..7662935 100644 +--- a/lib/Pod/Man.pm ++++ b/lib/Pod/Man.pm +@@ -712,6 +712,7 @@ sub outindex { + for (@output) { + my ($type, $entry) = @$_; + $entry =~ s/\"/\"\"/g; ++ $entry =~ s/\\/\\\\/g; + $self->output (".IX $type " . '"' . $entry . '"' . "\n"); + } + } +diff --git a/lib/Pod/t/man.t b/lib/Pod/t/man.t +index 419cce3..c4588bc 100755 +--- a/lib/Pod/t/man.t ++++ b/lib/Pod/t/man.t +@@ -17,7 +17,7 @@ BEGIN { + } + unshift (@INC, '../blib/lib'); + $| = 1; +- print "1..25\n"; ++ print "1..26\n"; + } + + END { +@@ -482,3 +482,12 @@ Some raw nroff. + .PP + More text. + ### ++=head1 INDEX ++ ++Index entry matching a whitespace escape.X<\n> ++### ++.SH "INDEX" ++.IX Header "INDEX" ++Index entry matching a whitespace escape. ++.IX Xref "\\n" ++### +-- +tg: (daf8b46..) fixes/pod2man-index-backslash (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/positive-gpos.diff b/recipes/perl/perl-5.10.1/positive-gpos.diff new file mode 100644 index 0000000000..f9e355e9ef --- /dev/null +++ b/recipes/perl/perl-5.10.1/positive-gpos.diff @@ -0,0 +1,36 @@ +From: Niko Tyni +Subject: Fix \G crash on first match +Bug-Debian: http://bugs.debian.org/545234 +Bug: http://rt.perl.org/rt3/Public/Bug/Display.html?id=69056 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/c584a96ef5d541fd119f21c2c77f6ffe2b2c0370 + + +--- + regexec.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/regexec.c b/regexec.c +index 7a42c4f..5beb8ca 100644 +--- a/regexec.c ++++ b/regexec.c +@@ -1853,6 +1853,8 @@ Perl_regexec_flags(pTHX_ REGEXP * const prog, char *stringarg, register char *st + if (s > reginfo.ganch) + goto phooey; + s = reginfo.ganch - prog->gofs; ++ if (s < strbeg) ++ goto phooey; + } + } + else if (data) { +@@ -1928,7 +1930,8 @@ Perl_regexec_flags(pTHX_ REGEXP * const prog, char *stringarg, register char *st + is bogus -- we set it above, when prog->extflags & RXf_GPOS_SEEN + and we only enter this block when the same bit is set. */ + char *tmp_s = reginfo.ganch - prog->gofs; +- if (regtry(®info, &tmp_s)) ++ ++ if (tmp_s >= strbeg && regtry(®info, &tmp_s)) + goto got_it; + goto phooey; + } +-- +tg: (daf8b46..) fixes/positive-gpos (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/processPL.diff b/recipes/perl/perl-5.10.1/processPL.diff new file mode 100644 index 0000000000..3e48df124a --- /dev/null +++ b/recipes/perl/perl-5.10.1/processPL.diff @@ -0,0 +1,43 @@ +Subject: Always use PERLRUNINST when building perl modules. +Bug-Debian: http://bugs.debian.org/357264 +Bug: http://rt.cpan.org/Public/Bug/Display.html?id=17224 + +Revert part of upstream change 24524 to always use PERLRUNINST when +building perl modules: Some PDL demos expect blib to be implicitly +searched. + + +--- + lib/ExtUtils/MM_Unix.pm | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +diff --git a/lib/ExtUtils/MM_Unix.pm b/lib/ExtUtils/MM_Unix.pm +index ad28b22..1f6b2ef 100644 +--- a/lib/ExtUtils/MM_Unix.pm ++++ b/lib/ExtUtils/MM_Unix.pm +@@ -3031,14 +3031,11 @@ sub processPL { + # pm_to_blib depends on then it can't depend on pm_to_blib + # else we have a dependency loop. + my $pm_dep; +- my $perlrun; + if( defined $self->{PM}{$target} ) { + $pm_dep = ''; +- $perlrun = 'PERLRUN'; + } + else { + $pm_dep = 'pm_to_blib'; +- $perlrun = 'PERLRUNINST'; + } + + $m .= < +Subject: Upgrade Safe.pm to 2.25, fixing CVE-2010-1974 +Bug-Debian: http://bugs.debian.org/582978 +Origin: upstream + +Upgrade Safe.pm to 2.25, fixing CVE-2010-1974, as recommended in + + http://blogs.perl.org/users/rafael_garcia-suarez/2010/03/new-safepm-fixes-security-hole.html + +Although 2.27 is available, its changes are more intrusive. + +--- + ext/Safe/Safe.pm | 290 +++++++++++++++++++++++++++++++++----------- + ext/Safe/t/safe1.t | 4 - + ext/Safe/t/safe2.t | 4 - + ext/Safe/t/safe3.t | 4 - + ext/Safe/t/safeload.t | 4 - + ext/Safe/t/safeops.t | 8 +- + ext/Safe/t/safesort.t | 61 +++++++++ + ext/Safe/t/safeuniversal.t | 13 +-- + ext/Safe/t/safeutf8.t | 46 +++++++ + ext/Safe/t/safewrap.t | 39 ++++++ + 10 files changed, 370 insertions(+), 103 deletions(-) + +diff --git a/ext/Safe/Safe.pm b/ext/Safe/Safe.pm +index ff099ec..e33598e 100644 +--- a/ext/Safe/Safe.pm ++++ b/ext/Safe/Safe.pm +@@ -2,8 +2,10 @@ package Safe; + + use 5.003_11; + use strict; ++use Scalar::Util qw(reftype); ++use B qw(sub_generation); + +-$Safe::VERSION = "2.18"; ++$Safe::VERSION = "2.25"; + + # *** Don't declare any lexicals above this point *** + # +@@ -11,18 +13,18 @@ $Safe::VERSION = "2.18"; + # see any lexicals in scope (apart from __ExPr__ which is unavoidable) + + sub lexless_anon_sub { +- # $_[0] is package; +- # $_[1] is strict flag; ++ # $_[0] is package; ++ # $_[1] is strict flag; + my $__ExPr__ = $_[2]; # must be a lexical to create the closure that +- # can be used to pass the value into the safe +- # world ++ # can be used to pass the value into the safe ++ # world + + # Create anon sub ref in root of compartment. + # Uses a closure (on $__ExPr__) to pass in the code to be executed. + # (eval on one line to keep line numbers as expected by caller) + eval sprintf + 'package %s; %s strict; sub { @_=(); eval q[my $__ExPr__;] . $__ExPr__; }', +- $_[0], $_[1] ? 'use' : 'no'; ++ $_[0], $_[1] ? 'use' : 'no'; + } + + use Carp; +@@ -38,6 +40,23 @@ use Opcode 1.01, qw( + + *ops_to_opset = \&opset; # Temporary alias for old Penguins + ++# Regular expressions and other unicode-aware code may need to call ++# utf8->SWASHNEW (via perl's utf8.c). That will fail unless we share the ++# SWASHNEW method. ++# Sadly we can't just add utf8::SWASHNEW to $default_share because perl's ++# utf8.c code does a fetchmethod on SWASHNEW to check if utf8.pm is loaded, ++# and sharing makes it look like the method exists. ++# The simplest and most robust fix is to ensure the utf8 module is loaded when ++# Safe is loaded. Then we can add utf8::SWASHNEW to $default_share. ++require utf8; ++# we must ensure that utf8_heavy.pl, where SWASHNEW is defined, is loaded ++# but without depending on knowledge of that implementation detail. ++# This code (//i on a unicode string) ensures utf8 is fully loaded ++# and also loads the ToFold SWASH. ++# (Swashes are cached internally by perl in PL_utf8_* variables ++# independent of being inside/outside of Safe. So once loaded they can be) ++do { my $unicode = pack('U',0xC4).'1a'; $unicode =~ /\xE4/i; }; ++# now we can safely include utf8::SWASHNEW in $default_share defined below. + + my $default_root = 0; + # share *_ and functions defined in universal.c +@@ -57,10 +76,15 @@ my $default_share = [qw[ + &utf8::downgrade + &utf8::native_to_unicode + &utf8::unicode_to_native ++ &utf8::SWASHNEW + $version::VERSION + $version::CLASS ++ $version::STRICT ++ $version::LAX + @version::ISA +-], ($] >= 5.008001 && qw[ ++], ($] < 5.010 && qw[ ++ &utf8::SWASHGET ++]), ($] >= 5.008001 && qw[ + &Regexp::DESTROY + ]), ($] >= 5.010 && qw[ + &re::is_regexp +@@ -93,6 +117,11 @@ my $default_share = [qw[ + &version::noop + &version::is_alpha + &version::qv ++ &version::vxs::declare ++ &version::vxs::qv ++ &version::vxs::_VERSION ++ &version::vxs::new ++ &version::vxs::parse + ]), ($] >= 5.011 && qw[ + &re::regexp_pattern + ])]; +@@ -103,14 +132,14 @@ sub new { + bless $obj, $class; + + if (defined($root)) { +- croak "Can't use \"$root\" as root name" +- if $root =~ /^main\b/ or $root !~ /^\w[:\w]*$/; +- $obj->{Root} = $root; +- $obj->{Erase} = 0; ++ croak "Can't use \"$root\" as root name" ++ if $root =~ /^main\b/ or $root !~ /^\w[:\w]*$/; ++ $obj->{Root} = $root; ++ $obj->{Erase} = 0; + } + else { +- $obj->{Root} = "Safe::Root".$default_root++; +- $obj->{Erase} = 1; ++ $obj->{Root} = "Safe::Root".$default_root++; ++ $obj->{Erase} = 1; + } + + # use permit/deny methods instead till interface issues resolved +@@ -125,7 +154,9 @@ sub new { + # the whole glob *_ rather than $_ and @_ separately, otherwise + # @_ in non default packages within the compartment don't work. + $obj->share_from('main', $default_share); ++ + Opcode::_safe_pkg_prep($obj->{Root}) if($Opcode::VERSION > 1.04); ++ + return $obj; + } + +@@ -140,7 +171,7 @@ sub erase { + my ($stem, $leaf); + + no strict 'refs'; +- $pkg = "main::$pkg\::"; # expand to full symbol table name ++ $pkg = "main::$pkg\::"; # expand to full symbol table name + ($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/; + + # The 'my $foo' is needed! Without it you get an +@@ -149,7 +180,7 @@ sub erase { + + #warn "erase($pkg) stem=$stem, leaf=$leaf"; + #warn " stem_symtab hash ".scalar(%$stem_symtab)."\n"; +- # ", join(', ', %$stem_symtab),"\n"; ++ # ", join(', ', %$stem_symtab),"\n"; + + # delete $stem_symtab->{$leaf}; + +@@ -220,12 +251,12 @@ sub dump_mask { + } + + +- + sub share { + my($obj, @vars) = @_; + $obj->share_from(scalar(caller), \@vars); + } + ++ + sub share_from { + my $obj = shift; + my $pkg = shift; +@@ -236,26 +267,27 @@ sub share_from { + no strict 'refs'; + # Check that 'from' package actually exists + croak("Package \"$pkg\" does not exist") +- unless keys %{"$pkg\::"}; ++ unless keys %{"$pkg\::"}; + my $arg; + foreach $arg (@$vars) { +- # catch some $safe->share($var) errors: +- my ($var, $type); +- $type = $1 if ($var = $arg) =~ s/^(\W)//; +- # warn "share_from $pkg $type $var"; +- for (1..2) { # assign twice to avoid any 'used once' warnings +- *{$root."::$var"} = (!$type) ? \&{$pkg."::$var"} +- : ($type eq '&') ? \&{$pkg."::$var"} +- : ($type eq '$') ? \${$pkg."::$var"} +- : ($type eq '@') ? \@{$pkg."::$var"} +- : ($type eq '%') ? \%{$pkg."::$var"} +- : ($type eq '*') ? *{$pkg."::$var"} +- : croak(qq(Can't share "$type$var" of unknown type)); +- } ++ # catch some $safe->share($var) errors: ++ my ($var, $type); ++ $type = $1 if ($var = $arg) =~ s/^(\W)//; ++ # warn "share_from $pkg $type $var"; ++ for (1..2) { # assign twice to avoid any 'used once' warnings ++ *{$root."::$var"} = (!$type) ? \&{$pkg."::$var"} ++ : ($type eq '&') ? \&{$pkg."::$var"} ++ : ($type eq '$') ? \${$pkg."::$var"} ++ : ($type eq '@') ? \@{$pkg."::$var"} ++ : ($type eq '%') ? \%{$pkg."::$var"} ++ : ($type eq '*') ? *{$pkg."::$var"} ++ : croak(qq(Can't share "$type$var" of unknown type)); ++ } + } + $obj->share_record($pkg, $vars) unless $no_record or !$vars; + } + ++ + sub share_record { + my $obj = shift; + my $pkg = shift; +@@ -264,41 +296,135 @@ sub share_record { + # Record shares using keys of $obj->{Shares}. See reinit. + @{$shares}{@$vars} = ($pkg) x @$vars if @$vars; + } ++ ++ + sub share_redo { + my $obj = shift; + my $shares = \%{$obj->{Shares} ||= {}}; + my($var, $pkg); + while(($var, $pkg) = each %$shares) { +- # warn "share_redo $pkg\:: $var"; +- $obj->share_from($pkg, [ $var ], 1); ++ # warn "share_redo $pkg\:: $var"; ++ $obj->share_from($pkg, [ $var ], 1); + } + } ++ ++ + sub share_forget { + delete shift->{Shares}; + } + ++ + sub varglob { + my ($obj, $var) = @_; + no strict 'refs'; + return *{$obj->root()."::$var"}; + } + ++sub _clean_stash { ++ my ($root, $saved_refs) = @_; ++ $saved_refs ||= []; ++ no strict 'refs'; ++ foreach my $hook (qw(DESTROY AUTOLOAD), grep /^\(/, keys %$root) { ++ push @$saved_refs, \*{$root.$hook}; ++ delete ${$root}{$hook}; ++ } ++ ++ for (grep /::$/, keys %$root) { ++ next if \%{$root.$_} eq \%$root; ++ _clean_stash($root.$_, $saved_refs); ++ } ++} + + sub reval { + my ($obj, $expr, $strict) = @_; + my $root = $obj->{Root}; + +- my $evalsub = lexless_anon_sub($root,$strict, $expr); +- return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); ++ my $evalsub = lexless_anon_sub($root, $strict, $expr); ++ # propagate context ++ my $sg = sub_generation(); ++ my @subret = (wantarray) ++ ? Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub) ++ : scalar Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); ++ _clean_stash($root.'::') if $sg != sub_generation(); ++ return (wantarray) ? @subret : $subret[0]; ++} ++ ++ ++sub wrap_code_refs_within { ++ my $obj = shift; ++ ++ $obj->_find_code_refs('wrap_code_ref', @_); ++} ++ ++ ++sub _find_code_refs { ++ my $obj = shift; ++ my $visitor = shift; ++ ++ for my $item (@_) { ++ my $reftype = $item && reftype $item ++ or next; ++ if ($reftype eq 'ARRAY') { ++ $obj->_find_code_refs($visitor, @$item); ++ } ++ elsif ($reftype eq 'HASH') { ++ $obj->_find_code_refs($visitor, values %$item); ++ } ++ # XXX GLOBs? ++ elsif ($reftype eq 'CODE') { ++ $item = $obj->$visitor($item); ++ } ++ } ++} ++ ++ ++sub wrap_code_ref { ++ my ($obj, $sub) = @_; ++ ++ # wrap code ref $sub with _safe_call_sv so that, when called, the ++ # execution will happen with the compartment fully 'in effect'. ++ ++ croak "Not a CODE reference" ++ if reftype $sub ne 'CODE'; ++ ++ my $ret = sub { ++ my @args = @_; # lexical to close over ++ my $sub_with_args = sub { $sub->(@args) }; ++ ++ my @subret; ++ my $error; ++ do { ++ local $@; # needed due to perl_call_sv(sv, G_EVAL|G_KEEPERR) ++ my $sg = sub_generation(); ++ @subret = (wantarray) ++ ? Opcode::_safe_call_sv($obj->{Root}, $obj->{Mask}, $sub_with_args) ++ : scalar Opcode::_safe_call_sv($obj->{Root}, $obj->{Mask}, $sub_with_args); ++ $error = $@; ++ _clean_stash($obj->{Root}.'::') if $sg != sub_generation(); ++ }; ++ if ($error) { # rethrow exception ++ $error =~ s/\t\(in cleanup\) //; # prefix added by G_KEEPERR ++ die $error; ++ } ++ return (wantarray) ? @subret : $subret[0]; ++ }; ++ ++ return $ret; + } + ++ + sub rdo { + my ($obj, $file) = @_; + my $root = $obj->{Root}; + ++ my $sg = sub_generation(); + my $evalsub = eval +- sprintf('package %s; sub { @_ = (); do $file }', $root); +- return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); ++ sprintf('package %s; sub { @_ = (); do $file }', $root); ++ my @subret = (wantarray) ++ ? Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub) ++ : scalar Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); ++ _clean_stash($root.'::') if $sg != sub_generation(); ++ return (wantarray) ? @subret : $subret[0]; + } + + +@@ -390,15 +516,7 @@ of this software. + Your mileage will vary. If in any doubt B. + + +-=head2 RECENT CHANGES +- +-The interface to the Safe module has changed quite dramatically since +-version 1 (as supplied with Perl5.002). Study these pages carefully if +-you have code written to use Safe version 1 because you will need to +-makes changes. +- +- +-=head2 Methods in class Safe ++=head1 METHODS + + To create a new compartment, use + +@@ -417,9 +535,7 @@ object returned by the above constructor. The object argument + is implicit in each case. + + +-=over 8 +- +-=item permit (OP, ...) ++=head2 permit (OP, ...) + + Permit the listed operators to be used when compiling code in the + compartment (in I to any operators already permitted). +@@ -427,29 +543,30 @@ compartment (in I to any operators already permitted). + You can list opcodes by names, or use a tag name; see + L. + +-=item permit_only (OP, ...) ++=head2 permit_only (OP, ...) + + Permit I the listed operators to be used when compiling code in + the compartment (I other operators are permitted). + +-=item deny (OP, ...) ++=head2 deny (OP, ...) + + Deny the listed operators from being used when compiling code in the + compartment (other operators may still be permitted). + +-=item deny_only (OP, ...) ++=head2 deny_only (OP, ...) + + Deny I the listed operators from being used when compiling code +-in the compartment (I other operators will be permitted). ++in the compartment (I other operators will be permitted, so you probably ++don't want to use this method). + +-=item trap (OP, ...) ++=head2 trap (OP, ...) + +-=item untrap (OP, ...) ++=head2 untrap (OP, ...) + + The trap and untrap methods are synonyms for deny and permit + respectfully. + +-=item share (NAME, ...) ++=head2 share (NAME, ...) + + This shares the variable(s) in the argument list with the compartment. + This is almost identical to exporting variables using the L +@@ -465,9 +582,9 @@ for a glob (i.e. all symbol table entries associated with "foo", + including scalar, array, hash, sub and filehandle). + + Each NAME is assumed to be in the calling package. See share_from +-for an alternative method (which share uses). ++for an alternative method (which C uses). + +-=item share_from (PACKAGE, ARRAYREF) ++=head2 share_from (PACKAGE, ARRAYREF) + + This method is similar to share() but allows you to explicitly name the + package that symbols should be shared from. The symbol names (including +@@ -475,20 +592,29 @@ type characters) are supplied as an array reference. + + $safe->share_from('main', [ '$foo', '%bar', 'func' ]); + ++Names can include package names, which are relative to the specified PACKAGE. ++So these two calls have the same effect: ++ ++ $safe->share_from('Scalar::Util', [ 'reftype' ]); ++ $safe->share_from('main', [ 'Scalar::Util::reftype' ]); + +-=item varglob (VARNAME) ++=head2 varglob (VARNAME) + + This returns a glob reference for the symbol table entry of VARNAME in + the package of the compartment. VARNAME must be the B of a +-variable without any leading type marker. For example, ++variable without any leading type marker. For example: ++ ++ ${$cpt->varglob('foo')} = "Hello world"; ++ ++has the same effect as: + + $cpt = new Safe 'Root'; + $Root::foo = "Hello world"; +- # Equivalent version which doesn't need to know $cpt's package name: +- ${$cpt->varglob('foo')} = "Hello world"; ++ ++but avoids the need to know $cpt's package name. + + +-=item reval (STRING, STRICT) ++=head2 reval (STRING, STRICT) + + This evaluates STRING as perl code inside the compartment. + +@@ -553,14 +679,12 @@ the code in the compartment. + A similar effect applies to I runtime symbol lookups in code + called from a compartment but not compiled within it. + +- +- +-=item rdo (FILENAME) ++=head2 rdo (FILENAME) + + This evaluates the contents of file FILENAME inside the compartment. + See above documentation on the B method for further details. + +-=item root (NAMESPACE) ++=head2 root (NAMESPACE) + + This method returns the name of the package that is the root of the + compartment's namespace. +@@ -569,7 +693,7 @@ Note that this behaviour differs from version 1.00 of the Safe module + where the root module could be used to change the namespace. That + functionality has been withdrawn pending deeper consideration. + +-=item mask (MASK) ++=head2 mask (MASK) + + This is a get-or-set method for the compartment's operator mask. + +@@ -579,14 +703,34 @@ the compartment. + With the MASK argument present, it sets the operator mask for the + compartment (equivalent to calling the deny_only method). + +-=back ++=head2 wrap_code_ref (CODEREF) ++ ++Returns a reference to an anonymous subroutine that, when executed, will call ++CODEREF with the Safe compartment 'in effect'. In other words, with the ++package namespace adjusted and the opmask enabled. + ++Note that the opmask doesn't affect the already compiled code, it only affects ++any I compilation that the already compiled code may try to perform. + +-=head2 Some Safety Issues ++This is particularly useful when applied to code references returned from reval(). + +-This section is currently just an outline of some of the things code in +-a compartment might do (intentionally or unintentionally) which can +-have an effect outside the compartment. ++(It also provides a kind of workaround for RT#60374: "Safe.pm sort {} bug with ++-Dusethreads". See L ++for I more detail.) ++ ++=head2 wrap_code_refs_within (...) ++ ++Wraps any CODE references found within the arguments by replacing each with the ++result of calling L on the CODE reference. Any ARRAY or HASH ++references in the arguments are inspected recursively. ++ ++Returns nothing. ++ ++=head1 RISKS ++ ++This section is just an outline of some of the things code in a compartment ++might do (intentionally or unintentionally) which can have an effect outside ++the compartment. + + =over 8 + +@@ -624,7 +768,7 @@ but more subtle effect. + + =back + +-=head2 AUTHOR ++=head1 AUTHOR + + Originally designed and implemented by Malcolm Beattie. + +diff --git a/ext/Safe/t/safe1.t b/ext/Safe/t/safe1.t +index 6a3b908..385d661 100755 +--- a/ext/Safe/t/safe1.t ++++ b/ext/Safe/t/safe1.t +@@ -1,10 +1,6 @@ + #!./perl -w + $|=1; + BEGIN { +- if($ENV{PERL_CORE}) { +- chdir 't' if -d 't'; +- @INC = '../lib'; +- } + require Config; import Config; + if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') { + print "1..0\n"; +diff --git a/ext/Safe/t/safe2.t b/ext/Safe/t/safe2.t +index d0239d1..2548dcc 100755 +--- a/ext/Safe/t/safe2.t ++++ b/ext/Safe/t/safe2.t +@@ -1,10 +1,6 @@ + #!./perl -w + $|=1; + BEGIN { +- if($ENV{PERL_CORE}) { +- chdir 't' if -d 't'; +- @INC = '../lib'; +- } + require Config; import Config; + if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') { + print "1..0\n"; +diff --git a/ext/Safe/t/safe3.t b/ext/Safe/t/safe3.t +index c809f27..1f99f49 100755 +--- a/ext/Safe/t/safe3.t ++++ b/ext/Safe/t/safe3.t +@@ -1,10 +1,6 @@ + #!perl -w + + BEGIN { +- if ($ENV{PERL_CORE}) { +- chdir 't' if -d 't'; +- @INC = '../lib'; +- } + require Config; import Config; + if ($Config{'extensions'} !~ /\bOpcode\b/ + && $Config{'extensions'} !~ /\bPOSIX\b/ +diff --git a/ext/Safe/t/safeload.t b/ext/Safe/t/safeload.t +index b15c290..2d2c3cc 100755 +--- a/ext/Safe/t/safeload.t ++++ b/ext/Safe/t/safeload.t +@@ -1,10 +1,6 @@ + #!perl + + BEGIN { +- if ($ENV{PERL_CORE}) { +- chdir 't' if -d 't'; +- @INC = '../lib'; +- } + require Config; + import Config; + if ($Config{'extensions'} !~ /\bOpcode\b/) { +diff --git a/ext/Safe/t/safeops.t b/ext/Safe/t/safeops.t +index 229672e..e8fa339 100755 +--- a/ext/Safe/t/safeops.t ++++ b/ext/Safe/t/safeops.t +@@ -2,13 +2,9 @@ + # Tests that all ops can be trapped by a Safe compartment + + BEGIN { +- if ($ENV{PERL_CORE}) { +- chdir 't' if -d 't'; +- @INC = '../lib'; +- } +- else { ++ unless ($ENV{PERL_CORE}) { + # this won't work outside of the core, so exit +- print "1..0\n"; exit 0; ++ print "1..0 # skipped: PERL_CORE unset\n"; exit 0; + } + } + use Config; +diff --git a/ext/Safe/t/safesort.t b/ext/Safe/t/safesort.t +new file mode 100644 +index 0000000..797e155 +--- /dev/null ++++ b/ext/Safe/t/safesort.t +@@ -0,0 +1,61 @@ ++#!perl -w ++$|=1; ++BEGIN { ++ require Config; import Config; ++ if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') { ++ print "1..0\n"; ++ exit 0; ++ } ++} ++ ++use Safe 1.00; ++use Test::More tests => 10; ++ ++my $safe = Safe->new('PLPerl'); ++$safe->permit_only(qw(:default sort)); ++ ++# check basic argument passing and context for anon-subs ++my $func = $safe->reval(q{ sub { @_ } }); ++is_deeply [ $func->() ], [ ]; ++is_deeply [ $func->("foo") ], [ "foo" ]; ++ ++my $func1 = $safe->reval(<<'EOS'); ++ ++ # uses quotes in { "$a" <=> $b } to avoid the optimizer replacing the block ++ # with a hardwired comparison ++ { package Pkg; sub p_sort { return sort { "$a" <=> $b } @_; } } ++ sub l_sort { return sort { "$a" <=> $b } @_; } ++ ++ return sub { return join(",",l_sort(@_)), join(",",Pkg::p_sort(@_)) } ++ ++EOS ++ ++is $@, '', 'reval should not fail'; ++is ref $func, 'CODE', 'reval should return a CODE ref'; ++ ++# $func1 will work in non-threaded perl ++# but RT#60374 "Safe.pm sort {} bug with -Dusethreads" ++# means the sorting won't work unless we wrap the code ref ++# such that it's executed with Safe 'in effect' at runtime ++my $func2 = $safe->wrap_code_ref($func1); ++ ++my ($l_sorted, $p_sorted) = $func2->(3,1,2); ++is $l_sorted, "1,2,3"; ++is $p_sorted, "1,2,3"; ++ ++# check other aspects of closures created inside Safe ++ ++my $die_func = $safe->reval(q{ sub { die @_ if @_; 1 } }); ++ ++# check $@ not affected by successful call ++$@ = 42; ++$die_func->(); ++is $@, 42, 'successful closure call should not alter $@'; ++ ++{ ++ my $warns = 0; ++ local $SIG{__WARN__} = sub { $warns++ }; ++ ok !eval { $die_func->("died\n"); 1 }, 'should die'; ++ is $@, "died\n", '$@ should be set correctly'; ++ is $warns, 0; ++} +diff --git a/ext/Safe/t/safeuniversal.t b/ext/Safe/t/safeuniversal.t +index 5ef3842..95867c5 100755 +--- a/ext/Safe/t/safeuniversal.t ++++ b/ext/Safe/t/safeuniversal.t +@@ -1,10 +1,6 @@ + #!perl + + BEGIN { +- if ($ENV{PERL_CORE}) { +- chdir 't' if -d 't'; +- @INC = '../lib'; +- } + require Config; + import Config; + if ($Config{'extensions'} !~ /\bOpcode\b/) { +@@ -22,8 +18,10 @@ plan(tests => 6); + my $c = new Safe; + $c->permit(qw(require caller)); + +-my $r = $c->reval(q! +- no warnings 'redefine'; ++my $no_warn_redef = ($] != 5.008009) ++ ? q(no warnings 'redefine';) ++ : q($SIG{__WARN__}=sub{};); ++my $r = $c->reval($no_warn_redef . q! + sub UNIVERSAL::isa { "pwned" } + (bless[],"Foo")->isa("Foo"); + !); +@@ -33,8 +31,7 @@ is( (bless[],"Foo")->isa("Foo"), 1, "... but not outside" ); + + sub Foo::foo {} + +-$r = $c->reval(q! +- no warnings 'redefine'; ++$r = $c->reval($no_warn_redef . q! + sub UNIVERSAL::can { "pwned" } + (bless[],"Foo")->can("foo"); + !); +diff --git a/ext/Safe/t/safeutf8.t b/ext/Safe/t/safeutf8.t +new file mode 100644 +index 0000000..28441da +--- /dev/null ++++ b/ext/Safe/t/safeutf8.t +@@ -0,0 +1,46 @@ ++#!perl -w ++$|=1; ++BEGIN { ++ require Config; import Config; ++ if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') { ++ print "1..0\n"; ++ exit 0; ++ } ++} ++ ++use Test::More tests => 7; ++ ++use Safe 1.00; ++use Opcode qw(full_opset); ++ ++pass; ++ ++my $safe = Safe->new('PLPerl'); ++$safe->permit(qw(pack)); ++ ++# Expression that triggers require utf8 and call to SWASHNEW. ++# Fails with "Undefined subroutine PLPerl::utf8::SWASHNEW called" ++# if SWASHNEW is not shared, else returns true if unicode logic is working. ++my $trigger = q{ my $a = pack('U',0xC4); $a =~ /\\xE4/i }; ++ ++ok $safe->reval( $trigger ), 'trigger expression should return true'; ++is $@, '', 'trigger expression should not die'; ++ ++# return a closure ++my $sub = $safe->reval(q{sub { warn pack('U',0xC4) }}); ++ ++# define code outside Safe that'll be triggered from inside ++my @warns; ++$SIG{__WARN__} = sub { ++ my $msg = shift; ++ # this regex requires a different SWASH digit data for \d) ++ # than the one used above and by the trigger code in Safe.pm ++ $msg =~ s/\(eval \d+\)/XXX/i; # uses IsDigit SWASH ++ push @warns, $msg; ++}; ++ ++is eval { $sub->() }, 1, 'warn should return 1'; ++is $@, '', '__WARN__ hook should not die'; ++is @warns, 1, 'should only be 1 warning'; ++like $warns[0], qr/at XXX line/, 'warning should have been edited'; ++ +diff --git a/ext/Safe/t/safewrap.t b/ext/Safe/t/safewrap.t +new file mode 100644 +index 0000000..27166f8 +--- /dev/null ++++ b/ext/Safe/t/safewrap.t +@@ -0,0 +1,39 @@ ++#!perl -w ++ ++$|=1; ++BEGIN { ++ require Config; import Config; ++ if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') { ++ print "1..0\n"; ++ exit 0; ++ } ++} ++ ++use strict; ++use Safe 1.00; ++use Test::More tests => 9; ++ ++my $safe = Safe->new('PLPerl'); ++$safe->permit_only(qw(:default sort)); ++ ++# eval within an eval: the outer eval is compiled into the sub, the inner is ++# compiled (by the outer) at runtime and so is subject to runtime opmask ++my $sub1 = sub { eval " eval '1+1' " }; ++is $sub1->(), 2; ++ ++my $sub1w = $safe->wrap_code_ref($sub1); ++is ref $sub1w, 'CODE'; ++is eval { $sub1w->() }, undef; ++like $@, qr/eval .* trapped by operation mask/; ++ ++is $sub1->(), 2, 'original ref should be unaffected'; ++ ++# setup args for wrap_code_refs_within including nested data ++my @args = (42, [[ 0, { sub => $sub1 }, 2 ]], 24); ++is $args[1][0][1]{sub}, $sub1; ++ ++$safe->wrap_code_refs_within(@args); ++my $sub1w2 = $args[1][0][1]{sub}; ++isnt $sub1w2, $sub1; ++is eval { $sub1w2->() }, undef; ++like $@, qr/eval .* trapped by operation mask/; +-- +tg: (daf8b46..) fixes/safe-upgrade (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/tainted-errno.diff b/recipes/perl/perl-5.10.1/tainted-errno.diff new file mode 100644 index 0000000000..23931fd01f --- /dev/null +++ b/recipes/perl/perl-5.10.1/tainted-errno.diff @@ -0,0 +1,85 @@ +Author: David Mitchell +Author: Nicholas Clark +Subject: fix an errno stringification bug in taint mode +Bug-Debian: http://bugs.debian.org/574129 +Bug: http://rt.perl.org/rt3/Public/Bug/Display.html?id=61976 +Origin: http://perl5.git.perl.org/perl.git/commit/0097b436152452e403cc71b4f1a1cfd30ec0ba1a +Origin: http://perl5.git.perl.org/perl.git/commit/be1cf43c8dab9dd236839206d53611f7e7d2d856 + +Hopefully fixes $! stringification problems seen with spamassassin (#574129). + +--- + mg.c | 2 ++ + t/op/magic.t | 8 +++++++- + t/op/taint.t | 13 ++++++++++++- + 3 files changed, 21 insertions(+), 2 deletions(-) + +diff --git a/mg.c b/mg.c +index 5502e90..70ebb0b 100644 +--- a/mg.c ++++ b/mg.c +@@ -1041,6 +1041,8 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) + else + #endif + sv_setpv(sv, errno ? Strerror(errno) : ""); ++ if (SvPOKp(sv)) ++ SvPOK_on(sv); /* may have got removed during taint processing */ + RESTORE_ERRNO; + } + #endif +diff --git a/t/op/magic.t b/t/op/magic.t +index bfb68a7..d51a22b 100755 +--- a/t/op/magic.t ++++ b/t/op/magic.t +@@ -12,7 +12,7 @@ use warnings; + use Config; + + +-plan (tests => 59); ++plan (tests => 60); + + $Is_MSWin32 = $^O eq 'MSWin32'; + $Is_NetWare = $^O eq 'NetWare'; +@@ -475,3 +475,9 @@ SKIP: { + is $@, '', 'Assign a shared key to a magic hash'; + $@ and print "# $@"; + } ++ ++{ ++ $! = 9999; ++ is int $!, 9999, q{[perl #72850] Core dump in bleadperl from perl -e '$! = 9999; $a = $!;'}; ++ ++} +diff --git a/t/op/taint.t b/t/op/taint.t +index 0ac02a6..6511fa5 100755 +--- a/t/op/taint.t ++++ b/t/op/taint.t +@@ -17,7 +17,7 @@ use Config; + use File::Spec::Functions; + + BEGIN { require './test.pl'; } +-plan tests => 301; ++plan tests => 302; + + $| = 1; + +@@ -1316,6 +1316,17 @@ foreach my $ord (78, 163, 256) { + ok(tainted($zz), "pack a*a* preserves tainting"); + } + ++# Bug RT #61976 tainted $! would show numeric rather than string value ++ ++{ ++ my $tainted_path = substr($^X,0,0) . "/no/such/file"; ++ my $err; ++ # $! is used in a tainted expression, so gets tainted ++ open my $fh, $tainted_path or $err= "$!"; ++ unlike($err, qr/^\d+$/, 'tainted $!'); ++} ++ ++ + # This may bomb out with the alarm signal so keep it last + SKIP: { + skip "No alarm()" unless $Config{d_alarm}; +-- +tg: (daf8b46..) fixes/tainted-errno (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/tell-crash.diff b/recipes/perl/perl-5.10.1/tell-crash.diff new file mode 100644 index 0000000000..c21c13dc48 --- /dev/null +++ b/recipes/perl/perl-5.10.1/tell-crash.diff @@ -0,0 +1,33 @@ +From: Niko Tyni +Subject: Fix a tell() crash on bad arguments. +Bug-Debian: http://bugs.debian.org/578577 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/f03173f2c707a804ec3e9c291d2ab1adb9db4abc +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/f4817f32b1c5f1cefe556cf79f36f874b67cad16 + +Fix a crash with things like + perl -e 'tell (fileno(*STDOUT))' + + +--- + pp_sys.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/pp_sys.c b/pp_sys.c +index a1f8c7a..74004b9 100644 +--- a/pp_sys.c ++++ b/pp_sys.c +@@ -2081,6 +2081,12 @@ PP(pp_tell) + RETURN; + } + } ++ else if (!gv) { ++ if (!errno) ++ SETERRNO(EBADF,RMS_IFI); ++ PUSHi(-1); ++ RETURN; ++ } + + #if LSEEKSIZE > IVSIZE + PUSHn( do_tell(gv) ); +-- +tg: (daf8b46..) fixes/tell-crash (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/trie-logic-match.diff b/recipes/perl/perl-5.10.1/trie-logic-match.diff new file mode 100644 index 0000000000..b64457649a --- /dev/null +++ b/recipes/perl/perl-5.10.1/trie-logic-match.diff @@ -0,0 +1,111 @@ +From: Eugene V. Lyubimkin +Subject: Fix a DoS in Unicode processing [CVE-2009-3626] +Bug-Debian: http://bugs.debian.org/552291 +Bug: http://rt.perl.org/rt3/Public/Bug/Display.html?id=69973 +Origin: upstream, http://perl5.git.perl.org/perl.git/commit/0abd0d78a73da1c4d13b1c700526b7e5d03b32d4. + +Resolves segmentation fault in some tricky tainted non-UTF-8 matches. + +Signed-off-by: Eugene V. Lyubimkin + +--- + ext/re/t/regop.t | 12 ++++++------ + regcomp.c | 17 +++++++++++------ + regexec.c | 9 ++------- + 3 files changed, 19 insertions(+), 19 deletions(-) + +diff --git a/ext/re/t/regop.t b/ext/re/t/regop.t +index 7fe7b20..f111b91 100755 +--- a/ext/re/t/regop.t ++++ b/ext/re/t/regop.t +@@ -233,12 +233,12 @@ anchored "ABC" at 0 + #Freeing REx: "(\\.COM|\\.EXE|\\.BAT|\\.CMD|\\.VBS|\\.VBE|\\.JS|\\.JSE|\\."...... + %MATCHED% + floating ""$ at 3..4 (checking floating) +-1:1[1] 3:2[1] 5:2[64] 45:83[1] 47:84[1] 48:85[0] +-stclass EXACTF <.> minlen 3 +-Found floating substr ""$ at offset 30... +-Does not contradict STCLASS... +-Guessed: match at offset 26 +-Matching stclass EXACTF <.> against ".exe" ++#1:1[1] 3:2[1] 5:2[64] 45:83[1] 47:84[1] 48:85[0] ++#stclass EXACTF <.> minlen 3 ++#Found floating substr ""$ at offset 30... ++#Does not contradict STCLASS... ++#Guessed: match at offset 26 ++#Matching stclass EXACTF <.> against ".exe" + --- + #Compiling REx "[q]" + #size 12 nodes Got 100 bytes for offset annotations. +diff --git a/regcomp.c b/regcomp.c +index 49e69b2..b7fb032 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -2820,13 +2820,18 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, + } + } else { + /* +- Currently we assume that the trie can handle unicode and ascii +- matches fold cased matches. If this proves true then the following +- define will prevent tries in this situation. +- +- #define TRIE_TYPE_IS_SAFE (UTF || optype==EXACT) +-*/ ++ Currently we do not believe that the trie logic can ++ handle case insensitive matching properly when the ++ pattern is not unicode (thus forcing unicode semantics). ++ ++ If/when this is fixed the following define can be swapped ++ in below to fully enable trie logic. ++ + #define TRIE_TYPE_IS_SAFE 1 ++ ++*/ ++#define TRIE_TYPE_IS_SAFE (UTF || optype==EXACT) ++ + if ( last && TRIE_TYPE_IS_SAFE ) { + make_trie( pRExC_state, + startbranch, first, cur, tail, count, +diff --git a/regexec.c b/regexec.c +index 7a42c4f..32994de 100644 +--- a/regexec.c ++++ b/regexec.c +@@ -1006,16 +1006,15 @@ Perl_re_intuit_start(pTHX_ REGEXP * const prog, SV *sv, char *strpos, + + #define REXEC_TRIE_READ_CHAR(trie_type, trie, widecharmap, uc, uscan, len, \ + uvc, charid, foldlen, foldbuf, uniflags) STMT_START { \ +- UV uvc_unfolded = 0; \ + switch (trie_type) { \ + case trie_utf8_fold: \ + if ( foldlen>0 ) { \ +- uvc_unfolded = uvc = utf8n_to_uvuni( uscan, UTF8_MAXLEN, &len, uniflags ); \ ++ uvc = utf8n_to_uvuni( uscan, UTF8_MAXLEN, &len, uniflags ); \ + foldlen -= len; \ + uscan += len; \ + len=0; \ + } else { \ +- uvc_unfolded = uvc = utf8n_to_uvuni( (U8*)uc, UTF8_MAXLEN, &len, uniflags ); \ ++ uvc = utf8n_to_uvuni( (U8*)uc, UTF8_MAXLEN, &len, uniflags ); \ + uvc = to_uni_fold( uvc, foldbuf, &foldlen ); \ + foldlen -= UNISKIP( uvc ); \ + uscan = foldbuf + UNISKIP( uvc ); \ +@@ -1041,7 +1040,6 @@ uvc, charid, foldlen, foldbuf, uniflags) STMT_START { \ + uvc = (UV)*uc; \ + len = 1; \ + } \ +- \ + if (uvc < 256) { \ + charid = trie->charmap[ uvc ]; \ + } \ +@@ -1054,9 +1052,6 @@ uvc, charid, foldlen, foldbuf, uniflags) STMT_START { \ + charid = (U16)SvIV(*svpp); \ + } \ + } \ +- if (!charid && trie_type == trie_utf8_fold && !UTF) { \ +- charid = trie->charmap[uvc_unfolded]; \ +- } \ + } STMT_END + + #define REXEC_FBC_EXACTISH_CHECK(CoNd) \ +-- +tg: (daf8b46..) fixes/trie-logic-match (depends on: upstream) diff --git a/recipes/perl/perl-5.10.1/use_gdbm.diff b/recipes/perl/perl-5.10.1/use_gdbm.diff new file mode 100644 index 0000000000..085a700888 --- /dev/null +++ b/recipes/perl/perl-5.10.1/use_gdbm.diff @@ -0,0 +1,39 @@ +Subject: Explicitly link against -lgdbm_compat in ODBM_File/NDBM_File. + +Explicitly link against -lgdbm_compat. + + +--- + ext/NDBM_File/hints/linux.pl | 5 +---- + ext/ODBM_File/hints/linux.pl | 8 +------- + 2 files changed, 2 insertions(+), 11 deletions(-) + +diff --git a/ext/NDBM_File/hints/linux.pl b/ext/NDBM_File/hints/linux.pl +index 174f913..652b75b 100644 +--- a/ext/NDBM_File/hints/linux.pl ++++ b/ext/NDBM_File/hints/linux.pl +@@ -2,7 +2,4 @@ + # Prefer gdbm to avoid the broken ndbm in some distributions + # (no null key support) + # Jonathan Stowe +-use Config; +-use ExtUtils::Liblist; +-($self->{LIBS}) = ExtUtils::Liblist->ext('-lgdbm -lgdbm_compat') +- if $Config{libs} =~ /(?:^|\s)-lgdbm(?:\s|$)/; ++$self->{LIBS} = ['-lgdbm_compat']; +diff --git a/ext/ODBM_File/hints/linux.pl b/ext/ODBM_File/hints/linux.pl +index f8ca492..2cf6b02 100644 +--- a/ext/ODBM_File/hints/linux.pl ++++ b/ext/ODBM_File/hints/linux.pl +@@ -1,8 +1,2 @@ + # uses GDBM dbm compatibility feature - at least on SuSE 8.0 +-$self->{LIBS} = ['-lgdbm']; +- +-# Debian/Ubuntu have /usr/lib/libgdbm_compat.so.3* but not this file, +-# so linking may fail +-if (-e '/usr/lib/libgdbm_compat.so' or -e '/usr/lib64/libgdbm_compat.so') { +- $self->{LIBS}->[0] .= ' -lgdbm_compat'; +-} ++$self->{LIBS} = ['-lgdbm_compat']; +-- +tg: (daf8b46..) debian/use_gdbm (depends on: upstream) diff --git a/recipes/perl/perl_5.10.1.bb b/recipes/perl/perl_5.10.1.bb index c3755125ce..0fe3371f4b 100644 --- a/recipes/perl/perl_5.10.1.bb +++ b/recipes/perl/perl_5.10.1.bb @@ -5,7 +5,7 @@ LICENSE = "Artistic|GPL" PRIORITY = "optional" # We need gnugrep (for -I) DEPENDS = "virtual/db perl-native grep-native" -PR = "r10" +PR = "r11" # Not tested enough DEFAULT_PREFERENCE = "-1" @@ -14,7 +14,52 @@ DEFAULT_PREFERENCE = "-1" PVM = "5.10" SRC_URI = "ftp://ftp.funet.fi/pub/CPAN/src/perl-${PV}.tar.gz;name=perl-${PV} \ - file://perl_${PV}-8.diff.gz \ + file://arm_thread_stress_timeout.diff \ + file://cpan_config_path.diff \ + file://cpan_definstalldirs.diff \ + file://db_file_ver.diff \ + file://doc_info.diff \ + file://enc2xs_inc.diff \ + file://errno_ver.diff \ + file://extutils_hacks.diff \ + file://fakeroot.diff \ + file://instmodsh_doc.diff \ + file://ld_run_path.diff \ + file://libnet_config_path.diff \ + file://m68k_thread_stress.diff \ + file://mod_paths.diff \ + file://module_build_man_extensions.diff \ + file://perl_synopsis.diff \ + file://prune_libs.diff \ + file://use_gdbm.diff \ + file://assorted_docs.diff \ + file://net_smtp_docs.diff \ + file://processPL.diff \ + file://perlivp.diff \ + file://pod2man-index-backslash.diff \ + file://disable-zlib-bundling.diff \ + file://kfreebsd_cppsymbols.diff \ + file://cpanplus_definstalldirs.diff \ + file://cpanplus_config_path.diff \ + file://kfreebsd-filecopy-pipes.diff \ + file://anon-tmpfile-dir.diff \ + file://abstract-sockets.diff \ + file://hurd_cppsymbols.diff \ + file://autodie-flock.diff \ + file://archive-tar-instance-error.diff \ + file://positive-gpos.diff \ + file://devel-ppport-ia64-optim.diff \ + file://trie-logic-match.diff \ + file://hppa-thread-eagain.diff \ + file://crash-on-undefined-destroy.diff \ + file://tainted-errno.diff \ + file://safe-upgrade.diff \ + file://tell-crash.diff \ + file://format-write-crash.diff \ + file://arm-alignment.diff \ + file://fcgi-test.diff \ + file://hurd-ccflags.diff \ + \ file://Makefile.patch \ file://Makefile.SH.patch \ file://installperl.patch \ -- 2.47.3