From d70143844849daaab2b798d1f12f92ba5037be3f Mon Sep 17 00:00:00 2001 From: Sergey Skvortsov Date: Sat, 4 Apr 2009 09:06:53 +0000 Subject: [PATCH] Add several bugfixes, imported from maint-5.10 (i.e. will be included into forthcoming 5.10.1). --- lang/perl5.10/Makefile | 1 + lang/perl5.10/files/patch-IO-Socket-INET-udp | 14 ++++ lang/perl5.10/files/patch-bug49003 | 18 +++++ lang/perl5.10/files/patch-bug52074-54566 | 44 +++++++++++ lang/perl5.10/files/patch-bug52658 | 15 ++++ lang/perl5.10/files/patch-bug52740 | 15 ++++ lang/perl5.10/files/patch-bug54186 | 77 ++++++++++++++++++++ lang/perl5.10/files/patch-bug54758 | 29 ++++++++ lang/perl5.10/files/patch-bug54934 | 15 ++++ lang/perl5.10/files/patch-bug56908 | 31 ++++++++ lang/perl5.10/files/patch-bug59516 | 16 ++++ lang/perl5.10/files/patch-qr-leak | 16 ++++ lang/perl5.12/Makefile | 1 + lang/perl5.12/files/patch-IO-Socket-INET-udp | 14 ++++ lang/perl5.12/files/patch-bug49003 | 18 +++++ lang/perl5.12/files/patch-bug52074-54566 | 44 +++++++++++ lang/perl5.12/files/patch-bug52658 | 15 ++++ lang/perl5.12/files/patch-bug52740 | 15 ++++ lang/perl5.12/files/patch-bug54186 | 77 ++++++++++++++++++++ lang/perl5.12/files/patch-bug54758 | 29 ++++++++ lang/perl5.12/files/patch-bug54934 | 15 ++++ lang/perl5.12/files/patch-bug56908 | 31 ++++++++ lang/perl5.12/files/patch-bug59516 | 16 ++++ lang/perl5.12/files/patch-qr-leak | 16 ++++ lang/perl5.14/Makefile | 1 + lang/perl5.14/files/patch-IO-Socket-INET-udp | 14 ++++ lang/perl5.14/files/patch-bug49003 | 18 +++++ lang/perl5.14/files/patch-bug52074-54566 | 44 +++++++++++ lang/perl5.14/files/patch-bug52658 | 15 ++++ lang/perl5.14/files/patch-bug52740 | 15 ++++ lang/perl5.14/files/patch-bug54186 | 77 ++++++++++++++++++++ lang/perl5.14/files/patch-bug54758 | 29 ++++++++ lang/perl5.14/files/patch-bug54934 | 15 ++++ lang/perl5.14/files/patch-bug56908 | 31 ++++++++ lang/perl5.14/files/patch-bug59516 | 16 ++++ lang/perl5.14/files/patch-qr-leak | 16 ++++ lang/perl5.16/Makefile | 1 + lang/perl5.16/files/patch-IO-Socket-INET-udp | 14 ++++ lang/perl5.16/files/patch-bug49003 | 18 +++++ lang/perl5.16/files/patch-bug52074-54566 | 44 +++++++++++ lang/perl5.16/files/patch-bug52658 | 15 ++++ lang/perl5.16/files/patch-bug52740 | 15 ++++ lang/perl5.16/files/patch-bug54186 | 77 ++++++++++++++++++++ lang/perl5.16/files/patch-bug54758 | 29 ++++++++ lang/perl5.16/files/patch-bug54934 | 15 ++++ lang/perl5.16/files/patch-bug56908 | 31 ++++++++ lang/perl5.16/files/patch-bug59516 | 16 ++++ lang/perl5.16/files/patch-qr-leak | 16 ++++ 48 files changed, 1164 insertions(+) create mode 100644 lang/perl5.10/files/patch-IO-Socket-INET-udp create mode 100644 lang/perl5.10/files/patch-bug49003 create mode 100644 lang/perl5.10/files/patch-bug52074-54566 create mode 100644 lang/perl5.10/files/patch-bug52658 create mode 100644 lang/perl5.10/files/patch-bug52740 create mode 100644 lang/perl5.10/files/patch-bug54186 create mode 100644 lang/perl5.10/files/patch-bug54758 create mode 100644 lang/perl5.10/files/patch-bug54934 create mode 100644 lang/perl5.10/files/patch-bug56908 create mode 100644 lang/perl5.10/files/patch-bug59516 create mode 100644 lang/perl5.10/files/patch-qr-leak create mode 100644 lang/perl5.12/files/patch-IO-Socket-INET-udp create mode 100644 lang/perl5.12/files/patch-bug49003 create mode 100644 lang/perl5.12/files/patch-bug52074-54566 create mode 100644 lang/perl5.12/files/patch-bug52658 create mode 100644 lang/perl5.12/files/patch-bug52740 create mode 100644 lang/perl5.12/files/patch-bug54186 create mode 100644 lang/perl5.12/files/patch-bug54758 create mode 100644 lang/perl5.12/files/patch-bug54934 create mode 100644 lang/perl5.12/files/patch-bug56908 create mode 100644 lang/perl5.12/files/patch-bug59516 create mode 100644 lang/perl5.12/files/patch-qr-leak create mode 100644 lang/perl5.14/files/patch-IO-Socket-INET-udp create mode 100644 lang/perl5.14/files/patch-bug49003 create mode 100644 lang/perl5.14/files/patch-bug52074-54566 create mode 100644 lang/perl5.14/files/patch-bug52658 create mode 100644 lang/perl5.14/files/patch-bug52740 create mode 100644 lang/perl5.14/files/patch-bug54186 create mode 100644 lang/perl5.14/files/patch-bug54758 create mode 100644 lang/perl5.14/files/patch-bug54934 create mode 100644 lang/perl5.14/files/patch-bug56908 create mode 100644 lang/perl5.14/files/patch-bug59516 create mode 100644 lang/perl5.14/files/patch-qr-leak create mode 100644 lang/perl5.16/files/patch-IO-Socket-INET-udp create mode 100644 lang/perl5.16/files/patch-bug49003 create mode 100644 lang/perl5.16/files/patch-bug52074-54566 create mode 100644 lang/perl5.16/files/patch-bug52658 create mode 100644 lang/perl5.16/files/patch-bug52740 create mode 100644 lang/perl5.16/files/patch-bug54186 create mode 100644 lang/perl5.16/files/patch-bug54758 create mode 100644 lang/perl5.16/files/patch-bug54934 create mode 100644 lang/perl5.16/files/patch-bug56908 create mode 100644 lang/perl5.16/files/patch-bug59516 create mode 100644 lang/perl5.16/files/patch-qr-leak diff --git a/lang/perl5.10/Makefile b/lang/perl5.10/Makefile index 4ca75e78afd3..aabf0c6a9c92 100644 --- a/lang/perl5.10/Makefile +++ b/lang/perl5.10/Makefile @@ -7,6 +7,7 @@ PORTNAME= perl PORTVERSION= ${PERL_VERSION} +PORTREVISION= 1 CATEGORIES= lang devel perl5 MASTER_SITES= CPAN \ ${MASTER_SITE_LOCAL:S/$/:local/} \ diff --git a/lang/perl5.10/files/patch-IO-Socket-INET-udp b/lang/perl5.10/files/patch-IO-Socket-INET-udp new file mode 100644 index 000000000000..2c0ff86f110a --- /dev/null +++ b/lang/perl5.10/files/patch-IO-Socket-INET-udp @@ -0,0 +1,14 @@ +# http://perl5.git.perl.org/perl.git/commitdiff/7027b9a31bf80c5639c73f75155ed1a89c674c30?hp=f175cff5cac5f8199b897ce2f1c73312d99d5761 +diff --git a/ext/IO/lib/IO/Socket/INET.pm b/ext/IO/lib/IO/Socket/INET.pm +index f8bb338..2f0e5d1 100644 +--- ext/IO/lib/IO/Socket/INET.pm ++++ ext/IO/lib/IO/Socket/INET.pm +@@ -27,7 +27,7 @@ my %socket_type = ( tcp => SOCK_STREAM, + ); + my %proto_number; + $proto_number{tcp} = Socket::IPPROTO_TCP() if defined &Socket::IPPROTO_TCP; +-$proto_number{upd} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP; ++$proto_number{udp} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP; + $proto_number{icmp} = Socket::IPPROTO_ICMP() if defined &Socket::IPPROTO_ICMP; + my %proto_name = reverse %proto_number; + diff --git a/lang/perl5.10/files/patch-bug49003 b/lang/perl5.10/files/patch-bug49003 new file mode 100644 index 000000000000..c43ef58891fb --- /dev/null +++ b/lang/perl5.10/files/patch-bug49003 @@ -0,0 +1,18 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=49003 +# http://perl5.git.perl.org/perl.git/commitdiff/b376053de54af4268a31e5a60d1f9e57db30af11?hp=3a28f3fb1bfd44e4e3dfe6842af867c8c1c9de28 +diff --git a/pp_sys.c b/pp_sys.c +index 66ca0fb..da07e46 100644 +--- pp_sys.c ++++ pp_sys.c +@@ -2999,10 +2999,9 @@ PP(pp_ftrread) + effective = TRUE; + break; + +- + case OP_FTEEXEC: + #ifdef PERL_EFF_ACCESS +- access_mode = W_OK; ++ access_mode = X_OK; + #else + use_access = 0; + #endif diff --git a/lang/perl5.10/files/patch-bug52074-54566 b/lang/perl5.10/files/patch-bug52074-54566 new file mode 100644 index 000000000000..259a39585db7 --- /dev/null +++ b/lang/perl5.10/files/patch-bug52074-54566 @@ -0,0 +1,44 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52074 +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54566 +# http://perl5.git.perl.org/perl.git/commitdiff/5562fa714b8071354c365365c26a950efa73179a?hp=b3562f19ee0d76b60d176a0b1cfdac4f5f36785c +# http://perl5.git.perl.org/perl.git/commitdiff/ea86b3de3510ce31d0c08dd6a21701d74b25369d?hp=72bfe1b2b35945ea3c95d9b94ae2908121292236 +diff --git a/mg.c b/mg.c +index c4d7aeb..91a36f2 100644 +--- mg.c ++++ mg.c +@@ -1543,10 +1543,11 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg) + stash = GvSTASH( + SvTYPE(mg->mg_obj) == SVt_PVGV + ? (GV*)mg->mg_obj +- : (GV*)SvMAGIC(mg->mg_obj)->mg_obj ++ : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj + ); + +- mro_isa_changed_in(stash); ++ if (stash) ++ mro_isa_changed_in(stash); + + return 0; + } +diff --git a/t/mro/pkg_gen.t b/t/mro/pkg_gen.t +index 6a507ac..e1f5eb0 100644 +--- t/mro/pkg_gen.t ++++ t/mro/pkg_gen.t +@@ -4,7 +4,7 @@ use strict; + use warnings; + + chdir 't' if -d 't'; +-require q(./test.pl); plan(tests => 6); ++require q(./test.pl); plan(tests => 7); + + { + package Foo; +@@ -34,3 +34,7 @@ is(mro::get_pkg_gen('Foo'), 1, "pkg_gen 1 for undef %Pkg::"); + + delete $::{"Foo::"}; + is(mro::get_pkg_gen('Foo'), 0, 'pkg_gen 0 for delete $::{Pkg::}'); ++ ++delete $::{"Quux::"}; ++push @Quux::ISA, "Woot"; # should not segfault ++ok(1, "No segfault on modification of ISA in a deleted stash"); + diff --git a/lang/perl5.10/files/patch-bug52658 b/lang/perl5.10/files/patch-bug52658 new file mode 100644 index 000000000000..435f66e1f988 --- /dev/null +++ b/lang/perl5.10/files/patch-bug52658 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52658 +# http://perl5.git.perl.org/perl.git/commitdiff/62b40d2474e7487e6909e1872b6bccdf812c6818?hp=d49025b75d9b5002071bd1a4210654dab5663ef0#patch1 +diff --git a/pp_ctl.c b/pp_ctl.c +index 7a377f0..88269a7 100644 +--- pp_ctl.c ++++ pp_ctl.c +@@ -218,7 +218,6 @@ PP(pp_substcont) + if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs)) + cx->sb_rxtainted |= 2; + sv_catsv(dstr, POPs); +- FREETMPS; /* Prevent excess tmp stack */ + + /* Are we done */ + if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig, + diff --git a/lang/perl5.10/files/patch-bug52740 b/lang/perl5.10/files/patch-bug52740 new file mode 100644 index 000000000000..08a73a1547ee --- /dev/null +++ b/lang/perl5.10/files/patch-bug52740 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52740 +# http://perl5.git.perl.org/perl.git/commitdiff/785bee4f7cf89837cba8e6e0859abbb4b407e1f1?hp=90e91dd8c9549b16c38f6ab2e9fa25c7ea28dff8 +diff --git a/sv.c b/sv.c +index f721e6f..5fcf018 100644 +--- sv.c ++++ sv.c +@@ -3717,7 +3717,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags) + Perl_croak(aTHX_ "Cannot copy to %s", type); + } else if (sflags & SVf_ROK) { + if (isGV_with_GP(dstr) && dtype == SVt_PVGV +- && SvTYPE(SvRV(sstr)) == SVt_PVGV) { ++ && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) { + sstr = SvRV(sstr); + if (sstr == dstr) { + if (GvIMPORTED(dstr) != GVf_IMPORTED diff --git a/lang/perl5.10/files/patch-bug54186 b/lang/perl5.10/files/patch-bug54186 new file mode 100644 index 000000000000..3421afe56091 --- /dev/null +++ b/lang/perl5.10/files/patch-bug54186 @@ -0,0 +1,77 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54186 +# http://perl5.git.perl.org/perl.git/commitdiff/a5d752217825fadff051e943940b4abad8e8b552?hp=8d2082b01041d30d9a510164df9c5e4703949441 +diff --git a/ext/POSIX/Makefile.PL b/ext/POSIX/Makefile.PL +index bd93e59..5f6679d 100644 +--- ext/POSIX/Makefile.PL ++++ ext/POSIX/Makefile.PL +@@ -48,13 +48,11 @@ my @names = + MAX_INPUT MB_LEN_MAX MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_OOB MSG_PEEK + MSG_TRUNC MSG_WAITALL NAME_MAX NCCS NGROUPS_MAX NOFLSH OPEN_MAX OPOST + PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK SCHAR_MAX +- SCHAR_MIN SEEK_CUR SEEK_END SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM ++ SCHAR_MIN SHRT_MAX SHRT_MIN SIGABRT SIGALRM + SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT + SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU + SIGUSR1 SIGUSR2 SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SSIZE_MAX +- STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX +- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID +- S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR TCIFLUSH TCIOFF ++ STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX TCIFLUSH TCIOFF + TCIOFLUSH TCION TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW + TMP_MAX TOSTOP TZNAME_MAX VEOF VEOL VERASE VINTR VKILL VMIN VQUIT + VSTART VSTOP VSUSP VTIME WNOHANG WUNTRACED W_OK X_OK +diff --git a/ext/POSIX/POSIX.pm b/ext/POSIX/POSIX.pm +index fbbd253..97d0b2c 100644 +--- ext/POSIX/POSIX.pm ++++ ext/POSIX/POSIX.pm +@@ -13,7 +13,9 @@ use XSLoader (); + use Fcntl qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK F_SETFD + F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK O_ACCMODE O_APPEND + O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC +- O_WRONLY); ++ O_WRONLY SEEK_CUR SEEK_END SEEK_SET ++ S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID ++ S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR); + + # Grandfather old foo_h form to new :foo_h form + my $loaded; +diff --git a/t/lib/proxy_constant_subs.t b/t/lib/proxy_constant_subs.t +index 4af73d3..45b0a54 100644 +--- t/lib/proxy_constant_subs.t ++++ t/lib/proxy_constant_subs.t +@@ -7,20 +7,20 @@ BEGIN { + print "1..0 # Skip -- Perl configured without B module\n"; + exit 0; + } +- if ($Config::Config{'extensions'} !~ /\bPOSIX\b/) { +- print "1..0 # Skip -- Perl configured without POSIX\n"; ++ if ($Config::Config{'extensions'} !~ /\bFcntl\b/) { ++ print "1..0 # Skip -- Perl configured without Fcntl\n"; + exit 0; + } +- # errno is a real subroutine, and acts as control ++ # S_IFMT is a real subroutine, and acts as control + # SEEK_SET is a proxy constant subroutine. +- @symbols = qw(errno SEEK_SET); ++ @symbols = qw(S_IFMT SEEK_SET); + } + + use strict; + use warnings; + use Test::More tests => 4 * @symbols; + use B qw(svref_2object GVf_IMPORTED_CV); +-use POSIX @symbols; ++use Fcntl @symbols; + + # GVf_IMPORTED_CV should not be set on the original, but should be set on the + # imported GV. +@@ -29,7 +29,7 @@ foreach my $symbol (@symbols) { + my ($ps, $ms); + { + no strict 'refs'; +- $ps = svref_2object(\*{"POSIX::$symbol"}); ++ $ps = svref_2object(\*{"Fcntl::$symbol"}); + $ms = svref_2object(\*{"::$symbol"}); + } + isa_ok($ps, 'B::GV'); + diff --git a/lang/perl5.10/files/patch-bug54758 b/lang/perl5.10/files/patch-bug54758 new file mode 100644 index 000000000000..a969568a7e10 --- /dev/null +++ b/lang/perl5.10/files/patch-bug54758 @@ -0,0 +1,29 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54758 +# http://perl5.git.perl.org/perl.git/commitdiff/62b40d2474e7487e6909e1872b6bccdf812c6818?hp=d49025b75d9b5002071bd1a4210654dab5663ef0#patch1 +diff --git a/pp_sort.c b/pp_sort.c +index 9fe0dad..edfdadf 100644 +--- pp_sort.c ++++ pp_sort.c +@@ -1557,11 +1557,12 @@ PP(pp_sort) + max = AvFILL(av) + 1; + if (SvMAGICAL(av)) { + MEXTEND(SP, max); +- p2 = SP; + for (i=0; i < max; i++) { + SV **svp = av_fetch(av, i, FALSE); + *SP++ = (svp) ? *svp : NULL; + } ++ SP--; ++ p1 = p2 = SP - (max-1); + } + else { + if (SvREADONLY(av)) +@@ -1717,7 +1718,7 @@ PP(pp_sort) + SvREADONLY_off(av); + else if (av && !sorting_av) { + /* simulate pp_aassign of tied AV */ +- SV** const base = ORIGMARK+1; ++ SV** const base = MARK+1; + for (i=0; i < max; i++) { + base[i] = newSVsv(base[i]); + } diff --git a/lang/perl5.10/files/patch-bug54934 b/lang/perl5.10/files/patch-bug54934 new file mode 100644 index 000000000000..7c4544f58c0b --- /dev/null +++ b/lang/perl5.10/files/patch-bug54934 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=49003 +# http://perl5.git.perl.org/perl.git/commitdiff/5a33563ff27918110ac4f876f12dae861e2d2fa2?hp=24ead1638d1eb17b67e49c614831261308ed561f +diff --git a/ext/PerlIO/via/via.xs b/ext/PerlIO/via/via.xs +index 3bc3cbb..5e6ddd3 100644 +--- ext/PerlIO/via/via.xs ++++ ext/PerlIO/via/via.xs +@@ -89,7 +89,7 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags, + if (!s->fh) { + GV *gv = newGVgen(HvNAME_get(s->stash)); + GvIOp(gv) = newIO(); +- s->fh = newRV_noinc((SV *) gv); ++ s->fh = newRV((SV *) gv); + s->io = GvIOp(gv); + } + IoIFP(s->io) = PerlIONext(f); diff --git a/lang/perl5.10/files/patch-bug56908 b/lang/perl5.10/files/patch-bug56908 new file mode 100644 index 000000000000..f6789866cff7 --- /dev/null +++ b/lang/perl5.10/files/patch-bug56908 @@ -0,0 +1,31 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=56908 +# http://perl5.git.perl.org/perl.git/commitdiff/b17f5ab768c4daa8faac6c85c0c20d3895f406e1?hp=7ee5fac837a8a4ebf1956da1b1d252aa82fe506d +diff --git a/hv.c b/hv.c +index 3d4d3af..24d9150 100644 +--- hv.c ++++ hv.c +@@ -1985,6 +1985,7 @@ Perl_hv_kill_backrefs(pTHX_ HV *hv) { + if (av) { + HvAUX(hv)->xhv_backreferences = 0; + Perl_sv_kill_backrefs(aTHX_ (SV*) hv, av); ++ SvREFCNT_dec(av); + } + } + +diff --git a/sv.c b/sv.c +index 04d6e43..4792ad1 100644 +--- sv.c ++++ sv.c +@@ -10784,10 +10784,11 @@ Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param) + daux->xhv_eiter = saux->xhv_eiter + ? he_dup(saux->xhv_eiter, + (bool)!!HvSHAREKEYS(sstr), param) : 0; ++ /* backref array needs refcnt=2; see sv_add_backref */ + daux->xhv_backreferences = + saux->xhv_backreferences + ? (AV*) SvREFCNT_inc( +- sv_dup((SV*)saux->xhv_backreferences, param)) ++ sv_dup_inc((SV*)saux->xhv_backreferences, param)) + : 0; + + daux->xhv_mro_meta = saux->xhv_mro_meta diff --git a/lang/perl5.10/files/patch-bug59516 b/lang/perl5.10/files/patch-bug59516 new file mode 100644 index 000000000000..572c96e63d3c --- /dev/null +++ b/lang/perl5.10/files/patch-bug59516 @@ -0,0 +1,16 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=59516 +# http://perl5.git.perl.org/perl.git/commitdiff/b023a8eeff463528d4a2b46396f79056c0ef9677?hp=a954f6ee3112c0edfbc59783d1b424d995122784 +diff --git a/regcomp.c b/regcomp.c +index 54347cc..68cc58c 100644 +--- regcomp.c ++++ regcomp.c +@@ -8350,6 +8350,9 @@ parseit: + *STRING(ret)= (char)value; + STR_LEN(ret)= 1; + RExC_emit += STR_SZ(1); ++ if (listsv) { ++ SvREFCNT_dec(listsv); ++ } + return ret; + } + /* optimize case-insensitive simple patterns (e.g. /[a-z]/i) */ diff --git a/lang/perl5.10/files/patch-qr-leak b/lang/perl5.10/files/patch-qr-leak new file mode 100644 index 000000000000..842c0074af46 --- /dev/null +++ b/lang/perl5.10/files/patch-qr-leak @@ -0,0 +1,16 @@ +# http://perl5.git.perl.org/perl.git/commitdiff/a954f6ee3112c0edfbc59783d1b424d995122784?hp=711690a16d2a16be7070e06779c46a6d8f482689 +diff --git a/pp_hot.c b/pp_hot.c +index 57fa328..4a4e9e8 100644 +--- pp_hot.c ++++ pp_hot.c +@@ -1198,6 +1198,9 @@ PP(pp_qr) + if (rx->extflags & RXf_TAINTED) + SvTAINTED_on(rv); + sv_magic(sv,(SV*)ReREFCNT_inc(rx), PERL_MAGIC_qr,0,0); ++ if (pkg) { ++ SvREFCNT_dec(pkg); ++ } + XPUSHs(rv); + RETURN; + } + diff --git a/lang/perl5.12/Makefile b/lang/perl5.12/Makefile index 4ca75e78afd3..aabf0c6a9c92 100644 --- a/lang/perl5.12/Makefile +++ b/lang/perl5.12/Makefile @@ -7,6 +7,7 @@ PORTNAME= perl PORTVERSION= ${PERL_VERSION} +PORTREVISION= 1 CATEGORIES= lang devel perl5 MASTER_SITES= CPAN \ ${MASTER_SITE_LOCAL:S/$/:local/} \ diff --git a/lang/perl5.12/files/patch-IO-Socket-INET-udp b/lang/perl5.12/files/patch-IO-Socket-INET-udp new file mode 100644 index 000000000000..2c0ff86f110a --- /dev/null +++ b/lang/perl5.12/files/patch-IO-Socket-INET-udp @@ -0,0 +1,14 @@ +# http://perl5.git.perl.org/perl.git/commitdiff/7027b9a31bf80c5639c73f75155ed1a89c674c30?hp=f175cff5cac5f8199b897ce2f1c73312d99d5761 +diff --git a/ext/IO/lib/IO/Socket/INET.pm b/ext/IO/lib/IO/Socket/INET.pm +index f8bb338..2f0e5d1 100644 +--- ext/IO/lib/IO/Socket/INET.pm ++++ ext/IO/lib/IO/Socket/INET.pm +@@ -27,7 +27,7 @@ my %socket_type = ( tcp => SOCK_STREAM, + ); + my %proto_number; + $proto_number{tcp} = Socket::IPPROTO_TCP() if defined &Socket::IPPROTO_TCP; +-$proto_number{upd} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP; ++$proto_number{udp} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP; + $proto_number{icmp} = Socket::IPPROTO_ICMP() if defined &Socket::IPPROTO_ICMP; + my %proto_name = reverse %proto_number; + diff --git a/lang/perl5.12/files/patch-bug49003 b/lang/perl5.12/files/patch-bug49003 new file mode 100644 index 000000000000..c43ef58891fb --- /dev/null +++ b/lang/perl5.12/files/patch-bug49003 @@ -0,0 +1,18 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=49003 +# http://perl5.git.perl.org/perl.git/commitdiff/b376053de54af4268a31e5a60d1f9e57db30af11?hp=3a28f3fb1bfd44e4e3dfe6842af867c8c1c9de28 +diff --git a/pp_sys.c b/pp_sys.c +index 66ca0fb..da07e46 100644 +--- pp_sys.c ++++ pp_sys.c +@@ -2999,10 +2999,9 @@ PP(pp_ftrread) + effective = TRUE; + break; + +- + case OP_FTEEXEC: + #ifdef PERL_EFF_ACCESS +- access_mode = W_OK; ++ access_mode = X_OK; + #else + use_access = 0; + #endif diff --git a/lang/perl5.12/files/patch-bug52074-54566 b/lang/perl5.12/files/patch-bug52074-54566 new file mode 100644 index 000000000000..259a39585db7 --- /dev/null +++ b/lang/perl5.12/files/patch-bug52074-54566 @@ -0,0 +1,44 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52074 +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54566 +# http://perl5.git.perl.org/perl.git/commitdiff/5562fa714b8071354c365365c26a950efa73179a?hp=b3562f19ee0d76b60d176a0b1cfdac4f5f36785c +# http://perl5.git.perl.org/perl.git/commitdiff/ea86b3de3510ce31d0c08dd6a21701d74b25369d?hp=72bfe1b2b35945ea3c95d9b94ae2908121292236 +diff --git a/mg.c b/mg.c +index c4d7aeb..91a36f2 100644 +--- mg.c ++++ mg.c +@@ -1543,10 +1543,11 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg) + stash = GvSTASH( + SvTYPE(mg->mg_obj) == SVt_PVGV + ? (GV*)mg->mg_obj +- : (GV*)SvMAGIC(mg->mg_obj)->mg_obj ++ : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj + ); + +- mro_isa_changed_in(stash); ++ if (stash) ++ mro_isa_changed_in(stash); + + return 0; + } +diff --git a/t/mro/pkg_gen.t b/t/mro/pkg_gen.t +index 6a507ac..e1f5eb0 100644 +--- t/mro/pkg_gen.t ++++ t/mro/pkg_gen.t +@@ -4,7 +4,7 @@ use strict; + use warnings; + + chdir 't' if -d 't'; +-require q(./test.pl); plan(tests => 6); ++require q(./test.pl); plan(tests => 7); + + { + package Foo; +@@ -34,3 +34,7 @@ is(mro::get_pkg_gen('Foo'), 1, "pkg_gen 1 for undef %Pkg::"); + + delete $::{"Foo::"}; + is(mro::get_pkg_gen('Foo'), 0, 'pkg_gen 0 for delete $::{Pkg::}'); ++ ++delete $::{"Quux::"}; ++push @Quux::ISA, "Woot"; # should not segfault ++ok(1, "No segfault on modification of ISA in a deleted stash"); + diff --git a/lang/perl5.12/files/patch-bug52658 b/lang/perl5.12/files/patch-bug52658 new file mode 100644 index 000000000000..435f66e1f988 --- /dev/null +++ b/lang/perl5.12/files/patch-bug52658 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52658 +# http://perl5.git.perl.org/perl.git/commitdiff/62b40d2474e7487e6909e1872b6bccdf812c6818?hp=d49025b75d9b5002071bd1a4210654dab5663ef0#patch1 +diff --git a/pp_ctl.c b/pp_ctl.c +index 7a377f0..88269a7 100644 +--- pp_ctl.c ++++ pp_ctl.c +@@ -218,7 +218,6 @@ PP(pp_substcont) + if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs)) + cx->sb_rxtainted |= 2; + sv_catsv(dstr, POPs); +- FREETMPS; /* Prevent excess tmp stack */ + + /* Are we done */ + if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig, + diff --git a/lang/perl5.12/files/patch-bug52740 b/lang/perl5.12/files/patch-bug52740 new file mode 100644 index 000000000000..08a73a1547ee --- /dev/null +++ b/lang/perl5.12/files/patch-bug52740 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52740 +# http://perl5.git.perl.org/perl.git/commitdiff/785bee4f7cf89837cba8e6e0859abbb4b407e1f1?hp=90e91dd8c9549b16c38f6ab2e9fa25c7ea28dff8 +diff --git a/sv.c b/sv.c +index f721e6f..5fcf018 100644 +--- sv.c ++++ sv.c +@@ -3717,7 +3717,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags) + Perl_croak(aTHX_ "Cannot copy to %s", type); + } else if (sflags & SVf_ROK) { + if (isGV_with_GP(dstr) && dtype == SVt_PVGV +- && SvTYPE(SvRV(sstr)) == SVt_PVGV) { ++ && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) { + sstr = SvRV(sstr); + if (sstr == dstr) { + if (GvIMPORTED(dstr) != GVf_IMPORTED diff --git a/lang/perl5.12/files/patch-bug54186 b/lang/perl5.12/files/patch-bug54186 new file mode 100644 index 000000000000..3421afe56091 --- /dev/null +++ b/lang/perl5.12/files/patch-bug54186 @@ -0,0 +1,77 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54186 +# http://perl5.git.perl.org/perl.git/commitdiff/a5d752217825fadff051e943940b4abad8e8b552?hp=8d2082b01041d30d9a510164df9c5e4703949441 +diff --git a/ext/POSIX/Makefile.PL b/ext/POSIX/Makefile.PL +index bd93e59..5f6679d 100644 +--- ext/POSIX/Makefile.PL ++++ ext/POSIX/Makefile.PL +@@ -48,13 +48,11 @@ my @names = + MAX_INPUT MB_LEN_MAX MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_OOB MSG_PEEK + MSG_TRUNC MSG_WAITALL NAME_MAX NCCS NGROUPS_MAX NOFLSH OPEN_MAX OPOST + PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK SCHAR_MAX +- SCHAR_MIN SEEK_CUR SEEK_END SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM ++ SCHAR_MIN SHRT_MAX SHRT_MIN SIGABRT SIGALRM + SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT + SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU + SIGUSR1 SIGUSR2 SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SSIZE_MAX +- STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX +- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID +- S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR TCIFLUSH TCIOFF ++ STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX TCIFLUSH TCIOFF + TCIOFLUSH TCION TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW + TMP_MAX TOSTOP TZNAME_MAX VEOF VEOL VERASE VINTR VKILL VMIN VQUIT + VSTART VSTOP VSUSP VTIME WNOHANG WUNTRACED W_OK X_OK +diff --git a/ext/POSIX/POSIX.pm b/ext/POSIX/POSIX.pm +index fbbd253..97d0b2c 100644 +--- ext/POSIX/POSIX.pm ++++ ext/POSIX/POSIX.pm +@@ -13,7 +13,9 @@ use XSLoader (); + use Fcntl qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK F_SETFD + F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK O_ACCMODE O_APPEND + O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC +- O_WRONLY); ++ O_WRONLY SEEK_CUR SEEK_END SEEK_SET ++ S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID ++ S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR); + + # Grandfather old foo_h form to new :foo_h form + my $loaded; +diff --git a/t/lib/proxy_constant_subs.t b/t/lib/proxy_constant_subs.t +index 4af73d3..45b0a54 100644 +--- t/lib/proxy_constant_subs.t ++++ t/lib/proxy_constant_subs.t +@@ -7,20 +7,20 @@ BEGIN { + print "1..0 # Skip -- Perl configured without B module\n"; + exit 0; + } +- if ($Config::Config{'extensions'} !~ /\bPOSIX\b/) { +- print "1..0 # Skip -- Perl configured without POSIX\n"; ++ if ($Config::Config{'extensions'} !~ /\bFcntl\b/) { ++ print "1..0 # Skip -- Perl configured without Fcntl\n"; + exit 0; + } +- # errno is a real subroutine, and acts as control ++ # S_IFMT is a real subroutine, and acts as control + # SEEK_SET is a proxy constant subroutine. +- @symbols = qw(errno SEEK_SET); ++ @symbols = qw(S_IFMT SEEK_SET); + } + + use strict; + use warnings; + use Test::More tests => 4 * @symbols; + use B qw(svref_2object GVf_IMPORTED_CV); +-use POSIX @symbols; ++use Fcntl @symbols; + + # GVf_IMPORTED_CV should not be set on the original, but should be set on the + # imported GV. +@@ -29,7 +29,7 @@ foreach my $symbol (@symbols) { + my ($ps, $ms); + { + no strict 'refs'; +- $ps = svref_2object(\*{"POSIX::$symbol"}); ++ $ps = svref_2object(\*{"Fcntl::$symbol"}); + $ms = svref_2object(\*{"::$symbol"}); + } + isa_ok($ps, 'B::GV'); + diff --git a/lang/perl5.12/files/patch-bug54758 b/lang/perl5.12/files/patch-bug54758 new file mode 100644 index 000000000000..a969568a7e10 --- /dev/null +++ b/lang/perl5.12/files/patch-bug54758 @@ -0,0 +1,29 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54758 +# http://perl5.git.perl.org/perl.git/commitdiff/62b40d2474e7487e6909e1872b6bccdf812c6818?hp=d49025b75d9b5002071bd1a4210654dab5663ef0#patch1 +diff --git a/pp_sort.c b/pp_sort.c +index 9fe0dad..edfdadf 100644 +--- pp_sort.c ++++ pp_sort.c +@@ -1557,11 +1557,12 @@ PP(pp_sort) + max = AvFILL(av) + 1; + if (SvMAGICAL(av)) { + MEXTEND(SP, max); +- p2 = SP; + for (i=0; i < max; i++) { + SV **svp = av_fetch(av, i, FALSE); + *SP++ = (svp) ? *svp : NULL; + } ++ SP--; ++ p1 = p2 = SP - (max-1); + } + else { + if (SvREADONLY(av)) +@@ -1717,7 +1718,7 @@ PP(pp_sort) + SvREADONLY_off(av); + else if (av && !sorting_av) { + /* simulate pp_aassign of tied AV */ +- SV** const base = ORIGMARK+1; ++ SV** const base = MARK+1; + for (i=0; i < max; i++) { + base[i] = newSVsv(base[i]); + } diff --git a/lang/perl5.12/files/patch-bug54934 b/lang/perl5.12/files/patch-bug54934 new file mode 100644 index 000000000000..7c4544f58c0b --- /dev/null +++ b/lang/perl5.12/files/patch-bug54934 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=49003 +# http://perl5.git.perl.org/perl.git/commitdiff/5a33563ff27918110ac4f876f12dae861e2d2fa2?hp=24ead1638d1eb17b67e49c614831261308ed561f +diff --git a/ext/PerlIO/via/via.xs b/ext/PerlIO/via/via.xs +index 3bc3cbb..5e6ddd3 100644 +--- ext/PerlIO/via/via.xs ++++ ext/PerlIO/via/via.xs +@@ -89,7 +89,7 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags, + if (!s->fh) { + GV *gv = newGVgen(HvNAME_get(s->stash)); + GvIOp(gv) = newIO(); +- s->fh = newRV_noinc((SV *) gv); ++ s->fh = newRV((SV *) gv); + s->io = GvIOp(gv); + } + IoIFP(s->io) = PerlIONext(f); diff --git a/lang/perl5.12/files/patch-bug56908 b/lang/perl5.12/files/patch-bug56908 new file mode 100644 index 000000000000..f6789866cff7 --- /dev/null +++ b/lang/perl5.12/files/patch-bug56908 @@ -0,0 +1,31 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=56908 +# http://perl5.git.perl.org/perl.git/commitdiff/b17f5ab768c4daa8faac6c85c0c20d3895f406e1?hp=7ee5fac837a8a4ebf1956da1b1d252aa82fe506d +diff --git a/hv.c b/hv.c +index 3d4d3af..24d9150 100644 +--- hv.c ++++ hv.c +@@ -1985,6 +1985,7 @@ Perl_hv_kill_backrefs(pTHX_ HV *hv) { + if (av) { + HvAUX(hv)->xhv_backreferences = 0; + Perl_sv_kill_backrefs(aTHX_ (SV*) hv, av); ++ SvREFCNT_dec(av); + } + } + +diff --git a/sv.c b/sv.c +index 04d6e43..4792ad1 100644 +--- sv.c ++++ sv.c +@@ -10784,10 +10784,11 @@ Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param) + daux->xhv_eiter = saux->xhv_eiter + ? he_dup(saux->xhv_eiter, + (bool)!!HvSHAREKEYS(sstr), param) : 0; ++ /* backref array needs refcnt=2; see sv_add_backref */ + daux->xhv_backreferences = + saux->xhv_backreferences + ? (AV*) SvREFCNT_inc( +- sv_dup((SV*)saux->xhv_backreferences, param)) ++ sv_dup_inc((SV*)saux->xhv_backreferences, param)) + : 0; + + daux->xhv_mro_meta = saux->xhv_mro_meta diff --git a/lang/perl5.12/files/patch-bug59516 b/lang/perl5.12/files/patch-bug59516 new file mode 100644 index 000000000000..572c96e63d3c --- /dev/null +++ b/lang/perl5.12/files/patch-bug59516 @@ -0,0 +1,16 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=59516 +# http://perl5.git.perl.org/perl.git/commitdiff/b023a8eeff463528d4a2b46396f79056c0ef9677?hp=a954f6ee3112c0edfbc59783d1b424d995122784 +diff --git a/regcomp.c b/regcomp.c +index 54347cc..68cc58c 100644 +--- regcomp.c ++++ regcomp.c +@@ -8350,6 +8350,9 @@ parseit: + *STRING(ret)= (char)value; + STR_LEN(ret)= 1; + RExC_emit += STR_SZ(1); ++ if (listsv) { ++ SvREFCNT_dec(listsv); ++ } + return ret; + } + /* optimize case-insensitive simple patterns (e.g. /[a-z]/i) */ diff --git a/lang/perl5.12/files/patch-qr-leak b/lang/perl5.12/files/patch-qr-leak new file mode 100644 index 000000000000..842c0074af46 --- /dev/null +++ b/lang/perl5.12/files/patch-qr-leak @@ -0,0 +1,16 @@ +# http://perl5.git.perl.org/perl.git/commitdiff/a954f6ee3112c0edfbc59783d1b424d995122784?hp=711690a16d2a16be7070e06779c46a6d8f482689 +diff --git a/pp_hot.c b/pp_hot.c +index 57fa328..4a4e9e8 100644 +--- pp_hot.c ++++ pp_hot.c +@@ -1198,6 +1198,9 @@ PP(pp_qr) + if (rx->extflags & RXf_TAINTED) + SvTAINTED_on(rv); + sv_magic(sv,(SV*)ReREFCNT_inc(rx), PERL_MAGIC_qr,0,0); ++ if (pkg) { ++ SvREFCNT_dec(pkg); ++ } + XPUSHs(rv); + RETURN; + } + diff --git a/lang/perl5.14/Makefile b/lang/perl5.14/Makefile index 4ca75e78afd3..aabf0c6a9c92 100644 --- a/lang/perl5.14/Makefile +++ b/lang/perl5.14/Makefile @@ -7,6 +7,7 @@ PORTNAME= perl PORTVERSION= ${PERL_VERSION} +PORTREVISION= 1 CATEGORIES= lang devel perl5 MASTER_SITES= CPAN \ ${MASTER_SITE_LOCAL:S/$/:local/} \ diff --git a/lang/perl5.14/files/patch-IO-Socket-INET-udp b/lang/perl5.14/files/patch-IO-Socket-INET-udp new file mode 100644 index 000000000000..2c0ff86f110a --- /dev/null +++ b/lang/perl5.14/files/patch-IO-Socket-INET-udp @@ -0,0 +1,14 @@ +# http://perl5.git.perl.org/perl.git/commitdiff/7027b9a31bf80c5639c73f75155ed1a89c674c30?hp=f175cff5cac5f8199b897ce2f1c73312d99d5761 +diff --git a/ext/IO/lib/IO/Socket/INET.pm b/ext/IO/lib/IO/Socket/INET.pm +index f8bb338..2f0e5d1 100644 +--- ext/IO/lib/IO/Socket/INET.pm ++++ ext/IO/lib/IO/Socket/INET.pm +@@ -27,7 +27,7 @@ my %socket_type = ( tcp => SOCK_STREAM, + ); + my %proto_number; + $proto_number{tcp} = Socket::IPPROTO_TCP() if defined &Socket::IPPROTO_TCP; +-$proto_number{upd} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP; ++$proto_number{udp} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP; + $proto_number{icmp} = Socket::IPPROTO_ICMP() if defined &Socket::IPPROTO_ICMP; + my %proto_name = reverse %proto_number; + diff --git a/lang/perl5.14/files/patch-bug49003 b/lang/perl5.14/files/patch-bug49003 new file mode 100644 index 000000000000..c43ef58891fb --- /dev/null +++ b/lang/perl5.14/files/patch-bug49003 @@ -0,0 +1,18 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=49003 +# http://perl5.git.perl.org/perl.git/commitdiff/b376053de54af4268a31e5a60d1f9e57db30af11?hp=3a28f3fb1bfd44e4e3dfe6842af867c8c1c9de28 +diff --git a/pp_sys.c b/pp_sys.c +index 66ca0fb..da07e46 100644 +--- pp_sys.c ++++ pp_sys.c +@@ -2999,10 +2999,9 @@ PP(pp_ftrread) + effective = TRUE; + break; + +- + case OP_FTEEXEC: + #ifdef PERL_EFF_ACCESS +- access_mode = W_OK; ++ access_mode = X_OK; + #else + use_access = 0; + #endif diff --git a/lang/perl5.14/files/patch-bug52074-54566 b/lang/perl5.14/files/patch-bug52074-54566 new file mode 100644 index 000000000000..259a39585db7 --- /dev/null +++ b/lang/perl5.14/files/patch-bug52074-54566 @@ -0,0 +1,44 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52074 +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54566 +# http://perl5.git.perl.org/perl.git/commitdiff/5562fa714b8071354c365365c26a950efa73179a?hp=b3562f19ee0d76b60d176a0b1cfdac4f5f36785c +# http://perl5.git.perl.org/perl.git/commitdiff/ea86b3de3510ce31d0c08dd6a21701d74b25369d?hp=72bfe1b2b35945ea3c95d9b94ae2908121292236 +diff --git a/mg.c b/mg.c +index c4d7aeb..91a36f2 100644 +--- mg.c ++++ mg.c +@@ -1543,10 +1543,11 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg) + stash = GvSTASH( + SvTYPE(mg->mg_obj) == SVt_PVGV + ? (GV*)mg->mg_obj +- : (GV*)SvMAGIC(mg->mg_obj)->mg_obj ++ : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj + ); + +- mro_isa_changed_in(stash); ++ if (stash) ++ mro_isa_changed_in(stash); + + return 0; + } +diff --git a/t/mro/pkg_gen.t b/t/mro/pkg_gen.t +index 6a507ac..e1f5eb0 100644 +--- t/mro/pkg_gen.t ++++ t/mro/pkg_gen.t +@@ -4,7 +4,7 @@ use strict; + use warnings; + + chdir 't' if -d 't'; +-require q(./test.pl); plan(tests => 6); ++require q(./test.pl); plan(tests => 7); + + { + package Foo; +@@ -34,3 +34,7 @@ is(mro::get_pkg_gen('Foo'), 1, "pkg_gen 1 for undef %Pkg::"); + + delete $::{"Foo::"}; + is(mro::get_pkg_gen('Foo'), 0, 'pkg_gen 0 for delete $::{Pkg::}'); ++ ++delete $::{"Quux::"}; ++push @Quux::ISA, "Woot"; # should not segfault ++ok(1, "No segfault on modification of ISA in a deleted stash"); + diff --git a/lang/perl5.14/files/patch-bug52658 b/lang/perl5.14/files/patch-bug52658 new file mode 100644 index 000000000000..435f66e1f988 --- /dev/null +++ b/lang/perl5.14/files/patch-bug52658 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52658 +# http://perl5.git.perl.org/perl.git/commitdiff/62b40d2474e7487e6909e1872b6bccdf812c6818?hp=d49025b75d9b5002071bd1a4210654dab5663ef0#patch1 +diff --git a/pp_ctl.c b/pp_ctl.c +index 7a377f0..88269a7 100644 +--- pp_ctl.c ++++ pp_ctl.c +@@ -218,7 +218,6 @@ PP(pp_substcont) + if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs)) + cx->sb_rxtainted |= 2; + sv_catsv(dstr, POPs); +- FREETMPS; /* Prevent excess tmp stack */ + + /* Are we done */ + if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig, + diff --git a/lang/perl5.14/files/patch-bug52740 b/lang/perl5.14/files/patch-bug52740 new file mode 100644 index 000000000000..08a73a1547ee --- /dev/null +++ b/lang/perl5.14/files/patch-bug52740 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52740 +# http://perl5.git.perl.org/perl.git/commitdiff/785bee4f7cf89837cba8e6e0859abbb4b407e1f1?hp=90e91dd8c9549b16c38f6ab2e9fa25c7ea28dff8 +diff --git a/sv.c b/sv.c +index f721e6f..5fcf018 100644 +--- sv.c ++++ sv.c +@@ -3717,7 +3717,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags) + Perl_croak(aTHX_ "Cannot copy to %s", type); + } else if (sflags & SVf_ROK) { + if (isGV_with_GP(dstr) && dtype == SVt_PVGV +- && SvTYPE(SvRV(sstr)) == SVt_PVGV) { ++ && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) { + sstr = SvRV(sstr); + if (sstr == dstr) { + if (GvIMPORTED(dstr) != GVf_IMPORTED diff --git a/lang/perl5.14/files/patch-bug54186 b/lang/perl5.14/files/patch-bug54186 new file mode 100644 index 000000000000..3421afe56091 --- /dev/null +++ b/lang/perl5.14/files/patch-bug54186 @@ -0,0 +1,77 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54186 +# http://perl5.git.perl.org/perl.git/commitdiff/a5d752217825fadff051e943940b4abad8e8b552?hp=8d2082b01041d30d9a510164df9c5e4703949441 +diff --git a/ext/POSIX/Makefile.PL b/ext/POSIX/Makefile.PL +index bd93e59..5f6679d 100644 +--- ext/POSIX/Makefile.PL ++++ ext/POSIX/Makefile.PL +@@ -48,13 +48,11 @@ my @names = + MAX_INPUT MB_LEN_MAX MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_OOB MSG_PEEK + MSG_TRUNC MSG_WAITALL NAME_MAX NCCS NGROUPS_MAX NOFLSH OPEN_MAX OPOST + PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK SCHAR_MAX +- SCHAR_MIN SEEK_CUR SEEK_END SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM ++ SCHAR_MIN SHRT_MAX SHRT_MIN SIGABRT SIGALRM + SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT + SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU + SIGUSR1 SIGUSR2 SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SSIZE_MAX +- STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX +- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID +- S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR TCIFLUSH TCIOFF ++ STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX TCIFLUSH TCIOFF + TCIOFLUSH TCION TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW + TMP_MAX TOSTOP TZNAME_MAX VEOF VEOL VERASE VINTR VKILL VMIN VQUIT + VSTART VSTOP VSUSP VTIME WNOHANG WUNTRACED W_OK X_OK +diff --git a/ext/POSIX/POSIX.pm b/ext/POSIX/POSIX.pm +index fbbd253..97d0b2c 100644 +--- ext/POSIX/POSIX.pm ++++ ext/POSIX/POSIX.pm +@@ -13,7 +13,9 @@ use XSLoader (); + use Fcntl qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK F_SETFD + F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK O_ACCMODE O_APPEND + O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC +- O_WRONLY); ++ O_WRONLY SEEK_CUR SEEK_END SEEK_SET ++ S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID ++ S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR); + + # Grandfather old foo_h form to new :foo_h form + my $loaded; +diff --git a/t/lib/proxy_constant_subs.t b/t/lib/proxy_constant_subs.t +index 4af73d3..45b0a54 100644 +--- t/lib/proxy_constant_subs.t ++++ t/lib/proxy_constant_subs.t +@@ -7,20 +7,20 @@ BEGIN { + print "1..0 # Skip -- Perl configured without B module\n"; + exit 0; + } +- if ($Config::Config{'extensions'} !~ /\bPOSIX\b/) { +- print "1..0 # Skip -- Perl configured without POSIX\n"; ++ if ($Config::Config{'extensions'} !~ /\bFcntl\b/) { ++ print "1..0 # Skip -- Perl configured without Fcntl\n"; + exit 0; + } +- # errno is a real subroutine, and acts as control ++ # S_IFMT is a real subroutine, and acts as control + # SEEK_SET is a proxy constant subroutine. +- @symbols = qw(errno SEEK_SET); ++ @symbols = qw(S_IFMT SEEK_SET); + } + + use strict; + use warnings; + use Test::More tests => 4 * @symbols; + use B qw(svref_2object GVf_IMPORTED_CV); +-use POSIX @symbols; ++use Fcntl @symbols; + + # GVf_IMPORTED_CV should not be set on the original, but should be set on the + # imported GV. +@@ -29,7 +29,7 @@ foreach my $symbol (@symbols) { + my ($ps, $ms); + { + no strict 'refs'; +- $ps = svref_2object(\*{"POSIX::$symbol"}); ++ $ps = svref_2object(\*{"Fcntl::$symbol"}); + $ms = svref_2object(\*{"::$symbol"}); + } + isa_ok($ps, 'B::GV'); + diff --git a/lang/perl5.14/files/patch-bug54758 b/lang/perl5.14/files/patch-bug54758 new file mode 100644 index 000000000000..a969568a7e10 --- /dev/null +++ b/lang/perl5.14/files/patch-bug54758 @@ -0,0 +1,29 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54758 +# http://perl5.git.perl.org/perl.git/commitdiff/62b40d2474e7487e6909e1872b6bccdf812c6818?hp=d49025b75d9b5002071bd1a4210654dab5663ef0#patch1 +diff --git a/pp_sort.c b/pp_sort.c +index 9fe0dad..edfdadf 100644 +--- pp_sort.c ++++ pp_sort.c +@@ -1557,11 +1557,12 @@ PP(pp_sort) + max = AvFILL(av) + 1; + if (SvMAGICAL(av)) { + MEXTEND(SP, max); +- p2 = SP; + for (i=0; i < max; i++) { + SV **svp = av_fetch(av, i, FALSE); + *SP++ = (svp) ? *svp : NULL; + } ++ SP--; ++ p1 = p2 = SP - (max-1); + } + else { + if (SvREADONLY(av)) +@@ -1717,7 +1718,7 @@ PP(pp_sort) + SvREADONLY_off(av); + else if (av && !sorting_av) { + /* simulate pp_aassign of tied AV */ +- SV** const base = ORIGMARK+1; ++ SV** const base = MARK+1; + for (i=0; i < max; i++) { + base[i] = newSVsv(base[i]); + } diff --git a/lang/perl5.14/files/patch-bug54934 b/lang/perl5.14/files/patch-bug54934 new file mode 100644 index 000000000000..7c4544f58c0b --- /dev/null +++ b/lang/perl5.14/files/patch-bug54934 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=49003 +# http://perl5.git.perl.org/perl.git/commitdiff/5a33563ff27918110ac4f876f12dae861e2d2fa2?hp=24ead1638d1eb17b67e49c614831261308ed561f +diff --git a/ext/PerlIO/via/via.xs b/ext/PerlIO/via/via.xs +index 3bc3cbb..5e6ddd3 100644 +--- ext/PerlIO/via/via.xs ++++ ext/PerlIO/via/via.xs +@@ -89,7 +89,7 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags, + if (!s->fh) { + GV *gv = newGVgen(HvNAME_get(s->stash)); + GvIOp(gv) = newIO(); +- s->fh = newRV_noinc((SV *) gv); ++ s->fh = newRV((SV *) gv); + s->io = GvIOp(gv); + } + IoIFP(s->io) = PerlIONext(f); diff --git a/lang/perl5.14/files/patch-bug56908 b/lang/perl5.14/files/patch-bug56908 new file mode 100644 index 000000000000..f6789866cff7 --- /dev/null +++ b/lang/perl5.14/files/patch-bug56908 @@ -0,0 +1,31 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=56908 +# http://perl5.git.perl.org/perl.git/commitdiff/b17f5ab768c4daa8faac6c85c0c20d3895f406e1?hp=7ee5fac837a8a4ebf1956da1b1d252aa82fe506d +diff --git a/hv.c b/hv.c +index 3d4d3af..24d9150 100644 +--- hv.c ++++ hv.c +@@ -1985,6 +1985,7 @@ Perl_hv_kill_backrefs(pTHX_ HV *hv) { + if (av) { + HvAUX(hv)->xhv_backreferences = 0; + Perl_sv_kill_backrefs(aTHX_ (SV*) hv, av); ++ SvREFCNT_dec(av); + } + } + +diff --git a/sv.c b/sv.c +index 04d6e43..4792ad1 100644 +--- sv.c ++++ sv.c +@@ -10784,10 +10784,11 @@ Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param) + daux->xhv_eiter = saux->xhv_eiter + ? he_dup(saux->xhv_eiter, + (bool)!!HvSHAREKEYS(sstr), param) : 0; ++ /* backref array needs refcnt=2; see sv_add_backref */ + daux->xhv_backreferences = + saux->xhv_backreferences + ? (AV*) SvREFCNT_inc( +- sv_dup((SV*)saux->xhv_backreferences, param)) ++ sv_dup_inc((SV*)saux->xhv_backreferences, param)) + : 0; + + daux->xhv_mro_meta = saux->xhv_mro_meta diff --git a/lang/perl5.14/files/patch-bug59516 b/lang/perl5.14/files/patch-bug59516 new file mode 100644 index 000000000000..572c96e63d3c --- /dev/null +++ b/lang/perl5.14/files/patch-bug59516 @@ -0,0 +1,16 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=59516 +# http://perl5.git.perl.org/perl.git/commitdiff/b023a8eeff463528d4a2b46396f79056c0ef9677?hp=a954f6ee3112c0edfbc59783d1b424d995122784 +diff --git a/regcomp.c b/regcomp.c +index 54347cc..68cc58c 100644 +--- regcomp.c ++++ regcomp.c +@@ -8350,6 +8350,9 @@ parseit: + *STRING(ret)= (char)value; + STR_LEN(ret)= 1; + RExC_emit += STR_SZ(1); ++ if (listsv) { ++ SvREFCNT_dec(listsv); ++ } + return ret; + } + /* optimize case-insensitive simple patterns (e.g. /[a-z]/i) */ diff --git a/lang/perl5.14/files/patch-qr-leak b/lang/perl5.14/files/patch-qr-leak new file mode 100644 index 000000000000..842c0074af46 --- /dev/null +++ b/lang/perl5.14/files/patch-qr-leak @@ -0,0 +1,16 @@ +# http://perl5.git.perl.org/perl.git/commitdiff/a954f6ee3112c0edfbc59783d1b424d995122784?hp=711690a16d2a16be7070e06779c46a6d8f482689 +diff --git a/pp_hot.c b/pp_hot.c +index 57fa328..4a4e9e8 100644 +--- pp_hot.c ++++ pp_hot.c +@@ -1198,6 +1198,9 @@ PP(pp_qr) + if (rx->extflags & RXf_TAINTED) + SvTAINTED_on(rv); + sv_magic(sv,(SV*)ReREFCNT_inc(rx), PERL_MAGIC_qr,0,0); ++ if (pkg) { ++ SvREFCNT_dec(pkg); ++ } + XPUSHs(rv); + RETURN; + } + diff --git a/lang/perl5.16/Makefile b/lang/perl5.16/Makefile index 4ca75e78afd3..aabf0c6a9c92 100644 --- a/lang/perl5.16/Makefile +++ b/lang/perl5.16/Makefile @@ -7,6 +7,7 @@ PORTNAME= perl PORTVERSION= ${PERL_VERSION} +PORTREVISION= 1 CATEGORIES= lang devel perl5 MASTER_SITES= CPAN \ ${MASTER_SITE_LOCAL:S/$/:local/} \ diff --git a/lang/perl5.16/files/patch-IO-Socket-INET-udp b/lang/perl5.16/files/patch-IO-Socket-INET-udp new file mode 100644 index 000000000000..2c0ff86f110a --- /dev/null +++ b/lang/perl5.16/files/patch-IO-Socket-INET-udp @@ -0,0 +1,14 @@ +# http://perl5.git.perl.org/perl.git/commitdiff/7027b9a31bf80c5639c73f75155ed1a89c674c30?hp=f175cff5cac5f8199b897ce2f1c73312d99d5761 +diff --git a/ext/IO/lib/IO/Socket/INET.pm b/ext/IO/lib/IO/Socket/INET.pm +index f8bb338..2f0e5d1 100644 +--- ext/IO/lib/IO/Socket/INET.pm ++++ ext/IO/lib/IO/Socket/INET.pm +@@ -27,7 +27,7 @@ my %socket_type = ( tcp => SOCK_STREAM, + ); + my %proto_number; + $proto_number{tcp} = Socket::IPPROTO_TCP() if defined &Socket::IPPROTO_TCP; +-$proto_number{upd} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP; ++$proto_number{udp} = Socket::IPPROTO_UDP() if defined &Socket::IPPROTO_UDP; + $proto_number{icmp} = Socket::IPPROTO_ICMP() if defined &Socket::IPPROTO_ICMP; + my %proto_name = reverse %proto_number; + diff --git a/lang/perl5.16/files/patch-bug49003 b/lang/perl5.16/files/patch-bug49003 new file mode 100644 index 000000000000..c43ef58891fb --- /dev/null +++ b/lang/perl5.16/files/patch-bug49003 @@ -0,0 +1,18 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=49003 +# http://perl5.git.perl.org/perl.git/commitdiff/b376053de54af4268a31e5a60d1f9e57db30af11?hp=3a28f3fb1bfd44e4e3dfe6842af867c8c1c9de28 +diff --git a/pp_sys.c b/pp_sys.c +index 66ca0fb..da07e46 100644 +--- pp_sys.c ++++ pp_sys.c +@@ -2999,10 +2999,9 @@ PP(pp_ftrread) + effective = TRUE; + break; + +- + case OP_FTEEXEC: + #ifdef PERL_EFF_ACCESS +- access_mode = W_OK; ++ access_mode = X_OK; + #else + use_access = 0; + #endif diff --git a/lang/perl5.16/files/patch-bug52074-54566 b/lang/perl5.16/files/patch-bug52074-54566 new file mode 100644 index 000000000000..259a39585db7 --- /dev/null +++ b/lang/perl5.16/files/patch-bug52074-54566 @@ -0,0 +1,44 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52074 +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54566 +# http://perl5.git.perl.org/perl.git/commitdiff/5562fa714b8071354c365365c26a950efa73179a?hp=b3562f19ee0d76b60d176a0b1cfdac4f5f36785c +# http://perl5.git.perl.org/perl.git/commitdiff/ea86b3de3510ce31d0c08dd6a21701d74b25369d?hp=72bfe1b2b35945ea3c95d9b94ae2908121292236 +diff --git a/mg.c b/mg.c +index c4d7aeb..91a36f2 100644 +--- mg.c ++++ mg.c +@@ -1543,10 +1543,11 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg) + stash = GvSTASH( + SvTYPE(mg->mg_obj) == SVt_PVGV + ? (GV*)mg->mg_obj +- : (GV*)SvMAGIC(mg->mg_obj)->mg_obj ++ : (GV*)mg_find(mg->mg_obj, PERL_MAGIC_isa)->mg_obj + ); + +- mro_isa_changed_in(stash); ++ if (stash) ++ mro_isa_changed_in(stash); + + return 0; + } +diff --git a/t/mro/pkg_gen.t b/t/mro/pkg_gen.t +index 6a507ac..e1f5eb0 100644 +--- t/mro/pkg_gen.t ++++ t/mro/pkg_gen.t +@@ -4,7 +4,7 @@ use strict; + use warnings; + + chdir 't' if -d 't'; +-require q(./test.pl); plan(tests => 6); ++require q(./test.pl); plan(tests => 7); + + { + package Foo; +@@ -34,3 +34,7 @@ is(mro::get_pkg_gen('Foo'), 1, "pkg_gen 1 for undef %Pkg::"); + + delete $::{"Foo::"}; + is(mro::get_pkg_gen('Foo'), 0, 'pkg_gen 0 for delete $::{Pkg::}'); ++ ++delete $::{"Quux::"}; ++push @Quux::ISA, "Woot"; # should not segfault ++ok(1, "No segfault on modification of ISA in a deleted stash"); + diff --git a/lang/perl5.16/files/patch-bug52658 b/lang/perl5.16/files/patch-bug52658 new file mode 100644 index 000000000000..435f66e1f988 --- /dev/null +++ b/lang/perl5.16/files/patch-bug52658 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52658 +# http://perl5.git.perl.org/perl.git/commitdiff/62b40d2474e7487e6909e1872b6bccdf812c6818?hp=d49025b75d9b5002071bd1a4210654dab5663ef0#patch1 +diff --git a/pp_ctl.c b/pp_ctl.c +index 7a377f0..88269a7 100644 +--- pp_ctl.c ++++ pp_ctl.c +@@ -218,7 +218,6 @@ PP(pp_substcont) + if (!(cx->sb_rxtainted & 2) && SvTAINTED(TOPs)) + cx->sb_rxtainted |= 2; + sv_catsv(dstr, POPs); +- FREETMPS; /* Prevent excess tmp stack */ + + /* Are we done */ + if (cx->sb_once || !CALLREGEXEC(rx, s, cx->sb_strend, orig, + diff --git a/lang/perl5.16/files/patch-bug52740 b/lang/perl5.16/files/patch-bug52740 new file mode 100644 index 000000000000..08a73a1547ee --- /dev/null +++ b/lang/perl5.16/files/patch-bug52740 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=52740 +# http://perl5.git.perl.org/perl.git/commitdiff/785bee4f7cf89837cba8e6e0859abbb4b407e1f1?hp=90e91dd8c9549b16c38f6ab2e9fa25c7ea28dff8 +diff --git a/sv.c b/sv.c +index f721e6f..5fcf018 100644 +--- sv.c ++++ sv.c +@@ -3717,7 +3717,7 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV* sstr, const I32 flags) + Perl_croak(aTHX_ "Cannot copy to %s", type); + } else if (sflags & SVf_ROK) { + if (isGV_with_GP(dstr) && dtype == SVt_PVGV +- && SvTYPE(SvRV(sstr)) == SVt_PVGV) { ++ && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) { + sstr = SvRV(sstr); + if (sstr == dstr) { + if (GvIMPORTED(dstr) != GVf_IMPORTED diff --git a/lang/perl5.16/files/patch-bug54186 b/lang/perl5.16/files/patch-bug54186 new file mode 100644 index 000000000000..3421afe56091 --- /dev/null +++ b/lang/perl5.16/files/patch-bug54186 @@ -0,0 +1,77 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54186 +# http://perl5.git.perl.org/perl.git/commitdiff/a5d752217825fadff051e943940b4abad8e8b552?hp=8d2082b01041d30d9a510164df9c5e4703949441 +diff --git a/ext/POSIX/Makefile.PL b/ext/POSIX/Makefile.PL +index bd93e59..5f6679d 100644 +--- ext/POSIX/Makefile.PL ++++ ext/POSIX/Makefile.PL +@@ -48,13 +48,11 @@ my @names = + MAX_INPUT MB_LEN_MAX MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_OOB MSG_PEEK + MSG_TRUNC MSG_WAITALL NAME_MAX NCCS NGROUPS_MAX NOFLSH OPEN_MAX OPOST + PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK SCHAR_MAX +- SCHAR_MIN SEEK_CUR SEEK_END SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM ++ SCHAR_MIN SHRT_MAX SHRT_MIN SIGABRT SIGALRM + SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT + SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU + SIGUSR1 SIGUSR2 SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SSIZE_MAX +- STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX +- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID +- S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR TCIFLUSH TCIOFF ++ STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX TCIFLUSH TCIOFF + TCIOFLUSH TCION TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW + TMP_MAX TOSTOP TZNAME_MAX VEOF VEOL VERASE VINTR VKILL VMIN VQUIT + VSTART VSTOP VSUSP VTIME WNOHANG WUNTRACED W_OK X_OK +diff --git a/ext/POSIX/POSIX.pm b/ext/POSIX/POSIX.pm +index fbbd253..97d0b2c 100644 +--- ext/POSIX/POSIX.pm ++++ ext/POSIX/POSIX.pm +@@ -13,7 +13,9 @@ use XSLoader (); + use Fcntl qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK F_SETFD + F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK O_ACCMODE O_APPEND + O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC +- O_WRONLY); ++ O_WRONLY SEEK_CUR SEEK_END SEEK_SET ++ S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISGID S_ISUID ++ S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR); + + # Grandfather old foo_h form to new :foo_h form + my $loaded; +diff --git a/t/lib/proxy_constant_subs.t b/t/lib/proxy_constant_subs.t +index 4af73d3..45b0a54 100644 +--- t/lib/proxy_constant_subs.t ++++ t/lib/proxy_constant_subs.t +@@ -7,20 +7,20 @@ BEGIN { + print "1..0 # Skip -- Perl configured without B module\n"; + exit 0; + } +- if ($Config::Config{'extensions'} !~ /\bPOSIX\b/) { +- print "1..0 # Skip -- Perl configured without POSIX\n"; ++ if ($Config::Config{'extensions'} !~ /\bFcntl\b/) { ++ print "1..0 # Skip -- Perl configured without Fcntl\n"; + exit 0; + } +- # errno is a real subroutine, and acts as control ++ # S_IFMT is a real subroutine, and acts as control + # SEEK_SET is a proxy constant subroutine. +- @symbols = qw(errno SEEK_SET); ++ @symbols = qw(S_IFMT SEEK_SET); + } + + use strict; + use warnings; + use Test::More tests => 4 * @symbols; + use B qw(svref_2object GVf_IMPORTED_CV); +-use POSIX @symbols; ++use Fcntl @symbols; + + # GVf_IMPORTED_CV should not be set on the original, but should be set on the + # imported GV. +@@ -29,7 +29,7 @@ foreach my $symbol (@symbols) { + my ($ps, $ms); + { + no strict 'refs'; +- $ps = svref_2object(\*{"POSIX::$symbol"}); ++ $ps = svref_2object(\*{"Fcntl::$symbol"}); + $ms = svref_2object(\*{"::$symbol"}); + } + isa_ok($ps, 'B::GV'); + diff --git a/lang/perl5.16/files/patch-bug54758 b/lang/perl5.16/files/patch-bug54758 new file mode 100644 index 000000000000..a969568a7e10 --- /dev/null +++ b/lang/perl5.16/files/patch-bug54758 @@ -0,0 +1,29 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=54758 +# http://perl5.git.perl.org/perl.git/commitdiff/62b40d2474e7487e6909e1872b6bccdf812c6818?hp=d49025b75d9b5002071bd1a4210654dab5663ef0#patch1 +diff --git a/pp_sort.c b/pp_sort.c +index 9fe0dad..edfdadf 100644 +--- pp_sort.c ++++ pp_sort.c +@@ -1557,11 +1557,12 @@ PP(pp_sort) + max = AvFILL(av) + 1; + if (SvMAGICAL(av)) { + MEXTEND(SP, max); +- p2 = SP; + for (i=0; i < max; i++) { + SV **svp = av_fetch(av, i, FALSE); + *SP++ = (svp) ? *svp : NULL; + } ++ SP--; ++ p1 = p2 = SP - (max-1); + } + else { + if (SvREADONLY(av)) +@@ -1717,7 +1718,7 @@ PP(pp_sort) + SvREADONLY_off(av); + else if (av && !sorting_av) { + /* simulate pp_aassign of tied AV */ +- SV** const base = ORIGMARK+1; ++ SV** const base = MARK+1; + for (i=0; i < max; i++) { + base[i] = newSVsv(base[i]); + } diff --git a/lang/perl5.16/files/patch-bug54934 b/lang/perl5.16/files/patch-bug54934 new file mode 100644 index 000000000000..7c4544f58c0b --- /dev/null +++ b/lang/perl5.16/files/patch-bug54934 @@ -0,0 +1,15 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=49003 +# http://perl5.git.perl.org/perl.git/commitdiff/5a33563ff27918110ac4f876f12dae861e2d2fa2?hp=24ead1638d1eb17b67e49c614831261308ed561f +diff --git a/ext/PerlIO/via/via.xs b/ext/PerlIO/via/via.xs +index 3bc3cbb..5e6ddd3 100644 +--- ext/PerlIO/via/via.xs ++++ ext/PerlIO/via/via.xs +@@ -89,7 +89,7 @@ PerlIOVia_method(pTHX_ PerlIO * f, const char *method, CV ** save, int flags, + if (!s->fh) { + GV *gv = newGVgen(HvNAME_get(s->stash)); + GvIOp(gv) = newIO(); +- s->fh = newRV_noinc((SV *) gv); ++ s->fh = newRV((SV *) gv); + s->io = GvIOp(gv); + } + IoIFP(s->io) = PerlIONext(f); diff --git a/lang/perl5.16/files/patch-bug56908 b/lang/perl5.16/files/patch-bug56908 new file mode 100644 index 000000000000..f6789866cff7 --- /dev/null +++ b/lang/perl5.16/files/patch-bug56908 @@ -0,0 +1,31 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=56908 +# http://perl5.git.perl.org/perl.git/commitdiff/b17f5ab768c4daa8faac6c85c0c20d3895f406e1?hp=7ee5fac837a8a4ebf1956da1b1d252aa82fe506d +diff --git a/hv.c b/hv.c +index 3d4d3af..24d9150 100644 +--- hv.c ++++ hv.c +@@ -1985,6 +1985,7 @@ Perl_hv_kill_backrefs(pTHX_ HV *hv) { + if (av) { + HvAUX(hv)->xhv_backreferences = 0; + Perl_sv_kill_backrefs(aTHX_ (SV*) hv, av); ++ SvREFCNT_dec(av); + } + } + +diff --git a/sv.c b/sv.c +index 04d6e43..4792ad1 100644 +--- sv.c ++++ sv.c +@@ -10784,10 +10784,11 @@ Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param) + daux->xhv_eiter = saux->xhv_eiter + ? he_dup(saux->xhv_eiter, + (bool)!!HvSHAREKEYS(sstr), param) : 0; ++ /* backref array needs refcnt=2; see sv_add_backref */ + daux->xhv_backreferences = + saux->xhv_backreferences + ? (AV*) SvREFCNT_inc( +- sv_dup((SV*)saux->xhv_backreferences, param)) ++ sv_dup_inc((SV*)saux->xhv_backreferences, param)) + : 0; + + daux->xhv_mro_meta = saux->xhv_mro_meta diff --git a/lang/perl5.16/files/patch-bug59516 b/lang/perl5.16/files/patch-bug59516 new file mode 100644 index 000000000000..572c96e63d3c --- /dev/null +++ b/lang/perl5.16/files/patch-bug59516 @@ -0,0 +1,16 @@ +# http://rt.perl.org/rt3/Public/Bug/Display.html?id=59516 +# http://perl5.git.perl.org/perl.git/commitdiff/b023a8eeff463528d4a2b46396f79056c0ef9677?hp=a954f6ee3112c0edfbc59783d1b424d995122784 +diff --git a/regcomp.c b/regcomp.c +index 54347cc..68cc58c 100644 +--- regcomp.c ++++ regcomp.c +@@ -8350,6 +8350,9 @@ parseit: + *STRING(ret)= (char)value; + STR_LEN(ret)= 1; + RExC_emit += STR_SZ(1); ++ if (listsv) { ++ SvREFCNT_dec(listsv); ++ } + return ret; + } + /* optimize case-insensitive simple patterns (e.g. /[a-z]/i) */ diff --git a/lang/perl5.16/files/patch-qr-leak b/lang/perl5.16/files/patch-qr-leak new file mode 100644 index 000000000000..842c0074af46 --- /dev/null +++ b/lang/perl5.16/files/patch-qr-leak @@ -0,0 +1,16 @@ +# http://perl5.git.perl.org/perl.git/commitdiff/a954f6ee3112c0edfbc59783d1b424d995122784?hp=711690a16d2a16be7070e06779c46a6d8f482689 +diff --git a/pp_hot.c b/pp_hot.c +index 57fa328..4a4e9e8 100644 +--- pp_hot.c ++++ pp_hot.c +@@ -1198,6 +1198,9 @@ PP(pp_qr) + if (rx->extflags & RXf_TAINTED) + SvTAINTED_on(rv); + sv_magic(sv,(SV*)ReREFCNT_inc(rx), PERL_MAGIC_qr,0,0); ++ if (pkg) { ++ SvREFCNT_dec(pkg); ++ } + XPUSHs(rv); + RETURN; + } +