Imported Upstream version 5.28.2 upstream/5.28.2
authorDongHun Kwak <dh0128.kwak@samsung.com>
Thu, 26 Sep 2019 07:14:04 +0000 (16:14 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Thu, 26 Sep 2019 07:14:04 +0000 (16:14 +0900)
74 files changed:
AUTHORS
Configure
Cross/config.sh-arm-linux
Cross/config.sh-arm-linux-n770
INSTALL
MANIFEST
META.json
META.yml
Makefile.SH
NetWare/Makefile
NetWare/config_H.wc
Porting/config.sh
Porting/config_H
Porting/epigraphs.pod
Porting/release_managers_guide.pod
Porting/release_schedule.pod
README
README.haiku
README.macosx
README.os2
README.vms
av.h
caretx.c
dist/Module-CoreList/Changes
dist/Module-CoreList/lib/Module/CoreList.pm
dist/Module-CoreList/lib/Module/CoreList/Utils.pm
dist/Storable/Makefile.PL
dist/Storable/Storable.xs
dist/Storable/__Storable__.pm
dist/Storable/stacksize
dist/Storable/t/recurse.t
doio.c
embed.fnc
embed.h
ext/PerlIO-scalar/scalar.pm
ext/PerlIO-scalar/scalar.xs
ext/XS-APItest/t/svcatpvf.t
hints/catamount.sh
hints/linux.sh
installperl
lib/B/Op_private.pm
numeric.c
patchlevel.h
perl.c
plan9/config.plan9
plan9/config_sh.sample
pod/perl.pod
pod/perl5263delta.pod [new file with mode: 0644]
pod/perl5281delta.pod [new file with mode: 0644]
pod/perldelta.pod
pod/perldiag.pod
pod/perlhist.pod
pod/perlre.pod
pp.c
pp_hot.c
pp_pack.c
proto.h
regexec.c
sv.c
t/io/inplace.t
t/lib/croak/toke
t/op/for.t
t/op/pack.t
t/op/repeat.t
t/re/script_run.t
t/re/subst.t
t/run/switches.t
toke.c
util.c
vms/descrip_mms.template
win32/GNUmakefile
win32/Makefile
win32/makefile.mk
win32/pod.mak

diff --git a/AUTHORS b/AUTHORS
index 06bde86..f78e410 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1213,6 +1213,7 @@ Tim Sweetman                      <tim@aldigital.co.uk>
 Tim Witham                     <twitham@pcocd2.intel.com>
 Timothe Litt                   <litt@acm.org>
 Timur I. Bakeyev               <bsdi@listserv.bat.ru>
+Tina Müller                   <cpan2@tinita.de>
 Tkil                           <tkil@reptile.scrye.com>
 Tobias Leich                   <email@froggs.de>
 Toby Inkster                   <mail@tobyinkster.co.uk>
@@ -1298,6 +1299,7 @@ Yuval Kogman                      <nothingmuch@woobling.org>
 Yves Orton                     <demerphq@gmail.com>
 Zachary Miller                 <zcmiller@simon.er.usgs.gov>
 Zachary Storer                 <zacts.3.14159@gmail.com>
+Zak B. Elep                    <zakame@zakame.net>
 Zbynek Vyskovsky               <kvr@centrum.cz>
 Zefram                         <zefram@fysh.org>
 Zsbán Ambrus                  <ambrus@math.bme.hu>
index 3be9f05..f99377e 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -10737,6 +10737,7 @@ hasproto='varname=$1; func=$2; shift; shift;
 while $test $# -ge 2; do
        case "$1" in
        $define) echo "#include <$2>";;
+       literal) echo "$2" ;;
        esac ;
     shift 2;
 done > try.c;
@@ -16174,12 +16175,46 @@ set mbtowc d_mbtowc
 eval $inlibc
 
 : see if memmem exists
-set memmem d_memmem
-eval $inlibc
+: We need both a prototype in string.h and the symbol in libc.
+echo " "
+d_memmem_proto=''
+xx1="#$d_gnulibc HAS_GNULIBC"
+xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
+xx3='#   define _GNU_SOURCE'
+xx4='#endif'
+set d_memmem_proto memmem literal "$xx1" literal "$xx2" literal "$xx3" literal "$xx4" define string.h
+eval $hasproto
+case "$d_memmem_proto" in
+    define) # see if memmem exists
+       set memmem d_memmem
+       eval $inlibc
+       ;;
+    *)  val=$undef
+       set d_memmem
+       eval $setvar
+       ;;
+esac
 
 : see if memrchr exists
-set memrchr d_memrchr
-eval $inlibc
+: We need both a prototype in string.h and the symbol in libc.
+echo " "
+d_memrchr_proto=''
+xx1="#$d_gnulibc HAS_GNULIBC"
+xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
+xx3='#   define _GNU_SOURCE'
+xx4='#endif'
+set d_memrchr_proto memrchr literal "$xx1" literal "$xx2" literal "$xx3" literal "$xx4" define string.h
+eval $hasproto
+case "$d_memrchr_proto" in
+    define) # see if memrchr exists
+       set memrchr d_memrchr
+       eval $inlibc
+       ;;
+    *)  val=$undef
+       set d_memrchr
+       eval $setvar
+       ;;
+esac
 
 : see if mkdir exists
 set mkdir d_mkdir
@@ -18788,12 +18823,46 @@ set strftime d_strftime
 eval $inlibc
 
 : see if strlcat exists
-set strlcat d_strlcat
-eval $inlibc
+: We need both a prototype in string.h and the symbol in libc.
+echo " "
+d_strlcat_proto=''
+xx1="#$d_gnulibc HAS_GNULIBC"
+xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
+xx3='#   define _GNU_SOURCE'
+xx4='#endif'
+set d_strlcat_proto strlcat literal "$xx1" literal "$xx2" literal "$xx3" literal "$xx4" define string.h
+eval $hasproto
+case "$d_strlcat_proto" in
+    define) # see if strlcat exists
+       set strlcat d_strlcat
+       eval $inlibc
+       ;;
+    *)  val=$undef
+       set d_strlcat
+       eval $setvar
+       ;;
+esac
 
 : see if strlcpy exists
-set strlcpy d_strlcpy
-eval $inlibc
+: We need both a prototype in string.h and the symbol in libc.
+echo " "
+d_strlcpy_proto=''
+xx1="#$d_gnulibc HAS_GNULIBC"
+xx2='#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)'
+xx3='#   define _GNU_SOURCE'
+xx4='#endif'
+set d_strlcpy_proto strlcpy literal "$xx1" literal "$xx2" literal "$xx3" literal "$xx4" define string.h
+eval $hasproto
+case "$d_strlcpy_proto" in
+    define) # see if strlcpy exists
+       set strlcpy d_strlcpy
+       eval $inlibc
+       ;;
+    *)  val=$undef
+       set d_strlcpy
+       eval $setvar
+       ;;
+esac
 
 : see if strnlen exists
 set strnlen d_strnlen
index 02d3b43..ec61edc 100644 (file)
@@ -35,8 +35,8 @@ api_subversion='0'
 api_version='28'
 api_versionstring='5.28.0'
 ar='ar'
-archlib='/usr/lib/perl5/5.28.1/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.28.1/armv4l-linux'
+archlib='/usr/lib/perl5/5.28.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.28.2/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -55,7 +55,7 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.28.1/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.28.2/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -818,7 +818,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.28.1/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.28.2/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -826,13 +826,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.28.1'
+installprivlib='./install_me_here/usr/lib/perl5/5.28.2'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.28.1/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.28.2/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.28.1'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.28.2'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -966,8 +966,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.28.1'
-privlibexp='/usr/lib/perl5/5.28.1'
+privlib='/usr/lib/perl5/5.28.2'
+privlibexp='/usr/lib/perl5/5.28.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1032,17 +1032,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.28.1/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.28.1/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.28.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.28.2/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.28.1'
+sitelib='/usr/lib/perl5/site_perl/5.28.2'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.28.1'
+sitelibexp='/usr/lib/perl5/site_perl/5.28.2'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1081,7 +1081,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1172,8 +1172,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.28.1'
-version_patchlevel_string='version 28 subversion 1'
+version='5.28.2'
+version_patchlevel_string='version 28 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1187,7 +1187,7 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=28
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=28
 PERL_API_SUBVERSION=0
index b124a80..6be5aa5 100644 (file)
@@ -35,8 +35,8 @@ api_subversion='0'
 api_version='28'
 api_versionstring='5.28.0'
 ar='ar'
-archlib='/usr/lib/perl5/5.28.1/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.28.1/armv4l-linux'
+archlib='/usr/lib/perl5/5.28.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.28.2/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -54,7 +54,7 @@ castflags='0'
 cat='cat'
 cc='arm-none-linux-gnueabi-gcc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.28.1/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.28.2/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -816,7 +816,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.28.1/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.28.2/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -824,13 +824,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.28.1'
+installprivlib='./install_me_here/usr/lib/perl5/5.28.2'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.28.1/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.28.2/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.28.1'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.28.2'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -964,8 +964,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.28.1'
-privlibexp='/usr/lib/perl5/5.28.1'
+privlib='/usr/lib/perl5/5.28.2'
+privlibexp='/usr/lib/perl5/5.28.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1030,17 +1030,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.28.1/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.28.1/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.28.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.28.2/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.28.1'
+sitelib='/usr/lib/perl5/site_perl/5.28.2'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.28.1'
+sitelibexp='/usr/lib/perl5/site_perl/5.28.2'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1079,7 +1079,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1170,8 +1170,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.28.1'
-version_patchlevel_string='version 28 subversion 1'
+version='5.28.2'
+version_patchlevel_string='version 28 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1185,7 +1185,7 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=28
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=28
 PERL_API_SUBVERSION=0
diff --git a/INSTALL b/INSTALL
index 31a0d90..bc0f437 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -609,7 +609,7 @@ The directories set up by Configure fall into three broad categories.
 
 =item Directories for the perl distribution
 
-By default, Configure will use the following directories for 5.28.1.
+By default, Configure will use the following directories for 5.28.2.
 $version is the full perl version number, including subversion, e.g.
 5.12.3, and $archname is a string like sun4-sunos,
 determined by Configure.  The full definitions of all Configure
@@ -2440,7 +2440,7 @@ http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
 
 =head1 Coexistence with earlier versions of perl 5
 
-Perl 5.28.1 is not binary compatible with versions of Perl earlier than
+Perl 5.28.2 is not binary compatible with versions of Perl earlier than
 5.28.0.
 In other words, you will have to recompile your XS modules.
 
@@ -2516,9 +2516,9 @@ won't interfere with another version.  (The defaults guarantee this for
 libraries after 5.6.0, but not for executables. TODO?)  One convenient
 way to do this is by using a separate prefix for each version, such as
 
-       sh Configure -Dprefix=/opt/perl5.28.1
+       sh Configure -Dprefix=/opt/perl5.28.2
 
-and adding /opt/perl5.28.1/bin to the shell PATH variable.  Such users
+and adding /opt/perl5.28.2/bin to the shell PATH variable.  Such users
 may also wish to add a symbolic link /usr/local/bin/perl so that
 scripts can still start with #!/usr/local/bin/perl.
 
@@ -2533,11 +2533,11 @@ yet.
 
 =head2 Upgrading from 5.27.11 or earlier
 
-B<Perl 5.28.1 may not be binary compatible with Perl 5.27.11 or
+B<Perl 5.28.2 may not be binary compatible with Perl 5.27.11 or
 earlier Perl releases.>  Perl modules having binary parts
 (meaning that a C compiler is used) will have to be recompiled to be
-used with 5.28.1.  If you find you do need to rebuild an extension with
-5.28.1, you may safely do so without disturbing the older
+used with 5.28.2.  If you find you do need to rebuild an extension with
+5.28.2, you may safely do so without disturbing the older
 installations.  (See L<"Coexistence with earlier versions of perl 5">
 above.)
 
@@ -2570,15 +2570,15 @@ Firstly, the bare minimum to run this script
      print("$f\n");
   }
 
-in Linux with perl-5.28.1 is as follows (under $Config{prefix}):
+in Linux with perl-5.28.2 is as follows (under $Config{prefix}):
 
   ./bin/perl
-  ./lib/perl5/5.28.1/strict.pm
-  ./lib/perl5/5.28.1/warnings.pm
-  ./lib/perl5/5.28.1/i686-linux/File/Glob.pm
-  ./lib/perl5/5.28.1/feature.pm
-  ./lib/perl5/5.28.1/XSLoader.pm
-  ./lib/perl5/5.28.1/i686-linux/auto/File/Glob/Glob.so
+  ./lib/perl5/5.28.2/strict.pm
+  ./lib/perl5/5.28.2/warnings.pm
+  ./lib/perl5/5.28.2/i686-linux/File/Glob.pm
+  ./lib/perl5/5.28.2/feature.pm
+  ./lib/perl5/5.28.2/XSLoader.pm
+  ./lib/perl5/5.28.2/i686-linux/auto/File/Glob/Glob.so
 
 Secondly, for perl-5.10.1, the Debian perl-base package contains 591
 files, (of which 510 are for lib/unicore) totaling about 3.5MB in its
index fcf3455..22b7d4a 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5068,7 +5068,9 @@ pod/perl5244delta.pod             Perl changes in version 5.24.4
 pod/perl5260delta.pod          Perl changes in version 5.26.0
 pod/perl5261delta.pod          Perl changes in version 5.26.1
 pod/perl5262delta.pod          Perl changes in version 5.26.2
+pod/perl5263delta.pod          Perl changes in version 5.26.3
 pod/perl5280delta.pod          Perl changes in version 5.28.0
+pod/perl5281delta.pod          Perl changes in version 5.28.1
 pod/perl561delta.pod           Perl changes in version 5.6.1
 pod/perl56delta.pod            Perl changes in version 5.6
 pod/perl581delta.pod           Perl changes in version 5.8.1
index 555a7d8..51afa28 100644 (file)
--- a/META.json
+++ b/META.json
          "url" : "http://perl5.git.perl.org/"
       }
    },
-   "version" : "5.028001",
+   "version" : "5.028002",
    "x_serialization_backend" : "JSON::PP version 2.97001"
 }
index 1693b2a..2ed736a 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -114,5 +114,5 @@ resources:
   homepage: http://www.perl.org/
   license: http://dev.perl.org/licenses/
   repository: http://perl5.git.perl.org/
-version: '5.028001'
+version: '5.028002'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
index 5197009..47edfe1 100755 (executable)
@@ -67,8 +67,16 @@ true)
                             -compatibility_version \
                                ${api_revision}.${api_version}.${api_subversion} \
                             -current_version \
-                               ${revision}.${patchlevel}.${subversion} \
-                            -install_name \$(shrpdir)/\$@"
+                               ${revision}.${patchlevel}.${subversion}"
+               case "$osvers" in
+               1[5-9]*|[2-9]*)
+                       shrpldflags="$shrpldflags -install_name `pwd`/\$@ -Xlinker -headerpad_max_install_names"
+                       exeldflags="-Xlinker -headerpad_max_install_names"
+                       ;;
+               *)
+                       shrpldflags="$shrpldflags -install_name \$(shrpdir)/\$@"
+                       ;;
+               esac
                ;;
        cygwin*)
                shrpldflags="$shrpldflags -Wl,--out-implib=libperl.dll.a -Wl,--image-base,0x52000000"
@@ -339,6 +347,14 @@ MANIFEST_SRT = MANIFEST.srt
 
 !GROK!THIS!
 
+case "$useshrplib$osname" in
+truedarwin)
+       $spitshell >>$Makefile <<!GROK!THIS!
+PERL_EXE_LDFLAGS=$exeldflags
+!GROK!THIS!
+       ;;
+esac
+
 case "$usecrosscompile$perl" in
 define?*)
        $spitshell >>$Makefile <<!GROK!THIS!
@@ -575,7 +591,7 @@ esac
 
 $spitshell >>$Makefile <<'!NO!SUBS!'
 
-perltoc_pod_prereqs = extra.pods pod/perl5281delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
+perltoc_pod_prereqs = extra.pods pod/perl5282delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
 generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
 generated_headers = uudmap.h bitcount.h mg_data.h
 
@@ -1050,6 +1066,20 @@ $(PERL_EXE): $& $(perlmain_dep) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT)
        $(SHRPENV) $(CC) -o perl $(CLDFLAGS) $(CCDLFLAGS) $(perlmain_objs) $(LLIBPERL) $(static_ext) `cat ext.libs` $(libs)
 !NO!SUBS!
         ;;
+
+       darwin)
+           case "$useshrplib$osvers" in
+           true1[5-9]*|true[2-9]*) $spitshell >>$Makefile <<'!NO!SUBS!'
+       $(SHRPENV) $(CC) -o perl $(PERL_EXE_LDFLAGS) $(CLDFLAGS) $(CCDLFLAGS) $(perlmain_objs) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
+!NO!SUBS!
+              ;;
+           *) $spitshell >>$Makefile <<'!NO!SUBS!'
+       $(SHRPENV) $(CC) -o perl $(CLDFLAGS) $(CCDLFLAGS) $(perlmain_objs) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
+!NO!SUBS!
+              ;;
+           esac
+        ;;
+
         *) $spitshell >>$Makefile <<'!NO!SUBS!'
        $(SHRPENV) $(CC) -o perl $(CLDFLAGS) $(CCDLFLAGS) $(perlmain_objs) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
 !NO!SUBS!
@@ -1125,9 +1155,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc
 pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
        $(MINIPERL) pod/perlmodlib.PL -q
 
-pod/perl5281delta.pod: pod/perldelta.pod
-       $(RMS) pod/perl5281delta.pod
-       $(LNS) perldelta.pod pod/perl5281delta.pod
+pod/perl5282delta.pod: pod/perldelta.pod
+       $(RMS) pod/perl5282delta.pod
+       $(LNS) perldelta.pod pod/perl5282delta.pod
 
 extra.pods: $(MINIPERL_EXE)
        -@test ! -f extra.pods || rm -f `cat extra.pods`
index a41fbd4..97850d3 100644 (file)
@@ -86,7 +86,7 @@ NLM_VERSION    = 3,20,0
 
 
 # Here comes the CW tools - TO BE FILLED TO BUILD WITH CW -
-MODULE_DESC     = "Perl 5.28.1 for NetWare"
+MODULE_DESC     = "Perl 5.28.2 for NetWare"
 CCTYPE          = CodeWarrior
 C_COMPILER             = mwccnlm -c
 CPP_COMPILER   = mwccnlm
@@ -462,7 +462,7 @@ INST_NW_TOP2 = $(INST_NW_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-INST_VER       = \5.28.1
+INST_VER       = \5.28.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
index 09f3755..9149343 100644 (file)
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "c:\\perl\\5.28.1\\lib\\NetWare-x86-multi-thread"              /**/
+#define ARCHLIB "c:\\perl\\5.28.2\\lib\\NetWare-x86-multi-thread"              /**/
 /*#define ARCHLIB_EXP ""       /**/
 
 /* ARCHNAME:
  *     This symbol is the filename expanded version of the BIN symbol, for
  *     programs that do not want to deal with that at run-time.
  */
-#define BIN "c:\\perl\\5.28.1\\bin\\NetWare-x86-multi-thread"  /**/
-#define BIN_EXP "c:\\perl\\5.28.1\\bin\\NetWare-x86-multi-thread"      /**/
+#define BIN "c:\\perl\\5.28.2\\bin\\NetWare-x86-multi-thread"  /**/
+#define BIN_EXP "c:\\perl\\5.28.2\\bin\\NetWare-x86-multi-thread"      /**/
 
 /* BYTEORDER:
  *     This symbol holds the hexadecimal constant defined in byteorder,
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "c:\\perl\\site\\5.28.1\\lib\\NetWare-x86-multi-thread"               /**/
+#define SITEARCH "c:\\perl\\site\\5.28.2\\lib\\NetWare-x86-multi-thread"               /**/
 /*#define SITEARCH_EXP ""      /**/
 
 /* SITELIB:
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "c:\\perl\\site\\5.28.1\\lib"          /**/
+#define SITELIB "c:\\perl\\site\\5.28.2\\lib"          /**/
 /*#define SITELIB_EXP ""       /**/
 #define SITELIB_STEM ""                /**/
 
index 4ad30bf..4e4cb68 100644 (file)
@@ -48,8 +48,8 @@ api_subversion='0'
 api_version='28'
 api_versionstring='5.28.0'
 ar='ar'
-archlib='/opt/perl/lib/5.28.1/x86_64-linux'
-archlibexp='/opt/perl/lib/5.28.1/x86_64-linux'
+archlib='/opt/perl/lib/5.28.2/x86_64-linux'
+archlibexp='/opt/perl/lib/5.28.2/x86_64-linux'
 archname64=''
 archname='x86_64-linux'
 archobjs=''
@@ -842,7 +842,7 @@ incpath=''
 incpth='/usr/lib/gcc/x86_64-linux-gnu/4.9/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/include'
 inews=''
 initialinstalllocation='/opt/perl/bin'
-installarchlib='/opt/perl/lib/5.28.1/x86_64-linux'
+installarchlib='/opt/perl/lib/5.28.2/x86_64-linux'
 installbin='/opt/perl/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -850,13 +850,13 @@ installman1dir='/opt/perl/man/man1'
 installman3dir='/opt/perl/man/man3'
 installprefix='/opt/perl'
 installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.28.1'
+installprivlib='/opt/perl/lib/5.28.2'
 installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.28.1/x86_64-linux'
+installsitearch='/opt/perl/lib/site_perl/5.28.2/x86_64-linux'
 installsitebin='/opt/perl/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='/opt/perl/lib/site_perl/5.28.1'
+installsitelib='/opt/perl/lib/site_perl/5.28.2'
 installsiteman1dir='/opt/perl/man/man1'
 installsiteman3dir='/opt/perl/man/man3'
 installsitescript='/opt/perl/bin'
@@ -981,7 +981,7 @@ perl_patchlevel=''
 perl_static_inline='static __inline__'
 perladmin='yourname@yourhost.yourplace.com'
 perllibs='-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/opt/perl/bin/perl5.28.1'
+perlpath='/opt/perl/bin/perl5.28.2'
 pg='pg'
 phostname=''
 pidtype='pid_t'
@@ -990,8 +990,8 @@ pmake=''
 pr=''
 prefix='/opt/perl'
 prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.28.1'
-privlibexp='/opt/perl/lib/5.28.1'
+privlib='/opt/perl/lib/5.28.2'
+privlibexp='/opt/perl/lib/5.28.2'
 procselfexe='"/proc/self/exe"'
 ptrsize='8'
 quadkind='2'
@@ -1056,17 +1056,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
 sig_size='69'
 signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.28.1/x86_64-linux'
-sitearchexp='/opt/perl/lib/site_perl/5.28.1/x86_64-linux'
+sitearch='/opt/perl/lib/site_perl/5.28.2/x86_64-linux'
+sitearchexp='/opt/perl/lib/site_perl/5.28.2/x86_64-linux'
 sitebin='/opt/perl/bin'
 sitebinexp='/opt/perl/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/opt/perl/lib/site_perl/5.28.1'
+sitelib='/opt/perl/lib/site_perl/5.28.2'
 sitelib_stem='/opt/perl/lib/site_perl'
-sitelibexp='/opt/perl/lib/site_perl/5.28.1'
+sitelibexp='/opt/perl/lib/site_perl/5.28.2'
 siteman1dir='/opt/perl/man/man1'
 siteman1direxp='/opt/perl/man/man1'
 siteman3dir='/opt/perl/man/man3'
@@ -1092,7 +1092,7 @@ src='.'
 ssizetype='ssize_t'
 st_ino_sign='1'
 st_ino_size='8'
-startperl='#!/opt/perl/bin/perl5.28.1'
+startperl='#!/opt/perl/bin/perl5.28.2'
 startsh='#!/bin/sh'
 static_ext=' '
 stdchar='char'
@@ -1104,7 +1104,7 @@ stdio_ptr='((fp)->_IO_read_ptr)'
 stdio_stream_array=''
 strerror_r_proto='0'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/usr/share/man/man1'
 sysroot=''
 tail=''
@@ -1202,8 +1202,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.28.1'
-version_patchlevel_string='version 28 subversion 1'
+version='5.28.2'
+version_patchlevel_string='version 28 subversion 2'
 versiononly='define'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1213,7 +1213,7 @@ zcat=''
 zip='zip'
 PERL_REVISION=5
 PERL_VERSION=28
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=28
 PERL_API_SUBVERSION=0
index 63c3371..8092eac 100644 (file)
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "/opt/perl/lib/5.28.1/x86_64-linux"            /**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.28.1/x86_64-linux"                /**/
+#define ARCHLIB "/opt/perl/lib/5.28.2/x86_64-linux"            /**/
+#define ARCHLIB_EXP "/opt/perl/lib/5.28.2/x86_64-linux"                /**/
 
 /* BIN:
  *     This symbol holds the path of the bin directory where the package will
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/opt/perl/lib/5.28.1"         /**/
-#define PRIVLIB_EXP "/opt/perl/lib/5.28.1"             /**/
+#define PRIVLIB "/opt/perl/lib/5.28.2"         /**/
+#define PRIVLIB_EXP "/opt/perl/lib/5.28.2"             /**/
 
 /* SITEARCH:
  *     This symbol contains the name of the private library for this package.
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/opt/perl/lib/site_perl/5.28.1/x86_64-linux"         /**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.28.1/x86_64-linux"             /**/
+#define SITEARCH "/opt/perl/lib/site_perl/5.28.2/x86_64-linux"         /**/
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.28.2/x86_64-linux"             /**/
 
 /* SITELIB:
  *     This symbol contains the name of the private library for this package.
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/opt/perl/lib/site_perl/5.28.1"               /**/
-#define SITELIB_EXP "/opt/perl/lib/site_perl/5.28.1"           /**/
+#define SITELIB "/opt/perl/lib/site_perl/5.28.2"               /**/
+#define SITELIB_EXP "/opt/perl/lib/site_perl/5.28.2"           /**/
 #define SITELIB_STEM "/opt/perl/lib/site_perl"         /**/
 
 /* PERL_VENDORARCH:
  *     script to make sure (one hopes) that it runs with perl and not
  *     some shell.
  */
-#define STARTPERL "#!/opt/perl/bin/perl5.28.1"         /**/
+#define STARTPERL "#!/opt/perl/bin/perl5.28.2"         /**/
 
 /* HAS_STDIO_STREAM_ARRAY:
  *     This symbol, if defined, tells that there is an array
index db8ab16..2f1e996 100644 (file)
@@ -17,6 +17,115 @@ Consult your favorite dictionary for details.
 
 =head1 EPIGRAPHS
 
+=head2 v5.29.9 - Sir Arthur Conan Doyle, The Adventure of the Dancing Men
+
+L<Announced on 2019-03-21 by Zak Elep|https://www.nntp.perl.org/group/perl.perl5.porters/2019/03/msg253978.html>
+
+  What one man can invent, another can discover.
+
+=head2 v5.29.8 -  Isaac Asimov, Foundation: “Never let your sense of morals get in the way of doing what's right.”
+
+L<Announced on 2019-02-20 by Atoomic|https://www.nntp.perl.org/group/perl.perl5.porters/2019/02/msg253750.html>
+
+=head2 v5.29.7 - Edsger W. Dijkstra: "Programming Considered as a Human Activity", IFIP Congress, New York, 1965.
+
+L<Announced on 2019-01-20 by Abigail|https://www.nntp.perl.org/group/perl.perl5.porters/2019/01/msg253444.html>
+
+When I became acquainted with the notion of algorithmic languages I
+never challenged the then prevailing notion that the problems of
+language design and implementation were mostly a question of
+compromises: every new convenience for the user had to be paid for
+by the implementation, either in the form of increased trouble
+during translation, or during execution or during both. Well, we
+are most certainly not living in Heaven and I am not going to deny
+the possibility of a conflict between convenience and efficiency,
+but now I do protest when this conflict is presented as a complete
+summing up of the situation. I am of the opinion that is worth-while
+to investigate what extent the needs of Man and Machine go hand in
+hand and to see what techniques we can devise of the benefit of all
+of us. I trust that this investigation will bear fruits and if this
+talk made some of you share this fervent hope, it has achieved its aim.
+
+=head2 v5.29.6 - Rudyard Kipling: "How the Camel Got His Hump"
+
+L<Announced on 2018-12-18 by Abigail|https://www.nntp.perl.org/group/perl.perl5.porters/2018/12/msg253187.html>
+
+  The Camel's hump is an ugly lump
+    Which well you may see at the Zoo;
+  But uglier yet is the hump we get
+    From having little to do.
+
+  Kiddies and grown-ups too-oo-oo
+  If we haven't enough to do-oo-oo,
+        We get the hump -
+        Cameelious hump -
+  The hump that is black and blue!
+
+  We climb out of bed with a frouzly head
+    And a snarly-yarly voice.
+  We shiver and scowl and we grunt and we growl
+    At our bath and our boots and our toys;
+
+  And there ought to be a corner for me
+  (And I know there is one for you)
+        When we get the hump -
+        Cameelious hump -
+  The hump that is black and blue!
+
+  The cure for this ill is to not sit still,
+    Or frowst with a book by the fire;
+  But to take a large hoe and a shovel also,
+    And dig till you gentle perspire;
+
+  And then you will find that the sun and the wind,
+  And the Djinn of the Garden too,
+        Have lifted the hump -
+        The horrible hump -
+  The hump that is black and blue!
+
+  I get it as well as you-oo-oo -
+  If I haven't enough to do-oo-oo!
+        We all get hump -
+        Cameelious hump -
+  Kiddies and grown-ups too!
+
+
+=head2 v5.29.5 - T. S. Eliot, "The Naming Of Cats"
+
+L<Announced on 2018-11-20 by Karen Etheridge|https://www.nntp.perl.org/group/perl.perl5.porters/2018/11/msg252839.html>
+
+  The Naming of Cats is a difficult matter,
+  It isn't just one of your holiday games;
+  You may think at first I'm as mad as a hatter
+  When I tell you, a cat must have THREE DIFFERENT NAMES.
+  First of all, there's the name that the family use daily,
+  Such as Peter, Augustus, Alonzo or James,
+  Such as Victor or Jonathan, George or Bill Bailey--
+  All of them sensible everyday names.
+  There are fancier names if you think they sound sweeter,
+  Some for the gentlemen, some for the dames:
+  Such as Plato, Admetus, Electra, Demeter--
+  But all of them sensible everyday names.
+  But I tell you, a cat needs a name that's particular,
+  A name that's peculiar, and more dignified,
+  Else how can he keep up his tail perpendicular,
+  Or spread out his whiskers, or cherish his pride?
+  Of names of this kind, I can give you a quorum,
+  Such as Munkustrap, Quaxo, or Coricopat,
+  Such as Bombalurina, or else Jellylorum-
+  Names that never belong to more than one cat.
+  But above and beyond there's still one name left over,
+  And that is the name that you never will guess;
+  The name that no human research can discover--
+  But THE CAT HIMSELF KNOWS, and will never confess.
+  When you notice a cat in profound meditation,
+  The reason, I tell you, is always the same:
+  His mind is engaged in a rapt contemplation
+  Of the thought, of the thought, of the thought of his name:
+  His ineffable effable
+  Effanineffable
+  Deep and inscrutable singular Name.
+
 =head2 v5.29.4 - The Mountain Goats, "Oceanographer's Choice"
 
 L<Announced on 2018-10-20 by Aaron Crane|https://www.nntp.perl.org/group/perl.perl5.porters/2018/10/msg252575.html>
@@ -110,6 +219,41 @@ L<Announced on 2018-06-26 by Sawyer X|http://nntp.perl.org/group/perl.perl5.port
 
   Courage is the only antidote for danger.
 
+=head2 v5.28.2-RC1 - Edward Lear, ed. Vivien Noakes, "The Complete Nonsense and Other Verse": The Quangle Wangle's Hat
+
+L<Announced on 2019-04-05 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2019/04/msg254218.html>
+
+  On the top of the Crumpetty Tree
+    The Quangle Wangle sat,
+  But his face you could not see,
+    On account of his Beaver Hat.
+  For his Hat was a hundred and two feet wide,
+  With ribbons and bibbons on every side,
+  And bells, and buttons, and loops, and lace,
+  So that nobody ever could see the face
+      Of the Quangle Wangle Quee.
+
+=head2 v5.28.1 - Humphrey Burton, "Leonard Bernstein"
+
+L<Announced on 2018-11-29 by Steve Hay|http://nntp.perl.org/group/perl.perl5.porters/2018/11/msg252975.html>
+
+On August 25, 1983, Leonard Bernstein celebrated his sixty-fifth
+birthday in his birthplace, Lawrence, Massachusetts.  He had actually
+lived in the town for only a few weeks as a newborn baby, and had last
+visited it forty-nine years previously, in 1934, to get the name on his
+birth certificate altered from Louis to Leonard.  But the citizens of
+Lawrence proposed to dedicate an outdoor theater to him in their
+heritage park and to provide not one but two local orchestras--the
+Merrimack Valley Philharmonic to play excerpts from his own compositions
+and the Greater Boston Youth Symphony and Chorus to perform the "Ode to
+Joy" and accompany Bernstein himself reading (for the only time in his
+life) the text of A Lincoln Portrait.  So Bernstein turned down birthday
+invitations from Tanglewood and Central Park, New York, and the
+Hollywood Bowl and drove through the cheering if slightly bewildered
+crowds lining the streets of Lawrence in an open-topped 1928 Ford
+roadster, looking as homespun as James Stewart in Frank Capra's classic,
+It's a Wonderful Life.
+
 =head2 v5.28.0 - Martin Luther King, Jr., 1967
 
 L<Announced on 2018-06-22 by Sawyer X|http://nntp.perl.org/group/perl.perl5.porters/251240>
@@ -404,6 +548,23 @@ L<Announced on 2017-05-31 by Sawyer X|http://www.nntp.perl.org/group/perl.perl5.
 
     -- Bertrand Russell, The Road to Happiness
 
+=head2 v5.26.3 - Humphrey Burton, "Leonard Bernstein"
+
+L<Announced on 2018-11-29 by Steve Hay|http://nntp.perl.org/group/perl.perl5.porters/2018/11/msg252974.html>
+
+The origins of the name "Bernstein" are sometimes linked with the German
+noun Bernstein, which means "amber"--a translucent yellowish fossilized
+resin, used for ornaments and thought to possess magical properties.
+Leonard Bernstein would later call himself "Lenny Amber" when he needed
+a pseudonym for the popular piano transcriptions he published in his
+mid-twenties, and his business affairs would be organized within a
+company called Amberson Enterprises.  There are several towns and
+villages named Bernstein in Germany and Austria (where the pronunciation
+is BernSTINE), but Bernstein's parents came from Jewish ghettos in
+northwestern Ukraine, where the last syllable is usually pronounced
+BernSHTAYN or STEEN.  Sam insisted, however, on the mid-European style
+employed by the earlier immigrants.
+
 =head2 v5.26.2 - Desmond Morris, "Catwatching: The Essential Guide to Cat Behaviour"
 
 L<Announced on 2018-04-14 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2018/04/msg250440.html>
index 2ab11d0..a8cd91a 100644 (file)
@@ -206,7 +206,7 @@ You can also run an actual diff of the contents of the modules, comparing core
 to CPAN, to ensure that there were no erroneous/extraneous changes that need to
 be dealt with. You do this by not passing the C<-x> option:
 
-    $ ./perl -Ilib Porting/core-cpan-diff -a -o /tmp/corediffs
+    $ ./perl -Ilib Porting/core-cpan-diff -a -o ~/corediffs
 
 Passing C<-u cpan> will probably be helpful, since it limits the search to
 distributions with 'cpan' upstream source.  (It's OK for blead upstream to
@@ -238,6 +238,16 @@ necessary, fix things up. For example, you might think that both blead
 and maint are synchronised with a particular CPAN module, but one might
 have some extra changes.
 
+In any case, any cpan-first distribution that is listed as having files
+"Customized for blead" in the output of cpan-core-diff should have requests
+submitted to the maintainer(s) to make a cpan release to catch up with blead.
+
+Additionally, all files listed as "modified" but not "customized for blead"
+should have entries added under the C<CUSTOMIZED> key in
+F<Porting/Maintainers.pl>, as well as checksums updated via:
+
+    cd t; ./perl -I../lib porting/customized.t --regen
+
 =head4 Sync CPAN modules with the corresponding cpanE<sol> distro
 
 In most cases, once a new version of a distribution shipped with core has been
@@ -393,7 +403,7 @@ L<"update Module::CoreList">).
 =head3 Bump the version number
 
 Do not do this yet for a BLEAD-POINT release! You will do this at the end of
-the release process.
+the release process (after building the final tarball, tagging etc).
 
 Increase the version number (e.g. from 5.12.0 to 5.12.1).
 
@@ -425,9 +435,11 @@ F<pod/perlpolicy.pod>.
 When doing a BLEAD-POINT or BLEAD-FINAL release, also make sure the
 C<PERL_API_*> constants in F<patchlevel.h> are in sync with the version
 you're releasing, unless you're absolutely sure the release you're about to
-make is 100% binary compatible to an earlier release. When releasing a MAINT
-perl version, the C<PERL_API_*> constants C<MUST NOT> be changed as we aim
-to guarantee binary compatibility in maint branches.
+make is 100% binary compatible to an earlier release. Note: for BLEAD-POINT
+releases the bump should have already occured at the end of the previous release
+and this is somethig you would have to do at the very end.
+When releasing a MAINT perl version, the C<PERL_API_*> constants C<MUST NOT>
+be changed as we aim to guarantee binary compatibility in maint branches.
 
 After editing, regenerate uconfig.h (this must be run on a system with a
 /bin/sh available):
@@ -469,6 +481,7 @@ version number.
 =head3 update INSTALL
 
 Review and update INSTALL to account for the change in version number.
+INSTALL for a BLEAD-POINT release should already contain the expected version.
 The lines in F<INSTALL> about "is not binary compatible with" may require a
 correct choice of earlier version to declare incompatibility with. These are
 in the "Changes and Incompatibilities" and "Coexistence with earlier versions
@@ -521,6 +534,9 @@ C<-Dusethreads>
 If you have multiple compilers on your machine, you might also consider
 compiling with C<-Dcc=$other_compiler>.
 
+You can also consider pushing the repo to GitHub where Travis CI is enabled
+which would smoke different flavors of Perl for you.
+
 =head3 update perlport
 
 L<perlport> has a section currently named I<Supported Platforms> that
@@ -732,7 +748,7 @@ Also, you may want to generate and view an HTML version of it to check
 formatting, e.g.
 
     $ ./perl -Ilib ext/Pod-Html/bin/pod2html pod/perldelta.pod > \
-        /tmp/perldelta.html
+        ~/perldelta.html
 
 If you make changes, be sure to commit them.
 
@@ -783,6 +799,13 @@ Then build a clean perl and do a full test
 
 Once all tests pass, commit your changes.
 
+=head3 final check of perldelta placeholders
+
+Check for any 'XXX' leftover section in the perldelta.
+Either fill them or remove these sections appropriately.
+
+    $ git grep XX pod/perldelta.pod
+
 =head3 build a clean perl
 
 If you skipped the previous step (adding/removing perldeltas),
@@ -1001,7 +1024,9 @@ which is why you should test from the tarball.
 
 =head4 Run the Installation Verification Procedure utility
 
-    $ ./perl utils/perlivp
+    $ ./perl ./perlivp
+    # Or, perhaps:
+    $ ./perl5.x.y ./perlivp5.x.y
     ...
     All tests successful.
     $
@@ -1064,7 +1089,7 @@ Test L<perlbug> with the following:
     (edit report)
     Action (Send/Display/Edit/Subject/Save to File): f
     Name of file to save message in [perlbug.rep]:
-    Action (Send/Display/Edit/Subject/Save to File): q
+    Action (Send/Display/Edit/Subject/Save to File): Q
 
 and carefully examine the output (in F<perlbug.rep]>), especially
 the "Locally applied patches" section. If everything appears okay, then
@@ -1126,8 +1151,10 @@ you have it configured:
     cpan-upload perl-5.X.Y.tar.xz
 
 Do not proceed any further until you are sure that your tarballs are on CPAN.
-Check your authors directory www.cpan.org (the globally balanced "fast"
-mirror) to confirm that your uploads have been successful.
+Check your authors directory metacpan.org to confirm that your uploads have
+been successful.
+
+    https://metacpan.org/author/YOUR_PAUSE_ID
 
 =for checklist skip RC BLEAD-POINT
 
index 2b7016b..d9edf32 100644 (file)
@@ -15,8 +15,8 @@ deemed necessary by the Pumpking.
 
 Code freezes (which happen in the 5.29.X series)
 
-  2019-02-20  5.29.8          Contentious changes freeze
-  2019-03-20  5.29.9          User-visible changes to correctly
+  2019-02-20  5.29.8         Contentious changes freeze
+  2019-03-20  5.29.9         User-visible changes to correctly
                               functioning programs freeze
   2019-04-20  5.29.10         Full code freeze
   2019-05-20  5.30.0          Stable release!
@@ -24,28 +24,15 @@ Code freezes (which happen in the 5.29.X series)
 =head2 Perl 5.28
 
   2018-05-20  5.28.0 ✓        Sawyer X
+  2018-11-29  5.28.1 ✓        Steve Hay
+  2019-04-??  5.28.2          Steve Hay
 
 =head2 Perl 5.26
 
   2017-05-30  5.26.0 ✓        Sawyer X
   2017-09-22  5.26.1 ✓        Steve Hay
   2018-04-14  5.26.2 ✓        Steve Hay
-
-=head2 Perl 5.24
-
-  2016-05-09  5.24.0 ✓        Ricardo Signes
-  2017-01-14  5.24.1 ✓        Steve Hay
-  2017-07-15  5.24.2 ✓        Steve Hay
-  2017-09-22  5.24.3 ✓        Steve Hay
-  2018-04-14  5.24.4 ✓        Steve Hay
-
-=head2 Perl 5.22
-
-  2015-06-01  5.22.0 ✓        Ricardo Signes
-  2015-12-13  5.22.1 ✓        Steve Hay
-  2016-04-29  5.22.2 ✓        Steve Hay
-  2017-01-14  5.22.3 ✓        Steve Hay
-  2017-07-15  5.22.4 ✓        Steve Hay
+  2018-11-29  5.26.3 ✓        Steve Hay
 
 =head1 DEVELOPMENT RELEASE SCHEDULE
 
@@ -68,12 +55,12 @@ you should reset the version numbers to the next blead series.
   2018-08-20  5.29.2 ✓        Chris BinGOs Williams
   2018-09-20  5.29.3 ✓        John Anderson (genehack)
   2018-10-20  5.29.4 ✓        Aaron Crane
-  2018-11-20  5.29.5          Karen Etheridge (ether)
-  2018-12-20  5.29.6          Abigail
-  2019-01-20  5.29.7          Abigail
-  2019-02-20  5.29.8
-  2019-03-20  5.29.9
-  2019-04-20  5.29.10
+  2018-11-20  5.29.5         Karen Etheridge (ether)
+  2018-12-18  5.29.6 ✓        Abigail
+  2019-01-20  5.29.7         Abigail
+  2019-02-20  5.29.8 ✓        Nicolas R. (atoomic)
+  2019-03-20  5.29.9 ✓        Zak B. Elep
+  2019-04-20  5.29.10         Sawyer X
 
 (RC0 for 5.30.0 will be released once we think that all the blockers have been
 addressed.  This typically means some time in April or May.)
diff --git a/README b/README
index dc4f3a7..945db22 100644 (file)
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
 Perl is Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
-2013, 2014, 2015, 2016, 2017, 2018 by Larry Wall and others.
+2013, 2014, 2015, 2016, 2017, 2018, 2019 by Larry Wall and others.
 All rights reserved.
 
 
index d1f0714..26be542 100644 (file)
@@ -22,9 +22,9 @@ The build procedure is completely standard:
 Make perl executable and create a symlink for libperl:
 
   chmod a+x /boot/common/bin/perl
-  cd /boot/common/lib; ln -s perl5/5.28.1/BePC-haiku/CORE/libperl.so .
+  cd /boot/common/lib; ln -s perl5/5.28.2/BePC-haiku/CORE/libperl.so .
 
-Replace C<5.28.1> with your respective version of Perl.
+Replace C<5.28.2> with your respective version of Perl.
 
 =head1 KNOWN PROBLEMS
 
index c7e77d8..02d5e3d 100644 (file)
@@ -10,9 +10,9 @@ perlmacosx - Perl under Mac OS X
 
 This document briefly describes Perl under Mac OS X.
 
-  curl -O http://www.cpan.org/src/perl-5.28.1.tar.gz
-  tar -xzf perl-5.28.1.tar.gz
-  cd perl-5.28.1
+  curl -O http://www.cpan.org/src/perl-5.28.2.tar.gz
+  tar -xzf perl-5.28.2.tar.gz
+  cd perl-5.28.2
   ./Configure -des -Dprefix=/usr/local/
   make
   make test
@@ -20,7 +20,7 @@ This document briefly describes Perl under Mac OS X.
 
 =head1 DESCRIPTION
 
-The latest Perl release (5.28.1 as of this writing) builds without changes
+The latest Perl release (5.28.2 as of this writing) builds without changes
 under all versions of Mac OS X from 10.3 "Panther" onwards. 
 
 In order to build your own version of Perl you will need 'make',
index fa80197..86a64e0 100644 (file)
@@ -619,7 +619,7 @@ C<set PERLLIB_PREFIX> in F<Config.sys>, see L</"C<PERLLIB_PREFIX>">.
 
 =item Additional Perl modules
 
-  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.28.1/
+  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.28.2/
 
 Same remark as above applies.  Additionally, if this directory is not
 one of directories on @INC (and @INC is influenced by C<PERLLIB_PREFIX>), you
index 4913067..22f7dbb 100644 (file)
@@ -142,11 +142,11 @@ You may need to set up a foreign symbol for the unpacking utility of
 choice.  Once you have done so, use a command like the following to
 unpack the archive:
 
-    vmstar -xvf perl-5^.28^.1.tar
+    vmstar -xvf perl-5^.28^.2.tar
 
 Then set default to the top-level source directory like so:
 
-    set default [.perl-5^.28^.1]
+    set default [.perl-5^.28^.2]
 
 and proceed with configuration as described in the next section.
 
diff --git a/av.h b/av.h
index 97ce2bc..6b2b14c 100644 (file)
--- a/av.h
+++ b/av.h
@@ -47,7 +47,7 @@ Null AV pointer.
 =head1 Array Manipulation Functions
 
 =for apidoc Am|int|AvFILL|AV* av
-Same as C<av_top_index()>.  Deprecated, use C<av_top_index()> instead.
+Same as C<av_top_index()> or C<av_tindex()>.
 
 =for apidoc Am|int|av_tindex|AV* av
 Same as C<av_top_index()>.
index d758f73..247708d 100644 (file)
--- a/caretx.c
+++ b/caretx.c
@@ -56,7 +56,19 @@ Perl_set_caret_X(pTHX) {
     SV *const caret_x = GvSV(tmpgv);
 #if defined(OS2)
     sv_setpv(caret_x, os2_execname(aTHX));
-#elif defined(USE_KERN_PROC_PATHNAME)
+    return;
+#elif defined(WIN32)
+    char *ansi;
+    WCHAR widename[MAX_PATH];
+    GetModuleFileNameW(NULL, widename, sizeof(widename)/sizeof(WCHAR));
+    ansi = win32_ansipath(widename);
+    sv_setpv(caret_x, ansi);
+    win32_free(ansi);
+    return;
+#else
+    /* We can try a platform-specific one if possible; if it fails, or we
+     * aren't running on a suitable platform, we'll fall back to argv[0]. */
+# ifdef USE_KERN_PROC_PATHNAME
     size_t size = 0;
     int mib[4];
     mib[0] = CTL_KERN;
@@ -76,7 +88,7 @@ Perl_set_caret_X(pTHX) {
             return;
         }
     }
-#elif defined(USE_NSGETEXECUTABLEPATH)
+# elif defined(USE_NSGETEXECUTABLEPATH)
     char buf[1];
     uint32_t size = sizeof(buf);
 
@@ -95,7 +107,7 @@ Perl_set_caret_X(pTHX) {
             return;
         }
     }
-#elif defined(HAS_PROCSELFEXE)
+# elif defined(HAS_PROCSELFEXE)
     char buf[MAXPATHLEN];
     SSize_t len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
     /* NOTE: if the length returned by readlink() is sizeof(buf) - 1,
@@ -125,15 +137,7 @@ Perl_set_caret_X(pTHX) {
         sv_setpvn(caret_x, buf, len);
         return;
     }
-#elif defined(WIN32)
-    char *ansi;
-    WCHAR widename[MAX_PATH];
-    GetModuleFileNameW(NULL, widename, sizeof(widename)/sizeof(WCHAR));
-    ansi = win32_ansipath(widename);
-    sv_setpv(caret_x, ansi);
-    win32_free(ansi);
-    return;
-#else
+# endif
     /* Fallback to this:  */
     sv_setpv(caret_x, PL_origargv[0]);
 #endif
index fd08103..dcfcd74 100644 (file)
@@ -1,6 +1,27 @@
+5.20190419
+  - Updated for v5.28.2
+
+5.20190320
+  - Updated for v5.29.9
+
+5.20190220
+  - Updated for v5.29.8
+
+5.20190120
+  - Updated for v5.29.7
+
+5.20181218
+  - Updated for v5.29.6
+
 5.20181129_28
   - Updated for v5.28.1
 
+5.20181129_26
+  - Updated for v5.26.3
+
+5.20181120
+  - Updated for v5.29.5
+
 5.20181020
   - Updated for v5.29.4
 
index a254a1c..e98180b 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 our ( %released, %version, %families, %upstream, %bug_tracker, %deprecated, %delta );
 
 use version;
-our $VERSION = '5.20181129_28';
+our $VERSION = '5.20190419';
 
 sub PKG_PATTERN () { q#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z# }
 sub _looks_like_invocant ($) { local $@; !!eval { $_[0]->isa(__PACKAGE__) } }
@@ -339,7 +339,14 @@ sub changes_between {
     5.029002 => '2018-08-20',
     5.029003 => '2018-09-20',
     5.029004 => '2018-10-20',
+    5.029005 => '2018-11-20',
+    5.026003 => '2018-11-29',
     5.028001 => '2018-11-29',
+    5.029006 => '2018-12-18',
+    5.029007 => '2019-01-20',
+    5.029008 => '2019-02-20',
+    5.029009 => '2019-03-20',
+    5.028002 => '2019-04-19',
   );
 
 for my $version ( sort { $a <=> $b } keys %released ) {
@@ -15814,6 +15821,48 @@ for my $version ( sort { $a <=> $b } keys %released ) {
             'arybase'               => 1,
         }
     },
+    5.029005 => {
+        delta_from => 5.029004,
+        changed => {
+            'B::Op_private'         => '5.029005',
+            'Config'                => '5.029005',
+            'Cwd'                   => '3.76',
+            'Data::Dumper'          => '2.173',
+            'Errno'                 => '1.30',
+            'File::Spec'            => '3.76',
+            'File::Spec::AmigaOS'   => '3.76',
+            'File::Spec::Cygwin'    => '3.76',
+            'File::Spec::Epoc'      => '3.76',
+            'File::Spec::Functions' => '3.76',
+            'File::Spec::Mac'       => '3.76',
+            'File::Spec::OS2'       => '3.76',
+            'File::Spec::Unix'      => '3.76',
+            'File::Spec::VMS'       => '3.76',
+            'File::Spec::Win32'     => '3.76',
+            'GDBM_File'             => '1.18',
+            'Module::CoreList'      => '5.20181120',
+            'Module::CoreList::Utils'=> '5.20181120',
+            'NDBM_File'             => '1.15',
+            'ODBM_File'             => '1.16',
+            'SDBM_File'             => '1.15',
+            're'                    => '0.37',
+        },
+        removed => {
+        }
+    },
+    5.026003 => {
+        delta_from => 5.026002,
+        changed => {
+            'Archive::Tar'          => '2.24_01',
+            'B::Op_private'         => '5.026003',
+            'Config'                => '5.026003',
+            'Module::CoreList'      => '5.20181129_26',
+            'Module::CoreList::TieHashDelta'=> '5.20181129_26',
+            'Module::CoreList::Utils'=> '5.20181129_26',
+        },
+        removed => {
+        }
+    },
     5.028001 => {
         delta_from => 5.028,
         changed => {
@@ -15825,6 +15874,363 @@ for my $version ( sort { $a <=> $b } keys %released ) {
         removed => {
         }
     },
+    5.029006 => {
+        delta_from => 5.029005,
+        changed => {
+            'B::Op_private'         => '5.029006',
+            'Config'                => '5.029006',
+            'Config::Perl::V'       => '0.32',
+            'ExtUtils::ParseXS'     => '3.40',
+            'ExtUtils::ParseXS::Constants'=> '3.40',
+            'ExtUtils::ParseXS::CountLines'=> '3.40',
+            'ExtUtils::ParseXS::Eval'=> '3.40',
+            'ExtUtils::ParseXS::Utilities'=> '3.40',
+            'File::Find'            => '1.35',
+            'Module::CoreList'      => '5.20181218',
+            'Module::CoreList::Utils'=> '5.20181218',
+            'POSIX'                 => '1.86',
+            'Storable'              => '3.14',
+            'Test2'                 => '1.302141',
+            'Test2::API'            => '1.302141',
+            'Test2::API::Breakage'  => '1.302141',
+            'Test2::API::Context'   => '1.302141',
+            'Test2::API::Instance'  => '1.302141',
+            'Test2::API::Stack'     => '1.302141',
+            'Test2::Event'          => '1.302141',
+            'Test2::Event::Bail'    => '1.302141',
+            'Test2::Event::Diag'    => '1.302141',
+            'Test2::Event::Encoding'=> '1.302141',
+            'Test2::Event::Exception'=> '1.302141',
+            'Test2::Event::Fail'    => '1.302141',
+            'Test2::Event::Generic' => '1.302141',
+            'Test2::Event::Note'    => '1.302141',
+            'Test2::Event::Ok'      => '1.302141',
+            'Test2::Event::Pass'    => '1.302141',
+            'Test2::Event::Plan'    => '1.302141',
+            'Test2::Event::Skip'    => '1.302141',
+            'Test2::Event::Subtest' => '1.302141',
+            'Test2::Event::TAP::Version'=> '1.302141',
+            'Test2::Event::V2'      => '1.302141',
+            'Test2::Event::Waiting' => '1.302141',
+            'Test2::EventFacet'     => '1.302141',
+            'Test2::EventFacet::About'=> '1.302141',
+            'Test2::EventFacet::Amnesty'=> '1.302141',
+            'Test2::EventFacet::Assert'=> '1.302141',
+            'Test2::EventFacet::Control'=> '1.302141',
+            'Test2::EventFacet::Error'=> '1.302141',
+            'Test2::EventFacet::Hub'=> '1.302141',
+            'Test2::EventFacet::Info'=> '1.302141',
+            'Test2::EventFacet::Meta'=> '1.302141',
+            'Test2::EventFacet::Parent'=> '1.302141',
+            'Test2::EventFacet::Plan'=> '1.302141',
+            'Test2::EventFacet::Render'=> '1.302141',
+            'Test2::EventFacet::Trace'=> '1.302141',
+            'Test2::Formatter'      => '1.302141',
+            'Test2::Formatter::TAP' => '1.302141',
+            'Test2::Hub'            => '1.302141',
+            'Test2::Hub::Interceptor'=> '1.302141',
+            'Test2::Hub::Interceptor::Terminator'=> '1.302141',
+            'Test2::Hub::Subtest'   => '1.302141',
+            'Test2::IPC'            => '1.302141',
+            'Test2::IPC::Driver'    => '1.302141',
+            'Test2::IPC::Driver::Files'=> '1.302141',
+            'Test2::Tools::Tiny'    => '1.302141',
+            'Test2::Util'           => '1.302141',
+            'Test2::Util::ExternalMeta'=> '1.302141',
+            'Test2::Util::Facets2Legacy'=> '1.302141',
+            'Test2::Util::HashBase' => '1.302141',
+            'Test2::Util::Trace'    => '1.302141',
+            'Test::Builder'         => '1.302141',
+            'Test::Builder::Formatter'=> '1.302141',
+            'Test::Builder::Module' => '1.302141',
+            'Test::Builder::Tester' => '1.302141',
+            'Test::Builder::Tester::Color'=> '1.302141',
+            'Test::Builder::TodoDiag'=> '1.302141',
+            'Test::More'            => '1.302141',
+            'Test::Simple'          => '1.302141',
+            'Test::Tester'          => '1.302141',
+            'Test::Tester::Capture' => '1.302141',
+            'Test::Tester::CaptureRunner'=> '1.302141',
+            'Test::Tester::Delegate'=> '1.302141',
+            'Test::use::ok'         => '1.302141',
+            'ok'                    => '1.302141',
+            'threads::shared'       => '1.59',
+        },
+        removed => {
+            'Storable::Limit'       => 1,
+        }
+    },
+    5.029007 => {
+        delta_from => 5.029006,
+        changed => {
+            'App::Cpan'             => '1.672',
+            'B::Op_private'         => '5.029007',
+            'CPAN'                  => '2.22',
+            'CPAN::Distribution'    => '2.22',
+            'CPAN::Plugin::Specfile'=> '0.02',
+            'Compress::Raw::Bzip2'  => '2.084',
+            'Compress::Raw::Zlib'   => '2.084',
+            'Compress::Zlib'        => '2.084',
+            'Config'                => '5.029007',
+            'Cwd'                   => '3.77',
+            'DB_File'               => '1.843',
+            'File::Find'            => '1.36',
+            'File::Spec'            => '3.77',
+            'File::Spec::AmigaOS'   => '3.77',
+            'File::Spec::Cygwin'    => '3.77',
+            'File::Spec::Epoc'      => '3.77',
+            'File::Spec::Functions' => '3.77',
+            'File::Spec::Mac'       => '3.77',
+            'File::Spec::OS2'       => '3.77',
+            'File::Spec::Unix'      => '3.77',
+            'File::Spec::VMS'       => '3.77',
+            'File::Spec::Win32'     => '3.77',
+            'File::Temp'            => '0.2309',
+            'IO::Compress::Adapter::Bzip2'=> '2.084',
+            'IO::Compress::Adapter::Deflate'=> '2.084',
+            'IO::Compress::Adapter::Identity'=> '2.084',
+            'IO::Compress::Base'    => '2.084',
+            'IO::Compress::Base::Common'=> '2.084',
+            'IO::Compress::Bzip2'   => '2.084',
+            'IO::Compress::Deflate' => '2.084',
+            'IO::Compress::Gzip'    => '2.084',
+            'IO::Compress::Gzip::Constants'=> '2.084',
+            'IO::Compress::RawDeflate'=> '2.084',
+            'IO::Compress::Zip'     => '2.084',
+            'IO::Compress::Zip::Constants'=> '2.084',
+            'IO::Compress::Zlib::Constants'=> '2.084',
+            'IO::Compress::Zlib::Extra'=> '2.084',
+            'IO::Uncompress::Adapter::Bunzip2'=> '2.084',
+            'IO::Uncompress::Adapter::Identity'=> '2.084',
+            'IO::Uncompress::Adapter::Inflate'=> '2.084',
+            'IO::Uncompress::AnyInflate'=> '2.084',
+            'IO::Uncompress::AnyUncompress'=> '2.084',
+            'IO::Uncompress::Base'  => '2.084',
+            'IO::Uncompress::Bunzip2'=> '2.084',
+            'IO::Uncompress::Gunzip'=> '2.084',
+            'IO::Uncompress::Inflate'=> '2.084',
+            'IO::Uncompress::RawInflate'=> '2.084',
+            'IO::Uncompress::Unzip' => '2.084',
+            'Math::BigFloat'        => '1.999816',
+            'Math::BigInt'          => '1.999816',
+            'Math::BigInt::Calc'    => '1.999816',
+            'Math::BigInt::FastCalc'=> '0.5008',
+            'Math::BigInt::Lib'     => '1.999816',
+            'Module::CoreList'      => '5.20190120',
+            'Module::CoreList::Utils'=> '5.20190120',
+            'Test2'                 => '1.302160',
+            'Test2::API'            => '1.302160',
+            'Test2::API::Breakage'  => '1.302160',
+            'Test2::API::Context'   => '1.302160',
+            'Test2::API::Instance'  => '1.302160',
+            'Test2::API::Stack'     => '1.302160',
+            'Test2::Event'          => '1.302160',
+            'Test2::Event::Bail'    => '1.302160',
+            'Test2::Event::Diag'    => '1.302160',
+            'Test2::Event::Encoding'=> '1.302160',
+            'Test2::Event::Exception'=> '1.302160',
+            'Test2::Event::Fail'    => '1.302160',
+            'Test2::Event::Generic' => '1.302160',
+            'Test2::Event::Note'    => '1.302160',
+            'Test2::Event::Ok'      => '1.302160',
+            'Test2::Event::Pass'    => '1.302160',
+            'Test2::Event::Plan'    => '1.302160',
+            'Test2::Event::Skip'    => '1.302160',
+            'Test2::Event::Subtest' => '1.302160',
+            'Test2::Event::TAP::Version'=> '1.302160',
+            'Test2::Event::V2'      => '1.302160',
+            'Test2::Event::Waiting' => '1.302160',
+            'Test2::EventFacet'     => '1.302160',
+            'Test2::EventFacet::About'=> '1.302160',
+            'Test2::EventFacet::Amnesty'=> '1.302160',
+            'Test2::EventFacet::Assert'=> '1.302160',
+            'Test2::EventFacet::Control'=> '1.302160',
+            'Test2::EventFacet::Error'=> '1.302160',
+            'Test2::EventFacet::Hub'=> '1.302160',
+            'Test2::EventFacet::Info'=> '1.302160',
+            'Test2::EventFacet::Info::Table'=> undef,
+            'Test2::EventFacet::Meta'=> '1.302160',
+            'Test2::EventFacet::Parent'=> '1.302160',
+            'Test2::EventFacet::Plan'=> '1.302160',
+            'Test2::EventFacet::Render'=> '1.302160',
+            'Test2::EventFacet::Trace'=> '1.302160',
+            'Test2::Formatter'      => '1.302160',
+            'Test2::Formatter::TAP' => '1.302160',
+            'Test2::Hub'            => '1.302160',
+            'Test2::Hub::Interceptor'=> '1.302160',
+            'Test2::Hub::Interceptor::Terminator'=> '1.302160',
+            'Test2::Hub::Subtest'   => '1.302160',
+            'Test2::IPC'            => '1.302160',
+            'Test2::IPC::Driver'    => '1.302160',
+            'Test2::IPC::Driver::Files'=> '1.302160',
+            'Test2::Tools::Tiny'    => '1.302160',
+            'Test2::Util'           => '1.302160',
+            'Test2::Util::ExternalMeta'=> '1.302160',
+            'Test2::Util::Facets2Legacy'=> '1.302160',
+            'Test2::Util::HashBase' => '1.302160',
+            'Test2::Util::Trace'    => '1.302160',
+            'Test::Builder'         => '1.302160',
+            'Test::Builder::Formatter'=> '1.302160',
+            'Test::Builder::Module' => '1.302160',
+            'Test::Builder::Tester' => '1.302160',
+            'Test::Builder::Tester::Color'=> '1.302160',
+            'Test::Builder::TodoDiag'=> '1.302160',
+            'Test::More'            => '1.302160',
+            'Test::Simple'          => '1.302160',
+            'Test::Tester'          => '1.302160',
+            'Test::Tester::Capture' => '1.302160',
+            'Test::Tester::CaptureRunner'=> '1.302160',
+            'Test::Tester::Delegate'=> '1.302160',
+            'Test::use::ok'         => '1.302160',
+            'Unicode::Collate'      => '1.27',
+            'Unicode::Collate::CJK::Big5'=> '1.27',
+            'Unicode::Collate::CJK::GB2312'=> '1.27',
+            'Unicode::Collate::CJK::JISX0208'=> '1.27',
+            'Unicode::Collate::CJK::Korean'=> '1.27',
+            'Unicode::Collate::CJK::Pinyin'=> '1.27',
+            'Unicode::Collate::CJK::Stroke'=> '1.27',
+            'Unicode::Collate::CJK::Zhuyin'=> '1.27',
+            'Unicode::Collate::Locale'=> '1.27',
+            'lib'                   => '0.65',
+            'ok'                    => '1.302160',
+        },
+        removed => {
+            'Math::BigInt::CalcEmu' => 1,
+        }
+    },
+    5.029008 => {
+        delta_from => 5.029007,
+        changed => {
+            'B'                     => '1.76',
+            'B::Op_private'         => '5.029008',
+            'Config'                => '5.029008',
+            'Devel::PPPort'         => '3.44',
+            'Encode'                => '3.00',
+            'Encode::Unicode'       => '2.18',
+            'ExtUtils::Miniperl'    => '1.09',
+            'IO'                    => '1.40',
+            'IO::Dir'               => '1.40',
+            'IO::File'              => '1.40',
+            'IO::Handle'            => '1.40',
+            'IO::Pipe'              => '1.40',
+            'IO::Poll'              => '1.40',
+            'IO::Seekable'          => '1.40',
+            'IO::Select'            => '1.40',
+            'IO::Socket'            => '1.40',
+            'IO::Socket::INET'      => '1.40',
+            'IO::Socket::UNIX'      => '1.40',
+            'JSON::PP'              => '4.00',
+            'JSON::PP::Boolean'     => '4.00',
+            'Module::CoreList'      => '5.20190220',
+            'Module::CoreList::Utils'=> '5.20190220',
+            'Module::Load'          => '0.34',
+            'Net::Ping'             => '2.71',
+            'POSIX'                 => '1.87',
+            'Test2'                 => '1.302162',
+            'Test2::API'            => '1.302162',
+            'Test2::API::Breakage'  => '1.302162',
+            'Test2::API::Context'   => '1.302162',
+            'Test2::API::Instance'  => '1.302162',
+            'Test2::API::Stack'     => '1.302162',
+            'Test2::Event'          => '1.302162',
+            'Test2::Event::Bail'    => '1.302162',
+            'Test2::Event::Diag'    => '1.302162',
+            'Test2::Event::Encoding'=> '1.302162',
+            'Test2::Event::Exception'=> '1.302162',
+            'Test2::Event::Fail'    => '1.302162',
+            'Test2::Event::Generic' => '1.302162',
+            'Test2::Event::Note'    => '1.302162',
+            'Test2::Event::Ok'      => '1.302162',
+            'Test2::Event::Pass'    => '1.302162',
+            'Test2::Event::Plan'    => '1.302162',
+            'Test2::Event::Skip'    => '1.302162',
+            'Test2::Event::Subtest' => '1.302162',
+            'Test2::Event::TAP::Version'=> '1.302162',
+            'Test2::Event::V2'      => '1.302162',
+            'Test2::Event::Waiting' => '1.302162',
+            'Test2::EventFacet'     => '1.302162',
+            'Test2::EventFacet::About'=> '1.302162',
+            'Test2::EventFacet::Amnesty'=> '1.302162',
+            'Test2::EventFacet::Assert'=> '1.302162',
+            'Test2::EventFacet::Control'=> '1.302162',
+            'Test2::EventFacet::Error'=> '1.302162',
+            'Test2::EventFacet::Hub'=> '1.302162',
+            'Test2::EventFacet::Info'=> '1.302162',
+            'Test2::EventFacet::Meta'=> '1.302162',
+            'Test2::EventFacet::Parent'=> '1.302162',
+            'Test2::EventFacet::Plan'=> '1.302162',
+            'Test2::EventFacet::Render'=> '1.302162',
+            'Test2::EventFacet::Trace'=> '1.302162',
+            'Test2::Formatter'      => '1.302162',
+            'Test2::Formatter::TAP' => '1.302162',
+            'Test2::Hub'            => '1.302162',
+            'Test2::Hub::Interceptor'=> '1.302162',
+            'Test2::Hub::Interceptor::Terminator'=> '1.302162',
+            'Test2::Hub::Subtest'   => '1.302162',
+            'Test2::IPC'            => '1.302162',
+            'Test2::IPC::Driver'    => '1.302162',
+            'Test2::IPC::Driver::Files'=> '1.302162',
+            'Test2::Tools::Tiny'    => '1.302162',
+            'Test2::Util'           => '1.302162',
+            'Test2::Util::ExternalMeta'=> '1.302162',
+            'Test2::Util::Facets2Legacy'=> '1.302162',
+            'Test2::Util::HashBase' => '1.302162',
+            'Test2::Util::Trace'    => '1.302162',
+            'Test::Builder'         => '1.302162',
+            'Test::Builder::Formatter'=> '1.302162',
+            'Test::Builder::Module' => '1.302162',
+            'Test::Builder::Tester' => '1.302162',
+            'Test::Builder::Tester::Color'=> '1.302162',
+            'Test::Builder::TodoDiag'=> '1.302162',
+            'Test::More'            => '1.302162',
+            'Test::Simple'          => '1.302162',
+            'Test::Tester'          => '1.302162',
+            'Test::Tester::Capture' => '1.302162',
+            'Test::Tester::CaptureRunner'=> '1.302162',
+            'Test::Tester::Delegate'=> '1.302162',
+            'Test::use::ok'         => '1.302162',
+            'XS::APItest'           => '1.00',
+            'deprecate'             => '0.04',
+            'ok'                    => '1.302162',
+            'perlfaq'               => '5.20190126',
+        },
+        removed => {
+        }
+    },
+    5.029009 => {
+        delta_from => 5.029008,
+        changed => {
+            'B::Op_private'         => '5.029009',
+            'Config'                => '5.029009',
+            'Devel::PPPort'         => '3.45',
+            'Encode'                => '3.01',
+            'ExtUtils::Manifest'    => '1.72',
+            'JSON::PP'              => '4.02',
+            'JSON::PP::Boolean'     => '4.02',
+            'Module::CoreList'      => '5.20190320',
+            'Module::CoreList::Utils'=> '5.20190320',
+            'PerlIO::encoding'      => '0.27',
+            'Unicode'               => '12.0.0',
+            'threads::shared'       => '1.60',
+            'utf8'                  => '1.22',
+            'warnings'              => '1.44',
+        },
+        removed => {
+        }
+    },
+    5.028002 => {
+        delta_from => 5.028001,
+        changed => {
+            'B::Op_private'         => '5.028002',
+            'Config'                => '5.028002',
+            'Module::CoreList'      => '5.20190419',
+            'Module::CoreList::Utils'=> '5.20190419',
+            'PerlIO::scalar'        => '0.30',
+            'Storable'              => '3.08_01',
+        },
+        removed => {
+        }
+    },
 );
 
 sub is_core
@@ -16757,6 +17163,20 @@ sub is_core
             arybase => '1',
         }
     },
+    5.029005 => {
+        delta_from => 5.027002,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.026003 => {
+        delta_from => 5.026002,
+        changed => {
+        },
+        removed => {
+        }
+    },
     5.028001 => {
         delta_from => 5.028000,
         changed => {
@@ -16764,6 +17184,41 @@ sub is_core
         removed => {
         }
     },
+    5.029006 => {
+        delta_from => 5.029005,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.029007 => {
+        delta_from => 5.029006,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.029008 => {
+        delta_from => 5.029007,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.029009 => {
+        delta_from => 5.029008,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.028002 => {
+        delta_from => 5.028001,
+        changed => {
+        },
+        removed => {
+        }
+    },
 );
 
 %deprecated = _undelta(\%deprecated);
@@ -17280,11 +17735,11 @@ sub is_core
     'CPAN::Tarzip'          => undef,
     'CPAN::URL'             => undef,
     'CPAN::Version'         => undef,
-    'Compress::Raw::Bzip2'  => undef,
-    'Compress::Raw::Zlib'   => undef,
-    'Compress::Zlib'        => undef,
+    'Compress::Raw::Bzip2'  => 'https://github.com/pmqs/Compress-Raw-Bzip2/issues',
+    'Compress::Raw::Zlib'   => 'https://github.com/pmqs/Compress-Raw-Zlib/issues',
+    'Compress::Zlib'        => 'https://github.com/pmqs/IO-Compress/issues',
     'Config::Perl::V'       => undef,
-    'DB_File'               => undef,
+    'DB_File'               => 'https://github.com/pmqs/DB_File/issues',
     'Digest'                => undef,
     'Digest::MD5'           => undef,
     'Digest::SHA'           => undef,
@@ -17355,46 +17810,46 @@ sub is_core
     'ExtUtils::testlib'     => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
     'Fatal'                 => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
     'File::Fetch'           => undef,
-    'File::GlobMapper'      => undef,
+    'File::GlobMapper'      => 'https://github.com/pmqs/IO-Compress/issues',
     'File::Path'            => undef,
     'File::Temp'            => 'https://rt.cpan.org/Public/Dist/Display.html?Name=File-Temp',
     'Filter::Util::Call'    => undef,
     'Getopt::Long'          => undef,
     'HTTP::Tiny'            => 'https://github.com/chansen/p5-http-tiny/issues',
-    'IO::Compress::Adapter::Bzip2'=> undef,
-    'IO::Compress::Adapter::Deflate'=> undef,
-    'IO::Compress::Adapter::Identity'=> undef,
-    'IO::Compress::Base'    => undef,
-    'IO::Compress::Base::Common'=> undef,
-    'IO::Compress::Bzip2'   => undef,
-    'IO::Compress::Deflate' => undef,
-    'IO::Compress::Gzip'    => undef,
-    'IO::Compress::Gzip::Constants'=> undef,
-    'IO::Compress::RawDeflate'=> undef,
-    'IO::Compress::Zip'     => undef,
-    'IO::Compress::Zip::Constants'=> undef,
-    'IO::Compress::Zlib::Constants'=> undef,
-    'IO::Compress::Zlib::Extra'=> undef,
+    'IO::Compress::Adapter::Bzip2'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Adapter::Deflate'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Adapter::Identity'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Base'    => 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Base::Common'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Bzip2'   => 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Deflate' => 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Gzip'    => 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Gzip::Constants'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::RawDeflate'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Zip'     => 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Zip::Constants'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Zlib::Constants'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Compress::Zlib::Extra'=> 'https://github.com/pmqs/IO-Compress/issues',
     'IO::Socket::IP'        => undef,
-    'IO::Uncompress::Adapter::Bunzip2'=> undef,
-    'IO::Uncompress::Adapter::Identity'=> undef,
-    'IO::Uncompress::Adapter::Inflate'=> undef,
-    'IO::Uncompress::AnyInflate'=> undef,
-    'IO::Uncompress::AnyUncompress'=> undef,
-    'IO::Uncompress::Base'  => undef,
-    'IO::Uncompress::Bunzip2'=> undef,
-    'IO::Uncompress::Gunzip'=> undef,
-    'IO::Uncompress::Inflate'=> undef,
-    'IO::Uncompress::RawInflate'=> undef,
-    'IO::Uncompress::Unzip' => undef,
+    'IO::Uncompress::Adapter::Bunzip2'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::Adapter::Identity'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::Adapter::Inflate'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::AnyInflate'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::AnyUncompress'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::Base'  => 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::Bunzip2'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::Gunzip'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::Inflate'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::RawInflate'=> 'https://github.com/pmqs/IO-Compress/issues',
+    'IO::Uncompress::Unzip' => 'https://github.com/pmqs/IO-Compress/issues',
     'IO::Zlib'              => undef,
     'IPC::Cmd'              => undef,
     'IPC::Msg'              => undef,
     'IPC::Semaphore'        => undef,
     'IPC::SharedMem'        => undef,
     'IPC::SysV'             => undef,
-    'JSON::PP'              => undef,
-    'JSON::PP::Boolean'     => undef,
+    'JSON::PP'              => 'https://github.com/makamaka/JSON-PP/issues',
+    'JSON::PP::Boolean'     => 'https://github.com/makamaka/JSON-PP/issues',
     'List::Util'            => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-List-Utils',
     'List::Util::XS'        => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-List-Utils',
     'Locale::Codes'         => undef,
index d2d8a4e..91f7ad3 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use Module::CoreList;
 
-our $VERSION = '5.20181129_28';
+our $VERSION = '5.20190419';
 our %utilities;
 
 sub utilities {
@@ -1431,6 +1431,20 @@ my %delta = (
         removed => {
         }
     },
+    5.029005 => {
+        delta_from => 5.029004,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.026003 => {
+        delta_from => 5.026002,
+        changed => {
+        },
+        removed => {
+        }
+    },
     5.028001 => {
         delta_from => 5.028000,
         changed => {
@@ -1438,6 +1452,41 @@ my %delta = (
         removed => {
         }
     },
+    5.029006 => {
+        delta_from => 5.029005,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.029007 => {
+        delta_from => 5.029006,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.029008 => {
+        delta_from => 5.029007,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.029009 => {
+        delta_from => 5.029008,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.028002 => {
+        delta_from => 5.028001,
+        changed => {
+        },
+        removed => {
+        }
+    },
 );
 
 %utilities = Module::CoreList::_undelta(\%delta);
index 6977505..092bab4 100644 (file)
@@ -90,12 +90,19 @@ sub depend {
         # blib.pm needs arch/lib
         $extra_deps = ' Storable.pm';
     }
+    my $whichperl;
+    if ($Config::Config{usecrosscompile}) {
+        $whichperl = '$(PERLRUN)';
+    }
+    else {
+        $whichperl = '$(FULLPERLRUNINST)';
+    }
     my $linktype = uc($_[0]->{LINKTYPE});
     my $limit_pm = File::Spec->catfile('lib', 'Storable', 'Limit.pm');
     "
 $limit_pm : stacksize \$(INST_$linktype)$extra_deps
        \$(MKPATH) \$(INST_LIB)
-       \$(FULLPERLRUNINST) stacksize $options
+       $whichperl stacksize $options
 
 release : dist
        git tag \$(VERSION)
index 6a90e24..f6df32b 100644 (file)
@@ -418,6 +418,24 @@ typedef struct stcxt {
     SV *(**retrieve_vtbl)(pTHX_ struct stcxt *, const char *); /* retrieve dispatch table */
     SV *prev;                  /* contexts chained backwards in real recursion */
     SV *my_sv;                 /* the blessed scalar who's SvPVX() I am */
+
+    /* recur_sv:
+
+       A hashref of hashrefs or arrayref of arrayrefs is actually a
+       chain of four SVs, eg for an array ref containing an array ref:
+
+         RV -> AV (element) -> RV -> AV
+
+       To make this depth appear natural from a perl level we only
+       want to count this as two levels, so store_ref() stores it's RV
+       into recur_sv and store_array()/store_hash() will only count
+       that level if the AV/HV *isn't* recur_sv.
+
+       We can't just have store_hash()/store_array() not count that
+       level, since it's possible for XS code to store an AV or HV
+       directly as an element (though perl code trying to access such
+       an object will generally croak.)
+     */
     SV *recur_sv;               /* check only one recursive SV */
     int in_retrieve_overloaded; /* performance hack for retrieving overloaded objects */
     int flags;                 /* controls whether to bless or tie objects */
@@ -431,8 +449,13 @@ typedef struct stcxt {
 
 #define RECURSION_TOO_DEEP() \
     (cxt->max_recur_depth != -1 && ++cxt->recur_depth > cxt->max_recur_depth)
+
+/* There's cases where we need to check whether the hash recursion
+   limit has been reached without bumping the recursion levels, so the
+   hash check doesn't bump the depth.
+*/
 #define RECURSION_TOO_DEEP_HASH() \
-    (cxt->max_recur_depth_hash != -1 && ++cxt->recur_depth > cxt->max_recur_depth_hash)
+    (cxt->max_recur_depth_hash != -1 && cxt->recur_depth > cxt->max_recur_depth_hash)
 #define MAX_DEPTH_ERROR "Max. recursion depth with nested structures exceeded"
 
 static int storable_free(pTHX_ SV *sv, MAGIC* mg);
@@ -2360,21 +2383,20 @@ static int store_ref(pTHX_ stcxt_t *cxt, SV *sv)
     } else
         PUTMARK(is_weak ? SX_WEAKREF : SX_REF);
 
-    TRACEME(("recur_depth %" IVdf ", recur_sv (0x%" UVxf ")", cxt->recur_depth,
-             PTR2UV(cxt->recur_sv)));
-    if (cxt->entry && cxt->recur_sv == sv) {
-        if (RECURSION_TOO_DEEP()) {
+    cxt->recur_sv = sv;
+
+    TRACEME((">ref recur_depth %" IVdf ", recur_sv (0x%" UVxf ") max %" IVdf, cxt->recur_depth,
+             PTR2UV(cxt->recur_sv), cxt->max_recur_depth));
+    if (RECURSION_TOO_DEEP()) {
 #if PERL_VERSION < 15
-            cleanup_recursive_data(aTHX_ (SV*)sv);
+        cleanup_recursive_data(aTHX_ (SV*)sv);
 #endif
-            CROAK((MAX_DEPTH_ERROR));
-        }
+        CROAK((MAX_DEPTH_ERROR));
     }
-    cxt->recur_sv = sv;
 
     retval = store(aTHX_ cxt, sv);
-    if (cxt->entry && cxt->recur_sv == sv && cxt->recur_depth > 0) {
-        TRACEME(("recur_depth --%" IVdf, cxt->recur_depth));
+    if (cxt->max_recur_depth != -1 && cxt->recur_depth > 0) {
+        TRACEME(("<ref recur_depth --%" IVdf, cxt->recur_depth));
         --cxt->recur_depth;
     }
     return retval;
@@ -2635,6 +2657,7 @@ static int store_array(pTHX_ stcxt_t *cxt, AV *av)
     UV len = av_len(av) + 1;
     UV i;
     int ret;
+    SV *const recur_sv = cxt->recur_sv;
 
     TRACEME(("store_array (0x%" UVxf ")", PTR2UV(av)));
 
@@ -2659,9 +2682,9 @@ static int store_array(pTHX_ stcxt_t *cxt, AV *av)
         TRACEME(("size = %d", (int)l));
     }
 
-    TRACEME(("recur_depth %" IVdf ", recur_sv (0x%" UVxf ")", cxt->recur_depth,
-             PTR2UV(cxt->recur_sv)));
-    if (cxt->entry && cxt->recur_sv == (SV*)av) {
+    TRACEME((">array recur_depth %" IVdf ", recur_sv (0x%" UVxf ") max %" IVdf, cxt->recur_depth,
+             PTR2UV(cxt->recur_sv), cxt->max_recur_depth));
+    if (recur_sv != (SV*)av) {
         if (RECURSION_TOO_DEEP()) {
             /* with <= 5.14 it recurses in the cleanup also, needing 2x stack size */
 #if PERL_VERSION < 15
@@ -2670,7 +2693,6 @@ static int store_array(pTHX_ stcxt_t *cxt, AV *av)
             CROAK((MAX_DEPTH_ERROR));
         }
     }
-    cxt->recur_sv = (SV*)av;
 
     /*
      * Now store each item recursively.
@@ -2701,9 +2723,12 @@ static int store_array(pTHX_ stcxt_t *cxt, AV *av)
             return ret;
     }
 
-    if (cxt->entry && cxt->recur_sv == (SV*)av && cxt->recur_depth > 0) {
-        TRACEME(("recur_depth --%" IVdf, cxt->recur_depth));
-        --cxt->recur_depth;
+    if (recur_sv != (SV*)av) {
+        assert(cxt->max_recur_depth == -1 || cxt->recur_depth > 0);
+        if (cxt->max_recur_depth != -1 && cxt->recur_depth > 0) {
+            TRACEME(("<array recur_depth --%" IVdf, cxt->recur_depth));
+            --cxt->recur_depth;
+        }
     }
     TRACEME(("ok (array)"));
 
@@ -2766,6 +2791,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
 #endif
                          ) ? 1 : 0);
     unsigned char hash_flags = (SvREADONLY(hv) ? SHV_RESTRICTED : 0);
+    SV * const recur_sv = cxt->recur_sv;
 
     /* 
      * Signal hash by emitting SX_HASH, followed by the table length.
@@ -2817,17 +2843,17 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
         TRACEME(("size = %d, used = %d", (int)l, (int)HvUSEDKEYS(hv)));
     }
 
-    TRACEME(("recur_depth %" IVdf ", recur_sv (0x%" UVxf ")", cxt->recur_depth,
-             PTR2UV(cxt->recur_sv)));
-    if (cxt->entry && cxt->recur_sv == (SV*)hv) {
-        if (RECURSION_TOO_DEEP_HASH()) {
+    TRACEME((">hash recur_depth %" IVdf ", recur_sv (0x%" UVxf ") max %" IVdf, cxt->recur_depth,
+             PTR2UV(cxt->recur_sv), cxt->max_recur_depth_hash));
+    if (recur_sv != (SV*)hv && cxt->max_recur_depth_hash != -1) {
+        ++cxt->recur_depth;
+    }
+    if (RECURSION_TOO_DEEP_HASH()) {
 #if PERL_VERSION < 15
-            cleanup_recursive_data(aTHX_ (SV*)hv);
+        cleanup_recursive_data(aTHX_ (SV*)hv);
 #endif
-            CROAK((MAX_DEPTH_ERROR));
-        }
+        CROAK((MAX_DEPTH_ERROR));
     }
-    cxt->recur_sv = (SV*)hv;
 
     /*
      * Save possible iteration state via each() on that table.
@@ -3107,8 +3133,9 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
     TRACEME(("ok (hash 0x%" UVxf ")", PTR2UV(hv)));
 
  out:
-    if (cxt->entry && cxt->recur_sv == (SV*)hv && cxt->recur_depth > 0) {
-        TRACEME(("recur_depth --%" IVdf , cxt->recur_depth));
+    assert(cxt->max_recur_depth_hash != -1 && cxt->recur_depth > 0);
+    TRACEME(("<hash recur_depth --%" IVdf , cxt->recur_depth));
+    if (cxt->max_recur_depth_hash != -1 && recur_sv != (SV*)hv && cxt->recur_depth > 0) {
         --cxt->recur_depth;
     }
     HvRITER_set(hv, riter);            /* Restore hash iterator state */
@@ -3221,6 +3248,7 @@ static int store_lhash(pTHX_ stcxt_t *cxt, HV *hv, unsigned char hash_flags)
 #ifdef DEBUGME
     UV len = (UV)HvTOTALKEYS(hv);
 #endif
+    SV * const recur_sv = cxt->recur_sv;
     if (hash_flags) {
         TRACEME(("store_lhash (0x%" UVxf ") (flags %x)", PTR2UV(hv),
                  (int) hash_flags));
@@ -3231,15 +3259,15 @@ static int store_lhash(pTHX_ stcxt_t *cxt, HV *hv, unsigned char hash_flags)
 
     TRACEME(("recur_depth %" IVdf ", recur_sv (0x%" UVxf ")", cxt->recur_depth,
              PTR2UV(cxt->recur_sv)));
-    if (cxt->entry && cxt->recur_sv == (SV*)hv) {
-        if (RECURSION_TOO_DEEP_HASH()) {
+    if (recur_sv != (SV*)hv && cxt->max_recur_depth_hash != -1) {
+        ++cxt->recur_depth;
+    }
+    if (RECURSION_TOO_DEEP_HASH()) {
 #if PERL_VERSION < 15
-            cleanup_recursive_data(aTHX_ (SV*)hv);
+        cleanup_recursive_data(aTHX_ (SV*)hv);
 #endif
-            CROAK((MAX_DEPTH_ERROR));
-        }
+        CROAK((MAX_DEPTH_ERROR));
     }
-    cxt->recur_sv = (SV*)hv;
 
     array = HvARRAY(hv);
     for (i = 0; i <= (Size_t)HvMAX(hv); i++) {
@@ -3252,7 +3280,7 @@ static int store_lhash(pTHX_ stcxt_t *cxt, HV *hv, unsigned char hash_flags)
                 return ret;
         }
     }
-    if (cxt->entry && cxt->recur_sv == (SV*)hv && cxt->recur_depth > 0) {
+    if (recur_sv == (SV*)hv && cxt->max_recur_depth_hash != -1 && cxt->recur_depth > 0) {
         TRACEME(("recur_depth --%" IVdf, cxt->recur_depth));
         --cxt->recur_depth;
     }
index 71c669d..e77b240 100644 (file)
@@ -27,7 +27,7 @@ our @EXPORT_OK = qw(
 
 our ($canonical, $forgive_me);
 
-our $VERSION = '3.08';
+our $VERSION = '3.08_01';
 
 our $recursion_limit;
 our $recursion_limit_hash;
index 7abd3a8..14e0739 100644 (file)
@@ -7,6 +7,9 @@ use Cwd;
 use File::Spec;
 use strict;
 
+-d "lib" or mkdir "lib";
+-d "lib/Storable" or mkdir "lib/Storable";
+
 my $fn = "lib/Storable/Limit.pm";
 my $ptrsize = $Config{ptrsize};
 my ($bad1, $bad2) = (65001, 25000);
@@ -29,6 +32,10 @@ sub is_miniperl {
 }
 
 if (is_miniperl()) {
+    if ($Config{usecrosscompile}) {
+        write_limits(500, 265);
+        exit;
+    }
     die "Should not run during miniperl\n";
 }
 my $prefix = "";
@@ -68,9 +75,6 @@ if ($ENV{PERL_CORE}) {
     }
 }
 
--d "lib" or mkdir "lib";
--d "lib/Storable" or mkdir "lib/Storable";
-
 if ($^O eq "MSWin32") {
     require Win32;
     my ($str, $major, $minor) = Win32::GetOSVersion();
index fa8be0b..63fde90 100644 (file)
@@ -20,7 +20,7 @@ use Storable qw(freeze thaw dclone);
 
 $Storable::flags = Storable::FLAGS_COMPAT;
 
-use Test::More tests => 38;
+use Test::More tests => 39;
 
 package OBJ_REAL;
 
@@ -364,5 +364,17 @@ else {
         dclone $t;
     };
     like $@, qr/Max\. recursion depth with nested structures exceeded/,
-      'Caught href stack overflow '.MAX_DEPTH*2;
+      'Caught href stack overflow '.MAX_DEPTH_HASH*2;
+}
+
+{
+    # perl #133326
+    my @tt;
+    #$Storable::DEBUGME=1;
+    for (1..16000) {
+        my $t = [[[]]];
+        push @tt, $t;
+    }
+    ok(eval { dclone \@tt; 1 },
+       "low depth structure shouldn't be treated as nested");
 }
diff --git a/doio.c b/doio.c
index 16daf9f..e6a05b8 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -1173,34 +1173,39 @@ S_argvout_free(pTHX_ SV *io, MAGIC *mg) {
         dir = INT2PTR(DIR *, SvIV(*dir_psv));
 #endif
         if (IoIFP(io)) {
-            SV **pid_psv;
-            PerlIO *iop = IoIFP(io);
+            if (PL_phase == PERL_PHASE_DESTRUCT && PL_statusvalue == 0) {
+                (void)argvout_final(mg, (IO*)io, FALSE);
+            }
+            else {
+                SV **pid_psv;
+                PerlIO *iop = IoIFP(io);
 
-            assert(SvTYPE(mg->mg_obj) == SVt_PVAV);
+                assert(SvTYPE(mg->mg_obj) == SVt_PVAV);
 
-            pid_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_PID, FALSE);
+                pid_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_ORIG_PID, FALSE);
 
-            assert(pid_psv && *pid_psv);
+                assert(pid_psv && *pid_psv);
 
-            if (SvIV(*pid_psv) == (IV)PerlProc_getpid()) {
-                /* if we get here the file hasn't been closed explicitly by the
-                   user and hadn't been closed implicitly by nextargv(), so
-                   abandon the edit */
-                SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
-                const char *temp_pv = SvPVX(*temp_psv);
+                if (SvIV(*pid_psv) == (IV)PerlProc_getpid()) {
+                    /* if we get here the file hasn't been closed explicitly by the
+                       user and hadn't been closed implicitly by nextargv(), so
+                       abandon the edit */
+                    SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
+                    const char *temp_pv = SvPVX(*temp_psv);
 
-                assert(temp_psv && *temp_psv && SvPOK(*temp_psv));
-                (void)PerlIO_close(iop);
-                IoIFP(io) = IoOFP(io) = NULL;
+                    assert(temp_psv && *temp_psv && SvPOK(*temp_psv));
+                    (void)PerlIO_close(iop);
+                    IoIFP(io) = IoOFP(io) = NULL;
 #ifdef ARGV_USE_ATFUNCTIONS
-                if (dir) {
-                    if (unlinkat(my_dirfd(dir), temp_pv, 0) < 0 &&
-                        NotSupported(errno))
-                        (void)UNLINK(temp_pv);
-                }
+                    if (dir) {
+                        if (unlinkat(my_dirfd(dir), temp_pv, 0) < 0 &&
+                            NotSupported(errno))
+                            (void)UNLINK(temp_pv);
+                    }
 #else
-                (void)UNLINK(temp_pv);
+                    (void)UNLINK(temp_pv);
 #endif
+                }
             }
         }
 #ifdef ARGV_USE_ATFUNCTIONS
@@ -1526,31 +1531,14 @@ S_dir_unchanged(pTHX_ const char *orig_pv, MAGIC *mg) {
 #define dir_unchanged(orig_psv, mg) \
     S_dir_unchanged(aTHX_ (orig_psv), (mg))
 
-/* explicit renamed to avoid C++ conflict    -- kja */
-bool
-Perl_do_close(pTHX_ GV *gv, bool not_implicit)
-{
+STATIC bool
+S_argvout_final(pTHX_ MAGIC *mg, IO *io, bool not_implicit) {
     bool retval;
-    IO *io;
-    MAGIC *mg;
 
-    if (!gv)
-       gv = PL_argvgv;
-    if (!gv || !isGV_with_GP(gv)) {
-       if (not_implicit)
-           SETERRNO(EBADF,SS_IVCHAN);
-       return FALSE;
-    }
-    io = GvIO(gv);
-    if (!io) {         /* never opened */
-       if (not_implicit) {
-           report_evil_fh(gv);
-           SETERRNO(EBADF,SS_IVCHAN);
-       }
-       return FALSE;
-    }
-    if ((mg = mg_findext((SV*)io, PERL_MAGIC_uvar, &argvout_vtbl))
-        && mg->mg_obj) {
+    /* ensure args are checked before we start using them */
+    PERL_ARGS_ASSERT_ARGVOUT_FINAL;
+
+    {
         /* handle to an in-place edit work file */
         SV **back_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_BACKUP_NAME, FALSE);
         SV **temp_psv = av_fetch((AV*)mg->mg_obj, ARGVMG_TEMP_NAME, FALSE);
@@ -1717,7 +1705,38 @@ Perl_do_close(pTHX_ GV *gv, bool not_implicit)
                            SvPVX(*temp_psv), Strerror(errno));
             }
         }
-    freext:
+ freext:
+        ;
+    }
+    return retval;
+}
+
+/* explicit renamed to avoid C++ conflict    -- kja */
+bool
+Perl_do_close(pTHX_ GV *gv, bool not_implicit)
+{
+    bool retval;
+    IO *io;
+    MAGIC *mg;
+
+    if (!gv)
+       gv = PL_argvgv;
+    if (!gv || !isGV_with_GP(gv)) {
+       if (not_implicit)
+           SETERRNO(EBADF,SS_IVCHAN);
+       return FALSE;
+    }
+    io = GvIO(gv);
+    if (!io) {         /* never opened */
+       if (not_implicit) {
+           report_evil_fh(gv);
+           SETERRNO(EBADF,SS_IVCHAN);
+       }
+       return FALSE;
+    }
+    if ((mg = mg_findext((SV*)io, PERL_MAGIC_uvar, &argvout_vtbl))
+        && mg->mg_obj) {
+        retval = argvout_final(mg, io, not_implicit);
         mg_freeext((SV*)io, PERL_MAGIC_uvar, &argvout_vtbl);
     }
     else {
index 454a380..e762fe1 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -440,6 +440,7 @@ p   |bool|do_exec3  |NN const char *incmd|int fd|int do_report
 #endif
 #if defined(PERL_IN_DOIO_C)
 s      |void   |exec_failed    |NN const char *cmd|int fd|int do_report
+s      |bool   |argvout_final  |NN MAGIC *mg|NN IO *io|bool not_implicit
 #endif
 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
 : Defined in doio.c, used only in pp_sys.c
diff --git a/embed.h b/embed.h
index fb93ebc..a5416a1 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define deb_stack_n(a,b,c,d,e) S_deb_stack_n(aTHX_ a,b,c,d,e)
 #  endif
 #  if defined(PERL_IN_DOIO_C)
+#define argvout_final(a,b,c)   S_argvout_final(aTHX_ a,b,c)
 #define exec_failed(a,b,c)     S_exec_failed(aTHX_ a,b,c)
 #define ingroup(a,b)           S_ingroup(aTHX_ a,b)
 #define openn_cleanup(a,b,c,d,e,f,g,h,i,j,k,l,m)       S_openn_cleanup(aTHX_ a,b,c,d,e,f,g,h,i,j,k,l,m)
index 61b62ea..6f4fa17 100644 (file)
@@ -1,5 +1,5 @@
 package PerlIO::scalar;
-our $VERSION = '0.29';
+our $VERSION = '0.30';
 require XSLoader;
 XSLoader::load();
 1;
index 10a4185..e717736 100644 (file)
@@ -185,11 +185,20 @@ PerlIOScalar_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
         /* I assume that Off_t is at least as large as len (which 
          * seems safe) and that the size of the buffer in our SV is
          * always less than half the size of the address space
+         *
+         * Which turns out not to be the case on 64-bit Windows, since
+         * a build with USE_LARGE_FILES=undef defines Off_t as long,
+         * which is 32-bits on 64-bit Windows.  This doesn't appear to
+         * be the case on other 64-bit platforms.
          */
-        STATIC_ASSERT_STMT(sizeof(Off_t) >= sizeof(len));
+#if Off_t_size >= Size_t_size
         assert(len < ((~(STRLEN)0) >> 1));
         if ((Off_t)len <= s->posn)
            return 0;
+#else
+        if (len <= (STRLEN)s->posn)
+            return 0;
+#endif
        got = len - (STRLEN)(s->posn);
        if ((STRLEN)got > (STRLEN)count)
            got = (STRLEN)count;
index 1534889..865020d 100644 (file)
@@ -16,6 +16,6 @@ for my $case (@cases) {
     my ($what, $format) = @$case;
     my $got = eval { test_sv_catpvf($format); 1 };
     my $exn = $got ? undef : $@;
-    like($exn, qr/\b\QCannot yet reorder sv_catpvfn() arguments from va_list\E\b/,
+    like($exn, qr/\b\QCannot yet reorder sv_vcatpvfn() arguments from va_list\E\b/,
          "explicit $what index forbidden in va_list arguments");
 }
index d81462e..2303ffd 100644 (file)
 # mkdir -p /opt/perl-catamount
 # mkdir -p /opt/perl-catamount/include
 # mkdir -p /opt/perl-catamount/lib
-# mkdir -p /opt/perl-catamount/lib/perl5/5.28.1
+# mkdir -p /opt/perl-catamount/lib/perl5/5.28.2
 # mkdir -p /opt/perl-catamount/bin
 # cp *.h /opt/perl-catamount/include
 # cp libperl.a /opt/perl-catamount/lib
-# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.28.1
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.28.2
 # cp miniperl perl run.sh cc.sh /opt/perl-catamount/lib
 #
 # With the headers and the libperl.a you can embed Perl to your Catamount
index 3f38ea0..a985a8e 100644 (file)
@@ -178,6 +178,16 @@ case "$plibpth" in
     ;;
 esac
 
+# For the musl libc, perl should #define _GNU_SOURCE.  Otherwise, some
+# available functions, like memem, won't be used.  See the discussion in
+# [perl #133760].  musl doesn't offer an easy way to identify it, but,
+# at least on alpine linux, the ldd --version output contains the
+# string 'musl.'
+case `ldd --version 2>&1` in
+    musl*)  ccflags="$ccflags -D_GNU_SOURCE" ;;
+        *) ;;
+esac
+
 # libquadmath is sometimes installed as gcc internal library,
 # so contrary to our usual policy of *not* looking at gcc internal
 # directories we now *do* look at them, in case they contain
index 3bf79d2..6cd65a0 100755 (executable)
@@ -304,6 +304,7 @@ elsif ($^O ne 'dos') {
        safe_unlink("$installbin/$perl_verbase$ver$exe_ext");
        copy("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext");
        strip("$installbin/$perl_verbase$ver$exe_ext");
+       fix_dep_names("$installbin/$perl_verbase$ver$exe_ext");
        chmod(0755, "$installbin/$perl_verbase$ver$exe_ext");
     }
     else {
@@ -388,6 +389,7 @@ foreach my $file (@corefiles) {
     if (copy_if_diff($file,"$installarchlib/CORE/$file")) {
        if ($file =~ /\.(\Q$so\E|\Q$dlext\E)$/) {
            strip("-S", "$installarchlib/CORE/$file") if $^O eq 'darwin';
+           fix_dep_names("$installarchlib/CORE/$file");
            chmod($SO_MODE, "$installarchlib/CORE/$file");
        } else {
            chmod($NON_SO_MODE, "$installarchlib/CORE/$file");
@@ -791,4 +793,27 @@ sub strip
     }
 }
 
+sub fix_dep_names {
+    my $file = shift;
+
+    $^O eq "darwin" && $Config{osvers} =~ /^(1[5-9]|[2-9])/
+      && $Config{useshrplib}
+      or return;
+
+    my @opts;
+    my $so = $Config{so};
+    my $libperl = "$Config{archlibexp}/CORE/libperl.$Config{so}";
+    if ($file =~ /\blibperl.\Q$Config{so}\E$/a) {
+        push @opts, -id => $libperl;
+    }
+    else {
+        push @opts, -change => getcwd . "/libperl.$so", $libperl;
+    }
+    push @opts, $file;
+
+    $opts{verbose} and print "  install_name_tool @opts\n";
+    system "install_name_tool", @opts
+      and die "Cannot update $file dependency paths\n";
+}
+
 # ex: set ts=8 sts=4 sw=4 et:
index 58953e1..39d97fa 100644 (file)
@@ -118,7 +118,7 @@ package B::Op_private;
 our %bits;
 
 
-our $VERSION = "5.028001";
+our $VERSION = "5.028002";
 
 $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
 $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
index 8754a9f..7f30e93 100644 (file)
--- a/numeric.c
+++ b/numeric.c
@@ -565,9 +565,9 @@ Perl_grok_numeric_radix(pTHX_ const char **sp, const char *send)
 Helper for C<grok_number()>, accepts various ways of spelling "infinity"
 or "not a number", and returns one of the following flag combinations:
 
-  IS_NUMBER_INFINITE
+  IS_NUMBER_INFINITY
   IS_NUMBER_NAN
-  IS_NUMBER_INFINITE | IS_NUMBER_NEG
+  IS_NUMBER_INFINITY | IS_NUMBER_NEG
   IS_NUMBER_NAN | IS_NUMBER_NEG
   0
 
index a5ca94b..d9e397a 100644 (file)
@@ -15,7 +15,7 @@
 
 #define PERL_REVISION  5               /* age */
 #define PERL_VERSION   28              /* epoch */
-#define PERL_SUBVERSION        1               /* generation */
+#define PERL_SUBVERSION        2               /* generation */
 
 /* The following numbers describe the earliest compatible version of
    Perl ("compatibility" here being defined as sufficient binary/API
diff --git a/perl.c b/perl.c
index e6dfa8d..e61a125 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -3,7 +3,7 @@
  *
  *    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  *    2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
- *    2013, 2014, 2015, 2016, 2017, 2018 by Larry Wall and others
+ *    2013, 2014, 2015, 2016, 2017, 2018, 2019 by Larry Wall and others
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
@@ -3760,7 +3760,7 @@ S_minus_v(pTHX)
 #endif
 
        PerlIO_printf(PIO_stdout,
-                     "\n\nCopyright 1987-2018, Larry Wall\n");
+                     "\n\nCopyright 1987-2019, Larry Wall\n");
 #ifdef MSDOS
        PerlIO_printf(PIO_stdout,
                      "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
index 8c3f0ff..d5f92eb 100644 (file)
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/sys/lib/perl/5.28.1"         /**/
-#define PRIVLIB_EXP "/sys/lib/perl/5.28.1"             /**/
+#define PRIVLIB "/sys/lib/perl/5.28.2"         /**/
+#define PRIVLIB_EXP "/sys/lib/perl/5.28.2"             /**/
 
 /* PTRSIZE:
  *     This symbol contains the size of a pointer, so that the C preprocessor
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/sys/lib/perl/5.28.1/site_perl"               /**/
-#define SITELIB_EXP "/sys/lib/perl/5.28.1/site_perl"           /**/
-#define SITELIB_STEM "/sys/lib/perl/5.28.1/site_perl"          /**/
+#define SITELIB "/sys/lib/perl/5.28.2/site_perl"               /**/
+#define SITELIB_EXP "/sys/lib/perl/5.28.2/site_perl"           /**/
+#define SITELIB_STEM "/sys/lib/perl/5.28.2/site_perl"          /**/
 
 /* Size_t_size:
  *     This symbol holds the size of a Size_t in bytes.
index fb032aa..c32be0d 100644 (file)
@@ -35,8 +35,8 @@ api_subversion='0'
 api_version='28'
 api_versionstring='5.28.0'
 ar='ar'
-archlib='/sys/lib/perl5/5.28.1/386'
-archlibexp='/sys/lib/perl5/5.28.1/386'
+archlib='/sys/lib/perl5/5.28.2/386'
+archlibexp='/sys/lib/perl5/5.28.2/386'
 archname64=''
 archname='386'
 archobjs=''
@@ -812,17 +812,17 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='/sys/lib/perl/5.28.1/386'
+installarchlib='/sys/lib/perl/5.28.2/386'
 installbin='/usr/bin'
 installman1dir='/sys/man/1pub'
 installman3dir='/sys/man/2pub'
 installprefix='/usr'
 installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.28.1'
+installprivlib='/sys/lib/perl/5.28.2'
 installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.28.1/site_perl/386'
+installsitearch='/sys/lib/perl/5.28.2/site_perl/386'
 installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.28.1/site_perl'
+installsitelib='/sys/lib/perl/5.28.2/site_perl'
 installstyle='lib/perl5'
 installusrbinperl='undef'
 installvendorarch=''
@@ -947,8 +947,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/sys/lib/perl/5.28.1'
-privlibexp='/sys/lib/perl/5.28.1'
+privlib='/sys/lib/perl/5.28.2'
+privlibexp='/sys/lib/perl/5.28.2'
 procselfexe=''
 prototype='define'
 ptrsize='4'
@@ -1013,13 +1013,13 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0'
 sig_size='50'
 signal_t='void'
-sitearch='/sys/lib/perl/5.28.1/site_perl/386'
+sitearch='/sys/lib/perl/5.28.2/site_perl/386'
 sitearchexp='/sys/lib/perl/site_perl/386'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.28.1/site_perl'
-sitelib_stem='/sys/lib/perl/5.28.1/site_perl'
-sitelibexp='/sys/lib/perl/5.28.1/site_perl'
+sitelib='/sys/lib/perl/5.28.2/site_perl'
+sitelib_stem='/sys/lib/perl/5.28.2/site_perl'
+sitelibexp='/sys/lib/perl/5.28.2/site_perl'
 siteprefix='/usr'
 siteprefixexp='/usr'
 sizesize='4'
@@ -1052,7 +1052,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/sys/include/ape/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/sys/man/1pub'
 tail=''
 tar=''
@@ -1133,8 +1133,8 @@ vendorlib_stem=''
 vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
-version='5.28.1'
-version_patchlevel_string='version 28 subversion 1'
+version='5.28.2'
+version_patchlevel_string='version 28 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth=''
@@ -1148,7 +1148,7 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=28
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=28
 PERL_API_SUBVERSION=0
index fbbb952..6008e4a 100644 (file)
@@ -181,7 +181,9 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
 
     perlhist           Perl history records
     perldelta          Perl changes since previous version
+    perl5281delta      Perl changes in version 5.28.1
     perl5280delta      Perl changes in version 5.28.0
+    perl5263delta      Perl changes in version 5.26.3
     perl5262delta      Perl changes in version 5.26.2
     perl5261delta      Perl changes in version 5.26.1
     perl5260delta      Perl changes in version 5.26.0
diff --git a/pod/perl5263delta.pod b/pod/perl5263delta.pod
new file mode 100644 (file)
index 0000000..43ec1f4
--- /dev/null
@@ -0,0 +1,201 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5263delta - what is new for perl v5.26.3
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.26.2 release and the 5.26.3
+release.
+
+If you are upgrading from an earlier release such as 5.26.1, first read
+L<perl5262delta>, which describes differences between 5.26.1 and 5.26.2.
+
+=head1 Security
+
+=head2 [CVE-2018-12015] Directory traversal in module Archive::Tar
+
+By default, L<Archive::Tar> doesn't allow extracting files outside the current
+working directory.  However, this secure extraction mode could be bypassed by
+putting a symlink and a regular file with the same name into the tar file.
+
+L<[perl #133250]|https://rt.perl.org/Ticket/Display.html?id=133250>
+L<[cpan #125523]|https://rt.cpan.org/Ticket/Display.html?id=125523>
+
+=head2 [CVE-2018-18311] Integer overflow leading to buffer overflow and segmentation fault
+
+Integer arithmetic in C<Perl_my_setenv()> could wrap when the combined length
+of the environment variable name and value exceeded around 0x7fffffff.  This
+could lead to writing beyond the end of an allocated buffer with attacker
+supplied data.
+
+L<[perl #133204]|https://rt.perl.org/Ticket/Display.html?id=133204>
+
+=head2 [CVE-2018-18312] Heap-buffer-overflow write in S_regatom (regcomp.c)
+
+A crafted regular expression could cause heap-buffer-overflow write during
+compilation, potentially allowing arbitrary code execution.
+
+L<[perl #133423]|https://rt.perl.org/Ticket/Display.html?id=133423>
+
+=head2 [CVE-2018-18313] Heap-buffer-overflow read in S_grok_bslash_N (regcomp.c)
+
+A crafted regular expression could cause heap-buffer-overflow read during
+compilation, potentially leading to sensitive information being leaked.
+
+L<[perl #133192]|https://rt.perl.org/Ticket/Display.html?id=133192>
+
+=head2 [CVE-2018-18314] Heap-buffer-overflow write in S_regatom (regcomp.c)
+
+A crafted regular expression could cause heap-buffer-overflow write during
+compilation, potentially allowing arbitrary code execution.
+
+L<[perl #131649]|https://rt.perl.org/Ticket/Display.html?id=131649>
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.26.2.  If any exist,
+they are bugs, and we request that you submit a report.  See
+L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Archive::Tar> has been upgraded from version 2.24 to 2.24_01.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20180414_26 to 5.20181129_26.
+
+=back
+
+=head1 Diagnostics
+
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages.  For the complete list of
+diagnostic messages, see L<perldiag>.
+
+=head2 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<Unexpected ']' with no following ')' in (?[... in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|perldiag/"Unexpected ']' with no following ')' in (?[... in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>">
+
+(F) While parsing an extended character class a ']' character was encountered
+at a point in the definition where the only legal use of ']' is to close the
+character class definition as part of a '])', you may have forgotten the close
+paren, or otherwise confused the parser.
+
+=item *
+
+L<Expecting close paren for nested extended charclass in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|perldiag/"Expecting close paren for nested extended charclass in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>">
+
+(F) While parsing a nested extended character class like:
+
+    (?[ ... (?flags:(?[ ... ])) ... ])
+                             ^
+
+we expected to see a close paren ')' (marked by ^) but did not.
+
+=item *
+
+L<Expecting close paren for wrapper for nested extended charclass in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|perldiag/"Expecting close paren for wrapper for nested extended charclass in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>">
+
+(F) While parsing a nested extended character class like:
+
+    (?[ ... (?flags:(?[ ... ])) ... ])
+                              ^
+
+we expected to see a close paren ')' (marked by ^) but did not.
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+L<Syntax error in (?[...]) in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|perldiag/"Syntax error in (?[...]) in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>">
+
+This fatal error message has been slightly expanded (from "Syntax error in
+(?[...]) in regex mE<sol>%sE<sol>") for greater clarity.
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.26.3 represents approximately 8 months of development since Perl 5.26.2
+and contains approximately 4,500 lines of changes across 51 files from 15
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 770 lines of changes to 10 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers.  The following people are known to have contributed
+the improvements that became Perl 5.26.3:
+
+Aaron Crane, Abigail, Chris 'BinGOs' Williams, Dagfinn Ilmari Mannsåker, David
+Mitchell, H.Merijn Brand, James E Keenan, John SJ Anderson, Karen Etheridge,
+Karl Williamson, Sawyer X, Steve Hay, Todd Rinaldo, Tony Cook, Yves Orton.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history.  In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core.  We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database
+at L<https://rt.perl.org/> .  There may also be information at
+L<http://www.perl.org/> , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug> program
+included with your release.  Be sure to trim your bug down to a tiny but
+sufficient test case.  Your bug report, along with the output of C<perl -V>,
+will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a publicly archived mailing list, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
+for details of how to report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
+you can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
diff --git a/pod/perl5281delta.pod b/pod/perl5281delta.pod
new file mode 100644 (file)
index 0000000..2153e40
--- /dev/null
@@ -0,0 +1,141 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5281delta - what is new for perl v5.28.1
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.28.0 release and the 5.28.1
+release.
+
+If you are upgrading from an earlier release such as 5.26.0, first read
+L<perl5280delta>, which describes differences between 5.26.0 and 5.28.0.
+
+=head1 Security
+
+=head2 [CVE-2018-18311] Integer overflow leading to buffer overflow and segmentation fault
+
+Integer arithmetic in C<Perl_my_setenv()> could wrap when the combined length
+of the environment variable name and value exceeded around 0x7fffffff.  This
+could lead to writing beyond the end of an allocated buffer with attacker
+supplied data.
+
+L<[perl #133204]|https://rt.perl.org/Ticket/Display.html?id=133204>
+
+=head2 [CVE-2018-18312] Heap-buffer-overflow write in S_regatom (regcomp.c)
+
+A crafted regular expression could cause heap-buffer-overflow write during
+compilation, potentially allowing arbitrary code execution.
+
+L<[perl #133423]|https://rt.perl.org/Ticket/Display.html?id=133423>
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.28.0.  If any exist,
+they are bugs, and we request that you submit a report.  See
+L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20180622 to 5.20181129_28.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+Perl 5.28 introduced an C<index()> optimization when comparing to -1 (or
+indirectly, e.g. >= 0).  When this optimization was triggered inside a C<when>
+clause it caused a warning ("Argument %s isn't numeric in smart match").  This
+has now been fixed.
+L<[perl #133368]|https://rt.perl.org/Ticket/Display.html?id=133368>
+
+=item *
+
+Matching of decimal digits in script runs, introduced in Perl 5.28, had a bug
+that led to C<"1\N{THAI DIGIT FIVE}"> matching C</^(*sr:\d+)$/> when it should
+not.  This has now been fixed.
+
+=item *
+
+The new in-place editing code no longer leaks directory handles.
+L<[perl #133314]|https://rt.perl.org/Ticket/Display.html?id=133314>
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.28.1 represents approximately 5 months of development since Perl 5.28.0
+and contains approximately 6,100 lines of changes across 44 files from 12
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 700 lines of changes to 12 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its fourth decade thanks to a vibrant community
+of users and developers.  The following people are known to have contributed
+the improvements that became Perl 5.28.1:
+
+Aaron Crane, Abigail, Chris 'BinGOs' Williams, Dagfinn Ilmari Mannsåker, David
+Mitchell, James E Keenan, John SJ Anderson, Karen Etheridge, Karl Williamson,
+Sawyer X, Steve Hay, Tony Cook.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history.  In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core.  We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database
+at L<https://rt.perl.org/> .  There may also be information at
+L<http://www.perl.org/> , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug> program
+included with your release.  Be sure to trim your bug down to a tiny but
+sufficient test case.  Your bug report, along with the output of C<perl -V>,
+will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a publicly archived mailing list, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
+for details of how to report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
+you can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
index ad87d40..f517cb0 100644 (file)
@@ -2,49 +2,80 @@
 
 =head1 NAME
 
-perldelta - what is new for perl v5.28.1
+perldelta - what is new for perl v5.28.2
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.28.0 release and the 5.28.1
+This document describes differences between the 5.28.1 release and the 5.28.2
 release.
 
-If you are upgrading from an earlier release such as 5.26.0, first read
-L<perl5280delta>, which describes differences between 5.26.0 and 5.28.0.
+If you are upgrading from an earlier release such as 5.28.0, first read
+L<perl5281delta>, which describes differences between 5.28.0 and 5.28.1.
 
-=head1 Security
+=head1 Incompatible Changes
 
-=head2 [CVE-2018-18311] Integer overflow leading to buffer overflow and segmentation fault
+=head2 Any set of digits in the Common script are legal in a script run of
+another script
 
-Integer arithmetic in C<Perl_my_setenv()> could wrap when the combined length
-of the environment variable name and value exceeded around 0x7fffffff.  This
-could lead to writing beyond the end of an allocated buffer with attacker
-supplied data.
+There are several sets of digits in the Common script.  C<[0-9]> is the most
+familiar.  But there are also C<[\x{FF10}-\x{FF19}]> (FULLWIDTH DIGIT ZERO -
+FULLWIDTH DIGIT NINE), and several sets for use in mathematical notation, such
+as the MATHEMATICAL DOUBLE-STRUCK DIGITs.  Any of these sets should be able to
+appear in script runs of, say, Greek.  But the previous design overlooked all
+but the ASCII digits C<[0-9]>, so the design was flawed.  This has been fixed,
+so is both a bug fix and an incompatibility.
 
-L<[perl #133204]|https://rt.perl.org/Ticket/Display.html?id=133204>
+All digits in a run still have to come from the same set of ten digits.
 
-=head2 [CVE-2018-18312] Heap-buffer-overflow write in S_regatom (regcomp.c)
+L<[perl #133547]|https://rt.perl.org/Ticket/Display.html?id=133547>
 
-A crafted regular expression could cause heap-buffer-overflow write during
-compilation, potentially allowing arbitrary code execution.
+=head1 Modules and Pragmata
 
-L<[perl #133423]|https://rt.perl.org/Ticket/Display.html?id=133423>
+=head2 Updated Modules and Pragmata
 
-=head1 Incompatible Changes
+=over 4
 
-There are no changes intentionally incompatible with 5.28.0.  If any exist,
-they are bugs, and we request that you submit a report.  See
-L</Reporting Bugs> below.
+=item *
 
-=head1 Modules and Pragmata
+L<Module::CoreList> has been upgraded from version 5.20181129_28 to 5.20190419.
 
-=head2 Updated Modules and Pragmata
+=item *
 
-=over 4
+L<PerlIO::scalar> has been upgraded from version 0.29 to 0.30.
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 5.20180622 to 5.20181129_28.
+L<Storable> has been upgraded from version 3.08 to 3.08_01.
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item Windows
+
+The Windows Server 2003 SP1 Platform SDK build, with its early x64 compiler and
+tools, was accidentally broken in Perl 5.27.9.  This has now been fixed.
+
+=item Mac OS X
+
+Perl's build and testing process on Mac OS X for C<-Duseshrplib> builds is now
+compatible with Mac OS X System Integrity Protection (SIP).
+
+SIP prevents binaries in F</bin> (and a few other places) being passed the
+C<DYLD_LIBRARY_PATH> environment variable.  For our purposes this prevents
+C<DYLD_LIBRARY_PATH> from being passed to the shell, which prevents that
+variable being passed to the testing or build process, so running C<perl>
+couldn't find F<libperl.dylib>.
+
+To work around that, the initial build of the F<perl> executable expects to
+find F<libperl.dylib> in the build directory, and the library path is then
+adjusted during installation to point to the installed library.
+
+L<[perl #126706]|https://rt.perl.org/Ticket/Display.html?id=126706>
 
 =back
 
@@ -54,41 +85,68 @@ L<Module::CoreList> has been upgraded from version 5.20180622 to 5.20181129_28.
 
 =item *
 
-Perl 5.28 introduced an C<index()> optimization when comparing to -1 (or
-indirectly, e.g. >= 0).  When this optimization was triggered inside a C<when>
-clause it caused a warning ("Argument %s isn't numeric in smart match").  This
-has now been fixed.
-L<[perl #133368]|https://rt.perl.org/Ticket/Display.html?id=133368>
+If an in-place edit is still in progress during global destruction and the
+process exit code (as stored in C<$?>) is zero, perl will now treat the
+in-place edit as successful, replacing the input file with any output produced.
+
+This allows code like:
+
+  perl -i -ne 'print "Foo"; last'
+
+to replace the input file, while code like:
+
+  perl -i -ne 'print "Foo"; die'
+
+will not.  Partly resolves [perl #133659].
+
+L<[perl #133659]|https://rt.perl.org/Ticket/Display.html?id=133659>
 
 =item *
 
-Matching of decimal digits in script runs, introduced in Perl 5.28, had a bug
-that led to C<"1\N{THAI DIGIT FIVE}"> matching C</^(*sr:\d+)$/> when it should
-not.  This has now been fixed.
+A regression in Perl 5.28 caused the following code to fail
+
+ close(STDIN); open(CHILD, "|wc -l")'
+
+because the child's stdin would be closed on exec.  This has now been fixed.
+
+=item *
+
+C<pack "u", "invalid uuencoding"> now properly NUL terminates the zero-length
+SV produced.
+
+L<[perl #132655]|https://rt.perl.org/Ticket/Display.html?id=132655>
+
+=item *
+
+Failing to compile a format now aborts compilation.  Like other errors in
+sub-parses this could leave the parser in a strange state, possibly crashing
+perl if compilation continued.
+
+L<[perl #132158]|https://rt.perl.org/Ticket/Display.html?id=132158>
 
 =item *
 
-The new in-place editing code no longer leaks directory handles.
-L<[perl #133314]|https://rt.perl.org/Ticket/Display.html?id=133314>
+See L</Any set of digits in the Common script are legal in a script run of
+another script>.
 
 =back
 
 =head1 Acknowledgements
 
-Perl 5.28.1 represents approximately 5 months of development since Perl 5.28.0
-and contains approximately 6,100 lines of changes across 44 files from 12
+Perl 5.28.2 represents approximately 4 months of development since Perl 5.28.1
+and contains approximately 2,500 lines of changes across 75 files from 13
 authors.
 
 Excluding auto-generated files, documentation and release tools, there were
-approximately 700 lines of changes to 12 .pm, .t, .c and .h files.
+approximately 1,200 lines of changes to 29 .pm, .t, .c and .h files.
 
 Perl continues to flourish into its fourth decade thanks to a vibrant community
 of users and developers.  The following people are known to have contributed
-the improvements that became Perl 5.28.1:
+the improvements that became Perl 5.28.2:
 
-Aaron Crane, Abigail, Chris 'BinGOs' Williams, Dagfinn Ilmari Mannsåker, David
-Mitchell, James E Keenan, John SJ Anderson, Karen Etheridge, Karl Williamson,
-Sawyer X, Steve Hay, Tony Cook.
+Aaron Crane, Abigail, Andy Dougherty, David Mitchell, Karen Etheridge, Karl
+Williamson, Leon Timmermans, Nicolas R., Sawyer X, Steve Hay, Tina Müller,
+Tony Cook, Zak B. Elep.
 
 The list above is almost certainly incomplete as it is automatically generated
 from version control history.  In particular, it does not include the names of
index 607bfc5..f3ce90e 100644 (file)
@@ -733,9 +733,9 @@ keep a reference count on its arguments and cannot be made to
 do so.  Such arrays are not even supposed to be accessible to
 Perl code, but are only used internally.
 
-=item Cannot yet reorder sv_catpvfn() arguments from va_list
+=item Cannot yet reorder sv_vcatpvfn() arguments from va_list
 
-(F) Some XS code tried to use C<sv_catpvfn()> or a related function with a
+(F) Some XS code tried to use C<sv_vcatpvfn()> or a related function with a
 format string that specifies explicit indexes for some of the elements, and
 using a C-style variable-argument list (a C<va_list>).  This is not currently
 supported.  XS authors wanting to do this must instead construct a C array
index fc10ad8..d6458bc 100644 (file)
@@ -34,7 +34,7 @@ Chris C<BinGOs> Williams, Zefram, Ævar Arnfjörð Bjarmason, Stevan
 Little, Dave Rolsky, Max Maischein, Abigail, Jesse Luehrs, Tony Cook,
 Dominic Hargreaves, Aaron Crane, Aristotle Pagaltzis, Matthew Horsfall,
 Peter Martini, Sawyer X, Chad 'Exodist' Granum, Renee Bäcker, Eric Herman,
-John SJ Anderson, and Karen Etheridge.
+John SJ Anderson, Karen Etheridge, and Zak B. Elep.
 
 =head2 PUMPKIN?
 
@@ -651,11 +651,19 @@ the strings?).
  Sawyer X  5.28.0       2018-Jun-22
  Steve     5.28.1-RC1   2018-Nov-08
  Steve     5.28.1       2018-Nov-29
+ Steve     5.28.2-RC1   2019-Apr-05
+ Steve     5.28.2       2019-Apr-19
 
  Sawyer X  5.29.0       2018-Jun-26     The 5.29 development track
  Steve     5.29.1       2018-Jul-20
  BinGOs    5.29.2       2018-Aug-20
- John      5.29.3       2019-Sep-20
+ John      5.29.3       2018-Sep-20
+ Aaron     5.29.4       2018-Oct-20
+ Ether     5.29.5       2018-Nov-20
+ Abigail   5.29.6       2018-Dec-18
+ Abigail   5.29.7       2019-Jan-20
+ Nicolas R 5.29.8       2019-Feb-20
+ Zak Elep  5.29.9       2019-Mar-20
 
 =head2 SELECTED RELEASE SIZES
 
index 70c53f1..c587437 100644 (file)
@@ -2529,15 +2529,12 @@ characters from their native scripts and base Chinese.  Perl follows
 Unicode's UTS 39 (L<http://unicode.org/reports/tr39/>) Unicode Security
 Mechanisms in allowing such mixtures.
 
-The rules used for matching decimal digits are somewhat different.  Many
+The rules used for matching decimal digits are slightly stricter.  Many
 scripts have their own sets of digits equivalent to the Western C<0>
 through C<9> ones.  A few, such as Arabic, have more than one set.  For
 a string to be considered a script run, all digits in it must come from
-the same set, as determined by the first digit encountered. The ASCII
-C<[0-9]> are accepted as being in any script, even those that have their
-own set.  This is because these are often used in commerce even in such
-scripts.  But any mixing of the ASCII and other digits will cause the
-sequence to not be a script run, failing the match.  As an example,
+the same set of ten, as determined by the first digit encountered.
+As an example,
 
  qr/(*script_run: \d+ \b )/x
 
@@ -2558,11 +2555,11 @@ accent of some type.  These are considered to be in the script of the
 master character, and so never cause a script run to not match.
 
 The other one is "Common".  This consists of mostly punctuation, emoji,
-and characters used in mathematics and music, and the ASCII digits C<0>
-through C<9>.  These characters can appear intermixed in text in many of
-the world's scripts.  These also don't cause a script run to not match,
-except any ASCII digits encountered have to obey the decimal digit rules
-described above.
+and characters used in mathematics and music, the ASCII digits C<0>
+through C<9>, and full-width forms of these digits.  These characters
+can appear intermixed in text in many of the world's scripts.  These
+also don't cause a script run to not match.  But like other scripts, all
+digits in a run must come from the same set of 10.
 
 This construct is non-capturing.  You can add parentheses to I<pattern>
 to capture, if desired.  You will have to do this if you plan to use
diff --git a/pp.c b/pp.c
index 33eac60..def1950 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -1693,7 +1693,8 @@ PP(pp_repeat)
            else {
                dTOPss;
                ASSUME(MARK + 1 == SP);
-               XPUSHs(sv);
+                MEXTEND(SP, 1);
+                PUSHs(sv);
                MARK[1] = &PL_sv_undef;
            }
            SP = MARK + 2;
index 56e3cbe..dc02612 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -3932,7 +3932,7 @@ PP(pp_iter)
     case CXt_LOOP_LIST: /* for (1,2,3) */
 
         assert(OPpITER_REVERSED == 2); /* so inc becomes -1 or 1 */
-        inc = 1 - (PL_op->op_private & OPpITER_REVERSED);
+        inc = (IV)1 - (IV)(PL_op->op_private & OPpITER_REVERSED);
         ix = (cx->blk_loop.state_u.stack.ix += inc);
         if (UNLIKELY(inc > 0
                         ? ix > cx->blk_oldsp
@@ -3947,7 +3947,7 @@ PP(pp_iter)
     case CXt_LOOP_ARY: /* for (@ary) */
 
         av = cx->blk_loop.state_u.ary.ary;
-        inc = 1 - (PL_op->op_private & OPpITER_REVERSED);
+        inc = (IV)1 - (IV)(PL_op->op_private & OPpITER_REVERSED);
         ix = (cx->blk_loop.state_u.ary.ix += inc);
         if (UNLIKELY(inc > 0
                         ? ix > AvFILL(av)
index 5e9cc64..f8be9d4 100644 (file)
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -1727,7 +1727,10 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
            if (!checksum) {
                 const STRLEN l = (STRLEN) (strend - s) * 3 / 4;
                sv = sv_2mortal(newSV(l));
-               if (l) SvPOK_on(sv);
+               if (l) {
+                    SvPOK_on(sv);
+                    *SvEND(sv) = '\0';
+                }
            }
 
             /* Note that all legal uuencoded strings are ASCII printables, so
diff --git a/proto.h b/proto.h
index c91141b..66bb29b 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -4723,6 +4723,9 @@ STATIC void       S_deb_stack_n(pTHX_ SV** stack_base, I32 stack_min, I32 stack_max, I
        assert(stack_base)
 #endif
 #if defined(PERL_IN_DOIO_C)
+STATIC bool    S_argvout_final(pTHX_ MAGIC *mg, IO *io, bool not_implicit);
+#define PERL_ARGS_ASSERT_ARGVOUT_FINAL \
+       assert(mg); assert(io)
 STATIC void    S_exec_failed(pTHX_ const char *cmd, int fd, int do_report);
 #define PERL_ARGS_ASSERT_EXEC_FAILED   \
        assert(cmd)
index 7c83cbe..d0eac72 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -10214,11 +10214,13 @@ Additionally all decimal digits must come from the same consecutive sequence of
 
 For example, if all the characters in the sequence are Greek, or Common, or
 Inherited, this function will return TRUE, provided any decimal digits in it
-are the ASCII digits "0".."9".  For scripts (unlike Greek) that have their own
-digits defined this will accept either digits from that set or from 0..9, but
-not a combination of the two.  Some scripts, such as Arabic, have more than one
-set of digits.  All digits must come from the same set for this function to
-return TRUE.
+are from the same block of digits in Common.  (These are the ASCII digits
+"0".."9" and additionally a block for full width forms of these, and several
+others used in mathematical notation.)   For scripts (unlike Greek) that have
+their own digits defined this will accept either digits from that set or from
+one of the Common digit sets, but not a combination of the two.  Some scripts,
+such as Arabic, have more than one set of digits.  All digits must come from
+the same set for this function to return TRUE.
 
 C<*ret_script>, if C<ret_script> is not NULL, will on return of TRUE
 contain the script found, using the C<SCX_enum> typedef.  Its value will be
@@ -10259,17 +10261,6 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
      * These are all defined in charclass_invlists.h */
 
     /* XXX Here are the additional things UTS 39 says could be done:
-     * Mark Chinese strings as “mixed script” if they contain both simplified
-     * (S) and traditional (T) Chinese characters, using the Unihan data in the
-     * Unicode Character Database [UCD].  The criterion can only be applied if
-     * the language of the string is known to be Chinese. So, for example, the
-     * string “写真だけの結婚式 ” is Japanese, and should not be marked as
-     * mixed script because of a mixture of S and T characters.  Testing for
-     * whether a character is S or T needs to be based not on whether the
-     * character has a S or T variant , but whether the character is an S or T
-     * variant. khw notes that the sample contains a Hiragana character, and it
-     * is unclear if absence of any foreign script marks the script as
-     * "Chinese"
      *
      * Forbid sequences of the same nonspacing mark
      *
@@ -10277,13 +10268,16 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
      * characters for at least one language in the Unicode Common Locale Data
      * Repository [CLDR]. */
 
+    dVAR;
 
     /* Things that match /\d/u */
     SV * decimals_invlist = PL_XPosix_ptrs[_CC_DIGIT];
     UV * decimals_array = invlist_array(decimals_invlist);
 
-    /* What code point is the digit '0' of the script run? */
+    /* What code point is the digit '0' of the script run? (0 meaning FALSE if
+     * not currently known) */
     UV zero_of_run = 0;
+
     SCX_enum script_of_run  = SCX_INVALID;   /* Illegal value */
     SCX_enum script_of_char = SCX_INVALID;
 
@@ -10293,8 +10287,6 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
     PERL_UINT_FAST8_T intersection_len = 0;
 
     bool retval = TRUE;
-
-    /* This is supposed to be a return parameter, but currently unused */
     SCX_enum * ret_script = NULL;
 
     assert(send >= s);
@@ -10302,7 +10294,8 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
     PERL_ARGS_ASSERT_ISSCRIPT_RUN;
 
     /* All code points in 0..255 are either Common or Latin, so must be a
-     * script run.  We can special case it */
+     * script run.  We can return immediately unless we need to know which
+     * script it is. */
     if (! utf8_target && LIKELY(send > s)) {
         if (ret_script == NULL) {
             return TRUE;
@@ -10316,26 +10309,29 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
             }
         }
 
-        /* If all are Common ... */
+        /* Here, all are Common */
         *ret_script = SCX_Common;
         return TRUE;
     }
 
     /* Look at each character in the sequence */
     while (s < send) {
+        /* If the current character being examined is a digit, this is the code
+         * point of the zero for its sequence of 10 */
+        UV zero_of_char;
+
         UV cp;
 
         /* The code allows all scripts to use the ASCII digits.  This is
-         * because they are used in commerce even in scripts that have their
-         * own set.  Hence any ASCII ones found are ok, unless a digit from
-         * another set has already been encountered.  (The other digit ranges
-         * in Common are not similarly blessed) */
+         * because they are in the Common script.  Hence any ASCII ones found
+         * are ok, unless and until a digit from another set has already been
+         * encountered.  digit ranges in Common are not similarly blessed) */
         if (UNLIKELY(isDIGIT(*s))) {
             if (UNLIKELY(script_of_run == SCX_Unknown)) {
                 retval = FALSE;
                 break;
             }
-            if (zero_of_run > 0) {
+            if (zero_of_run) {
                 if (zero_of_run != '0') {
                     retval = FALSE;
                     break;
@@ -10361,7 +10357,7 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
         /* If is within the range [+0 .. +9] of the script's zero, it also is a
          * digit in that script.  We can skip the rest of this code for this
          * character. */
-        if (UNLIKELY(   zero_of_run > 0
+        if (UNLIKELY(   zero_of_run
                      && cp >= zero_of_run
                      && cp - zero_of_run <= 9))
         {
@@ -10423,35 +10419,16 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
         /* If the run so far is Common, and the new character isn't, change the
          * run's script to that of this character */
         if (script_of_run == SCX_Common && script_of_char != SCX_Common) {
-
-            /* But Common contains several sets of digits.  Only the '0' set
-             * can be part of another script. */
-            if (zero_of_run > 0 && zero_of_run != '0') {
-                retval = FALSE;
-                break;
-            }
-
             script_of_run = script_of_char;
         }
 
-        /* All decimal digits must be from the same sequence of 10.  Above, we
-         * handled any ASCII digits without descending to here.  We also
-         * handled the case where we already knew what digit sequence is the
-         * one to use, and the character is in that sequence.  Now that we know
-         * the script, we can use script_zeros[] to directly find which
-         * sequence the script uses, except in a few cases it returns 0 */
-        if (UNLIKELY(zero_of_run == 0) && script_of_char >= 0) {
-            zero_of_run = script_zeros[script_of_char];
-        }
-
-        /* Now we can see if the script of the character is the same as that of
-         * the run */
+        /* Now we can see if the script of the new character is the same as
+         * that of the run */
         if (LIKELY(script_of_char == script_of_run)) {
             /* By far the most common case */
             goto scripts_match;
         }
 
-
         /* Here, the script of the run isn't Common.  But characters in Common
          * match any script */
         if (script_of_char == SCX_Common) {
@@ -10601,54 +10578,53 @@ Perl_isSCRIPT_RUN(pTHX_ const U8 * s, const U8 * send, const bool utf8_target)
         /* Here, the script of the character is compatible with that of the
          * run.  That means that in most cases, it continues the script run.
          * Either it and the run match exactly, or one or both can be in any of
-         * several scripts, and the intersection is not empty.  But if the
-         * character is a decimal digit, we need further handling.  If we
-         * haven't seen a digit before, it would establish what set of 10 all
-         * must come from; and if we have established a set, we need to check
-         * that this is in it.
-         *
-         * But there are cases we can rule out without having to look up if
-         * this is a digit:
-         *   a.  All instances of [0-9] have been dealt with earlier.
-         *   b.  The next digit encoded by Unicode is 1600 code points further
-         *       on, so if the code point in this loop iteration is less than
-         *       that, it isn't a digit.
-         *   c.  Most scripts that have digits have a single set of 10.  If
-         *       we've encountered a digit in such a script, 'zero_of_run' is
-         *       set to the code point (call it z) whose numeric value is 0.
-         *       If the code point in this loop iteration is in the range
-         *       z..z+9, it is in the script's set of 10, and we've actually
-         *       handled it earlier in this function and won't reach this
-         *       point.  But, code points in that script that aren't in that
-         *       range can't be digits, so we don't have to look any such up.
-         *       We can tell if this script is such a one by looking at
-         *       'script_zeros[]' for it.  It is non-zero iff it has a single
-         *       set of digits.  This rule doesn't apply if we haven't narrowed
-         *       down the possible scripts to a single one yet.  Nor if the
-         *       zero of the run is '0', as that also hasn't narrowed things
-         *       down completely */
-        if (    cp >= FIRST_NON_ASCII_DECIMAL_DIGIT
-            && (   intersection
-                || script_of_char < 0   /* Also implies an intersection */
-                || zero_of_run == '0'
-                || script_zeros[script_of_char] == 0))
+         * several scripts, and the intersection is not empty.  However, if the
+         * character is a decimal digit, it could still mean failure if it is
+         * from the wrong sequence of 10.  So, we need to look at if it's a
+         * digit.  We've already handled the 10 decimal digits, and the next
+         * lowest one is this one: */
+        if (cp < FIRST_NON_ASCII_DECIMAL_DIGIT) {
+            continue;   /* Not a digit; this character is part of the run */
+        }
+
+        /* If we have a definitive '0' for the script of this character, we
+         * know that for this to be a digit, it must be in the range of +0..+9
+         * of that zero. */
+        if (   script_of_char >= 0
+            && (zero_of_char = script_zeros[script_of_char]))
         {
-            SSize_t range_zero_index;
-            range_zero_index = _invlist_search(decimals_invlist, cp);
-            if (   LIKELY(range_zero_index >= 0)
-                && ELEMENT_RANGE_MATCHES_INVLIST(range_zero_index))
+            if (   cp < zero_of_char
+                || cp > zero_of_char + 9)
             {
-                UV range_zero = decimals_array[range_zero_index];
-                if (zero_of_run) {
-                    if (zero_of_run != range_zero) {
-                        retval = FALSE;
-                        break;
-                    }
-                }
-                else {
-                    zero_of_run = range_zero;
-                }
+                continue;   /* Not a digit; this character is part of the run
+                             */
+            }
+
+        }
+        else {  /* Need to look up if this character is a digit or not */
+            SSize_t index_of_zero_of_char;
+            index_of_zero_of_char = _invlist_search(decimals_invlist, cp);
+            if (     UNLIKELY(index_of_zero_of_char < 0)
+                || ! ELEMENT_RANGE_MATCHES_INVLIST(index_of_zero_of_char))
+            {
+                continue;   /* Not a digit; this character is part of the run.
+                             */
             }
+
+            zero_of_char = decimals_array[index_of_zero_of_char];
+        }
+
+        /* Here, the character is a decimal digit, and the zero of its sequence
+         * of 10 is in 'zero_of_char'.  If we already have a zero for this run,
+         * they better be the same. */
+        if (zero_of_run) {
+            if (zero_of_run != zero_of_char) {
+                retval = FALSE;
+                break;
+            }
+        }
+        else {  /* Otherwise we now have a zero for this run */
+            zero_of_run = zero_of_char;
         }
     } /* end of looping through CLOSESR text */
 
diff --git a/sv.c b/sv.c
index 07865bb..94cb2a7 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -10810,8 +10810,8 @@ Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
 /*
 =for apidoc sv_catpvf
 
-Processes its arguments like C<sv_catpvfn>, and appends the formatted
-output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
+Processes its arguments like C<sprintf>, and appends the formatted
+output to an SV.  As with C<sv_vcatpvfn> called with a non-null C-style
 variable argument list, argument reordering is not supported.
 If the appended data contains "wide" characters
 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
@@ -10837,7 +10837,7 @@ Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
 /*
 =for apidoc sv_vcatpvf
 
-Processes its arguments like C<sv_catpvfn> called with a non-null C-style
+Processes its arguments like C<sv_vcatpvfn> called with a non-null C-style
 variable argument list, and appends the formatted output
 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
 
@@ -11985,7 +11985,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
            if (*q == '$') {
                 if (args)
                     Perl_croak_nocontext(
-                        "Cannot yet reorder sv_catpvfn() arguments from va_list");
+                        "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
                ++q;
                efix = (Size_t)width;
                 width = 0;
@@ -12053,7 +12053,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                if (*q++ == '$') {
                     if (args)
                         Perl_croak_nocontext(
-                            "Cannot yet reorder sv_catpvfn() arguments from va_list");
+                            "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
                     no_redundant_warning = TRUE;
                 } else
                    goto unknown;
@@ -12138,7 +12138,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
                     if (*q++ == '$') {
                         if (args)
                             Perl_croak_nocontext(
-                                "Cannot yet reorder sv_catpvfn() arguments from va_list");
+                                "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
                         no_redundant_warning = TRUE;
                     } else
                         goto unknown;
index 98159e0..0403cd9 100644 (file)
@@ -5,7 +5,7 @@ require './test.pl';
 
 $^I = $^O eq 'VMS' ? '_bak' : '.bak';
 
-plan( tests => 6 );
+plan( tests => 8 );
 
 my @tfiles     = (tempfile(), tempfile(), tempfile());
 my @tfiles_bak = map "$_$^I", @tfiles;
@@ -91,3 +91,29 @@ SKIP:
     
     END { unlink_all(@ifiles); }
 }
+
+{
+    my @tests =
+      ( # opts, code, result, name, $TODO
+       [ "-n", "die", "bar\n", "die shouldn't touch file" ],
+       [ "-n", "last", "", "last should update file" ],
+      );
+    our $file = tempfile() ;
+
+    for my $test (@tests) {
+        (my ($opts, $code, $result, $name), our $TODO) = @$test;
+        open my $fh, ">", $file or die;
+        print $fh "bar\n";
+        close $fh;
+
+        runperl( prog => $code,
+                 switches => [ grep length, "-i", $opts ],
+                 args => [ $file ],
+                 stderr => 1, # discarded
+               );
+        open $fh, "<", $file or die;
+        my $data = do { local $/; <$fh>; };
+        close $fh;
+        is($data, $result, $name);
+    }
+}
index 1d45a3f..a385290 100644 (file)
@@ -480,3 +480,12 @@ Bareword found where operator expected at - line 2, near "2p0"
        (Missing operator before p0?)
 syntax error at - line 2, near "2p0"
 Execution of - aborted due to compilation errors.
+########
+# NAME [perl #132158] format with syntax errors
+format=
+@
+=h
+=cut
+EXPECT
+syntax error at - line 4, next token ???
+Execution of - aborted due to compilation errors.
index a114180..f34fbd8 100644 (file)
@@ -5,7 +5,7 @@ BEGIN {
     require "./test.pl";
 }
 
-plan(124);
+plan(126);
 
 # A lot of tests to check that reversed for works.
 
@@ -664,3 +664,17 @@ is(fscope(), 1, 'return via loop in sub');
     }
     is($foo, "outside", "RT #123994 array outside");
 }
+
+# RT #133558 'reverse' under AIX was causing loop to terminate
+# immediately, probably due to compiler bug
+
+{
+    my @a = qw(foo);
+    my @b;
+    push @b, $_ for (reverse @a);
+    is "@b", "foo", " RT #133558 reverse array";
+
+    @b = ();
+    push @b, $_ for (reverse 'bar');
+    is "@b", "bar", " RT #133558 reverse list";
+}
index cf0e286..bb9f865 100644 (file)
@@ -12,7 +12,7 @@ my $no_endianness = $] > 5.009 ? '' :
 my $no_signedness = $] > 5.009 ? '' :
   "Signed/unsigned pack modifiers not available on this perl";
 
-plan tests => 14717;
+plan tests => 14718;
 
 use strict;
 use warnings qw(FATAL all);
@@ -2081,3 +2081,10 @@ SKIP:
     fresh_perl_like('pack "c10f1073741824"', qr/Out of memory during pack/, { stderr => 1 },
                    "integer overflow calculating allocation (multiply)");
 }
+
+{
+    # [perl #132655] heap-buffer-overflow READ of size 11
+    # only expect failure under ASAN (and maybe valgrind)
+    fresh_perl_is('0.0 + unpack("u", "ab")', "", { stderr => 1 },
+                  "ensure unpack u of invalid data nul terminates result");
+}
index 9789166..fa7ce06 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     set_up_inc( '../lib' );
 }
 
-plan(tests => 49);
+plan(tests => 50);
 
 # compile time
 
@@ -192,3 +192,85 @@ fresh_perl_like(
 
 eval q{() = (() or ((0) x 0)); 1};
 is($@, "", "RT #130247");
+
+# yes, the newlines matter
+fresh_perl_is(<<'PERL', "", { stderr => 1 }, "(perl #133778) MARK mishandling");
+map{s[][];eval;0}<DATA>__END__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+()x0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0
+PERL
index 10c7103..4b098c5 100644 (file)
@@ -51,8 +51,8 @@ foreach my $type ('script_run', 'sr', 'atomic_script_run', 'asr') {
     unlike("\N{HEBREW LETTER ALEF}\N{HEBREW LETTER TAV}\N{MODIFIER LETTER SMALL Y}", $script_run, "Hebrew then Latin isn't a script run");
     like("9876543210\N{DESERET SMALL LETTER WU}", $script_run, "0-9 are the digits for Deseret");
     like("\N{DESERET SMALL LETTER WU}9876543210", $script_run, "Also when they aren't in the initial position");
-    unlike("\N{DESERET SMALL LETTER WU}\N{FULLWIDTH DIGIT FIVE}", $script_run, "Fullwidth digits aren't the digits for Deseret");
-    unlike("\N{FULLWIDTH DIGIT SIX}\N{DESERET SMALL LETTER LONG I}", $script_run, "... likewise if the digits come first");
+    like("\N{DESERET SMALL LETTER WU}\N{FULLWIDTH DIGIT FIVE}", $script_run, "Fullwidth digits may be digits for Deseret");
+    like("\N{FULLWIDTH DIGIT SIX}\N{DESERET SMALL LETTER LONG I}", $script_run, "... likewise if the digits come first");
 
     like("1234567890\N{ARABIC LETTER ALEF}", $script_run, "[0-9] work for Arabic");
     unlike("1234567890\N{ARABIC LETTER ALEF}\N{ARABIC-INDIC DIGIT FOUR}\N{ARABIC-INDIC DIGIT FIVE}", $script_run, "... but not in combination with real ARABIC digits");
@@ -97,4 +97,19 @@ foreach my $type ('script_run', 'sr', 'atomic_script_run', 'asr') {
       like("abc", qr/(*asr:a[bc]*c)/, "Outer asr works on a run");
     unlike("abc", qr/(*asr:a(*asr:[bc]*)c)/, "Nested asr works to exclude some things");
 
+    like("A\x{ff10}\x{ff19}B", qr/^(*sr:.{4})/,
+         "Non-ASCII Common digits work with Latin"); # perl #133547
+    like("A\x{ff10}BC", qr/^(*sr:.{4})/,
+         "Non-ASCII Common digits work with Latin"); # perl #133547
+    like("A\x{1d7ce}\x{1d7cf}B", qr/^(*sr:.{4})/,
+         "Non-ASCII Common digits work with Latin"); # perl #133547
+    like("A\x{1d7ce}BC", qr/^(*sr:.{4})/,
+         "Non-ASCII Common digits work with Latin"); # perl #133547
+    like("\x{1d7ce}\x{1d7cf}AB", qr/^(*sr:.{4})/,
+         "Non-ASCII Common digits work with Latin"); # perl #133547
+    like("α\x{1d7ce}βγ", qr/^(*sr:.{4})/,
+         "Non-ASCII Common digits work with Greek"); # perl #133547
+    like("\x{1d7ce}αβγ", qr/^(*sr:.{4})/,
+         "Non-ASCII Common digits work with Greek"); # perl #133547
+
 done_testing();
index dd62e95..d0fb048 100644 (file)
@@ -11,7 +11,7 @@ BEGIN {
     require './loc_tools.pl';
 }
 
-plan(tests => 276);
+plan(tests => 277);
 
 $_ = 'david';
 $a = s/david/rules/r;
@@ -1174,5 +1174,6 @@ __EOF__
     is $lines, 4, "RT #131930";
 }
 
-
-
+{
+    fresh_perl_is("s//00000000000format            \0          '0000000\\x{800}/;eval", "", {}, "RT #133882");
+}
index 7ccef1e..594cad6 100644 (file)
@@ -429,7 +429,7 @@ __EOF__
 
     # exit or die should leave original content in file
     for my $inplace (qw/-i -i.bak/) {
-        for my $prog (qw/die exit/) {
+        for my $prog ("die", "exit 1") {
             open my $fh, ">", $work or die "$0: failed to open '$work': $!";
             print $fh $yada;
             close $fh or die "Failed to close: $!";
@@ -443,7 +443,7 @@ __EOF__
             my $data = do { local $/; <$in> };
             close $in;
             is ($data, $yada, "check original content still in file");
-            unlink $work;
+            unlink $work, "$work.bak";
         }
     }
 
diff --git a/toke.c b/toke.c
index fc87252..622873d 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -1829,14 +1829,14 @@ S_incline(pTHX_ const char *s, const char *end)
                    }
                    else if (GvAV(cfgv)) {
                        AV * const av = GvAV(cfgv);
-                       const I32 start = CopLINE(PL_curcop)+1;
-                       I32 items = AvFILLp(av) - start;
+                       const line_t start = CopLINE(PL_curcop)+1;
+                       SSize_t items = AvFILLp(av) - start;
                        if (items > 0) {
                            AV * const av2 = GvAVn(gv2);
                            SV **svp = AvARRAY(av) + start;
-                           I32 l = (I32)line_num+1;
-                           while (items--)
-                               av_store(av2, l++, SvREFCNT_inc(*svp++));
+                           Size_t l = line_num+1;
+                           while (items-- && l < SSize_t_MAX && l == (line_t)l)
+                               av_store(av2, (SSize_t)l++, SvREFCNT_inc(*svp++));
                        }
                    }
                }
@@ -2068,6 +2068,7 @@ S_newSV_maybe_utf8(pTHX_ const char *const start, STRLEN len)
     SV * const sv = newSVpvn_utf8(start, len,
                     ! IN_BYTES
                   &&  UTF
+                  &&  len != 0
                   &&  is_utf8_non_invariant_string((const U8*)start, len));
     return sv;
 }
@@ -5099,6 +5100,14 @@ Perl_yylex(pTHX)
 
        return yylex();
     case LEX_FORMLINE:
+        if (PL_parser->sub_error_count != PL_error_count) {
+            /* There was an error parsing a formline, which tends to
+               mess up the parser.
+               Unlike interpolated sub-parsing, we can't treat any of
+               these as recoverable, so no need to check sub_no_recover.
+            */
+            yyquit();
+        }
        assert(PL_lex_formbrack);
        s = scan_formline(PL_bufptr);
        if (!PL_lex_formbrack)
@@ -6518,6 +6527,7 @@ Perl_yylex(pTHX)
                SAVEI32(PL_lex_formbrack);
                PL_parser->form_lex_state = PL_lex_state;
                PL_lex_formbrack = PL_lex_brackets + 1;
+                PL_parser->sub_error_count = PL_error_count;
                goto leftbracket;
            }
        }
diff --git a/util.c b/util.c
index 842cc95..25b5c66 100644 (file)
--- a/util.c
+++ b/util.c
@@ -2302,8 +2302,10 @@ Perl_my_popen_list(pTHX_ const char *mode, int n, SV **args)
            if (p[THAT] != (*mode == 'r'))      /* if dup2() didn't close it */
                PerlLIO_close(p[THAT]); /* close parent's end of _the_ pipe */
        }
-       else
+       else {
+           setfd_cloexec_or_inhexec_by_sysfdness(p[THIS]);
            PerlLIO_close(p[THAT]);     /* close parent's end of _the_ pipe */
+        }
 #if !defined(HAS_FCNTL) || !defined(F_SETFD)
        /* No automatic close - do it by hand */
 #  ifndef NOFILE
@@ -2441,8 +2443,10 @@ Perl_my_popen(pTHX_ const char *cmd, const char *mode)
            if (p[THAT] != (*mode == 'r'))      /* if dup2() didn't close it */
                PerlLIO_close(p[THAT]);
        }
-       else
+       else {
+           setfd_cloexec_or_inhexec_by_sysfdness(p[THIS]);
            PerlLIO_close(p[THAT]);
+       }
 #ifndef OS2
        if (doexec) {
 #if !defined(HAS_FCNTL) || !defined(F_SETFD)
index 6da3727..06a3a15 100644 (file)
@@ -307,7 +307,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5)
 extra.pods : miniperl
        @ @extra_pods.com
 
-PERLDELTA_CURRENT = [.pod]perl5281delta.pod
+PERLDELTA_CURRENT = [.pod]perl5282delta.pod
 
 $(PERLDELTA_CURRENT) : [.pod]perldelta.pod
        Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
index 05193a1..200d8a5 100644 (file)
@@ -64,7 +64,7 @@ INST_TOP := $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      := \5.28.1
+#INST_VER      := \5.28.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -722,6 +722,15 @@ else ifeq ($(CCTYPE),MSVC141)
 DEFINES                += -D_WINSOCK_DEPRECATED_NO_WARNINGS
 endif
 
+# The Windows Server 2003 SP1 SDK compiler only defines _configthreadlocale() if
+# _MT is defined, i.e. when using /MT (the LIBCMT.lib version of the CRT), which
+# the perl build doesn't use. We therefore specify NO_THREAD_SAFE_LOCALE so that
+# perl.h doesn't set USE_THREAD_SAFE_LOCALE, which it otherwise would do since
+# _MSC_VER is 1400 for this compiler (as per MSVC80).
+ifeq ($(CCTYPE),SDK2003SP1)
+DEFINES                += -DNO_THREAD_SAFE_LOCALE
+endif
+
 # In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
 # 64-bit, even in 32-bit mode.  It also provides the _USE_32BIT_TIME_T
 # preprocessor option to revert back to the old functionality for
@@ -1679,7 +1688,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5281delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5282delta.pod
        $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1777,7 +1786,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5281delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5282delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
index 1e245f7..481fcd8 100644 (file)
@@ -38,7 +38,7 @@ INST_TOP      = $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      = \5.28.1
+#INST_VER      = \5.28.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -553,6 +553,15 @@ DEFINES            = $(DEFINES) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
 DEFINES                = $(DEFINES) -D_WINSOCK_DEPRECATED_NO_WARNINGS
 !ENDIF
 
+# The Windows Server 2003 SP1 SDK compiler only defines _configthreadlocale() if
+# _MT is defined, i.e. when using /MT (the LIBCMT.lib version of the CRT), which
+# the perl build doesn't use. We therefore specify NO_THREAD_SAFE_LOCALE so that
+# perl.h doesn't set USE_THREAD_SAFE_LOCALE, which it otherwise would do since
+# _MSC_VER is 1400 for this compiler (as per MSVC80).
+!IF "$(CCTYPE)" == "SDK2003SP1"
+DEFINES                = $(DEFINES) -DNO_THREAD_SAFE_LOCALE
+!ENDIF
+
 # In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
 # 64-bit, even in 32-bit mode.  It also provides the _USE_32BIT_TIME_T
 # preprocessor option to revert back to the old functionality for
@@ -1282,7 +1291,7 @@ utils: $(PERLEXE) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5281delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5282delta.pod
        cd ..\win32
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
@@ -1382,7 +1391,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5281delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5282delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
index a6072a9..7dae753 100644 (file)
@@ -45,7 +45,7 @@ INST_TOP      *= $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      *= \5.28.1
+#INST_VER      *= \5.28.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -695,6 +695,15 @@ DEFINES            += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
 DEFINES                += -D_WINSOCK_DEPRECATED_NO_WARNINGS
 .ENDIF
 
+# The Windows Server 2003 SP1 SDK compiler only defines _configthreadlocale() if
+# _MT is defined, i.e. when using /MT (the LIBCMT.lib version of the CRT), which
+# the perl build doesn't use. We therefore specify NO_THREAD_SAFE_LOCALE so that
+# perl.h doesn't set USE_THREAD_SAFE_LOCALE, which it otherwise would do since
+# _MSC_VER is 1400 for this compiler (as per MSVC80).
+.IF "$(CCTYPE)" == "SDK2003SP1"
+DEFINES                += -DNO_THREAD_SAFE_LOCALE
+.ENDIF
+
 # In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
 # 64-bit, even in 32-bit mode.  It also provides the _USE_32BIT_TIME_T
 # preprocessor option to revert back to the old functionality for
@@ -1622,7 +1631,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5281delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5282delta.pod
        $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1720,7 +1729,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5281delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5282delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
index 06efaf3..5ed00c0 100644 (file)
@@ -53,8 +53,10 @@ POD = perl.pod       \
        perl5260delta.pod       \
        perl5261delta.pod       \
        perl5262delta.pod       \
+       perl5263delta.pod       \
        perl5280delta.pod       \
        perl5281delta.pod       \
+       perl5282delta.pod       \
        perl561delta.pod        \
        perl56delta.pod \
        perl581delta.pod        \
@@ -203,8 +205,10 @@ MAN = perl.man     \
        perl5260delta.man       \
        perl5261delta.man       \
        perl5262delta.man       \
+       perl5263delta.man       \
        perl5280delta.man       \
        perl5281delta.man       \
+       perl5282delta.man       \
        perl561delta.man        \
        perl56delta.man \
        perl581delta.man        \
@@ -353,8 +357,10 @@ HTML = perl.html   \
        perl5260delta.html      \
        perl5261delta.html      \
        perl5262delta.html      \
+       perl5263delta.html      \
        perl5280delta.html      \
        perl5281delta.html      \
+       perl5282delta.html      \
        perl561delta.html       \
        perl56delta.html        \
        perl581delta.html       \
@@ -503,8 +509,10 @@ TEX = perl.tex     \
        perl5260delta.tex       \
        perl5261delta.tex       \
        perl5262delta.tex       \
+       perl5263delta.tex       \
        perl5280delta.tex       \
        perl5281delta.tex       \
+       perl5282delta.tex       \
        perl561delta.tex        \
        perl56delta.tex \
        perl581delta.tex        \