use64bitint=''
usecbacktrace=''
dtrace=''
+dtraceobject=''
usedtrace=''
usefaststdio=''
usekernprocpathname=''
: set usesocks on the Configure command line to enable socks.
: List of libraries we want.
: If anyone needs extra -lxxx, put those in a hint file.
-libswanted="cl pthread socket bind inet nsl nm ndbm gdbm dbm db malloc dl ld"
+libswanted="cl pthread socket bind inet nsl ndbm gdbm dbm db malloc dl ld"
libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD"
: We probably want to search /usr/shlib before most other libraries.
: This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
}
#endif
/* For alignment 32-bit platforms have the 80 bits in 12 bytes,
- * while 64-bits platforms have it in 16 bytes. */
+ * while 64-bits platforms have it in 16 bytes. The trailing bytes
+ * cannot be trusted. */
#if LDBL_MANT_DIG == 64 && (LONGDBLSIZE == 16 || LONGDBLSIZE == 12)
- if (b[0] == 0xCD && b[9] == 0xBF && b[10] == 0x00) {
+ if (b[0] == 0xCD && b[9] == 0xBF) {
/* x86 80-bit little-endian, sizeof 12 (ILP32, Solaris x86)
* or 16 (LP64, Linux and OS X), 4 or 6 bytes of padding.
* Also known as "extended precision". */
printf("3\n");
exit(0);
}
- if (b[0] == 0xBF && b[9] == 0xCD && b[10] == 0x00) {
+ if (b[0] == 0xBF && b[9] == 0xCD) {
/* is there ever big-endian 80-bit, really? */
printf("4\n");
exit(0);
/* software "double double", the 106 is 53+53.
* but irix thinks it is 107. */
if (b[0] == 0x9A && b[7] == 0x3C && b[8] == 0x9A && b[15] == 0xBF) {
- /* double double 128-bit little-endian,
+ /* double double 128-bit fully little-endian,
+ * little-endian doubles in little-endian order,
* 9a 99 99 99 99 99 59 3c 9a 99 99 99 99 99 b9 bf */
printf("5\n");
exit(0);
}
if (b[0] == 0xBF && b[7] == 0x9A && b[8] == 0x3C && b[15] == 0x9A) {
- /* double double 128-bit big-endian, e.g. PPC/Power and MIPS:
+ /* double double 128-bit fully big-endian,
+ * big-endian doubles in big-endian order,
+ * e.g. PPC/Power and MIPS:
* bf b9 99 99 99 99 99 9a 3c 59 99 99 99 99 99 9a */
printf("6\n");
exit(0);
}
+ if (b[0] == 0x9A && b[7] == 0xBF && b[8] == 0x9A && b[15] == 0x3C) {
+ /* double double 128-bit mixed endian.
+ * little-endian doubles in big-endian order,
+ * e.g. ppc64el,
+ * 9a 99 99 99 99 99 b9 bf 9a 99 99 99 99 99 59 3c */
+ printf("7\n");
+ exit(0);
+ }
+ if (b[0] == 0x3C && b[7] == 0x9A && b[8] == 0xBF && b[15] == 0x9A) {
+ /* double double 128-bit mixed endian,
+ * big-endian doubles in little-endian order,
+ * 3c 59 99 99 99 99 99 9a bf b9 99 99 99 99 99 9a */
+ printf("8\n");
+ exit(0);
+ }
#endif
printf("-1\n"); /* unknown */
exit(0);
2) echo "You have IEEE 754 128-bit big endian long doubles." >&4 ;;
3) echo "You have x86 80-bit little endian long doubles." >& 4 ;;
4) echo "You have x86 80-bit big endian long doubles." >& 4 ;;
-5) echo "You have 128-bit little-endian double-double long doubles." >& 4 ;;
-6) echo "You have 128-bit big-endian double-double long doubles." >& 4 ;;
+5) echo "You have 128-bit fully little-endian double-double long doubles (64-bit LEs in LE)." >& 4 ;;
+6) echo "You have 128-bit fully big-endian double-double long doubles (64-bit BEs in BE)." >& 4 ;;
+7) echo "You have 128-bit mixed double-double long doubles (64-bit LEs in BE)." >& 4 ;;
+8) echo "You have 128-bit mixed double-double long doubles (64-bit BEs in LE)." >& 4 ;;
*) echo "Cannot figure out your long double." >&4 ;;
esac
$rm_try
esac
done
+case "$usedtrace" in
+$define)
+ case "$dtraceobject" in
+ $define|true|[yY]*)
+ dtraceobject=$define
+ ;;
+ ' '|'')
+ $dtrace -h -s ../perldtrace.d -o perldtrace.h
+ $cat >try.c <<EOM
+#include "perldtrace.h"
+int main(void) {
+ PERL_LOADED_FILE("dummy");
+ return 0;
+}
+EOM
+ dtraceobject=$undef
+ if $cc -c -o try.o $optimize $ccflags try.c \
+ && $dtrace -G -s ../perldtrace.d try.o ; then
+ dtraceobject=$define
+ echo "Your dtrace builds an object file"
+ fi
+ $rm -f try.c try.o perldtrace.o
+ ;;
+ *) dtraceobject=$undef ;;
+ esac
+esac
+
: See if we want extra modules installed
echo " "
case "$extras" in
: add -D_FORTIFY_SOURCE if feasible and not already there
case "$gccversion" in
-4.*) case "$optimize$ccflags" in
+[45].*) case "$optimize$ccflags" in
*-O*) case "$ccflags$cppsymbols" in
*_FORTIFY_SOURCE=*) # Don't add it again.
echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4
;;
esac
;;
- *) echo "You have gcc 4.* but not optimizing, not adding -D_FORTIFY_SOURCE." >&4
+ *) echo "You have gcc 4.* or later but not optimizing, not adding -D_FORTIFY_SOURCE." >&4
;;
esac
;;
-*) echo "You seem not to have gcc 4.*, not adding -D_FORTIFY_SOURCE." >&4
+*) echo "You seem not to have gcc 4.* or later, not adding -D_FORTIFY_SOURCE." >&4
;;
esac
drand01='$drand01'
drand48_r_proto='$drand48_r_proto'
dtrace='$dtrace'
+dtraceobject='$dtraceobject'
dynamic_ext='$dynamic_ext'
eagain='$eagain'
ebcdic='$ebcdic'
api_version='22'
api_versionstring='5.22.0'
ar='ar'
-archlib='/usr/lib/perl5/5.22.1/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.22.1/armv4l-linux'
+archlib='/usr/lib/perl5/5.22.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.22.2/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
cat='cat'
cc='cc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.22.1/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.22.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'
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.22.1/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.22.2/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
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.22.1'
+installprivlib='./install_me_here/usr/lib/perl5/5.22.2'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.22.1/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.22.2/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.22.1'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.22.2'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.22.1'
-privlibexp='/usr/lib/perl5/5.22.1'
+privlib='/usr/lib/perl5/5.22.2'
+privlibexp='/usr/lib/perl5/5.22.2'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
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.22.1/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.22.1/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.22.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.22.2/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.22.1'
+sitelib='/usr/lib/perl5/site_perl/5.22.2'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.22.1'
+sitelibexp='/usr/lib/perl5/site_perl/5.22.2'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='1'
+subversion='2'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.22.1'
-version_patchlevel_string='version 22 subversion 1'
+version='5.22.2'
+version_patchlevel_string='version 22 subversion 2'
versiononly='undef'
vi=''
xlibpth='/usr/lib/386 /lib/386'
config_argc=0
PERL_REVISION=5
PERL_VERSION=22
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
PERL_API_REVISION=5
PERL_API_VERSION=22
PERL_API_SUBVERSION=0
api_version='22'
api_versionstring='5.22.0'
ar='ar'
-archlib='/usr/lib/perl5/5.22.1/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.22.1/armv4l-linux'
+archlib='/usr/lib/perl5/5.22.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.22.2/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
cat='cat'
cc='arm-none-linux-gnueabi-gcc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.22.1/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.22.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'
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.22.1/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.22.2/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
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.22.1'
+installprivlib='./install_me_here/usr/lib/perl5/5.22.2'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.22.1/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.22.2/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.22.1'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.22.2'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.22.1'
-privlibexp='/usr/lib/perl5/5.22.1'
+privlib='/usr/lib/perl5/5.22.2'
+privlibexp='/usr/lib/perl5/5.22.2'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
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.22.1/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.22.1/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.22.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.22.2/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.22.1'
+sitelib='/usr/lib/perl5/site_perl/5.22.2'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.22.1'
+sitelibexp='/usr/lib/perl5/site_perl/5.22.2'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='1'
+subversion='2'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.22.1'
-version_patchlevel_string='version 22 subversion 1'
+version='5.22.2'
+version_patchlevel_string='version 22 subversion 2'
versiononly='undef'
vi=''
xlibpth='/usr/lib/386 /lib/386'
config_argc=0
PERL_REVISION=5
PERL_VERSION=22
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
PERL_API_REVISION=5
PERL_API_VERSION=22
PERL_API_SUBVERSION=0
=item Directories for the perl distribution
-By default, Configure will use the following directories for 5.22.1.
+By default, Configure will use the following directories for 5.22.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
=head1 Coexistence with earlier versions of perl 5
-Perl 5.22.1 is not binary compatible with versions of Perl earlier than
+Perl 5.22.2 is not binary compatible with versions of Perl earlier than
5.22.0.
In other words, you will have to recompile your XS modules.
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.22.1
+ sh Configure -Dprefix=/opt/perl5.22.2
-and adding /opt/perl5.22.1/bin to the shell PATH variable. Such users
+and adding /opt/perl5.22.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.
=head2 Upgrading from 5.21.11 or earlier
-B<Perl 5.22.1 may not be binary compatible with Perl 5.21.11 or
+B<Perl 5.22.2 may not be binary compatible with Perl 5.21.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.22.1. If you find you do need to rebuild an extension with
-5.22.1, you may safely do so without disturbing the older
+used with 5.22.2. If you find you do need to rebuild an extension with
+5.22.2, you may safely do so without disturbing the older
installations. (See L<"Coexistence with earlier versions of perl 5">
above.)
print("$f\n");
}
-in Linux with perl-5.22.1 is as follows (under $Config{prefix}):
+in Linux with perl-5.22.2 is as follows (under $Config{prefix}):
./bin/perl
- ./lib/perl5/5.22.1/strict.pm
- ./lib/perl5/5.22.1/warnings.pm
- ./lib/perl5/5.22.1/i686-linux/File/Glob.pm
- ./lib/perl5/5.22.1/feature.pm
- ./lib/perl5/5.22.1/XSLoader.pm
- ./lib/perl5/5.22.1/i686-linux/auto/File/Glob/Glob.so
+ ./lib/perl5/5.22.2/strict.pm
+ ./lib/perl5/5.22.2/warnings.pm
+ ./lib/perl5/5.22.2/i686-linux/File/Glob.pm
+ ./lib/perl5/5.22.2/feature.pm
+ ./lib/perl5/5.22.2/XSLoader.pm
+ ./lib/perl5/5.22.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
ext/XS-APItest/t/utf8.t Tests for code in utf8.c
ext/XS-APItest/t/weaken.t XS::APItest: tests for sv_rvweaken() and sv_get_backrefs()
ext/XS-APItest/t/whichsig.t XS::APItest: tests for whichsig() and variants
+ext/XS-APItest/t/win32.t Test Win32 specific APIs
ext/XS-APItest/t/xs_special_subs_require.t for require too
ext/XS-APItest/t/xs_special_subs.t Test that XS BEGIN/CHECK/INIT/END work
ext/XS-APItest/t/xsub_h.t Tests for XSUB.h
pod/perl5202delta.pod Perl changes in version 5.20.2
pod/perl5203delta.pod Perl changes in version 5.20.3
pod/perl5220delta.pod Perl changes in version 5.22.0
+pod/perl5221delta.pod Perl changes in version 5.22.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
t/lib/croak/pp Test croak calls from pp.c
t/lib/croak/pp_ctl Test croak calls from pp_ctl.c
t/lib/croak/pp_hot Test croak calls from pp_hot.c
+t/lib/croak/pp_sys Test croak calls from pp_sys.c
t/lib/croak.t Test calls to Perl_croak() in the C source.
t/lib/croak/toke Test croak calls from toke.c
t/lib/cygwin.t Builtin cygwin function tests
t/uni/upper.t See if Unicode casing works
t/uni/variables.t See that the rules for variable names work
t/uni/write.t See if Unicode formats work
+t/win32/crypt.t Test Win32 crypt for compatibility
t/win32/fs.t Test Win32 link for compatibility
t/win32/popen.t Test for stdout races in backticks, etc
t/win32/runenv.t Test if Win* perl honors its env variables
"url" : "http://perl5.git.perl.org/"
}
},
- "version" : "5.022001"
+ "version" : "5.022002"
}
homepage: http://www.perl.org/
license: http://dev.perl.org/licenses/
repository: http://perl5.git.perl.org/
-version: '5.022001'
+version: '5.022002'
minidtrace_o=''
case "$usedtrace" in
define|true)
- dtrace_h='perldtrace.h'
- $dtrace -G -s perldtrace.d -o perldtrace.tmp >/dev/null 2>&1 \
- && rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)' \
- && minidtrace_o='miniperldtrace$(OBJ_EXT)'
+ dtrace_h='perldtrace.h'
+ case "$dtraceobject" in
+ define)
+ dtrace_o='perldtrace$(OBJ_EXT)'
+ minidtrace_o='miniperldtrace$(OBJ_EXT)'
+ ;;
+ esac
;;
esac
ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
obj = $(ndt_obj) $(DTRACE_O)
-perltoc_pod_prereqs = extra.pods pod/perl5221delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
+perltoc_pod_prereqs = extra.pods pod/perl5222delta.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
pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
$(MINIPERL) pod/perlmodlib.PL -q
-pod/perl5221delta.pod: pod/perldelta.pod
- $(RMS) pod/perl5221delta.pod
- $(LNS) perldelta.pod pod/perl5221delta.pod
+pod/perl5222delta.pod: pod/perldelta.pod
+ $(RMS) pod/perl5222delta.pod
+ $(LNS) perldelta.pod pod/perl5222delta.pod
extra.pods: $(MINIPERL_EXE)
-@test ! -f extra.pods || rm -f `cat extra.pods`
# Here comes the CW tools - TO BE FILLED TO BUILD WITH CW -
-MODULE_DESC = "Perl 5.22.1 for NetWare"
+MODULE_DESC = "Perl 5.22.2 for NetWare"
CCTYPE = CodeWarrior
C_COMPILER = mwccnlm -c
CPP_COMPILER = mwccnlm
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-INST_VER = \5.22.1
+INST_VER = \5.22.2
#
# Comment this out if you DON'T want your perl installation to have
* 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.22.1\\lib\\NetWare-x86-multi-thread" /**/
+#define ARCHLIB "c:\\perl\\5.22.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.22.1\\bin\\NetWare-x86-multi-thread" /**/
-#define BIN_EXP "c:\\perl\\5.22.1\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN "c:\\perl\\5.22.2\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN_EXP "c:\\perl\\5.22.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.22.1\\lib\\NetWare-x86-multi-thread" /**/
+#define SITEARCH "c:\\perl\\site\\5.22.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.22.1\\lib" /**/
+#define SITELIB "c:\\perl\\site\\5.22.2\\lib" /**/
/*#define SITELIB_EXP "" /**/
#define SITELIB_STEM "" /**/
doublekind (longdblfio.U):
This variable, if defined, encodes the type of a double:
- 1 = IEEE 754 32-bit big little endian,
- 2 = IEEE 754 32-bit big big endian,
- 3 = IEEE 754 64-bit big little endian,
- 4 = IEEE 754 64-bit big big endian,
- 5 = IEEE 754 128-bit big little endian,
- 6 = IEEE 754 128-bit big big endian,
- 7 = IEEE 754 64-bit big mixed endian le-be,
- 8 = IEEE 754 64-bit big mixed endian be-le,
+ 1 = IEEE 754 32-bit little endian,
+ 2 = IEEE 754 32-bit big endian,
+ 3 = IEEE 754 64-bit little endian,
+ 4 = IEEE 754 64-bit big endian,
+ 5 = IEEE 754 128-bit little endian,
+ 6 = IEEE 754 128-bit big endian,
+ 7 = IEEE 754 64-bit mixed endian le-be,
+ 8 = IEEE 754 64-bit mixed endian be-le,
-1 = unknown format.
doublesize (doublesize.U):
dtrace (usedtrace.U):
This variable holds the location of the dtrace executable.
+dtraceobject (usedtrace.U):
+ Whether we need to build an object file with the dtrace tool.
+
dynamic_ext (Extensions.U):
This variable holds a list of XS extension files we want to
link dynamically into the package. It is used by Makefile.
longdblkind (d_longdbl.U):
This variable, if defined, encodes the type of a long double:
- 0 = double, 1 = IEEE 754 128-bit big little endian,
- 2 = IEEE 754 128-bit big big endian, 3 = x86 80-bit little endian,
+ 0 = double, 1 = IEEE 754 128-bit little endian,
+ 2 = IEEE 754 128-bit big endian, 3 = x86 80-bit little endian,
4 = x86 80-bit big endian, 5 = double-double 128-bit little endian,
6 = double-double 128-bit big endian, -1 = unknown format.
dairiki\100dairiki.org dairiki at dairiki.org
dagolden\100cpan.org xdaveg\100gmail.com
++ xdg\100xdg.me
damian\100conway.org damian\100cs.monash.edu.au
dan\100sidhe.org sugalsd\100lbcc.cc.or.us
+ sugalskd\100osshe.edu
api_version='22'
api_versionstring='5.22.0'
ar='ar'
-archlib='/pro/lib/perl5/5.22.1/i686-linux-64int'
-archlibexp='/pro/lib/perl5/5.22.1/i686-linux-64int'
+archlib='/pro/lib/perl5/5.22.2/i686-linux-64int'
+archlibexp='/pro/lib/perl5/5.22.2/i686-linux-64int'
archname64='64int'
archname='i686-linux-64int'
archobjs=''
incpth='/usr/lib/gcc/i586-suse-linux/4.8/include /usr/local/include /usr/lib/gcc/i586-suse-linux/4.8/include-fixed /usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/include /usr/include'
inews=''
initialinstalllocation='/pro/bin'
-installarchlib='/pro/lib/perl5/5.22.1/i686-linux-64int'
+installarchlib='/pro/lib/perl5/5.22.2/i686-linux-64int'
installbin='/pro/bin'
installhtml1dir=''
installhtml3dir=''
installman3dir='/pro/local/man/man3'
installprefix='/pro'
installprefixexp='/pro'
-installprivlib='/pro/lib/perl5/5.22.1'
+installprivlib='/pro/lib/perl5/5.22.2'
installscript='/pro/bin'
-installsitearch='/pro/lib/perl5/site_perl/5.22.1/i686-linux-64int'
+installsitearch='/pro/lib/perl5/site_perl/5.22.2/i686-linux-64int'
installsitebin='/pro/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='/pro/lib/perl5/site_perl/5.22.1'
+installsitelib='/pro/lib/perl5/site_perl/5.22.2'
installsiteman1dir='/pro/local/man/man1'
installsiteman3dir='/pro/local/man/man3'
installsitescript='/pro/bin'
perl_static_inline='static __inline__'
perladmin='hmbrand@cpan.org'
perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/pro/bin/perl5.22.1'
+perlpath='/pro/bin/perl5.22.2'
pg='pg'
phostname='hostname'
pidtype='pid_t'
pr=''
prefix='/pro'
prefixexp='/pro'
-privlib='/pro/lib/perl5/5.22.1'
-privlibexp='/pro/lib/perl5/5.22.1'
+privlib='/pro/lib/perl5/5.22.2'
+privlibexp='/pro/lib/perl5/5.22.2'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
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='/pro/lib/perl5/site_perl/5.22.1/i686-linux-64int'
-sitearchexp='/pro/lib/perl5/site_perl/5.22.1/i686-linux-64int'
+sitearch='/pro/lib/perl5/site_perl/5.22.2/i686-linux-64int'
+sitearchexp='/pro/lib/perl5/site_perl/5.22.2/i686-linux-64int'
sitebin='/pro/bin'
sitebinexp='/pro/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/pro/lib/perl5/site_perl/5.22.1'
+sitelib='/pro/lib/perl5/site_perl/5.22.2'
sitelib_stem='/pro/lib/perl5/site_perl'
-sitelibexp='/pro/lib/perl5/site_perl/5.22.1'
+sitelibexp='/pro/lib/perl5/site_perl/5.22.2'
siteman1dir='/pro/local/man/man1'
siteman1direxp='/pro/local/man/man1'
siteman3dir='/pro/local/man/man3'
ssizetype='ssize_t'
st_ino_sign='1'
st_ino_size='8'
-startperl='#!/pro/bin/perl5.22.1'
+startperl='#!/pro/bin/perl5.22.2'
startsh='#!/bin/sh'
static_ext=' '
stdchar='char'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='1'
+subversion='2'
sysman='/usr/share/man/man1'
sysroot=''
tail=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.22.1'
-version_patchlevel_string='version 22 subversion 1'
+version='5.22.2'
+version_patchlevel_string='version 22 subversion 2'
versiononly='define'
vi=''
xlibpth='/usr/lib/386 /lib/386'
zip='zip'
PERL_REVISION=5
PERL_VERSION=22
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
PERL_API_REVISION=5
PERL_API_VERSION=22
PERL_API_SUBVERSION=0
* 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 "/pro/lib/perl5/5.22.1/i686-linux-64int-ld" /**/
-#define ARCHLIB_EXP "/pro/lib/perl5/5.22.1/i686-linux-64int-ld" /**/
+#define ARCHLIB "/pro/lib/perl5/5.22.2/i686-linux-64int-ld" /**/
+#define ARCHLIB_EXP "/pro/lib/perl5/5.22.2/i686-linux-64int-ld" /**/
/* ARCHNAME:
* This symbol holds a string representing the architecture name.
* 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 "/pro/lib/perl5/5.22.1" /**/
-#define PRIVLIB_EXP "/pro/lib/perl5/5.22.1" /**/
+#define PRIVLIB "/pro/lib/perl5/5.22.2" /**/
+#define PRIVLIB_EXP "/pro/lib/perl5/5.22.2" /**/
/* PTRSIZE:
* This symbol contains the size of a pointer, so that the C preprocessor
* 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 "/pro/lib/perl5/site_perl/5.22.1/i686-linux-64int-ld" /**/
-#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.22.1/i686-linux-64int-ld" /**/
+#define SITEARCH "/pro/lib/perl5/site_perl/5.22.2/i686-linux-64int-ld" /**/
+#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.22.2/i686-linux-64int-ld" /**/
/* 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 "/pro/lib/perl5/site_perl/5.22.1" /**/
-#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.22.1" /**/
+#define SITELIB "/pro/lib/perl5/site_perl/5.22.2" /**/
+#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.22.2" /**/
#define SITELIB_STEM "/pro/lib/perl5/site_perl" /**/
/* SSize_t:
* script to make sure (one hopes) that it runs with perl and not
* some shell.
*/
-#define STARTPERL "#!/pro/bin/perl5.22.1" /**/
+#define STARTPERL "#!/pro/bin/perl5.22.2" /**/
/* HAS_STDIO_STREAM_ARRAY:
* This symbol, if defined, tells that there is an array
=head1 EPIGRAPHS
+=head2 v5.23.9 - Tom Kitchin, "from nature to plate"
+
+L<Announced on 2016-03-20 by Abigail|http://www.nntp.perl.org/group/perl.perl5.porters/2016/03/msg235251.html>
+
+Spring
+
+Spring is the proper beginning of my kitchen and a season that I
+look forward to with great anticipation. By the time spring arrives
+I am desperate to welcome all the spring produce into my kitchen
+and I long to work with fresh green vegetables again. As much as I
+love root vegetables, such as celeriac and parsnips, and the heaver
+meat and game dishes, I'm ready to leave those behind with winter
+and begin a new adventure.
+
+Somehow spring always gives me a little bit of bounce in my feet
+-- I feel like I want to kick off my shoes and dance around in my
+kitchen. Not that I do, of course, but I feel lighter somehow. My
+adrenalin kicks in with spring and so does the level of excitement,
+as I think about all the produce that is about to come in.
+
+The moment spring arrives I'm eager to cook peas, broad beans, green
+asparagus and other fresh vegetables! I want to create lighter,
+brighter dishes and I can't wait to get my hands on the first greens
+and the first morels, not to mention the first wild Scottish salmon.
+Thanks to my network of trusted suppliers, I always get to first
+produce of the season delivered to my restaurant as soon as it is
+possible. I want my customers to experience and understand the
+beauty of locally grown produce and to try things the minute they
+are available so they can taste how incredibly fresh the ingredients
+are. I also want them to understand the relationship between
+seasonality and flavours. One of the most important things to
+remember is to allow the seasons to inspire your dishes and help
+you make natural matches. Wild spring herbs, such as sorrel, sweet
+cicely and wild garlic, as well as spring salad leaves and green
+lettuce served with wild salmon, wild sea trout, lamb or rabbit are
+marriages made in heaven.
+
+
+=head2 v5.23.8 - Patrick Rothfuss, "The Wise Man's Fear (The Kingkiller's Chronicle: Day Two)"
+
+L<Announced on 2016-02-20 by Sawyer X|http://www.nntp.perl.org/group/perl.perl5.porters/2016/02/msg234535.html>
+
+Denna, on the other hand, had never been trained. She knew nothing
+of shortcuts. You'd think she'd be forced to wander the city, lost and
+helpless, trapped in a twisting maze of mortared stone.
+
+But instead, she simply walked throught the walls. She didn't know
+any better. Nobody had ever told her she couldn't. Because of this,
+she moved through the city like some faerie creature. She walked roads
+no one else could see, and it made her music wild and strange and
+free.
+
+=head2 v5.23.7 - William Gibson, "Neuromancer"
+
+L<Announced on 2016-01-20 by Stevan Little|http://www.nntp.perl.org/group/perl.perl5.porters/2016/01/msg233856.html>
+
+A year here and he still dreamed of cyberspace, hope fading
+nightly. All the speed he took, all the turns he'd taken and
+the corners he cut in Night City, and he'd still see the matrix
+in his dreams, bright lattices of logic unfolding across that
+colourless void...The Sprawl was a long, strange way home now
+over the Pacific, and he was no Console Man, no cyberspace
+cowboy. Just another hustler, trying to make it through. But
+the dreams came on in the Japanese night like livewire voodoo,
+and he'd cry for it, cry in his sleep, and wake alone in the
+dark, curled in his capsule in some coffin hotel, hands clawed
+into the bedslab, temper foam bunched between his fingers,
+trying to reach the console that wasn't there.
+
+=head2 v5.23.6 - 5.23 Episode VII
+
+L<Announced on 2015-12-21 by David Golden|http://www.nntp.perl.org/group/perl.perl5.porters/2015/12/msg233475.html>
+
+ A long time ago in microseconds, in a galaxy not very far away...
+
+ 5.23 Episode VII
+ THE FUZZ AWAKENS
+
+ It is a period of
+ unrest as separatists
+ announce their intentions
+ to fork PERL and return the
+ galaxy to speed and stability.
+
+ Chancellor Rik Hoolian struggles
+ to hold together the remains of the
+ once mighty Republic against a tide of
+ incivility and the depredations of a new
+ foe, the FUZZ RAIDERS.
+
+ Meanwhile, after 15 years of preparation and
+ high expectations, Supreme Leader Toady prepares
+ to unleash a devastating new weapon, PERL SIXDOTOH,
+ that could splinter the Republic forever and usher in
+ a new Empire of gradual typing....
+
=head2 v5.23.5 - utastro!nather (Ed Nather), "The Story of Mel", in net.jokes, May 21, 1983.
L<Announced on 2015-11-20 by Abigail|http://www.nntp.perl.org/group/perl.perl5.porters/2015/11/msg232758.html>
Will chase the sun into the morning
Beyond the sky, beyond the sea.
-=head2 v5.23.0 - Bob Dylan, Maggie's Farm
+=head2 v5.23.0 - Bob Dylan, "Maggie's Farm"
L<Announced on 2015-06-20 by Ricardo Signes|http://www.nntp.perl.org/group/perl.perl5.porters/2015/06/msg228807.html>
They sing while you slave and I just get bored
I ain't gonna work on Maggie's farm no more
+=head2 v5.22.2-RC1 - Gaston Leroux, trans. Mireille Ribière, "The Phantom of the Opera"
+
+L<Announced on 2016-04-10 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2016/04/msg235732.html>
+
+This annual ball was quite a magnificent affair. It was given some time
+before Shrovetide to celebrate the birthday of a famous illustrator
+whose pencil had immortalized, in the style of Gavarni, the extravagant
+carnival parade down La Courtille. As such, the ball was an altogether
+merrier, noisier and more Bohemian occasion than was usual for a masked
+ball. Many artists had arranged to meet there; they arrived with an
+entourage of models and pupils, who, by midnight, had become quite
+boisterous.
+Raoul climbed the grand staircase at five minutes to midnight. He did
+not linger to admire the many-coloured costumes on display all the way
+up the marble steps of one of the most luxurious settings in the world;
+nor did he allow himself to be drawn into the facetious conversation of
+masked guests. He simply ignored all the jesting remarks, and shook off
+the attentions of several all too merry couples.
+Crossing the big crush-room and escaping from the dancers' farandole
+that had encircled him awhile, he at last entered the salon mentioned by
+Christine in her letter. The small room was crammed with people either
+on their way to supper at the restaurant in the Rotunda or back from
+raising a glass of champagne.
+In the midst of the gay and lively hubbub, Raoul thought that, for their
+mysterious assignation, Christine must have preferred this crowd to some
+lonely corner.
+He leaned against a door-jamb and waited. He did not have to wait long;
+a black domino passed him and deftly touched his hand. He understood
+that it was Christine and followed her.
+'Is that you, Christine?' he murmured, barely moving his slips.
+The black domino promptly looked back and raised her finger to her lips,
+no doubt to caution him against uttering her name again. Raoul followed
+on in silence.
+
+=head2 v5.22.1 - Wilhelm Müller, trans. Anon., "Courage" (No. 22 in Schubert's song-cycle, "Winterreise")
+
+L<Announced on 2015-12-13 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2015/12/msg233318.html>
+
+ If the snow flies in my face,
+ Let me shake it off me!
+ If my heart within me speaks,
+ I'll sing bright and gaily!
+
+ Will not listen what it says,
+ Have no ears for moaning.
+ Do not feel what it complains,--
+ Only fools like groaning!
+
+ Jolly brave into the world,
+ 'Gainst all wind and weather,--
+ If there is no God on earth,
+ Let 's be gods down nether!
+
=head2 v5.22.1-RC4 - Wilhelm Müller, trans. Anon., "The Signpost" (No. 20 in Schubert's song-cycle, "Winterreise")
L<Announced on 2015-12-08 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2015/12/msg233215.html>
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.22.1..HEAD
+ perl Porting/acknowledgements.pl v5.22.2..HEAD
=head1 Reporting Bugs
https://pause.perl.org/pause/query?ACTION=pause_04imprint
-=head3 search.cpan.org pumpkin status
-
-Make sure that search.cpan.org knows that you're allowed to upload
-perl distros. Contact Graham Barr to make sure that you're on the right
-list.
-
=head3 rt.perl.org update access
Make sure you have permission to close tickets on L<http://rt.perl.org/>
you into the idea in the first place to figure out the best way to
resolve the issue.
+=head3 web-based file share
+
+You will need to be able to share tarballs with #p5p members for
+pre-release testing, and you may wish to upload to PAUSE via URL.
+Make sure you have a way of sharing files, such as a web server or
+file-sharing service.
+
+Porters have access to the "dromedary" server (users.perl5.git.perl.org),
+which has a F<public_html> directory to share files with.
+(L<http://users.perl5.git.perl.org/~username/perl-5.xx.y.tar.gz>)
+
+If you use Dropbox, you can append "raw=1" as a parameter to their usual
+sharing link to allow direct download (albeit with redirects).
+
=head3 git clone of https://github.com/perlorg/perlweb
For updating the L<http://dev.perl.org> web pages, either a Github account or
You will need a quotation to use as an epigraph to your release announcement.
+=head3 Install the previous version of perl
+
+During the testing phase of the release you have created, you will be
+asked to compare the installed files with a previous install. Save yourself
+some time on release day, and have a (clean) install of the previous
+version ready.
+
=head2 Building a release - advance actions
The work of building a release candidate for an even numbered release
=item *
Remove files we do not need. That is, remove any files that match the
-entries in C<@IGNORABLE> in F<Porting/Maintainer.pl>, and anything that
+entries in C<@IGNORABLE> in F<Porting/Maintainers.pl>, and anything that
matches the C<EXCLUDED> section of the distro's entry in the C<%Modules>
hash.
=item *
-Run the tests in F<t/porting>.
+Run the tests in F<t/porting> (C<make test_porting>).
=item *
=head3 monitor smoke tests for failures
Similarly, monitor the smoking of core tests, and try to fix. See
-L<http://doc.procura.nl/smoke/index.html> and L<http://perl5.test-smoke.org/>
-for a summary. See also
+L<http://smoke.procura.nl/index.html>, L<http://perl5.test-smoke.org/>
+and L<http://perl.develop-help.com> for a summary. See also
L<http://www.nntp.perl.org/group/perl.daily-build.reports/> which has
the raw reports.
$ ./perl -Ilib regen/opcode.pl
-You may have to add stub entries in C<%Module::CoreList::version>,
-C<%Module::CoreList::deprecated> and C<%Module::CoreList::Utils::delta>.
-If so, you must up their version numbers as well.
-
Test your changes:
$ git clean -xdf # careful if you don't have local files to keep!
$ make
$ make test
+Do note that at this stage, porting tests will fail. They will continue
+to fail until you've updated Module::CoreList, as described below.
+
Commit your changes:
$ git status
release, this would be 5.13.11).
For BLEAD-POINT releases, it needs to refer to the previous BLEAD-POINT
-release (so for 5.15.3 this would be 5.15.2).
+release (so for 5.15.3 this would be 5.15.2). If the last release manager
+followed instructions, this should have already been done after the last
+blead release, so you may find nothing to do here.
=head3 Check copyright years
=head4 Bump version in Module::CoreList F<Changes>
Also edit Module::CoreList's new version number in its F<Changes> file.
+This file is F<dist/Module-CoreList/Changes>.
=head4 Add Module::CoreList version bump to perldelta
is available for Cygwin. A Windows port is available from
L<http://tukaani.org/xz/>.
+B<IMPORTANT>: if you are on OS X, you must export C<COPYFILE_DISABLE=1>
+to prevent OS X resource files from being included in your tarball. After
+creating the tarball following the instructions below, inspect it to ensure
+you don't have files like F<._foobar>.
+
Create a tarball. Use the C<-s> option to specify a suitable suffix for
the tarball and directory name:
Copy the tarballs (.gz and possibly .bz2 and .xz) to a web server somewhere you
have access to.
-=head4 Download the tarball to another machine
+=head4 Download the tarball to another machine and unpack it
Download the tarball to some other machine. For a release candidate,
you really want to test your tarball on two or more different platforms
-and architectures. The #p5p IRC channel on irc.perl.org is a good place
-to find willing victims.
+and architectures.
+
+=head4 Ask #p5p to test the tarball on different platforms
+
+Once you've verified the tarball can be downloaded and unpacked,
+ask the #p5p IRC channel on irc.perl.org for volunteers to test the
+tarballs on whatever platforms they can.
+
+If you're not confident in the tarball, you can defer this step until after
+your own tarball testing, below.
=head4 Check that F<Configure> works
new release from wherever you put it for testers to find it. This will
eliminate anxious gnashing of teeth while you wait to see if your
15 megabyte HTTP upload successfully completes across your slow, twitchy
-cable modem. You can make use of your home directory on dromedary for
+cable modem.
+
+You can make use of your home directory on dromedary for
this purpose: F<http://users.perl5.git.perl.org/~USERNAME> maps to
F</home/USERNAME/public_html>, where F<USERNAME> is your login account
-on dromedary. I<Remember>: if your upload is partially successful, you
+on dromedary.
+
+I<Remember>: if your upload is partially successful, you
may need to contact a PAUSE administrator or even bump the version of perl.
Upload the .gz, .xz, and .bz2 versions of the tarball.
On these systems, it might be the default compilation mode, and there
is currently no guarantee that passing no use64bitall option to the
Configure process will build a 32bit perl. Implementing -Duse32bit*
-options would be nice for perl 5.22.1.
+options would be nice for perl 5.22.2.
=head2 Profile Perl - am I hot or not?
=head1 Big projects
Tasks that will get your name mentioned in the description of the "Highlights
-of 5.22.1"
+of 5.22.2"
=head2 make ithreads more robust
Alternatively, the crypt libraries in GNU libc have been ported to Cygwin.
+As of libcrypt 1.3 (March 2016), you will need to install the
+libcrypt-devel package for Configure to detect crypt().
+
=item * C<-lgdbm_compat> (C<use GDBM_File>)
GDBM is available for Cygwin.
Make perl executable and create a symlink for libperl:
chmod a+x /boot/common/bin/perl
- cd /boot/common/lib; ln -s perl5/5.22.1/BePC-haiku/CORE/libperl.so .
+ cd /boot/common/lib; ln -s perl5/5.22.2/BePC-haiku/CORE/libperl.so .
-Replace C<5.22.1> with your respective version of Perl.
+Replace C<5.22.2> with your respective version of Perl.
=head1 KNOWN PROBLEMS
This document briefly describes Perl under Mac OS X.
- curl -O http://www.cpan.org/src/perl-5.22.1.tar.gz
- tar -xzf perl-5.22.1.tar.gz
- cd perl-5.22.1
+ curl -O http://www.cpan.org/src/perl-5.22.2.tar.gz
+ tar -xzf perl-5.22.2.tar.gz
+ cd perl-5.22.2
./Configure -des -Dprefix=/usr/local/
make
make test
=head1 DESCRIPTION
-The latest Perl release (5.22.1 as of this writing) builds without changes
+The latest Perl release (5.22.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',
=item Additional Perl modules
- unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.22.1/
+ unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.22.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
choice. Once you have done so, use a command like the following to
unpack the archive:
- vmstar -xvf perl-5^.22^.1.tar
+ vmstar -xvf perl-5^.22^.2.tar
Then set default to the top-level source directory like so:
- set default [.perl-5^.22^.1]
+ set default [.perl-5^.22^.2]
and proceed with configuration as described in the next section.
* LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
* LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
* LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
- * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
- * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
* LONG_DOUBLE_IS_UNKNOWN_FORMAT
* It is only defined if the system supports long doubles.
*/
#define LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN 2
#define LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN 3
#define LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN 4
-#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN 5
-#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN 6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE 5
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE 6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE 7
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE 8
#define LONG_DOUBLE_IS_UNKNOWN_FORMAT -1
+/* Backward compat. */
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
#endif
/* HAS_LONG_LONG:
cx->sb_rx = rx, \
cx->cx_type = CXt_SUBST | (once ? CXp_ONCE : 0); \
rxres_save(&cx->sb_rxres, rx); \
- (void)ReREFCNT_inc(rx)
+ (void)ReREFCNT_inc(rx); \
+ SvREFCNT_inc_void_NN(targ)
# define POPSUBST(cx) cx = &cxstack[cxstack_ix--]; \
rxres_free(&cx->sb_rxres); \
- ReREFCNT_dec(cx->sb_rx)
+ ReREFCNT_dec(cx->sb_rx); \
+ SvREFCNT_dec_NN(cx->sb_targ)
#endif
#define CxONCE(cx) ((cx)->cx_type & CXp_ONCE)
+5.20160429
+ - Updated for v5.22.2
+
+5.20160320
+ - Updated vor v5.23.9
+
+5.20160228
+ - [perl #127624] corelist: wrong Digest::SHA version in 5.18.4
+
+5.20160220
+ - Updated for v5.23.8
+
+5.20160120
+ - Updated for v5.23.7
+
+5.20151220
+ - Updated for v5.23.6
+
5.20151213
- Updated for v5.22.1
%bug_tracker %deprecated %delta/;
use Module::CoreList::TieHashDelta;
use version;
-$VERSION = '5.20151213';
+$VERSION = '5.20160429';
sub _released_order { # Sort helper, to make '?' sort after everything else
(substr($released{$a}, 0, 1) eq "?")
5.023004 => '2015-10-20',
5.023005 => '2015-11-20',
5.022001 => '2015-12-13',
+ 5.023006 => '2015-12-21',
+ 5.023007 => '2016-01-20',
+ 5.023008 => '2016-02-20',
+ 5.023009 => '2016-03-20',
+ 5.022002 => '2016-04-29',
);
for my $version ( sort { $a <=> $b } keys %released ) {
5.018003 => {
delta_from => 5.018002,
changed => {
+ 'Config' => '5.018003',
+ 'Digest::SHA' => '5.84_02',
'Module::CoreList' => '3.12',
'Module::CoreList::TieHashDelta'=> '3.12',
'Module::CoreList::Utils'=> '3.12',
5.018004 => {
delta_from => 5.018003,
changed => {
+ 'Config' => '5.018004',
'Module::CoreList' => '3.13',
'Module::CoreList::TieHashDelta'=> '3.13',
'Module::CoreList::Utils'=> '3.13',
removed => {
}
},
+ 5.023006 => {
+ delta_from => 5.023005,
+ changed => {
+ 'B::Deparse' => '1.36',
+ 'B::Op_private' => '5.023006',
+ 'Benchmark' => '1.21',
+ 'CPAN::Meta::Requirements'=> '2.140',
+ 'CPAN::Meta::YAML' => '0.018',
+ 'Config' => '5.023006',
+ 'Cwd' => '3.60',
+ 'Data::Dumper' => '2.159',
+ 'DynaLoader' => '1.37',
+ 'File::Spec' => '3.60',
+ 'File::Spec::AmigaOS' => '3.60',
+ 'File::Spec::Cygwin' => '3.60',
+ 'File::Spec::Epoc' => '3.60',
+ 'File::Spec::Functions' => '3.60',
+ 'File::Spec::Mac' => '3.60',
+ 'File::Spec::OS2' => '3.60',
+ 'File::Spec::Unix' => '3.60',
+ 'File::Spec::VMS' => '3.60',
+ 'File::Spec::Win32' => '3.60',
+ 'Hash::Util::FieldHash' => '1.19',
+ 'Locale::Codes' => '3.37',
+ 'Locale::Codes::Constants'=> '3.37',
+ 'Locale::Codes::Country'=> '3.37',
+ 'Locale::Codes::Country_Codes'=> '3.37',
+ 'Locale::Codes::Country_Retired'=> '3.37',
+ 'Locale::Codes::Currency'=> '3.37',
+ 'Locale::Codes::Currency_Codes'=> '3.37',
+ 'Locale::Codes::Currency_Retired'=> '3.37',
+ 'Locale::Codes::LangExt'=> '3.37',
+ 'Locale::Codes::LangExt_Codes'=> '3.37',
+ 'Locale::Codes::LangExt_Retired'=> '3.37',
+ 'Locale::Codes::LangFam'=> '3.37',
+ 'Locale::Codes::LangFam_Codes'=> '3.37',
+ 'Locale::Codes::LangFam_Retired'=> '3.37',
+ 'Locale::Codes::LangVar'=> '3.37',
+ 'Locale::Codes::LangVar_Codes'=> '3.37',
+ 'Locale::Codes::LangVar_Retired'=> '3.37',
+ 'Locale::Codes::Language'=> '3.37',
+ 'Locale::Codes::Language_Codes'=> '3.37',
+ 'Locale::Codes::Language_Retired'=> '3.37',
+ 'Locale::Codes::Script' => '3.37',
+ 'Locale::Codes::Script_Codes'=> '3.37',
+ 'Locale::Codes::Script_Retired'=> '3.37',
+ 'Locale::Country' => '3.37',
+ 'Locale::Currency' => '3.37',
+ 'Locale::Language' => '3.37',
+ 'Locale::Script' => '3.37',
+ 'Math::BigInt::FastCalc'=> '0.38',
+ 'Module::CoreList' => '5.20151220',
+ 'Module::CoreList::TieHashDelta'=> '5.20151220',
+ 'Module::CoreList::Utils'=> '5.20151220',
+ 'Module::Metadata' => '1.000031',
+ 'Opcode' => '1.34',
+ 'PerlIO::mmap' => '0.016',
+ 'Pod::Perldoc' => '3.25_02',
+ 'SDBM_File' => '1.14',
+ 'Term::ANSIColor' => '4.04',
+ 'Test' => '1.28',
+ 'Unicode::Normalize' => '1.24',
+ 'XS::APItest' => '0.77',
+ 'base' => '2.23',
+ 'encoding::warnings' => '0.12',
+ 'fields' => '2.23',
+ 'locale' => '1.08',
+ 'strict' => '1.10',
+ 'threads' => '2.05',
+ 'threads::shared' => '1.50',
+ 'utf8' => '1.18',
+ },
+ removed => {
+ }
+ },
+ 5.023007 => {
+ delta_from => 5.023006,
+ changed => {
+ 'App::Prove' => '3.36',
+ 'App::Prove::State' => '3.36',
+ 'App::Prove::State::Result'=> '3.36',
+ 'App::Prove::State::Result::Test'=> '3.36',
+ 'B' => '1.62',
+ 'B::Deparse' => '1.37',
+ 'B::Op_private' => '5.023007',
+ 'Benchmark' => '1.22',
+ 'Config' => '5.023007',
+ 'Cwd' => '3.62',
+ 'Data::Dumper' => '2.160',
+ 'ExtUtils::ParseXS' => '3.31',
+ 'ExtUtils::ParseXS::Constants'=> '3.31',
+ 'ExtUtils::ParseXS::CountLines'=> '3.31',
+ 'ExtUtils::ParseXS::Eval'=> '3.31',
+ 'ExtUtils::ParseXS::Utilities'=> '3.31',
+ 'ExtUtils::Typemaps' => '3.31',
+ 'ExtUtils::Typemaps::Cmd'=> '3.31',
+ 'ExtUtils::Typemaps::InputMap'=> '3.31',
+ 'ExtUtils::Typemaps::OutputMap'=> '3.31',
+ 'ExtUtils::Typemaps::Type'=> '3.31',
+ 'File::Find' => '1.33',
+ 'File::Spec' => '3.62',
+ 'File::Spec::AmigaOS' => '3.62',
+ 'File::Spec::Cygwin' => '3.62',
+ 'File::Spec::Epoc' => '3.62',
+ 'File::Spec::Functions' => '3.62',
+ 'File::Spec::Mac' => '3.62',
+ 'File::Spec::OS2' => '3.62',
+ 'File::Spec::Unix' => '3.62',
+ 'File::Spec::VMS' => '3.62',
+ 'File::Spec::Win32' => '3.62',
+ 'Math::BigFloat' => '1.999715',
+ 'Math::BigFloat::Trace' => '0.42',
+ 'Math::BigInt' => '1.999715',
+ 'Math::BigInt::Calc' => '1.999715',
+ 'Math::BigInt::CalcEmu' => '1.999715',
+ 'Math::BigInt::FastCalc'=> '0.40',
+ 'Math::BigInt::Trace' => '0.42',
+ 'Math::BigRat' => '0.260802',
+ 'Module::CoreList' => '5.20160120',
+ 'Module::CoreList::TieHashDelta'=> '5.20160120',
+ 'Module::CoreList::Utils'=> '5.20160120',
+ 'Net::Cmd' => '3.08',
+ 'Net::Config' => '3.08',
+ 'Net::Domain' => '3.08',
+ 'Net::FTP' => '3.08',
+ 'Net::FTP::A' => '3.08',
+ 'Net::FTP::E' => '3.08',
+ 'Net::FTP::I' => '3.08',
+ 'Net::FTP::L' => '3.08',
+ 'Net::FTP::dataconn' => '3.08',
+ 'Net::NNTP' => '3.08',
+ 'Net::Netrc' => '3.08',
+ 'Net::POP3' => '3.08',
+ 'Net::SMTP' => '3.08',
+ 'Net::Time' => '3.08',
+ 'Pod::Man' => '4.04',
+ 'Pod::ParseLink' => '4.04',
+ 'Pod::Text' => '4.04',
+ 'Pod::Text::Color' => '4.04',
+ 'Pod::Text::Overstrike' => '4.04',
+ 'Pod::Text::Termcap' => '4.04',
+ 'Pod::Usage' => '1.68',
+ 'TAP::Base' => '3.36',
+ 'TAP::Formatter::Base' => '3.36',
+ 'TAP::Formatter::Color' => '3.36',
+ 'TAP::Formatter::Console'=> '3.36',
+ 'TAP::Formatter::Console::ParallelSession'=> '3.36',
+ 'TAP::Formatter::Console::Session'=> '3.36',
+ 'TAP::Formatter::File' => '3.36',
+ 'TAP::Formatter::File::Session'=> '3.36',
+ 'TAP::Formatter::Session'=> '3.36',
+ 'TAP::Harness' => '3.36',
+ 'TAP::Harness::Env' => '3.36',
+ 'TAP::Object' => '3.36',
+ 'TAP::Parser' => '3.36',
+ 'TAP::Parser::Aggregator'=> '3.36',
+ 'TAP::Parser::Grammar' => '3.36',
+ 'TAP::Parser::Iterator' => '3.36',
+ 'TAP::Parser::Iterator::Array'=> '3.36',
+ 'TAP::Parser::Iterator::Process'=> '3.36',
+ 'TAP::Parser::Iterator::Stream'=> '3.36',
+ 'TAP::Parser::IteratorFactory'=> '3.36',
+ 'TAP::Parser::Multiplexer'=> '3.36',
+ 'TAP::Parser::Result' => '3.36',
+ 'TAP::Parser::Result::Bailout'=> '3.36',
+ 'TAP::Parser::Result::Comment'=> '3.36',
+ 'TAP::Parser::Result::Plan'=> '3.36',
+ 'TAP::Parser::Result::Pragma'=> '3.36',
+ 'TAP::Parser::Result::Test'=> '3.36',
+ 'TAP::Parser::Result::Unknown'=> '3.36',
+ 'TAP::Parser::Result::Version'=> '3.36',
+ 'TAP::Parser::Result::YAML'=> '3.36',
+ 'TAP::Parser::ResultFactory'=> '3.36',
+ 'TAP::Parser::Scheduler'=> '3.36',
+ 'TAP::Parser::Scheduler::Job'=> '3.36',
+ 'TAP::Parser::Scheduler::Spinner'=> '3.36',
+ 'TAP::Parser::Source' => '3.36',
+ 'TAP::Parser::SourceHandler'=> '3.36',
+ 'TAP::Parser::SourceHandler::Executable'=> '3.36',
+ 'TAP::Parser::SourceHandler::File'=> '3.36',
+ 'TAP::Parser::SourceHandler::Handle'=> '3.36',
+ 'TAP::Parser::SourceHandler::Perl'=> '3.36',
+ 'TAP::Parser::SourceHandler::RawTAP'=> '3.36',
+ 'TAP::Parser::YAMLish::Reader'=> '3.36',
+ 'TAP::Parser::YAMLish::Writer'=> '3.36',
+ 'Test::Harness' => '3.36',
+ 'Unicode::Normalize' => '1.25',
+ 'Unicode::UCD' => '0.64',
+ 'XS::APItest' => '0.78',
+ 'bigint' => '0.42',
+ 'bignum' => '0.42',
+ 'bigrat' => '0.42',
+ 'utf8' => '1.19',
+ },
+ removed => {
+ }
+ },
+ 5.023008 => {
+ delta_from => 5.023007,
+ changed => {
+ 'B::Op_private' => '5.023008',
+ 'Config' => '5.023008',
+ 'Cwd' => '3.63',
+ 'DynaLoader' => '1.38',
+ 'Encode' => '2.80',
+ 'Encode::Alias' => '2.20',
+ 'Encode::MIME::Header' => '2.19',
+ 'Encode::Unicode' => '2.15',
+ 'ExtUtils::CBuilder' => '0.280225',
+ 'ExtUtils::CBuilder::Base'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::Unix'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::VMS'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::Windows'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::Windows::GCC'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::Windows::MSVC'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::aix'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::android'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::cygwin'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::darwin'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::dec_osf'=> '0.280225',
+ 'ExtUtils::CBuilder::Platform::os2'=> '0.280225',
+ 'ExtUtils::Command::MM' => '7.10_01',
+ 'ExtUtils::Liblist' => '7.10_01',
+ 'ExtUtils::Liblist::Kid'=> '7.10_01',
+ 'ExtUtils::MM' => '7.10_01',
+ 'ExtUtils::MM_AIX' => '7.10_01',
+ 'ExtUtils::MM_Any' => '7.10_01',
+ 'ExtUtils::MM_BeOS' => '7.10_01',
+ 'ExtUtils::MM_Cygwin' => '7.10_01',
+ 'ExtUtils::MM_DOS' => '7.10_01',
+ 'ExtUtils::MM_Darwin' => '7.10_01',
+ 'ExtUtils::MM_MacOS' => '7.10_01',
+ 'ExtUtils::MM_NW5' => '7.10_01',
+ 'ExtUtils::MM_OS2' => '7.10_01',
+ 'ExtUtils::MM_QNX' => '7.10_01',
+ 'ExtUtils::MM_UWIN' => '7.10_01',
+ 'ExtUtils::MM_Unix' => '7.10_01',
+ 'ExtUtils::MM_VMS' => '7.10_01',
+ 'ExtUtils::MM_VOS' => '7.10_01',
+ 'ExtUtils::MM_Win32' => '7.10_01',
+ 'ExtUtils::MM_Win95' => '7.10_01',
+ 'ExtUtils::MY' => '7.10_01',
+ 'ExtUtils::MakeMaker' => '7.10_01',
+ 'ExtUtils::MakeMaker::Config'=> '7.10_01',
+ 'ExtUtils::MakeMaker::version'=> '7.10_01',
+ 'ExtUtils::MakeMaker::version::regex'=> '7.10_01',
+ 'ExtUtils::Mkbootstrap' => '7.10_01',
+ 'ExtUtils::Mksymlists' => '7.10_01',
+ 'ExtUtils::testlib' => '7.10_01',
+ 'File::Spec' => '3.63',
+ 'File::Spec::AmigaOS' => '3.63',
+ 'File::Spec::Cygwin' => '3.63',
+ 'File::Spec::Epoc' => '3.63',
+ 'File::Spec::Functions' => '3.63',
+ 'File::Spec::Mac' => '3.63',
+ 'File::Spec::OS2' => '3.63',
+ 'File::Spec::Unix' => '3.63',
+ 'File::Spec::VMS' => '3.63',
+ 'File::Spec::Win32' => '3.63',
+ 'IPC::Msg' => '2.05',
+ 'IPC::Semaphore' => '2.05',
+ 'IPC::SharedMem' => '2.05',
+ 'IPC::SysV' => '2.05',
+ 'Module::CoreList' => '5.20160121',
+ 'Module::CoreList::TieHashDelta'=> '5.20160121',
+ 'Module::CoreList::Utils'=> '5.20160121',
+ 'ODBM_File' => '1.13',
+ 'POSIX' => '1.63',
+ 'PerlIO::encoding' => '0.24',
+ 'Pod::Man' => '4.06',
+ 'Pod::ParseLink' => '4.06',
+ 'Pod::Text' => '4.06',
+ 'Pod::Text::Color' => '4.06',
+ 'Pod::Text::Overstrike' => '4.06',
+ 'Pod::Text::Termcap' => '4.06',
+ 'Storable' => '2.55',
+ 'Time::HiRes' => '1.9730',
+ 'XS::APItest' => '0.79',
+ },
+ removed => {
+ }
+ },
+ 5.023009 => {
+ delta_from => 5.023008,
+ changed => {
+ 'Amiga::ARexx' => '0.04',
+ 'Amiga::Exec' => '0.02',
+ 'B::Op_private' => '5.023009',
+ 'Carp' => '1.40',
+ 'Carp::Heavy' => '1.40',
+ 'Config' => '5.023009',
+ 'Errno' => '1.25',
+ 'ExtUtils::Embed' => '1.33',
+ 'File::Find' => '1.34',
+ 'File::Glob' => '1.26',
+ 'File::Spec::AmigaOS' => ';.64',
+ 'IPC::Msg' => '2.06_01',
+ 'IPC::Semaphore' => '2.06_01',
+ 'IPC::SharedMem' => '2.06_01',
+ 'IPC::SysV' => '2.06_01',
+ 'List::Util' => '1.42_02',
+ 'List::Util::XS' => '1.42_02',
+ 'Module::CoreList' => '5.20160320',
+ 'Module::CoreList::TieHashDelta'=> '5.20160320',
+ 'Module::CoreList::Utils'=> '5.20160320',
+ 'POSIX' => '1.64',
+ 'Pod::Functions' => '1.10',
+ 'Pod::Functions::Functions'=> '1.10',
+ 'Scalar::Util' => '1.42_02',
+ 'SelfLoader' => '1.23',
+ 'Socket' => '2.020_03',
+ 'Storable' => '2.56',
+ 'Sub::Util' => '1.42_02',
+ 'Thread::Queue' => '3.08',
+ 'Tie::File' => '1.02',
+ 'Time::HiRes' => '1.9732',
+ 'Win32API::File' => '0.1203',
+ 'Win32API::File::inc::ExtUtils::Myconst2perl'=> '1',
+ 'XS::APItest' => '0.80',
+ 'autouse' => '1.11',
+ 'bytes' => '1.05',
+ 'strict' => '1.11',
+ 'threads' => '2.06',
+ 'version' => '0.9916',
+ 'version::regex' => '0.9916',
+ 'warnings' => '1.36',
+ },
+ removed => {
+ 'Win32API::File::ExtUtils::Myconst2perl'=> 1,
+ }
+ },
+ 5.022002 => {
+ delta_from => 5.022001,
+ changed => {
+ 'B::Op_private' => '5.022002',
+ 'Config' => '5.022002',
+ 'Cwd' => '3.56_01',
+ 'File::Spec' => '3.56_01',
+ 'File::Spec::Cygwin' => '3.56_01',
+ 'File::Spec::Epoc' => '3.56_01',
+ 'File::Spec::Functions' => '3.56_01',
+ 'File::Spec::Mac' => '3.56_01',
+ 'File::Spec::OS2' => '3.56_01',
+ 'File::Spec::Unix' => '3.56_01',
+ 'File::Spec::VMS' => '3.56_01',
+ 'File::Spec::Win32' => '3.56_01',
+ 'Module::CoreList' => '5.20160429',
+ 'Module::CoreList::TieHashDelta'=> '5.20160429',
+ 'Module::CoreList::Utils'=> '5.20160429',
+ 'XS::APItest' => '0.72_01',
+ },
+ removed => {
+ }
+ },
);
sub is_core
removed => {
}
},
+ 5.023006 => {
+ delta_from => 5.023005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.023007 => {
+ delta_from => 5.023006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.023008 => {
+ delta_from => 5.023007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.023009 => {
+ delta_from => 5.023008,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.022002 => {
+ delta_from => 5.022001,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
for my $version (sort { $a <=> $b } keys %deprecated) {
'CPAN::Meta::History' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues',
'CPAN::Meta::Merge' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues',
'CPAN::Meta::Prereqs' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues',
- 'CPAN::Meta::Requirements'=> 'https://github.com/dagolden/CPAN-Meta-Requirements/issues',
+ 'CPAN::Meta::Requirements'=> 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta-Requirements/issues',
'CPAN::Meta::Spec' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues',
'CPAN::Meta::Validator' => 'https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues',
'CPAN::Meta::YAML' => 'https://github.com/Perl-Toolchain-Gang/YAML-Tiny/issues',
'IPC::SysV' => undef,
'JSON::PP' => undef,
'JSON::PP::Boolean' => undef,
- 'List::Util' => undef,
- 'List::Util::XS' => undef,
+ '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,
'Locale::Codes::Constants'=> undef,
'Locale::Codes::Country'=> undef,
'Pod::Escapes' => undef,
'Pod::Find' => undef,
'Pod::InputObjects' => undef,
- 'Pod::Man' => undef,
- 'Pod::ParseLink' => undef,
+ 'Pod::Man' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
+ 'Pod::ParseLink' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
'Pod::ParseUtils' => undef,
'Pod::Parser' => undef,
'Pod::Perldoc' => undef,
'Pod::Simple::TranscodeSmart'=> 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::XHTML' => 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::XMLOutStream'=> 'https://github.com/perl-pod/pod-simple/issues',
- 'Pod::Text' => undef,
- 'Pod::Text::Color' => undef,
- 'Pod::Text::Overstrike' => undef,
- 'Pod::Text::Termcap' => undef,
+ 'Pod::Text' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
+ 'Pod::Text::Color' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
+ 'Pod::Text::Overstrike' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
+ 'Pod::Text::Termcap' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
'Pod::Usage' => undef,
- 'Scalar::Util' => undef,
+ 'Scalar::Util' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-List-Utils',
'Socket' => undef,
- 'Sub::Util' => undef,
+ 'Sub::Util' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-List-Utils',
'Sys::Syslog' => undef,
'Sys::Syslog::Win32' => undef,
'TAP::Base' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness',
'TAP::Parser::SourceHandler::RawTAP'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness',
'TAP::Parser::YAMLish::Reader'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness',
'TAP::Parser::YAMLish::Writer'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Test-Harness',
- 'Term::ANSIColor' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Term-ANSIColor',
+ 'Term::ANSIColor' => 'https://rt.cpan.org/Dist/Display.html?Name=Term-ANSIColor',
'Term::Cap' => undef,
'Test' => undef,
'Test::Builder' => 'http://github.com/Test-More/test-more/issues/',
print $Module::CoreList::version{5.00503}{CPAN}; # prints 1.48
- print Module::CoreList->first_release('File::Spec'); # prints 5.00405
- print Module::CoreList->first_release_by_date('File::Spec'); # prints 5.005
- print Module::CoreList->first_release('File::Spec', 0.82); # prints 5.006001
+ print Module::CoreList->first_release('File::Spec');
+ # prints 5.00405
+
+ print Module::CoreList->first_release_by_date('File::Spec');
+ # prints 5.005
+
+ print Module::CoreList->first_release('File::Spec', 0.82);
+ # prints 5.006001
if (Module::CoreList::is_core('File::Spec')) {
print "File::Spec is a core module\n";
print join ', ', Module::CoreList->find_modules(qr/Data/);
# prints 'Data::Dumper'
print join ', ',
- Module::CoreList->find_modules(qr/test::h.*::.*s/i, 5.008008);
+ Module::CoreList->find_modules(qr/test::h.*::.*s/i, 5.008008);
# prints 'Test::Harness::Assert, Test::Harness::Straps'
print join ", ", @{ $Module::CoreList::families{5.005} };
use strict;
use vars qw($VERSION);
-$VERSION = '5.20151213';
+$VERSION = '5.20160429';
sub TIEHASH {
my ($class, $changed, $removed, $parent) = @_;
use Module::CoreList;
use Module::CoreList::TieHashDelta;
-$VERSION = '5.20151213';
+$VERSION = '5.20160429';
sub utilities {
my $perl = shift;
removed => {
}
},
+ 5.023006 => {
+ delta_from => 5.023005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.023007 => {
+ delta_from => 5.023006,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.023008 => {
+ delta_from => 5.023007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.023009 => {
+ delta_from => 5.023008,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.022002 => {
+ delta_from => 5.022001,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
for my $version (sort { $a <=> $b } keys %delta) {
print $Module::CoreList::Utils::utilities{5.009003}{ptar}; # prints 1
- print Module::CoreList::Utils->first_release('corelist'); # prints 5.008009
- print Module::CoreList::Utils->first_release_by_date('corelist'); # prints 5.009002
+ print Module::CoreList::Utils->first_release('corelist');
+ # prints 5.008009
+
+ print Module::CoreList::Utils->first_release_by_date('corelist');
+ # prints 5.009002
=head1 DESCRIPTION
use Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
-$VERSION = '3.56';
+$VERSION = '3.56_01';
my $xs_version = $VERSION;
$VERSION =~ tr/_//;
*o = 0;
SvPOK_on(retval);
SvCUR_set(retval, o - SvPVX(retval));
+ SvTAINT(retval);
return retval;
}
use strict;
use vars qw(@ISA $VERSION);
-$VERSION = '3.56';
+$VERSION = '3.56_01';
$VERSION =~ tr/_//;
my %module = (MacOS => 'Mac',
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.56';
+$VERSION = '3.56_01';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
use strict;
use vars qw($VERSION @ISA);
-$VERSION = '3.56';
+$VERSION = '3.56_01';
$VERSION =~ tr/_//;
require File::Spec::Unix;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-$VERSION = '3.56';
+$VERSION = '3.56_01';
$VERSION =~ tr/_//;
require Exporter;
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.56';
+$VERSION = '3.56_01';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.56';
+$VERSION = '3.56_01';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
use strict;
use vars qw($VERSION);
-$VERSION = '3.56';
+$VERSION = '3.56_01';
my $xs_version = $VERSION;
$VERSION =~ tr/_//;
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.56';
+$VERSION = '3.56_01';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.56';
+$VERSION = '3.56_01';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
BEGIN {
plan(
${^TAINT}
- ? (tests => 17)
+ ? (tests => 21)
: (skip_all => "A perl without taint support")
);
}
# Previous versions of Cwd tainted $^O
is !tainted($^O), 1, "\$^O should not be tainted";
+
+{
+ # [perl #126862] canonpath() loses taint
+ my $tainted = substr($ENV{PATH}, 0, 0);
+ # yes, getcwd()'s result should be tainted, and is tested above
+ # but be sure
+ ok tainted(File::Spec->canonpath($tainted . Cwd::getcwd)),
+ "canonpath() keeps taint on non-empty string";
+ ok tainted(File::Spec->canonpath($tainted)),
+ "canonpath() keeps taint on empty string";
+
+ (Cwd::getcwd() =~ /^(.*)/);
+ my $untainted = $1;
+ ok !tainted($untainted), "make sure our untainted value is untainted";
+ ok !tainted(File::Spec->canonpath($untainted)),
+ "canonpath() doesn't add taint to untainted string";
+}
EXp |void |av_reify |NN AV *av
ApdR |SV* |av_shift |NN AV *av
Apd |SV** |av_store |NN AV *av|SSize_t key|NULLOK SV *val
+#ifndef PERL_NO_INLINE_FUNCTIONS
AidR |SSize_t|av_top_index |NN AV *av
+#endif
AmpdR |SSize_t|av_tindex |NN AV *av
Apd |void |av_undef |NN AV *av
ApdoxM |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
ApR |I32 |is_lvalue_sub
: Used in cop.h
XopR |I32 |was_lvalue_sub
+#ifndef PERL_NO_INLINE_FUNCTIONS
AiMRn |STRLEN |_is_utf8_char_slow|NN const U8 *s|NN const U8 *e
+#endif
ADMpPR |U32 |to_uni_upper_lc|U32 c
ADMpPR |U32 |to_uni_title_lc|U32 c
ADMpPR |U32 |to_uni_lower_lc|U32 c
Apd |MAGIC *|sv_magicext |NN SV *const sv|NULLOK SV *const obj|const int how \
|NULLOK const MGVTBL *const vtbl|NULLOK const char *const name \
|const I32 namlen
+#ifndef PERL_NO_INLINE_FUNCTIONS
Ein |bool |sv_only_taint_gmagic|NN SV *sv
+#endif
: exported for re.pm
EXp |MAGIC *|sv_magicext_mglob|NN SV *sv
ApdbamR |SV* |sv_mortalcopy |NULLOK SV *const oldsv
Ap |I32 |whichsig_sv |NN SV* sigsv
Ap |I32 |whichsig_pv |NN const char* sig
Ap |I32 |whichsig_pvn |NN const char* sig|STRLEN len
+#ifndef PERL_NO_INLINE_FUNCTIONS
: used to check for NULs in pathnames and other names
AiR |bool |is_safe_syscall|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
+#endif
#ifdef PERL_CORE
inR |bool |should_warn_nl|NN const char *pv
#endif
#endif
#endif
+#if defined(PERL_MEM_LOG)
+pn |Malloc_t |mem_log_alloc |const UV nconst|UV typesize|NN const char *type_name|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pn |Malloc_t |mem_log_realloc |const UV n|const UV typesize|NN const char *type_name|Malloc_t oldalloc|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pn |Malloc_t |mem_log_free |Malloc_t oldalloc|NN const char *filename|const int linenumber|NN const char *funcname
+#endif
+
#if defined(PERL_IN_NUMERIC_C)
#ifndef USE_QUADMATH
sn |NV|mulexp10 |NV value|I32 exponent
|NN const U8* const typestr
#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
AiMn |void |append_utf8_from_native_byte|const U8 byte|NN U8** dest
+#endif
Apd |void |sv_setsv_flags |NN SV *dstr|NULLOK SV *sstr|const I32 flags
Apd |void |sv_catpvn_flags|NN SV *const dstr|NN const char *sstr|const STRLEN len \
#define _is_uni_perl_idcont(a) Perl__is_uni_perl_idcont(aTHX_ a)
#define _is_uni_perl_idstart(a) Perl__is_uni_perl_idstart(aTHX_ a)
#define _is_utf8_FOO(a,b) Perl__is_utf8_FOO(aTHX_ a,b)
-#define _is_utf8_char_slow S__is_utf8_char_slow
#define _is_utf8_idcont(a) Perl__is_utf8_idcont(aTHX_ a)
#define _is_utf8_idstart(a) Perl__is_utf8_idstart(aTHX_ a)
#define _is_utf8_mark(a) Perl__is_utf8_mark(aTHX_ a)
#define _to_utf8_upper_flags(a,b,c,d) Perl__to_utf8_upper_flags(aTHX_ a,b,c,d)
#define amagic_call(a,b,c,d) Perl_amagic_call(aTHX_ a,b,c,d)
#define amagic_deref_call(a,b) Perl_amagic_deref_call(aTHX_ a,b)
-#define append_utf8_from_native_byte S_append_utf8_from_native_byte
#define apply_attrs_string(a,b,c,d) Perl_apply_attrs_string(aTHX_ a,b,c,d)
#define atfork_lock Perl_atfork_lock
#define atfork_unlock Perl_atfork_unlock
#define av_push(a,b) Perl_av_push(aTHX_ a,b)
#define av_shift(a) Perl_av_shift(aTHX_ a)
#define av_store(a,b,c) Perl_av_store(aTHX_ a,b,c)
-#define av_top_index(a) S_av_top_index(aTHX_ a)
#define av_undef(a) Perl_av_undef(aTHX_ a)
#define av_unshift(a,b) Perl_av_unshift(aTHX_ a,b)
#define block_end(a,b) Perl_block_end(aTHX_ a,b)
#define isIDFIRST_lazy(a) Perl_isIDFIRST_lazy(aTHX_ a)
#define is_invariant_string Perl_is_invariant_string
#define is_lvalue_sub() Perl_is_lvalue_sub(aTHX)
-#define is_safe_syscall(a,b,c,d) S_is_safe_syscall(aTHX_ a,b,c,d)
#define is_uni_alnum(a) Perl_is_uni_alnum(aTHX_ a)
#define is_uni_alnum_lc(a) Perl_is_uni_alnum_lc(aTHX_ a)
#define is_uni_alnumc(a) Perl_is_uni_alnumc(aTHX_ a)
#define my_pclose(a) Perl_my_pclose(aTHX_ a)
#define my_popen(a,b) Perl_my_popen(aTHX_ a,b)
#endif
+#if !defined(PERL_NO_INLINE_FUNCTIONS)
+#define _is_utf8_char_slow S__is_utf8_char_slow
+#define append_utf8_from_native_byte S_append_utf8_from_native_byte
+#define av_top_index(a) S_av_top_index(aTHX_ a)
+#define is_safe_syscall(a,b,c,d) S_is_safe_syscall(aTHX_ a,b,c,d)
+#endif
#if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY))
#define my_bcopy Perl_my_bcopy
#endif
#define reg_temp_copy(a,b) Perl_reg_temp_copy(aTHX_ a,b)
#define report_uninit(a) Perl_report_uninit(aTHX_ a)
#define sv_magicext_mglob(a) Perl_sv_magicext_mglob(aTHX_ a)
-#define sv_only_taint_gmagic S_sv_only_taint_gmagic
#define validate_proto(a,b,c) Perl_validate_proto(aTHX_ a,b,c)
#define vivify_defelem(a) Perl_vivify_defelem(aTHX_ a)
#define yylex() Perl_yylex(aTHX)
#define invlist_trim S_invlist_trim
# endif
# endif
+# if !defined(PERL_NO_INLINE_FUNCTIONS)
+#define sv_only_taint_gmagic S_sv_only_taint_gmagic
+# endif
# if defined(DEBUGGING)
# if defined(PERL_IN_REGCOMP_C)
#define dump_trie(a,b,c,d) S_dump_trie(aTHX_ a,b,c,d)
#define mem_log_common S_mem_log_common
# endif
# endif
+# if defined(PERL_MEM_LOG)
+#define mem_log_alloc Perl_mem_log_alloc
+#define mem_log_free Perl_mem_log_free
+#define mem_log_realloc Perl_mem_log_realloc
+# endif
# if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
#define pidgone(a,b) S_pidgone(aTHX_ a,b)
# endif
use warnings;
use Carp;
-our $VERSION = '0.72';
+our $VERSION = '0.72_01';
require XSLoader;
OUTPUT:
RETVAL
+#if defined(WIN32) && defined(PERL_IMPLICIT_SYS)
+
+const char *
+PerlDir_mapA(const char *path)
+
+const WCHAR *
+PerlDir_mapW(const WCHAR *wpath)
+
+#endif
--- /dev/null
+#!perl -w
+use strict;
+use Test::More;
+use XS::APItest;
+use Config;
+
+plan skip_all => "Tests only apply on MSWin32"
+ unless $^O eq "MSWin32";
+
+SKIP:
+{
+ # [perl #126755] previous the bad drive tests would crash
+ $Config{ccflags} =~ /(?:\A|\s)-DPERL_IMPLICIT_SYS\b/
+ or skip "need implicit_sys for this test", 1;
+ eval "use Encode; 1"
+ or skip "Can't load Encode", 1;
+ for my $letter ("A" .. "Z", "a" .. "z") {
+ my $good_drive = $letter . ":";
+ my $result = PerlDir_mapA($good_drive);
+ like($result, qr/^$letter:\\/i, "check good drive $letter");
+
+ my $wgood_drive = encode("UTF-16LE", $good_drive . "\0");
+ $result = PerlDir_mapW($wgood_drive);
+ like(decode("UTF16-LE", $result), qr/^$letter:\\/i,
+ "check a good drive (wide)");
+ }
+ for my $bad ('@', '[', '!', '~', '`', '{') {
+ my $bad_drive = "$bad:";
+ my $result = PerlDir_mapA($bad_drive);
+ is($result, $bad_drive, "check bad drive $bad:");
+
+ my $wbad_drive = encode("UTF-16LE", $bad_drive . "\0");
+ $result = PerlDir_mapW($wbad_drive);
+ is(decode("UTF16-LE", $result), "$bad_drive\0",
+ "check bad drive $bad: (wide)");
+ }
+}
+
+done_testing();
XS::APItest::PtrTable T_PTROBJ
+
+const WCHAR * WPV
+
+INPUT
+
+WPV
+ $var = ($type)SvPV_nolen($arg);
+
+OUTPUT
+
+WPV
+ sv_setpvn($arg, (const char *)($var), sizeof(WCHAR) * (1+wcslen($var)));
* - lots of ENV reads
*/
-PERL_EXPORT_C Malloc_t Perl_mem_log_alloc(const UV n, const UV typesize, const char *type_name, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname);
-
-PERL_EXPORT_C Malloc_t Perl_mem_log_realloc(const UV n, const UV typesize, const char *type_name, Malloc_t oldalloc, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname);
-
-PERL_EXPORT_C Malloc_t Perl_mem_log_free(Malloc_t oldalloc, const char *filename, const int linenumber, const char *funcname);
-
# ifdef PERL_CORE
# ifndef PERL_MEM_LOG_NOIMPL
enum mem_log_type {
# 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.22.1
+# mkdir -p /opt/perl-catamount/lib/perl5/5.22.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.22.1
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.22.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
# makefile in the same place. Since Darwin uses GNU make, this dodges
# the problem.
firstmakefile=GNUmakefile;
+
+# Parts of the system call setenv(), in particular in an atfork handler.
+# This causes problems when the child tries to clean up environ[], so
+# let libc manage environ[].
+cat >> config.over <<'EOOVER'
+if test "$d_unsetenv" = "$define" -a \
+ `expr "$ccflags" : '.*-DPERL_USE_SAFE_PUTENV'` -eq 0; then
+ ccflags="$ccflags -DPERL_USE_SAFE_PUTENV"
+fi
+EOOVER
PERLVARI(I, statname, SV *, NULL)
#ifdef HAS_TIMES
-/* Will be removed soon after v5.22.1. See RT #121351 */
+/* Will be removed soon after v5.22.2. See RT #121351 */
PERLVAR(I, timesbuf, struct tms)
#endif
PERLVARI(I, padlist_generation, U32, 1) /* id to identify padlist clones */
-/* The last unconditional member of the interpreter structure when 5.22.1 was
+/* The last unconditional member of the interpreter structure when 5.22.2 was
released. The offset of the end of this is baked into a global variable in
any shared perl library which will allow a sanity test in future perl
releases. */
our %bits;
-our $VERSION = "5.022001";
+our $VERSION = "5.022002";
$bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
$bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
type = o->op_type;
/* an op should only ever acquire op_private flags that we know about.
- * If this fails, you may need to fix something in regen/op_private */
- if (o->op_ppaddr == PL_ppaddr[o->op_type]) {
+ * If this fails, you may need to fix something in regen/op_private.
+ * Don't bother testing if:
+ * * the op_ppaddr doesn't match the op; someone may have
+ * overridden the op and be doing strange things with it;
+ * * we've errored, as op flags are often left in an
+ * inconsistent state then. Note that an error when
+ * compiling the main program leaves PL_parser NULL, so
+ * we can't spot faults in the main code, onoly
+ * evaled/required code */
+#ifdef DEBUGGING
+ if ( o->op_ppaddr == PL_ppaddr[o->op_type]
+ && PL_parser
+ && !PL_parser->error_count)
+ {
assert(!(o->op_private & ~PL_op_private_valid[type]));
}
+#endif
if (o->op_private & OPpREFCOUNTED) {
switch (type) {
continue;
svp = cSVOPx_svp(key_op);
+ /* make sure it's not a bareword under strict subs */
+ if (key_op->op_private & OPpCONST_BARE &&
+ key_op->op_private & OPpCONST_STRICT)
+ {
+ no_bareword_allowed((OP*)key_op);
+ }
+
/* Make the CONST have a shared SV */
if ( !SvIsCOW_shared_hash(sv = *svp)
&& SvTYPE(sv) < SVt_PVMG
PadnameLVALUE_on(pn);
while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) {
cv = CvOUTSIDE(cv);
- assert(cv);
+ /* RT #127786: cv can be NULL due to an eval within the DB package
+ * called from an anon sub - anon subs don't have CvOUTSIDE() set
+ * unless they contain an eval, but calling eval within DB
+ * pretends the eval was done in the caller's scope.
+ */
+ if (!cv)
+ break;
assert(CvPADLIST(cv));
pn =
PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)];
S_op_const_sv(aTHX_ start, PL_compcv, cBOOL(CvCLONE(PL_compcv)));
if (SvPOK(gv) || (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)) {
- assert (block);
cv_ckproto_len_flags((const CV *)gv,
o ? (const GV *)cSVOPo->op_sv : NULL, ps,
ps_len, ps_utf8|CV_CKPROTO_CURSTASH);
Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
{
OP *aop;
+
PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST;
+
aop = cUNOPx(entersubop)->op_first;
if (!OpHAS_SIBLING(aop))
aop = cUNOPx(aop)->op_first;
for (aop = OpSIBLING(aop); OpHAS_SIBLING(aop); aop = OpSIBLING(aop)) {
+ /* skip the extra attributes->import() call implicitly added in
+ * something like foo(my $x : bar)
+ */
+ if ( aop->op_type == OP_ENTERSUB
+ && (aop->op_flags & OPf_WANT) == OPf_WANT_VOID
+ )
+ continue;
list(aop);
op_lvalue(aop, OP_ENTERSUB);
}
#define PERL_REVISION 5 /* age */
#define PERL_VERSION 22 /* 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
const char * const err = "Failed to create a fake bit bucket";
if (strEQ(scriptname, BIT_BUCKET)) {
#ifdef HAS_MKSTEMP /* Hopefully mkstemp() is safe here. */
- int old_umask = umask(0600);
+ int old_umask = umask(0177);
int tmpfd = mkstemp(tmpname);
umask(old_umask);
if (tmpfd > -1) {
}
if (env) {
char *s, *old_var;
+ STRLEN nlen;
SV *sv;
+ HV *dups = newHV();
+
for (; *env; env++) {
old_var = *env;
if (!(s = strchr(old_var,'=')) || s == old_var)
continue;
+ nlen = s - old_var;
#if defined(MSDOS) && !defined(DJGPP)
*s = '\0';
(void)strupr(old_var);
*s = '=';
#endif
- sv = newSVpv(s+1, 0);
- (void)hv_store(hv, old_var, s - old_var, sv, 0);
+ if (hv_exists(hv, old_var, nlen)) {
+ const char *name = savepvn(old_var, nlen);
+
+ /* make sure we use the same value as getenv(), otherwise code that
+ uses getenv() (like setlocale()) might see a different value to %ENV
+ */
+ sv = newSVpv(PerlEnv_getenv(name), 0);
+
+ /* keep a count of the dups of this name so we can de-dup environ later */
+ if (hv_exists(dups, name, nlen))
+ ++SvIVX(*hv_fetch(dups, name, nlen, 0));
+ else
+ (void)hv_store(dups, name, nlen, newSViv(1), 0);
+
+ Safefree(name);
+ }
+ else {
+ sv = newSVpv(s+1, 0);
+ }
+ (void)hv_store(hv, old_var, nlen, sv, 0);
if (env_is_not_environ)
mg_set(sv);
}
+ if (HvKEYS(dups)) {
+ /* environ has some duplicate definitions, remove them */
+ HE *entry;
+ hv_iterinit(dups);
+ while ((entry = hv_iternext_flags(dups, 0))) {
+ STRLEN nlen;
+ const char *name = HePV(entry, nlen);
+ IV count = SvIV(HeVAL(entry));
+ IV i;
+ SV **valp = hv_fetch(hv, name, nlen, 0);
+
+ assert(valp);
+
+ /* try to remove any duplicate names, depending on the
+ * implementation used in my_setenv() the iteration might
+ * not be necessary, but let's be safe.
+ */
+ for (i = 0; i < count; ++i)
+ my_setenv(name, 0);
+
+ /* and set it back to the value we set $ENV{name} to */
+ my_setenv(name, SvPV_nolen(*valp));
+ }
+ }
+ SvREFCNT_dec_NN(dups);
}
#endif /* USE_ENVIRON_ARRAY */
#endif /* !PERL_MICRO */
char tempname[] = "/tmp/PerlIO_XXXXXX";
const char * const tmpdir = TAINTING_get ? NULL : PerlEnv_getenv("TMPDIR");
SV * sv = NULL;
- int old_umask = umask(0600);
+ int old_umask = umask(0177);
/*
* I have no idea how portable mkstemp() is ... NI-S
*/
* 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.22.1" /**/
-#define PRIVLIB_EXP "/sys/lib/perl/5.22.1" /**/
+#define PRIVLIB "/sys/lib/perl/5.22.2" /**/
+#define PRIVLIB_EXP "/sys/lib/perl/5.22.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.22.1/site_perl" /**/
-#define SITELIB_EXP "/sys/lib/perl/5.22.1/site_perl" /**/
-#define SITELIB_STEM "/sys/lib/perl/5.22.1/site_perl" /**/
+#define SITELIB "/sys/lib/perl/5.22.2/site_perl" /**/
+#define SITELIB_EXP "/sys/lib/perl/5.22.2/site_perl" /**/
+#define SITELIB_STEM "/sys/lib/perl/5.22.2/site_perl" /**/
/* Size_t_size:
* This symbol holds the size of a Size_t in bytes.
api_version='22'
api_versionstring='5.22.0'
ar='ar'
-archlib='/sys/lib/perl5/5.22.1/386'
-archlibexp='/sys/lib/perl5/5.22.1/386'
+archlib='/sys/lib/perl5/5.22.2/386'
+archlibexp='/sys/lib/perl5/5.22.2/386'
archname64=''
archname='386'
archobjs=''
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='/sys/lib/perl/5.22.1/386'
+installarchlib='/sys/lib/perl/5.22.2/386'
installbin='/usr/bin'
installman1dir='/sys/man/1pub'
installman3dir='/sys/man/2pub'
installprefix='/usr'
installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.22.1'
+installprivlib='/sys/lib/perl/5.22.2'
installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.22.1/site_perl/386'
+installsitearch='/sys/lib/perl/5.22.2/site_perl/386'
installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.22.1/site_perl'
+installsitelib='/sys/lib/perl/5.22.2/site_perl'
installstyle='lib/perl5'
installusrbinperl='undef'
installvendorarch=''
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/sys/lib/perl/5.22.1'
-privlibexp='/sys/lib/perl/5.22.1'
+privlib='/sys/lib/perl/5.22.2'
+privlibexp='/sys/lib/perl/5.22.2'
procselfexe=''
prototype='define'
ptrsize='4'
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.22.1/site_perl/386'
+sitearch='/sys/lib/perl/5.22.2/site_perl/386'
sitearchexp='/sys/lib/perl/site_perl/386'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.22.1/site_perl'
-sitelib_stem='/sys/lib/perl/5.22.1/site_perl'
-sitelibexp='/sys/lib/perl/5.22.1/site_perl'
+sitelib='/sys/lib/perl/5.22.2/site_perl'
+sitelib_stem='/sys/lib/perl/5.22.2/site_perl'
+sitelibexp='/sys/lib/perl/5.22.2/site_perl'
siteprefix='/usr'
siteprefixexp='/usr'
sizesize='4'
strerror_r_proto='0'
strings='/sys/include/ape/string.h'
submit=''
-subversion='1'
+subversion='2'
sysman='/sys/man/1pub'
tail=''
tar=''
vendorlibexp=''
vendorprefix=''
vendorprefixexp=''
-version='5.22.1'
-version_patchlevel_string='version 22 subversion 1'
+version='5.22.2'
+version_patchlevel_string='version 22 subversion 2'
versiononly='undef'
vi=''
xlibpth=''
config_argc=0
PERL_REVISION=5
PERL_VERSION=22
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
PERL_API_REVISION=5
PERL_API_VERSION=22
PERL_API_SUBVERSION=0
/roffitall
# generated
-/perl5221delta.pod
+/perl5222delta.pod
/perlapi.pod
/perlintern.pod
*.html
--- /dev/null
+=encoding utf8
+
+=head1 NAME
+
+perl5221delta - what is new for perl v5.22.1
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.22.0 release and the 5.22.1
+release.
+
+If you are upgrading from an earlier release such as 5.20.0, first read
+L<perl5220delta>, which describes differences between 5.20.0 and 5.22.0.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.20.0 other than the
+following single exception, which we deemed to be a sensible change to make in
+order to get the new C<\b{wb}> and (in particular) C<\b{sb}> features sane
+before people decided they're worthless because of bugs in their Perl 5.22.0
+implementation and avoided them in the future.
+If any others exist, they are bugs, and we request that you submit a report.
+See L</Reporting Bugs> below.
+
+=head2 Bounds Checking Constructs
+
+Several bugs, including a segmentation fault, have been fixed with the bounds
+checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>,
+C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty
+string; none of the C<\b{}> ones do.
+L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319>
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20150520 to 5.20151213.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded from version 0.22 to 0.23.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.53 to 1.53_01.
+
+If C<POSIX::strerror> was passed C<$!> as its argument then it accidentally
+cleared C<$!>. This has been fixed.
+L<[perl #126229]|https://rt.perl.org/Ticket/Display.html?id=126229>
+
+=item *
+
+L<Storable> has been upgraded from version 2.53 to 2.53_01.
+
+=item *
+
+L<warnings> has been upgraded from version 1.32 to 1.34.
+
+The C<warnings::enabled> example now actually uses C<warnings::enabled>.
+L<[perl #126051]|https://rt.perl.org/Ticket/Display.html?id=126051>
+
+=item *
+
+L<Win32> has been upgraded from version 0.51 to 0.52.
+
+This has been updated for Windows 8.1, 10 and 2012 R2 Server.
+
+=back
+
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perltie>
+
+=over 4
+
+=item *
+
+The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified.
+
+=back
+
+=head3 L<perlvar>
+
+=over 4
+
+=item *
+
+The specific true value of C<$!{E...}> is now documented, noting that it is
+subject to change and not guaranteed.
+
+=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 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+The C<printf> and C<sprintf> builtins are now more careful about the warnings
+they emit: argument reordering now disables the "redundant argument" warning in
+all cases.
+L<[perl #125469]|https://rt.perl.org/Ticket/Display.html?id=125469>
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+Using the C<NO_HASH_SEED> define in combination with the default hash algorithm
+C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling
+the interpreter, since Perl 5.17.10. This has been fixed.
+
+=item *
+
+Configuring with ccflags containing quotes (e.g.
+C<< -Accflags='-DAPPLLIB_EXP=\"/usr/libperl\"' >>) was broken in Perl 5.22.0
+but has now been fixed again.
+L<[perl #125314]|https://rt.perl.org/Ticket/Display.html?id=125314>
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item IRIX
+
+=over
+
+=item *
+
+Under some circumstances IRIX stdio fgetc() and fread() set the errno to
+C<ENOENT>, which made no sense according to either IRIX or POSIX docs. Errno
+is now cleared in such cases.
+L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977>
+
+=item *
+
+Problems when multiplying long doubles by infinity have been fixed.
+L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396>
+
+=item *
+
+All tests pass now on IRIX with the default build configuration.
+
+=back
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+C<qr/(?[ () ])/> no longer segfaults, giving a syntax error message instead.
+L<[perl #125805]|https://rt.perl.org/Ticket/Display.html?id=125805>
+
+=item *
+
+Regular expression possessive quantifier Perl 5.20 regression now fixed.
+C<qr/>I<PAT>C<{>I<min>,I<max>C<}+>C</> is supposed to behave identically to
+C<qr/(?E<gt>>I<PAT>C<{>I<min>,I<max>C<})/>. Since Perl 5.20, this didn't work
+if I<min> and I<max> were equal.
+L<[perl #125825]|https://rt.perl.org/Ticket/Display.html?id=125825>
+
+=item *
+
+Certain syntax errors in
+L<perlrecharclass/Extended Bracketed Character Classes> caused panics instead
+of the proper error message. This has now been fixed.
+L<[perl #126481]|https://rt.perl.org/Ticket/Display.html?id=126481>
+
+=item *
+
+C<< BEGIN <> >> no longer segfaults and properly produces an error message.
+L<[perl #125341]|https://rt.perl.org/Ticket/Display.html?id=125341>
+
+=item *
+
+A regression from Perl 5.20 has been fixed, in which some syntax errors in
+L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs
+within regular expression patterns could cause a segfault instead of a proper
+error message.
+L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180>
+
+=item *
+
+Another problem with
+L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes>
+constructs has been fixed wherein things like C<\c]> could cause panics.
+L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181>
+
+=item *
+
+In Perl 5.22.0, the logic changed when parsing a numeric parameter to the -C
+option, such that the successfully parsed number was not saved as the option
+value if it parsed to the end of the argument.
+L<[perl #125381]|https://rt.perl.org/Ticket/Display.html?id=125381>
+
+=item *
+
+Warning fatality is now ignored when rewinding the stack. This prevents
+infinite recursion when the now fatal error also causes rewinding of the stack.
+L<[perl #123398]|https://rt.perl.org/Ticket/Display.html?id=123398>
+
+=item *
+
+A crash with C<< %::=(); J->${\"::"} >> has been fixed.
+L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541>
+
+=item *
+
+Nested quantifiers such as C</.{1}??/> should cause perl to throw a fatal
+error, but were being silently accepted since Perl 5.20.0. This has been
+fixed.
+L<[perl #126253]|https://rt.perl.org/Ticket/Display.html?id=126253>
+
+=item *
+
+Regular expression sequences such as C</(?i/> (and similarly with other
+recognized flags or combination of flags) should cause perl to throw a fatal
+error, but were being silently accepted since Perl 5.18.0. This has been
+fixed.
+L<[perl #126178]|https://rt.perl.org/Ticket/Display.html?id=126178>
+
+=item *
+
+A bug in hexadecimal floating point literal support meant that high-order bits
+could be lost in cases where mantissa overflow was caused by too many trailing
+zeros in the fractional part. This has been fixed.
+L<[perl #126582]|https://rt.perl.org/Ticket/Display.html?id=126582>
+
+=item *
+
+Another hexadecimal floating point bug, causing low-order bits to be lost in
+cases where the last hexadecimal digit of the mantissa has bits straddling the
+limit of the number of bits allowed for the mantissa, has also been fixed.
+L<[perl #126586]|https://rt.perl.org/Ticket/Display.html?id=126586>
+
+=item *
+
+Further hexadecimal floating point bugs have been fixed: In some circumstances,
+the C<%a> format specifier could variously lose the sign of the negative zero,
+fail to display zeros after the radix point with the requested precision, or
+even lose the radix point after the leftmost hexadecimal digit completely.
+
+=item *
+
+A crash caused by incomplete expressions within C<< /(?[ ])/ >> (e.g.
+C<< /(?[[0]+()+])/ >>) has been fixed.
+L<[perl #126615]|https://rt.perl.org/Ticket/Display.html?id=126615>
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.22.1 represents approximately 6 months of development since Perl 5.22.0
+and contains approximately 19,000 lines of changes across 130 files from 27
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 1,700 lines of changes to 44 .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.22.1:
+
+Aaron Crane, Abigail, Andy Broad, Aristotle Pagaltzis, Chase Whitener, Chris
+'BinGOs' Williams, Craig A. Berry, Daniel Dragan, David Mitchell, Father
+Chrysostomos, Herbert Breunung, Hugo van der Sanden, James E Keenan, Jan
+Dubois, Jarkko Hietaniemi, Karen Etheridge, Karl Williamson, Lukas Mai, Matthew
+Horsfall, Peter Martini, Rafael Garcia-Suarez, Ricardo Signes, Shlomi Fish,
+Sisyphus, Steve Hay, Tony Cook, Victor Adam.
+
+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 articles recently
+posted to the comp.lang.perl.misc newsgroup and the perl bug database at
+https://rt.perl.org/ . There may also be information at
+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 please send it
+to perl5-security-report@perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who will be
+able to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently distributed on
+CPAN.
+
+=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
=head1 NAME
-perldelta - what is new for perl v5.22.1
+perldelta - what is new for perl v5.22.2
=head1 DESCRIPTION
-This document describes differences between the 5.22.0 release and the 5.22.1
+This document describes differences between the 5.22.1 release and the 5.22.2
release.
-If you are upgrading from an earlier release such as 5.20.0, first read
-L<perl5220delta>, which describes differences between 5.20.0 and 5.22.0.
+If you are upgrading from an earlier release such as 5.22.0, first read
+L<perl5221delta>, which describes differences between 5.22.0 and 5.22.1.
-=head1 Incompatible Changes
+=head1 Security
-There are no changes intentionally incompatible with 5.20.0 other than the
-following single exception, which we deemed to be a sensible change to make in
-order to get the new C<\b{wb}> and (in particular) C<\b{sb}> features sane
-before people decided they're worthless because of bugs in their Perl 5.22.0
-implementation and avoided them in the future.
-If any others exist, they are bugs, and we request that you submit a report.
-See L</Reporting Bugs> below.
+=head2 Fix out of boundary access in Win32 path handling
-=head2 Bounds Checking Constructs
+This is CVE-2015-8608. For more information see
+L<[perl #126755]|https://rt.perl.org/Ticket/Display.html?id=126755>.
-Several bugs, including a segmentation fault, have been fixed with the bounds
-checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>,
-C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty
-string; none of the C<\b{}> ones do.
-L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319>
+=head2 Fix loss of taint in C<canonpath()>
-=head1 Modules and Pragmata
+This is CVE-2015-8607. For more information see
+L<[perl #126862]|https://rt.perl.org/Ticket/Display.html?id=126862>.
-=head2 Updated Modules and Pragmata
+=head2 Set proper umask before calling C<mkstemp(3)>
-=over 4
+In 5.22.0 perl started setting umask to C<0600> before calling C<mkstemp(3)>
+and restoring it afterwards. This wrongfully tells C<open(2)> to strip the
+owner read and write bits from the given mode before applying it, rather than
+the intended negation of leaving only those bits in place.
-=item *
+Systems that use mode C<0666> in C<mkstemp(3)> (like old versions of glibc)
+create a file with permissions C<0066>, leaving world read and write permissions
+regardless of current umask.
-L<Module::CoreList> has been upgraded from version 5.20150520 to 5.20151213.
+This has been fixed by using umask C<0177> instead.
-=item *
+L<[perl #127322]|https://rt.perl.org/Ticket/Display.html?id=127322>
-L<PerlIO::scalar> has been upgraded from version 0.22 to 0.23.
+=head2 Avoid accessing uninitialized memory in Win32 C<crypt()>
-=item *
+Validation that will detect both a short salt and invalid characters in the
+salt has been added.
-L<POSIX> has been upgraded from version 1.53 to 1.53_01.
+L<[perl #126922]|https://rt.perl.org/Ticket/Display.html?id=126922>
-If C<POSIX::strerror> was passed C<$!> as its argument then it accidentally
-cleared C<$!>. This has been fixed.
-L<[perl #126229]|https://rt.perl.org/Ticket/Display.html?id=126229>
+=head2 Remove duplicate environment variables from C<environ>
-=item *
+Previously, if an environment variable appeared more than once in C<environ[]>,
+L<C<%ENV>|perlvar/%ENV> would contain the last entry for that name, while a
+typical C<getenv()> would return the first entry. We now make sure C<%ENV>
+contains the same as what C<getenv()> returns.
+
+Secondly, we now remove duplicates from C<environ[]>, so if a setting with that
+name is set in C<%ENV> we won't pass an unsafe value to a child process.
+
+This is CVE-2016-2381.
+
+=head1 Incompatible Changes
-L<Storable> has been upgraded from version 2.53 to 2.53_01.
+There are no changes intentionally incompatible with Perl 5.22.1. 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<warnings> has been upgraded from version 1.32 to 1.34.
+L<File::Spec> has been upgraded from version 3.56 to 3.56_01.
-The C<warnings::enabled> example now actually uses C<warnings::enabled>.
-L<[perl #126051]|https://rt.perl.org/Ticket/Display.html?id=126051>
+C<canonpath()> now preserves taint. See L</"Fix loss of taint in
+C<canonpath()>">.
=item *
-L<Win32> has been upgraded from version 0.51 to 0.52.
+L<Module::CoreList> has been upgraded from version 5.20151213 to 5.20160429.
-This has been updated for Windows 8.1, 10 and 2012 R2 Server.
+The version number of L<Digest::SHA> listed for Perl 5.18.4 was wrong and has
+been corrected. Likewise for the version number of L<Config> in 5.18.3 and
+5.18.4.
+L<[perl #127624]|https://rt.perl.org/Ticket/Display.html?id=127624>
=back
=head2 Changes to Existing Documentation
-=head3 L<perltie>
+=head3 L<perldiag>
=over 4
=item *
-The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified.
+The explanation of the warning "unable to close filehandle %s properly: %s"
+which can occur when doing an implicit close of a filehandle has been expanded
+and improved.
=back
-=head3 L<perlvar>
+=head3 L<perlfunc>
=over 4
=item *
-The specific true value of C<$!{E...}> is now documented, noting that it is
-subject to change and not guaranteed.
+The documentation of L<C<hex()>|perlfunc/hex> has been revised to clarify valid
+inputs.
=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 Changes to Existing Diagnostics
+=head1 Configuration and Compilation
=over 4
=item *
-The C<printf> and C<sprintf> builtins are now more careful about the warnings
-they emit: argument reordering now disables the "redundant argument" warning in
-all cases.
-L<[perl #125469]|https://rt.perl.org/Ticket/Display.html?id=125469>
+Dtrace builds now build successfully on systems with a newer dtrace that
+require an input object file that uses the probes in the F<.d> file.
-=back
+Previously the probe would fail and cause a build failure.
-=head1 Configuration and Compilation
+L<[perl #122287]|https://rt.perl.org/Ticket/Display.html?id=122287>
-=over 4
+=item *
+
+F<Configure> no longer probes for F<libnm> by default. Originally this was the
+"New Math" library, but the name has been re-used by the GNOME NetworkManager.
+
+L<[perl #127131]|https://rt.perl.org/Ticket/Display.html?id=127131>
=item *
-Using the C<NO_HASH_SEED> define in combination with the default hash algorithm
-C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling
-the interpreter, since Perl 5.17.10. This has been fixed.
+F<Configure> now knows about gcc 5.
=item *
-Configuring with ccflags containing quotes (e.g.
-C<< -Accflags='-DAPPLLIB_EXP=\"/usr/libperl\"' >>) was broken in Perl 5.22.0
-but has now been fixed again.
-L<[perl #125314]|https://rt.perl.org/Ticket/Display.html?id=125314>
+Compiling perl with B<-DPERL_MEM_LOG> now works again.
=back
=over 4
-=item IRIX
+=item Darwin
-=over
+Compiling perl with B<-Dusecbacktrace> on Darwin now works again.
-=item *
+L<[perl #127764]|https://rt.perl.org/Ticket/Display.html?id=127764>
-Under some circumstances IRIX stdio fgetc() and fread() set the errno to
-C<ENOENT>, which made no sense according to either IRIX or POSIX docs. Errno
-is now cleared in such cases.
-L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977>
+=item OS X/Darwin
-=item *
+Builds with both B<-DDEBUGGING> and threading enabled would fail with a "panic:
+free from wrong pool" error when built or tested from Terminal on OS X. This
+was caused by perl's internal management of the environment conflicting with an
+atfork handler using the libc C<setenv()> function to update the environment.
-Problems when multiplying long doubles by infinity have been fixed.
-L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396>
+Perl now uses C<setenv()>/C<unsetenv()> to update the environment on OS X.
-=item *
+L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
+
+=item ppc64el
+
+The floating point format of ppc64el (Debian naming for little-endian PowerPC)
+is now detected correctly.
-All tests pass now on IRIX with the default build configuration.
+=item Tru64
+
+A test failure in F<t/porting/extrefs.t> has been fixed.
=back
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+An unwarranted assertion in C<Perl_newATTRSUB_x()> has been removed. If a stub
+subroutine definition with a prototype has been seen, then any subsequent stub
+(or definition) of the same subroutine with an attribute was causing an
+assertion failure because of a null pointer.
+
+L<[perl #126845]|https://rt.perl.org/Ticket/Display.html?id=126845>
+
=back
=head1 Selected Bug Fixes
=item *
-C<qr/(?[ () ])/> no longer segfaults, giving a syntax error message instead.
-L<[perl #125805]|https://rt.perl.org/Ticket/Display.html?id=125805>
+Calls to the placeholder C<&PL_sv_yes> used internally when an C<import()> or
+C<unimport()> method isn't found now correctly handle scalar context.
+L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042>
+
+=item *
+
+The L<C<pipe()>|perlfunc/pipe> operator would assert for C<DEBUGGING> builds
+instead of producing the correct error message. The condition asserted on is
+detected and reported on correctly without the assertions, so the assertions
+were removed.
+L<[perl #126480]|https://rt.perl.org/Ticket/Display.html?id=126480>
+
+=item *
+
+In some cases, failing to parse a here-doc would attempt to use freed memory.
+This was caused by a pointer not being restored correctly.
+L<[perl #126443]|https://rt.perl.org/Ticket/Display.html?id=126443>
=item *
-Regular expression possessive quantifier Perl 5.20 regression now fixed.
-C<qr/>I<PAT>C<{>I<min>,I<max>C<}+>C</> is supposed to behave identically to
-C<qr/(?E<gt>>I<PAT>C<{>I<min>,I<max>C<})/>. Since Perl 5.20, this didn't work
-if I<min> and I<max> were equal.
-L<[perl #125825]|https://rt.perl.org/Ticket/Display.html?id=125825>
+Perl now reports more context when it sees an array where it expects to see an
+operator, and avoids an assertion failure.
+L<[perl #123737]|https://rt.perl.org/Ticket/Display.html?id=123737>
=item *
-Certain syntax errors in
-L<perlrecharclass/Extended Bracketed Character Classes> caused panics instead
-of the proper error message. This has now been fixed.
-L<[perl #126481]|https://rt.perl.org/Ticket/Display.html?id=126481>
+If a here-doc was found while parsing another operator, the parser had already
+read end of file, and the here-doc was not terminated, perl could produce an
+assertion or a segmentation fault. This now reliably complains about the
+unterminated here-doc.
+L<[perl #125540]|https://rt.perl.org/Ticket/Display.html?id=125540>
=item *
-C<< BEGIN <> >> no longer segfaults and properly produces an error message.
-L<[perl #125341]|https://rt.perl.org/Ticket/Display.html?id=125341>
+Parsing beyond the end of the buffer when processing a C<#line> directive with
+no filename is now avoided.
+L<[perl #127334]|https://rt.perl.org/Ticket/Display.html?id=127334>
=item *
-A regression from Perl 5.20 has been fixed, in which some syntax errors in
-L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs
-within regular expression patterns could cause a segfault instead of a proper
-error message.
-L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180>
+Perl 5.22.0 added support for the C99 hexadecimal floating point notation, but
+sometimes misparsed hex floats. This has been fixed.
+L<[perl #127183]|https://rt.perl.org/Ticket/Display.html?id=127183>
=item *
-Another problem with
-L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes>
-constructs has been fixed wherein things like C<\c]> could cause panics.
-L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181>
+Certain regex patterns involving a complemented posix class in an inverted
+bracketed character class, and matching something else optionally would
+improperly fail to match. An example of one that could fail is
+C<qr/_?[^\Wbar]\x{100}/>. This has been fixed.
+L<[perl #127537]|https://rt.perl.org/Ticket/Display.html?id=127537>
=item *
-In Perl 5.22.0, the logic changed when parsing a numeric parameter to the -C
-option, such that the successfully parsed number was not saved as the option
-value if it parsed to the end of the argument.
-L<[perl #125381]|https://rt.perl.org/Ticket/Display.html?id=125381>
+Fixed an issue with L<C<pack()>|perlfunc/pack> where C<< pack "H" >> (and
+C<< pack "h" >>) could read past the source when given a non-utf8 source and a
+utf8 target.
+L<[perl #126325]|https://rt.perl.org/Ticket/Display.html?id=126325>
=item *
-Warning fatality is now ignored when rewinding the stack. This prevents
-infinite recursion when the now fatal error also causes rewinding of the stack.
-L<[perl #123398]|https://rt.perl.org/Ticket/Display.html?id=123398>
+Fixed some cases where perl would abort due to a segmentation fault, or a
+C-level assert.
+L<[perl #126193]|https://rt.perl.org/Ticket/Display.html?id=126193>
+L<[perl #126257]|https://rt.perl.org/Ticket/Display.html?id=126257>
+L<[perl #126258]|https://rt.perl.org/Ticket/Display.html?id=126258>
+L<[perl #126405]|https://rt.perl.org/Ticket/Display.html?id=126405>
+L<[perl #126602]|https://rt.perl.org/Ticket/Display.html?id=126602>
+L<[perl #127773]|https://rt.perl.org/Ticket/Display.html?id=127773>
+L<[perl #127786]|https://rt.perl.org/Ticket/Display.html?id=127786>
=item *
-A crash with C<< %::=(); J->${\"::"} >> has been fixed.
-L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541>
+A memory leak when setting C<$ENV{foo}> on Darwin has been fixed.
+L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
=item *
-Nested quantifiers such as C</.{1}??/> should cause perl to throw a fatal
-error, but were being silently accepted since Perl 5.20.0. This has been
-fixed.
-L<[perl #126253]|https://rt.perl.org/Ticket/Display.html?id=126253>
+Perl now correctly raises an error when trying to compile patterns with
+unterminated character classes while there are trailing backslashes.
+L<[perl #126141]|https://rt.perl.org/Ticket/Display.html?id=126141>
=item *
-Regular expression sequences such as C</(?i/> (and similarly with other
-recognized flags or combination of flags) should cause perl to throw a fatal
-error, but were being silently accepted since Perl 5.18.0. This has been
-fixed.
-L<[perl #126178]|https://rt.perl.org/Ticket/Display.html?id=126178>
+C<NOTHING> regops and C<EXACTFU_SS> regops in C<make_trie()> are now handled
+properly.
+L<[perl #126206]|https://rt.perl.org/Ticket/Display.html?id=126206>
=item *
-A bug in hexadecimal floating point literal support meant that high-order bits
-could be lost in cases where mantissa overflow was caused by too many trailing
-zeros in the fractional part. This has been fixed.
-L<[perl #126582]|https://rt.perl.org/Ticket/Display.html?id=126582>
+Perl now only tests C<semctl()> if we have everything needed to use it. In
+FreeBSD the C<semctl()> entry point may exist, but it can be disabled by
+policy.
+L<[perl #127533]|https://rt.perl.org/Ticket/Display.html?id=127533>
=item *
-Another hexadecimal floating point bug, causing low-order bits to be lost in
-cases where the last hexadecimal digit of the mantissa has bits straddling the
-limit of the number of bits allowed for the mantissa, has also been fixed.
-L<[perl #126586]|https://rt.perl.org/Ticket/Display.html?id=126586>
+A regression that allowed undeclared barewords as hash keys to work despite
+strictures has been fixed.
+L<[perl #126981]|https://rt.perl.org/Ticket/Display.html?id=126981>
=item *
-Further hexadecimal floating point bugs have been fixed: In some circumstances,
-the C<%a> format specifier could variously lose the sign of the negative zero,
-fail to display zeros after the radix point with the requested precision, or
-even lose the radix point after the leftmost hexadecimal digit completely.
+As an optimization (introduced in Perl 5.20.0), L<C<uc()>|perlfunc/uc>,
+L<C<lc()>|perlfunc/lc>, L<C<ucfirst()>|perlfunc/ucfirst> and
+L<C<lcfirst()>|perlfunc/lcfirst> sometimes modify their argument in-place
+rather than returning a modified copy. The criteria for this optimization has
+been made stricter to avoid these functions accidentally modifying in-place
+when they should not, which has been happening in some cases, e.g. in
+L<List::Util>.
=item *
-A crash caused by incomplete expressions within C<< /(?[ ])/ >> (e.g.
-C<< /(?[[0]+()+])/ >>) has been fixed.
-L<[perl #126615]|https://rt.perl.org/Ticket/Display.html?id=126615>
+Excessive memory usage in the compilation of some regular expressions involving
+non-ASCII characters has been reduced. A more complete fix is forthcoming in
+Perl 5.24.0.
=back
=head1 Acknowledgements
-Perl 5.22.1 represents approximately 6 months of development since Perl 5.22.0
-and contains approximately 19,000 lines of changes across 130 files from 27
+Perl 5.22.2 represents approximately 5 months of development since Perl 5.22.1
+and contains approximately 3,000 lines of changes across 110 files from 24
authors.
Excluding auto-generated files, documentation and release tools, there were
-approximately 1,700 lines of changes to 44 .pm, .t, .c and .h files.
+approximately 1,500 lines of changes to 52 .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.22.1:
+the improvements that became Perl 5.22.2:
-Aaron Crane, Abigail, Andy Broad, Aristotle Pagaltzis, Chase Whitener, Chris
-'BinGOs' Williams, Craig A. Berry, Daniel Dragan, David Mitchell, Father
-Chrysostomos, Herbert Breunung, Hugo van der Sanden, James E Keenan, Jan
-Dubois, Jarkko Hietaniemi, Karen Etheridge, Karl Williamson, Lukas Mai, Matthew
-Horsfall, Peter Martini, Rafael Garcia-Suarez, Ricardo Signes, Shlomi Fish,
-Sisyphus, Steve Hay, Tony Cook, Victor Adam.
+Aaron Crane, Abigail, Andreas König, Aristotle Pagaltzis, Chris 'BinGOs'
+Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, David Golden, David
+Mitchell, H.Merijn Brand, James E Keenan, Jarkko Hietaniemi, Karen Etheridge,
+Karl Williamson, Matthew Horsfall, Niko Tyni, Ricardo Signes, Sawyer X, Stevan
+Little, Steve Hay, Todd Rinaldo, Tony Cook, Vladimir Timofeev, 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
If you find what you think is a bug, you might check the articles recently
posted to the comp.lang.perl.misc newsgroup and the perl bug database at
-https://rt.perl.org/ . There may also be information at
-http://www.perl.org/ , the Perl Home Page.
+https://rt.perl.org/ . There may also be information at 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
=item Warning: unable to close filehandle %s properly: %s
-(S io) An error occurred when Perl implicitly closed a filehandle. This
-usually indicates your file system ran out of disk space.
+(S io) There were errors during the implicit close() done on a filehandle
+when its reference count reached zero while it was still open, e.g.:
+
+ {
+ open my $fh, '>', $file or die "open: '$file': $!\n";
+ print $fh $data or die "print: $!";
+ } # implicit close here
+
+Because various errors may only be detected by close() (e.g. buffering could
+allow the C<print> in this example to return true even when the disk is full),
+it is dangerous to ignore its result. So when it happens implicitly, perl will
+signal errors by warning.
+
+B<Prior to version 5.22.0, perl ignored such errors>, so the common idiom shown
+above was liable to cause B<silent data loss>.
=item Warning: Use of "%s" without parentheses is ambiguous
For example:
use Fcntl;
- fcntl($filehandle, F_GETFL, $packed_return_buffer)
+ my $flags = fcntl($filehandle, F_GETFL, 0)
or die "can't fcntl F_GETFL: $!";
You don't have to check for C<defined> on the return from C<fcntl>.
=item hex
-=for Pod::Functions convert a string to a hexadecimal number
+=for Pod::Functions convert a hexadecimal string to a number
-Interprets EXPR as a hex string and returns the corresponding value.
-(To convert strings that might start with either C<0>, C<0x>, or C<0b>, see
-L</oct>.) If EXPR is omitted, uses C<$_>.
+Interprets EXPR as a hex string and returns the corresponding numeric value.
+If EXPR is omitted, uses C<$_>.
print hex '0xAf'; # prints '175'
print hex 'aF'; # same
+ $valid_input =~ /\A(?:0?[xX])?(?:_?[0-9a-fA-F])*\z/
+
+A hex string consists of hex digits and an optional C<0x> or C<x> prefix.
+Each hex digit may be preceded by a single underscore, which will be ignored.
+Any other character triggers a warning and causes the rest of the string
+to be ignored (even leading whitespace, unlike L</oct>).
+Only integers can be represented, and integer overflow triggers a warning.
-Hex strings may only represent integers. Strings that would cause
-integer overflow trigger a warning. Leading whitespace is not stripped,
-unlike oct(). To present something as hex, look into L</printf>,
+To convert strings that might start with any of C<0>, C<0x>, or C<0b>, see L</oct>.
+To present something as hex, look into L</printf>,
L</sprintf>, and L</unpack>.
=item import LIST
May be interrupted if the process receives a signal such as C<SIGALRM>.
eval {
- local $SIG{ALARM} = sub { die "Alarm!\n" };
+ local $SIG{ALRM} = sub { die "Alarm!\n" };
sleep;
};
die $@ unless $@ eq "Alarm!\n";
=head2 PERL_MEM_LOG
-If compiled with C<-DPERL_MEM_LOG>, both memory and SV allocations go
-through logging functions, which is handy for breakpoint setting.
+If compiled with C<-DPERL_MEM_LOG> (C<-Accflags=-DPERL_MEM_LOG>), both
+memory and SV allocations go through logging functions, which is
+handy for breakpoint setting.
-Unless C<-DPERL_MEM_LOG_NOIMPL> is also compiled, the logging functions
-read $ENV{PERL_MEM_LOG} to determine whether to log the event, and if
-so how:
+Unless C<-DPERL_MEM_LOG_NOIMPL> (C<-Accflags=-DPERL_MEM_LOG_NOIMPL>) is
+also compiled, the logging functions read $ENV{PERL_MEM_LOG} to
+determine whether to log the event, and if so how:
$ENV{PERL_MEM_LOG} =~ /m/ Log all memory ops
$ENV{PERL_MEM_LOG} =~ /s/ Log all SV ops
Steve 5.22.1-RC3 2015-Dec-02
Steve 5.22.1-RC4 2015-Dec-08
Steve 5.22.1 2015-Dec-13
+ Steve 5.22.2-RC1 2016-Apr-10
+ Steve 5.22.2 2016-Apr-29
Ricardo 5.23.0 2015-Jun-20 The 5.23 development track
Matthew 5.23.1 2015-Jul-20
Peter 5.23.3 2015-Sep-20
Steve 5.23.4 2015-Oct-20
Abigail 5.23.5 2015-Nov-20
+ David G 5.23.6 2015-Dec-21
+ Stevan 5.23.7 2016-Jan-20
+ Sawyer X 5.23.8 2016-Feb-20
+ Abigail 5.23.9 2016-Mar-20
=head2 SELECTED RELEASE SIZES
The I<portable filename characters> as defined by ANSI C are
- a b c d e f g h i j k l m n o p q r t u v w x y z
- A B C D E F G H I J K L M N O P Q R T U V W X Y Z
+ a b c d e f g h i j k l m n o p q r s t u v w x y z
+ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
. _ -
# @harry is (1,2,3)
my $type = ref $thingy;
- ($type ? $type == 'ARRAY' ? \@foo : \$bar : $baz) = $thingy;
+ ($type ? $type eq 'ARRAY' ? \@foo : \$bar : $baz) = $thingy;
The C<foreach> loop can also take a reference constructor for its loop
variable, though the syntax is limited to one of the following, with an
}
foreach \my %h (@array_of_hashes) {
- $h{gelastic}++ if $h{type} == 'funny';
+ $h{gelastic}++ if $h{type} eq 'funny';
}
B<CAVEAT:> Aliasing does not work correctly with closures. If you try to
/* We may be able to get away with changing only the first character, in
* place, but not if read-only, etc. Later we may discover more reasons to
* not convert in-place. */
- inplace = !SvREADONLY(source)
- && ( SvPADTMP(source)
- || ( SvTEMP(source) && !SvSMAGICAL(source)
- && SvREFCNT(source) == 1));
+ inplace = !SvREADONLY(source) && SvPADTMP(source);
/* First calculate what the changed first character should be. This affects
* whether we can just swap it out, leaving the rest of the string unchanged,
SvGETMAGIC(source);
- if ((SvPADTMP(source)
- ||
- (SvTEMP(source) && !SvSMAGICAL(source) && SvREFCNT(source) == 1))
+ if ( SvPADTMP(source)
&& !SvREADONLY(source) && SvPOK(source)
&& !DO_UTF8(source)
&& (
SvGETMAGIC(source);
- if ( ( SvPADTMP(source)
- || ( SvTEMP(source) && !SvSMAGICAL(source)
- && SvREFCNT(source) == 1 )
- )
+ if ( SvPADTMP(source)
&& !SvREADONLY(source) && SvPOK(source)
&& !DO_UTF8(source)) {
SV **lelem;
if (GIMME_V != G_ARRAY) {
- I32 ix = SvIV(*lastlelem);
- if (ix < 0)
- ix += max;
- if (ix < 0 || ix >= max)
- *firstlelem = &PL_sv_undef;
- else
- *firstlelem = firstrelem[ix];
- SP = firstlelem;
- RETURN;
+ if (lastlelem < firstlelem) {
+ *firstlelem = &PL_sv_undef;
+ }
+ else {
+ I32 ix = SvIV(*lastlelem);
+ if (ix < 0)
+ ix += max;
+ if (ix < 0 || ix >= max)
+ *firstlelem = &PL_sv_undef;
+ else
+ *firstlelem = firstrelem[ix];
+ }
+ SP = firstlelem;
+ RETURN;
}
if (max == 0) {
SP = PL_stack_base + POPMARK;
else
(void)POPMARK;
+ if (GIMME_V == G_SCALAR)
+ PUSHs(&PL_sv_undef);
RETURN;
}
SvGETMAGIC(sv);
if (howlen == e_star) len = fromlen;
field_len = (len+1)/2;
GROWING(utf8, cat, start, cur, field_len);
- if (!utf8 && len > (I32)fromlen) len = fromlen;
+ if (!utf8_source && len > (I32)fromlen) len = fromlen;
bits = 0;
l = 0;
if (datumtype == 'H')
GV * const wgv = MUTABLE_GV(POPs);
GV * const rgv = MUTABLE_GV(POPs);
- assert (isGV_with_GP(rgv));
- assert (isGV_with_GP(wgv));
rstio = GvIOn(rgv);
if (IoIFP(rstio))
do_close(rgv, FALSE);
#define PERL_ARGS_ASSERT__IS_UTF8_FOO \
assert(p)
-PERL_STATIC_INLINE STRLEN S__is_utf8_char_slow(const U8 *s, const U8 *e)
- __attribute__warn_unused_result__
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-#define PERL_ARGS_ASSERT__IS_UTF8_CHAR_SLOW \
- assert(s); assert(e)
-
PERL_CALLCONV bool Perl__is_utf8_idcont(pTHX_ const U8 *p)
__attribute__warn_unused_result__
__attribute__nonnull__(pTHX_1);
assert(ref)
PERL_CALLCONV bool Perl_amagic_is_enabled(pTHX_ int method);
-PERL_STATIC_INLINE void S_append_utf8_from_native_byte(const U8 byte, U8** dest)
- __attribute__nonnull__(2);
-#define PERL_ARGS_ASSERT_APPEND_UTF8_FROM_NATIVE_BYTE \
- assert(dest)
-
PERL_CALLCONV I32 Perl_apply(pTHX_ I32 type, SV** mark, SV** sp)
__attribute__nonnull__(pTHX_2)
__attribute__nonnull__(pTHX_3);
__attribute__warn_unused_result__
__attribute__nonnull__(pTHX_1); */
-PERL_STATIC_INLINE SSize_t S_av_top_index(pTHX_ AV *av)
- __attribute__warn_unused_result__
- __attribute__nonnull__(pTHX_1);
-#define PERL_ARGS_ASSERT_AV_TOP_INDEX \
- assert(av)
-
PERL_CALLCONV void Perl_av_undef(pTHX_ AV *av)
__attribute__nonnull__(pTHX_1);
#define PERL_ARGS_ASSERT_AV_UNDEF \
PERL_CALLCONV I32 Perl_is_lvalue_sub(pTHX)
__attribute__warn_unused_result__;
-PERL_STATIC_INLINE bool S_is_safe_syscall(pTHX_ const char *pv, STRLEN len, const char *what, const char *op_name)
- __attribute__warn_unused_result__
- __attribute__nonnull__(pTHX_1)
- __attribute__nonnull__(pTHX_3)
- __attribute__nonnull__(pTHX_4);
-#define PERL_ARGS_ASSERT_IS_SAFE_SYSCALL \
- assert(pv); assert(what); assert(op_name)
-
PERL_CALLCONV bool Perl_is_uni_alnum(pTHX_ UV c)
__attribute__deprecated__
__attribute__warn_unused_result__
#define PERL_ARGS_ASSERT_SV_NV \
assert(sv)
-PERL_STATIC_INLINE bool S_sv_only_taint_gmagic(SV *sv)
- __attribute__nonnull__(1);
-#define PERL_ARGS_ASSERT_SV_ONLY_TAINT_GMAGIC \
- assert(sv)
-
PERL_CALLCONV char* Perl_sv_peek(pTHX_ SV* sv);
PERL_CALLCONV void Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
__attribute__nonnull__(pTHX_2);
# endif
#endif
+#if !defined(PERL_NO_INLINE_FUNCTIONS)
+PERL_STATIC_INLINE STRLEN S__is_utf8_char_slow(const U8 *s, const U8 *e)
+ __attribute__warn_unused_result__
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
+#define PERL_ARGS_ASSERT__IS_UTF8_CHAR_SLOW \
+ assert(s); assert(e)
+
+PERL_STATIC_INLINE void S_append_utf8_from_native_byte(const U8 byte, U8** dest)
+ __attribute__nonnull__(2);
+#define PERL_ARGS_ASSERT_APPEND_UTF8_FROM_NATIVE_BYTE \
+ assert(dest)
+
+PERL_STATIC_INLINE SSize_t S_av_top_index(pTHX_ AV *av)
+ __attribute__warn_unused_result__
+ __attribute__nonnull__(pTHX_1);
+#define PERL_ARGS_ASSERT_AV_TOP_INDEX \
+ assert(av)
+
+PERL_STATIC_INLINE bool S_is_safe_syscall(pTHX_ const char *pv, STRLEN len, const char *what, const char *op_name)
+ __attribute__warn_unused_result__
+ __attribute__nonnull__(pTHX_1)
+ __attribute__nonnull__(pTHX_3)
+ __attribute__nonnull__(pTHX_4);
+#define PERL_ARGS_ASSERT_IS_SAFE_SYSCALL \
+ assert(pv); assert(what); assert(op_name)
+
+PERL_STATIC_INLINE bool S_sv_only_taint_gmagic(SV *sv)
+ __attribute__nonnull__(1);
+#define PERL_ARGS_ASSERT_SV_ONLY_TAINT_GMAGIC \
+ assert(sv)
+
+#endif
#if !defined(PERL_NO_UTF16_FILTER)
# if defined(PERL_IN_TOKE_C)
STATIC U8* S_add_utf16_textfilter(pTHX_ U8 *const s, bool reversed)
# endif
#endif
+#if defined(PERL_MEM_LOG)
+PERL_CALLCONV Malloc_t Perl_mem_log_alloc(const UV nconst, UV typesize, const char *type_name, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname)
+ __attribute__nonnull__(3)
+ __attribute__nonnull__(5)
+ __attribute__nonnull__(7);
+#define PERL_ARGS_ASSERT_MEM_LOG_ALLOC \
+ assert(type_name); assert(filename); assert(funcname)
+
+PERL_CALLCONV Malloc_t Perl_mem_log_free(Malloc_t oldalloc, const char *filename, const int linenumber, const char *funcname)
+ __attribute__nonnull__(2)
+ __attribute__nonnull__(4);
+#define PERL_ARGS_ASSERT_MEM_LOG_FREE \
+ assert(filename); assert(funcname)
+
+PERL_CALLCONV Malloc_t Perl_mem_log_realloc(const UV n, const UV typesize, const char *type_name, Malloc_t oldalloc, Malloc_t newalloc, const char *filename, const int linenumber, const char *funcname)
+ __attribute__nonnull__(3)
+ __attribute__nonnull__(6)
+ __attribute__nonnull__(8);
+#define PERL_ARGS_ASSERT_MEM_LOG_REALLOC \
+ assert(type_name); assert(filename); assert(funcname)
+
+#endif
#if defined(PERL_OP_PARENT)
PERL_CALLCONV OP* Perl_op_parent(OP *o)
__attribute__nonnull__(1);
/* Add in the points from the bit map */
for (i = 0; i < NUM_ANYOF_CODE_POINTS; i++) {
if (ANYOF_BITMAP_TEST(node, i)) {
- invlist = add_cp_to_invlist(invlist, i);
+ unsigned int start = i++;
+
+ for (; i < NUM_ANYOF_CODE_POINTS && ANYOF_BITMAP_TEST(node, i); ++i) {
+ /* empty */
+ }
+ invlist = _add_range_to_invlist(invlist, start, i-1);
new_node_has_latin1 = TRUE;
}
}
/* If this can match all upper Latin1 code points, have to add them
- * as well */
- if (ANYOF_FLAGS(node) & ANYOF_MATCHES_ALL_NON_UTF8_NON_ASCII) {
+ * as well. But don't add them if inverting, as when that gets done below,
+ * it would exclude all these characters, including the ones it shouldn't
+ * that were added just above */
+ if ((ANYOF_FLAGS(node) & (ANYOF_INVERT|ANYOF_MATCHES_ALL_NON_UTF8_NON_ASCII))
+ == ANYOF_MATCHES_ALL_NON_UTF8_NON_ASCII)
+ {
_invlist_union(invlist, PL_UpperLatin1, &invlist);
}
for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
regnode *noper = NEXTOPER( cur );
- const U8 *uc = (U8*)STRING( noper );
- const U8 *e = uc + STR_LEN( noper );
+ const U8 *uc;
+ const U8 *e;
int foldlen = 0;
U32 wordlen = 0; /* required init */
STRLEN minchars = 0;
if (OP(noper) == NOTHING) {
regnode *noper_next= regnext(noper);
- if (noper_next != tail && OP(noper_next) == flags) {
- noper = noper_next;
- uc= (U8*)STRING(noper);
- e= uc + STR_LEN(noper);
- trie->minlen= STR_LEN(noper);
- } else {
- trie->minlen= 0;
- continue;
- }
+ if (noper_next < tail)
+ noper= noper_next;
+ }
+
+ if ( noper < tail && ( OP(noper) == flags || ( flags == EXACTFU && OP(noper) == EXACTFU_SS ) ) ) {
+ uc= (U8*)STRING(noper);
+ e= uc + STR_LEN(noper);
+ } else {
+ trie->minlen= 0;
+ continue;
}
+
if ( set_bit ) { /* bitmap only alloced when !(UTF&&Folding) */
TRIE_BITMAP_SET(trie,*uc); /* store the raw first byte
regardless of encoding */
for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
regnode *noper = NEXTOPER( cur );
- U8 *uc = (U8*)STRING( noper );
- const U8 *e = uc + STR_LEN( noper );
U32 state = 1; /* required init */
U16 charid = 0; /* sanity init */
U32 wordlen = 0; /* required init */
if (OP(noper) == NOTHING) {
regnode *noper_next= regnext(noper);
- if (noper_next != tail && OP(noper_next) == flags) {
- noper = noper_next;
- uc= (U8*)STRING(noper);
- e= uc + STR_LEN(noper);
- }
+ if (noper_next < tail)
+ noper= noper_next;
}
- if (OP(noper) != NOTHING) {
+ if ( noper < tail && ( OP(noper) == flags || ( flags == EXACTFU && OP(noper) == EXACTFU_SS ) ) ) {
+ const U8 *uc= (U8*)STRING(noper);
+ const U8 *e= uc + STR_LEN(noper);
+
for ( ; uc < e ; uc += len ) {
TRIE_READ_CHAR;
for ( cur = first ; cur < last ; cur = regnext( cur ) ) {
regnode *noper = NEXTOPER( cur );
- const U8 *uc = (U8*)STRING( noper );
- const U8 *e = uc + STR_LEN( noper );
U32 state = 1; /* required init */
if (OP(noper) == NOTHING) {
regnode *noper_next= regnext(noper);
- if (noper_next != tail && OP(noper_next) == flags) {
- noper = noper_next;
- uc= (U8*)STRING(noper);
- e= uc + STR_LEN(noper);
- }
+ if (noper_next < tail)
+ noper= noper_next;
}
- if ( OP(noper) != NOTHING ) {
+ if ( noper < tail && ( OP(noper) == flags || ( flags == EXACTFU && OP(noper) == EXACTFU_SS ) ) ) {
+ const U8 *uc= (U8*)STRING(noper);
+ const U8 *e= uc + STR_LEN(noper);
+
for ( ; uc < e ; uc += len ) {
TRIE_READ_CHAR;
U8 noper_trietype = TRIE_TYPE( noper_type );
#if defined(DEBUGGING) || defined(NOJUMPTRIE)
regnode * const noper_next = regnext( noper );
- U8 noper_next_type = (noper_next && noper_next != tail) ? OP(noper_next) : 0;
- U8 noper_next_trietype = (noper_next && noper_next != tail) ? TRIE_TYPE( noper_next_type ) :0;
+ U8 noper_next_type = (noper_next && noper_next < tail) ? OP(noper_next) : 0;
+ U8 noper_next_trietype = (noper_next && noper_next < tail) ? TRIE_TYPE( noper_next_type ) :0;
#endif
DEBUG_TRIE_COMPILE_r({
if ( noper_trietype
&&
(
- ( noper_trietype == NOTHING)
+ ( noper_trietype == NOTHING )
|| ( trietype == NOTHING )
|| ( trietype == noper_trietype )
)
if ( noper_trietype == NOTHING ) {
#if !defined(DEBUGGING) && !defined(NOJUMPTRIE)
regnode * const noper_next = regnext( noper );
- U8 noper_next_type = (noper_next && noper_next!=tail) ? OP(noper_next) : 0;
+ U8 noper_next_type = (noper_next && noper_next < tail) ? OP(noper_next) : 0;
U8 noper_next_trietype = noper_next_type ? TRIE_TYPE( noper_next_type ) :0;
#endif
}
else if (value == '\\') {
/* Is a backslash; get the code point of the char after it */
+
+ if (RExC_parse >= RExC_end) {
+ vFAIL("Unmatched [");
+ }
+
if (UTF && ! UTF8_IS_INVARIANT(UCHARAT(RExC_parse))) {
value = utf8n_to_uvchr((U8*)RExC_parse,
RExC_end - RExC_parse,
and C<SvIV_set>.
=for apidoc Am|void|SvLEN_set|SV* sv|STRLEN len
-Set the actual length of the string which is in the SV. See C<SvIV_set>.
+Set the size of the string buffer for the SV. See C</SvLEN>.
=cut
*/
use warnings;
skip_all('no SysV semaphores on this platform') if !$Config{d_sem};
+skip_all('SysV semaphore structures not detected')
+ if !$Config{d_semctl_semid_ds} && !$Config{d_semctl_semun};
my @warnings;
{
--- /dev/null
+__END__
+# pp_sys.c
+# NAME pipe() croaks on bad left side [perl #126480]
+# SKIP ? use Config; !$Config{d_pipe} && "No pipe() available"
+my $fh;
+pipe($$5, $fh)
+EXPECT
+Bad symbol for filehandle at - line 3.
+########
+# NAME pipe() croaks on bad right side [perl #126480]
+# SKIP ? use Config; !$Config{d_pipe} && "No pipe() available"
+my $fh;
+pipe($fh, $$5)
+EXPECT
+Bad symbol for filehandle at - line 2.
+########
Missing right curly or square bracket at - line 1, at end of line
Execution of - aborted due to compilation errors.
########
+# NAME (Missing operator before @foo) [perl #123737]
+0@foo
+EXPECT
+Array found where operator expected at - line 1, near "0@foo"
+ (Missing operator before @foo?)
+syntax error at - line 1, near "0@foo
+"
+Execution of - aborted due to compilation errors.
+########
+# NAME (Missing operator before @{) [perl #123737]
+0@{
+EXPECT
+Array found where operator expected at - line 1, near "0@{"
+ (Missing operator before @{?)
+syntax error at - line 1, near "0@"
+Missing right curly or square bracket at - line 1, at end of line
+Execution of - aborted due to compilation errors.
+########
# NAME Unterminated here-doc in string eval
eval "<<foo"; die $@
EXPECT
EXPECT
Bareword "FOO" not allowed while "strict subs" in use at - line 3.
Execution of - aborted due to compilation errors.
+########
+# [perl #126981] Strict subs vs. multideref
+sub CONST () { 'some_key' }
+my $h;
+my $v1 = $h->{+CONST_TYPO};
+use strict 'subs';
+my $v2 = $h->{+CONST_TYPO};
+EXPECT
+Bareword "CONST_TYPO" not allowed while "strict subs" in use at - line 6.
+Execution of - aborted due to compilation errors.
EXPECT
"\c," is more clearly written simply as "l" at - line 9.
"\c," is more clearly written simply as "l" at - line 10.
+########
+# NAME [perl #126141]
+# OPTION fatal
+eval {/$_/}, print "$_ ==> ", $@ || "OK!\n" for "]]]]]]]]][\\", "]]]]][\\"
+EXPECT
+]]]]]]]]][\ ==> Unmatched [ in regex; marked by <-- HERE in m/]]]]]]]]][\ <-- HERE / at - line 2.
+]]]]][\ ==> Unmatched [ in regex; marked by <-- HERE in m/]]]]][\ <-- HERE / at - line 2.
eval 'return my $x : m';
}
+# [perl #126257]
+# attributed lex var as function arg caused assertion failure
+
+package P126257 {
+ sub MODIFY_SCALAR_ATTRIBUTES {}
+ sub MODIFY_ARRAY_ATTRIBUTES {}
+ sub MODIFY_HASH_ATTRIBUTES {}
+ sub MODIFY_CODE_ATTRIBUTES {}
+ sub foo {}
+ eval { foo(my $x : bar); };
+ ::is $@, "", "RT 126257 scalar";
+ eval { foo(my @x : bar); };
+ ::is $@, "", "RT 126257 array";
+ eval { foo(my %x : bar); };
+ ::is $@, "", "RT 126257 hash";
+ eval { foo(sub : bar {}); };
+ ::is $@, "", "RT 126257 sub";
+}
+
done_testing();
set_up_inc('../lib');
}
-plan(tests => 132);
+plan(tests => 133);
eval 'pass();';
delete $::{"_117941::"};
_117941();
pass("eval in freed package does not crash");
+
+# RT #127786
+# this used to give an assertion failure
+
+{
+ package DB {
+ sub f127786 { eval q/\$s/ }
+ }
+ my $s;
+ sub { $s; DB::f127786}->();
+ pass("RT #127786");
+}
}
use strict;
-plan(tests => 39);
+plan(tests => 41);
# heredoc without newline (#65838)
{},
"long terminator fails correctly"
);
+
+ # this would read freed memory
+ fresh_perl_like(
+ qq(0<<<<""0\n\n),
+ # valgrind and asan reports an error between these two lines
+ qr/^Number found where operator expected at - line 1, near "<<""0"\s+\(Missing operator/,
+ {},
+ "don't use an invalid oldoldbufptr"
+ );
+
+ # [perl #125540] this asserted or crashed
+ fresh_perl_like(
+ q(map d$#<<<<),
+ qr/Can't find string terminator "" anywhere before EOF at - line 1\./,
+ {},
+ "Don't assert parsing a here-doc if we hit EOF early"
+ );
}
use Config;
-plan(tests => 97);
+plan(tests => 105);
# Test hexfloat literals.
is(0x0.10p0, 0.0625);
is(0x0.100p0, 0.0625);
+is(0x.1p0, 0.0625);
+is(0x1.1p0, 1.0625);
+is(0x1.11p0, 1.06640625);
+is(0x1.111p0, 1.066650390625);
+
# Positive exponents.
is(0x1p2, 4);
is(0x1p+2, 4);
# different from 3e4 cf 30e3 cf 30000. The shifting of the hexdigits
# makes it look stranger, though: 0xap1 == 0x5p2.
+# [perl #127183], try some non-canonical forms.
+SKIP: {
+ skip("nv_preserves_uv_bits is $Config{nv_preserves_uv_bits} not 53", 3)
+ unless ($Config{nv_preserves_uv_bits} == 53);
+ is(0x0.b17217f7d1cf78p0, 0x1.62e42fefa39efp-1);
+ is(0x0.58b90bfbe8e7bcp1, 0x1.62e42fefa39efp-1);
+ is(0x0.2c5c85fdf473dep2, 0x1.62e42fefa39efp-1);
+}
+
# Needs to use within() instead of is() because of long doubles.
within(0x1.99999999999ap-4, 0.1, 1e-9);
within(0x3.333333333333p-5, 0.1, 1e-9);
eval '@a = 0x3..5';
is("@a", "3 4 5");
+ undef $a;
eval '$a = eval "0x.3"';
is($a, '03');
+ undef $a;
eval '$a = eval "0xc.3"';
is($a, '123');
+
+ undef $a;
+ eval '$a = eval "0x.p3"';
+ is($a, undef);
}
# Test warnings.
#!./perl
# This file is intentionally encoded in latin-1.
+#
+# Test uc(), lc(), fc(), ucfirst(), lcfirst(), quotemeta() etc
BEGIN {
chdir 't' if -d 't';
use feature qw( fc );
-plan tests => 134 + 4 * 256;
+plan tests => 139 + 4 * 256;
is(lc(undef), "", "lc(undef) is ''");
is(lcfirst(undef), "", "lcfirst(undef) is ''");
like lc delete $h{k}, qr "^i\x{307}bcde=array\(.*\)",
'lc(TEMP ref) does not produce a corrupt string';
+# List::Util::first() etc sets $_ to an SvTEMP without raising its
+# refcount. This was causing lc() etc to unsafely modify in-place.
+# see http://nntp.perl.org/group/perl.perl5.porters/228213
+
+SKIP: {
+ skip "no List::Util on miniperl", 5, if is_miniperl;
+ require List::Util;
+ my %hl = qw(a 1 b 2 c 3);
+ my %hu = qw(A 1 B 2 C 3);
+ my $x;
+ $x = List::Util::first(sub { uc $_ eq 'A' }, keys %hl);
+ is($x, "a", "first { uc }");
+ $x = List::Util::first(sub { ucfirst $_ eq 'A' }, keys %hl);
+ is($x, "a", "first { ucfirst }");
+ $x = List::Util::first(sub { lc $_ eq 'a' }, keys %hu);
+ is($x, "A", "first { lc }");
+ $x = List::Util::first(sub { lcfirst $_ eq 'a' }, keys %hu);
+ is($x, "A", "first { lcfirst }");
+ $x = List::Util::first(sub { fc $_ eq 'a' }, keys %hu);
+ is($x, "A", "first { fc }");
+}
+
my $utf8_locale = find_utf8_ctype_locale();
require "./test.pl";
}
-plan( tests => 69 );
+plan( tests => 70 );
@foo = (1, 2, 3, 4);
cmp_ok($foo[0], '==', 1, 'first elem');
tie $t, "";
() = (empty(), ($t)x10); # empty() since sub calls usually result in copies
is(tied($t)->{fetched}, undef, 'assignment to empty list makes no copies');
+
+# this was passing a trash SV at the top of the stack to SvIV()
+ok(($0[()[()]],1), "[perl #126193] list slice with zero indexes");
use strict;
no warnings 'once';
-plan(tests => 147);
+plan(tests => 148);
@A::ISA = 'B';
@B::ISA = 'C';
like ($@, qr/Modification of a read-only value attempted/, 'RT #123619');
}
+{
+ # RT #126042 &{1==1} * &{1==1} would crash
+
+ # pp_entersub and pp_method_named cooperate to prevent calls to an
+ # undefined import() or unimport() method from croaking.
+ # If pp_method_named can't find the method it pushes &PL_sv_yes, and
+ # pp_entersub checks for that specific SV to avoid croaking.
+ # Ideally they wouldn't use that hack but...
+ # Unfortunately pp_entersub's handling of that case is broken in scalar context.
+
+ # Rather than using the test case from the ticket, since &{1==1}
+ # isn't documented (and may not be supported in future perls) test
+ # calls to undefined import method, which also crashes.
+ fresh_perl_is('Unknown->import() * Unknown->unimport(); print "ok\n"', "ok\n", {},
+ "check unknown import() methods don't corrupt the stack");
+}
+
__END__
#FF9900
#F78C08
my $no_signedness = $] > 5.009 ? '' :
"Signed/unsigned pack modifiers not available on this perl";
-plan tests => 14708;
+plan tests => 14712;
use strict;
use warnings qw(FATAL all);
#[perl #123874]: argument underflow leads to corrupt length
eval q{ pack "pi/x" };
ok(1, "argument underflow did not crash");
+
+{
+ # [perl #126325] pack [hH] with a unicode string
+ # the hex encoders would read past the end of the string, using
+ # invalid source bytes
+ my $twenty_nuls = "\0" x 20;
+ # This is the case that failed
+ is(pack("WH40", 0x100, ""), "\x{100}$twenty_nuls",
+ "check pack H zero fills (utf8 target)");
+ my $up_nul = "\0";
+
+ utf8::upgrade($up_nul);
+ # check the other combinations too
+ is(pack("WH40", 0x100, $up_nul), "\x{100}$twenty_nuls",
+ "check pack H zero fills (utf8 target/source)");
+ is(pack("H40", ""), $twenty_nuls,
+ "check pack H zero fills (utf8 none)");
+ is(pack("H40", $up_nul), $twenty_nuls,
+ "check pack H zero fills (utf8 source)");
+}
print "# no hexfloat tests\n";
}
-plan tests => 1408 + ($Q ? 0 : 12) + @hexfloat + 9;
+plan tests => 1408 + ($Q ? 0 : 12) + @hexfloat + 12;
use strict;
use Config;
is $o::count, 0, 'sprintf %d string overload count is 0';
is $o::numcount, 1, 'sprintf %d number overload count is 1';
-my $ppc64_linux = $Config{archname} =~ /^ppc64-linux/;
-my $irix_ld = $Config{archname} =~ /^IP\d+-irix-ld$/;
+my $ppc_linux = $Config{archname} =~ /^(?:ppc|power(?:pc)?)(?:64)?-linux/;
+my $irix_ld = $Config{archname} =~ /^IP\d+-irix-ld$/;
for my $t (@hexfloat) {
my ($format, $arg, $expected) = @$t;
$arg = eval $arg;
my $result = sprintf($format, $arg);
my $ok = $result eq $expected;
- if ($doubledouble && $ppc64_linux && $arg =~ /^2.71828/) {
- # ppc64-linux has buggy exp(1).
+ # For certain platforms (all of which are currently double-double,
+ # but different implementations, GNU vs vendor, two different archs
+ # (ppc and mips), and two different libm interfaces) we have some
+ # bits-in-the-last-hexdigit differences.
+ # Patch them up as TODOs instead of deadly errors.
+ if ($doubledouble && $ppc_linux && $arg =~ /^2.71828/) {
+ # gets '0x1.5bf0a8b1457695355fb8ac404ecp+1'
+ # wants '0x1.5bf0a8b1457695355fb8ac404e8p+1'
local $::TODO = "$Config{archname} exp(1)";
ok($ok, "'$format' '$arg' -> '$result' cf '$expected'");
next;
}
if ($doubledouble && $irix_ld && $arg =~ /^1.41421/) {
- # irix has buggy sqrt(2),
- # last hexdigit one bit error:
# gets '0x1.6a09e667f3bcc908b2fb1366eacp+0'
# wants '0x1.6a09e667f3bcc908b2fb1366ea8p+0'
local $::TODO = "$Config{archname} sqrt(2)";
is(sprintf("%+a", -0.0), "-0x0p+0", "negative zero");
is(sprintf("%.13a", -0.0), "-0x0.0000000000000p+0", "negative zero");
}
+
+SKIP: {
+ # [perl #127183] Non-canonical hexadecimal floats are parsed prematurely
+
+ skip("nv_preserves_uv_bits is $Config{nv_preserves_uv_bits}, not 53", 3)
+ unless $Config{nv_preserves_uv_bits} == 53;
+
+ {
+ # The 0x0.b17217f7d1cf78p0 is the original LHS value
+ # from [perl #127183], its bits are 0x162e42fefa39ef << 3,
+ # resulting in a non-canonical form of hexfp, where the most
+ # significant bit is zero, instead of one.
+ is(sprintf("%a", 0x0.b17217f7d1cf78p0 - 0x1.62e42fefa39efp-1),
+ "0x0p+0",
+ "non-canonical form [perl #127183]");
+ }
+
+ {
+ no warnings 'overflow'; # Not the point here.
+
+ # The 0x058b90bfbe8e7bc is 0x162e42fefa39ef << 2,
+ # the 0x02c5c85fdf473de is 0x162e42fefa39ef << 1,
+ # see above.
+ is(sprintf("%a", 0x0.58b90bfbe8e7bcp1 - 0x1.62e42fefa39efp-1),
+ "0x0p+0",
+ "non-canonical form");
+
+ is(sprintf("%a", 0x0.2c5c85fdf473dep2 - 0x1.62e42fefa39efp-1),
+ "0x0p+0",
+ "non-canonical form");
+ }
+}
set_up_inc('../lib');
}
-plan(tests => 39);
+plan(tests => 41);
sub empty_sub {}
$main::x = $main::x = "You should not see this.";
inside_predeclared(); # run test
+# RT #126845: this used to fail an assertion in Perl_newATTRSUB_x()
+eval 'sub rt126845_1 (); sub rt126845_1 () :lvalue';
+pass("RT #126845: stub with prototype, then with attribute");
+
+eval 'sub rt126845_2 (); sub rt126845_2 () :lvalue {}';
+pass("RT #126845: stub with prototype, then definition with attribute");
+
# RT #124156 death during unwinding causes crash
# the tie allows us to trigger another die while cleaning up the stack
# from an earlier die.
check_count "$op $args\\\$tied_glob$postargs";
}
-$dummy = crypt $var,0; check_count 'crypt $tied, ...';
-$dummy = crypt 0,$var; check_count 'crypt ..., $tied';
-$var = substr(chr 256,0,0);
-$dummy = crypt $var,0; check_count 'crypt $tied_utf8, ...';
-$var = substr(chr 256,0,0);
-$dummy = crypt 0,$var; check_count 'crypt ..., $tied_utf8';
+my $can_config = eval { require Config; 1 };
+SKIP:
+{
+ skip "No Config", 4 unless $can_config;
+ skip "No crypt()", 4 unless $Config::Config{d_crypt};
+ $dummy = crypt $var,0; check_count 'crypt $tied, ...';
+ $dummy = crypt 0,$var; check_count 'crypt ..., $tied';
+ $var = substr(chr 256,0,0);
+ $dummy = crypt $var,0; check_count 'crypt $tied_utf8, ...';
+ $var = substr(chr 256,0,0);
+ $dummy = crypt 0,$var; check_count 'crypt ..., $tied_utf8';
+}
SKIP:
{
^m?(\d)(.*)\1$ 5b5 y $1 5
^m?(\d)(.*)\1$ aba n - -
+^_?[^\W_0-9]\w\z \xAA\x{100} y $& \xAA\x{100} [perl #127537]
+
# 17F is 'Long s'; This makes sure the a's in /aa can be separate
/s/ai \x{17F} y $& \x{17F}
/s/aia \x{17F} n - -
(?a-x - c - Sequence (?... not terminated
.{1}?? - c - Nested quantifiers
.{1}?+ - c - Nested quantifiers
+(?:.||)(?|)000000000@ 000000000@ y $& 000000000@ # [perl #126405]
# Keep these lines at the end of the file
# vim: softtabstop=0 noexpandtab
require './charset_tools.pl';
}
-plan( tests => 267 );
+plan( tests => 268 );
$_ = 'david';
$a = s/david/rules/r;
$s1 =~ s/.?/$s1++/ge;
is($s1, "01","RT #123954 s1");
}
+{
+ # RT #126602 double free if the value being modified is freed in the replacement
+ fresh_perl_is('s//*_=0;s|0||;00.y0/e; print qq(ok\n)', "ok\n", { stderr => 1 },
+ "[perl #126602] s//*_=0;s|0||/e crashes");
+}
--- /dev/null
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require "./test.pl";
+ eval 'use Errno';
+ die $@ if $@ and !is_miniperl();
+}
+
+my @bad_salts =
+ (
+ [ '', 'zero-length' ],
+ [ 'a', 'length 1' ],
+ [ '!a', 'bad first character' ],
+ [ 'a!', 'bad second character' ],
+ [ '@a', 'fencepost before A' ],
+ [ '[a', 'fencepost after Z' ],
+ [ '`a', 'fencepost before a' ],
+ [ '{a', 'fencepost after z' ],
+ [ '-a', 'fencepost before .' ],
+ [ ':a', 'fencepost after 9' ],
+ );
+
+my @good_salts = qw(aa zz AA ZZ .. 99);
+
+plan tests => 2 * @bad_salts + 1 + @good_salts;
+
+for my $bad_salt (@bad_salts) {
+ my ($salt, $what) = @$bad_salt;
+ $! = 0;
+ is(crypt("abc", $salt), undef, "bad salt ($what)");
+ is(0+$!, &Errno::EINVAL, "check errno ($what)");
+}
+
+is(crypt("abcdef", "ab"), "abDMWw5NL.afs", "sanity check result");
+
+# just to check we're not rejecting any good salts
+for my $good_salt (@good_salts) {
+ isnt(crypt("abcdef", $good_salt), undef, "good salt $good_salt");
+}
}
else {
t = s;
- while (!isSPACE(*t))
+ while (*t && !isSPACE(*t))
t++;
e = t;
}
TOKEN('$');
case '@':
- if (PL_expect == XOPERATOR)
- no_op("Array", s);
- else if (PL_expect == XPOSTDEREF) POSTDEREF('@');
+ if (PL_expect == XPOSTDEREF)
+ POSTDEREF('@');
PL_tokenbuf[0] = '@';
s = scan_ident(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
+ if (PL_expect == XOPERATOR) {
+ d = s;
+ if (PL_bufptr > s) {
+ d = PL_bufptr-1;
+ PL_bufptr = PL_oldbufptr;
+ }
+ no_op("Array", d);
+ }
pl_yylval.ival = 0;
if (!PL_tokenbuf[1]) {
PREREF('@');
goto streaming;
}
}
- else { /* eval */
+ else { /* eval or we've already hit EOF */
s = (char*)memchr((void*)s, '\n', PL_bufend - s);
- assert(s);
+ if (!s)
+ goto interminable;
}
linestr = shared->ls_linestr;
bufend = SvEND(linestr);
else
{
SV *linestr_save;
+ char *oldbufptr_save;
streaming:
sv_setpvs(tmpstr,""); /* avoid "uninitialized" warning */
term = PL_tokenbuf[1];
len--;
linestr_save = PL_linestr; /* must restore this afterwards */
d = s; /* and this */
+ oldbufptr_save = PL_oldbufptr;
PL_linestr = newSVpvs("");
PL_bufend = SvPVX(PL_linestr);
while (1) {
restore PL_linestr. */
SvREFCNT_dec_NN(PL_linestr);
PL_linestr = linestr_save;
+ PL_oldbufptr = oldbufptr_save;
goto interminable;
}
CopLINE_set(PL_curcop, origline);
PL_linestr = linestr_save;
PL_linestart = SvPVX(linestr_save);
PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+ PL_oldbufptr = oldbufptr_save;
s = d;
break;
}
* multiple fp operations. */
bool hexfp = FALSE;
int total_bits = 0;
+ int significant_bits = 0;
#if NVSIZE == 8 && defined(HAS_QUAD) && defined(Uquad_t)
# define HEXFP_UQUAD
Uquad_t hexfp_uquad = 0;
#endif
NV hexfp_mult = 1.0;
UV high_non_zero = 0; /* highest digit */
+ int non_zero_integer_digits = 0;
PERL_ARGS_ASSERT_SCAN_NUM;
if (high_non_zero == 0 && b > 0)
high_non_zero = b;
+ if (high_non_zero)
+ non_zero_integer_digits++;
+
/* this could be hexfp, but peek ahead
* to avoid matching ".." */
if (UNLIKELY(HEXFP_PEEK(s))) {
* detection will shortly be more thorough with the
* underbar checks. */
const char* h = s;
+ significant_bits = non_zero_integer_digits * shift;
#ifdef HEXFP_UQUAD
hexfp_uquad = u;
#else /* HEXFP_NV */
hexfp_nv = u;
#endif
+ /* Ignore the leading zero bits of
+ * the high (first) non-zero digit. */
+ if (high_non_zero) {
+ if (high_non_zero < 0x8)
+ significant_bits--;
+ if (high_non_zero < 0x4)
+ significant_bits--;
+ if (high_non_zero < 0x2)
+ significant_bits--;
+ }
+
if (*h == '.') {
#ifdef HEXFP_NV
- NV mult = 1 / 16.0;
+ NV nv_mult = 1.0;
#endif
+ bool accumulate = TRUE;
for (h++; (isXDIGIT(*h) || *h == '_'); h++) {
if (isXDIGIT(*h)) {
U8 b = XDIGIT_VALUE(*h);
- total_bits += shift;
- if (total_bits < NV_MANT_DIG) {
+ significant_bits += shift;
#ifdef HEXFP_UQUAD
- hexfp_uquad <<= shift;
- hexfp_uquad |= b;
- hexfp_frac_bits += shift;
-#else /* HEXFP_NV */
- hexfp_nv += b * mult;
- mult /= 16.0;
-#endif
- } else if (total_bits - shift < NV_MANT_DIG) {
- /* A hexdigit straddling the edge of
- * mantissa. We can try grabbing as
- * many as possible bits. */
- int shift2 = 0;
- if (b & 1) {
- shift2 = 4;
- } else if (b & 2) {
- shift2 = 3;
- total_bits--;
- } else if (b & 4) {
- shift2 = 2;
- total_bits -= 2;
- } else if (b & 8) {
- shift2 = 1;
- total_bits -= 3;
+ if (accumulate) {
+ if (significant_bits < NV_MANT_DIG) {
+ /* We are in the long "run" of xdigits,
+ * accumulate the full four bits. */
+ hexfp_uquad <<= shift;
+ hexfp_uquad |= b;
+ hexfp_frac_bits += shift;
+ } else {
+ /* We are at a hexdigit either at,
+ * or straddling, the edge of mantissa.
+ * We will try grabbing as many as
+ * possible bits. */
+ int tail =
+ significant_bits - NV_MANT_DIG;
+ if (tail <= 0)
+ tail += shift;
+ hexfp_uquad <<= tail;
+ hexfp_uquad |= b >> (shift - tail);
+ hexfp_frac_bits += tail;
+
+ /* Ignore the trailing zero bits
+ * of the last non-zero xdigit.
+ *
+ * The assumption here is that if
+ * one has input of e.g. the xdigit
+ * eight (0x8), there is only one
+ * bit being input, not the full
+ * four bits. Conversely, if one
+ * specifies a zero xdigit, the
+ * assumption is that one really
+ * wants all those bits to be zero. */
+ if (b) {
+ if ((b & 0x1) == 0x0) {
+ significant_bits--;
+ if ((b & 0x2) == 0x0) {
+ significant_bits--;
+ if ((b & 0x4) == 0x0) {
+ significant_bits--;
+ }
+ }
+ }
+ }
+
+ accumulate = FALSE;
}
-#ifdef HEXFP_UQUAD
- hexfp_uquad <<= shift2;
- hexfp_uquad |= b;
- hexfp_frac_bits += shift2;
+ } else {
+ /* Keep skipping the xdigits, and
+ * accumulating the significant bits,
+ * but do not shift the uquad
+ * (which would catastrophically drop
+ * high-order bits) or accumulate the
+ * xdigits anymore. */
+ }
#else /* HEXFP_NV */
- hexfp_nv += b * mult;
- mult /= 16.0;
-#endif
+ if (accumulate) {
+ nv_mult /= 16.0;
+ if (nv_mult > 0.0)
+ hexfp_nv += b * nv_mult;
+ else
+ accumulate = FALSE;
}
+#endif
}
+ if (significant_bits >= NV_MANT_DIG)
+ accumulate = FALSE;
}
}
- if (total_bits >= 4) {
- if (high_non_zero < 0x8)
- total_bits--;
- if (high_non_zero < 0x4)
- total_bits--;
- if (high_non_zero < 0x2)
- total_bits--;
- }
-
- if (total_bits > 0 && (isALPHA_FOLD_EQ(*h, 'p'))) {
+ if ((total_bits > 0 || significant_bits > 0) &&
+ isALPHA_FOLD_EQ(*h, 'p')) {
bool negexp = FALSE;
h++;
if (*h == '+')
*d = '\0';
if (UNLIKELY(hexfp)) {
# ifdef NV_MANT_DIG
- if (total_bits > NV_MANT_DIG)
+ if (significant_bits > NV_MANT_DIG)
Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
"Hexadecimal float: mantissa overflow");
# endif
* LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
* LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
* LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
- * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
- * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
* LONG_DOUBLE_IS_UNKNOWN_FORMAT
* It is only defined if the system supports long doubles.
*/
#define LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN 2
#define LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN 3
#define LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN 4
-#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN 5
-#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN 6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE 5
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE 6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE 7
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE 8
#define LONG_DOUBLE_IS_UNKNOWN_FORMAT -1
+/* Backward compat. */
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
#endif
/* HAS_LONG_LONG:
#endif
/* Generated from:
- * 496e563499c7b715275d61ae663d25dd20d963c75f9d3ee7850dae949df14136 config_h.SH
+ * 02c4c9c3e2a7fb7b5c1d2fd7e34acd5c6706d5fd7c40544a1e714355c2f2b264 config_h.SH
* 45fb46f69ab3d7fd8ea14fc29d490d044cbdd81e8a0111bc0b37aff4321d6182 uconfig.sh
* ex: set ro: */
Configure doesn't test for that yet. For Solaris, setenv() and unsetenv()
were introduced in Solaris 9, so testing for HAS UNSETENV is sufficient.
*/
-# if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV))
+# if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV)) || defined(PERL_DARWIN)
# if defined(HAS_UNSETENV)
if (val == NULL) {
(void)unsetenv(nam);
const char *filename, const int linenumber,
const char *funcname)
{
+ PERL_ARGS_ASSERT_MEM_LOG_ALLOC;
+
mem_log_common_if(MLT_ALLOC, n, typesize, type_name,
NULL, NULL, newalloc,
filename, linenumber, funcname);
const char *filename, const int linenumber,
const char *funcname)
{
+ PERL_ARGS_ASSERT_MEM_LOG_REALLOC;
+
mem_log_common_if(MLT_REALLOC, n, typesize, type_name,
NULL, oldalloc, newalloc,
filename, linenumber, funcname);
const char *filename, const int linenumber,
const char *funcname)
{
+ PERL_ARGS_ASSERT_MEM_LOG_FREE;
+
mem_log_common_if(MLT_FREE, 0, 0, "", NULL, oldalloc, NULL,
filename, linenumber, funcname);
return oldalloc;
*source_name_size = source_name_end - p;
if (grok_atoUV(source_number_start, &uv, &source_line_end)
&& source_line_end == close_paren
- && uv <= MAX_STRLEN
+ && uv <= PERL_INT_MAX
) {
*source_line = (STRLEN)uv;
return p;
char out[1024];
UV cnt = fread(out, 1, sizeof(out), fp);
if (cnt < sizeof(out)) {
- const char* p = atos_parse(out + cnt, out,
+ const char* p = atos_parse(out + cnt - 1, out,
source_name_size,
source_line);
if (p) {
Newx(*source_name,
- *source_name_size + 1, char);
+ *source_name_size, char);
Copy(p, *source_name,
- *source_name_size + 1, char);
+ *source_name_size, char);
}
}
pclose(fp);
for (i = skip; i < try_depth; i++) {
Dl_info* dl_info = &dl_infos[i];
- total_bytes += sizeof(Perl_c_backtrace_frame);
-
+ object_name_sizes[i] = 0;
source_names[i] = NULL;
source_name_sizes[i] = 0;
source_lines[i] = 0;
/* Yes, zero from dladdr() is failure. */
if (dladdr(raw_frames[i], dl_info)) {
+ total_bytes += sizeof(Perl_c_backtrace_frame);
+
object_name_sizes[i] =
dl_info->dli_fname ? strlen(dl_info->dli_fname) : 0;
symbol_name_sizes[i] =
extra.pods : miniperl
@ @extra_pods.com
-PERLDELTA_CURRENT = [.pod]perl5221delta.pod
+PERLDELTA_CURRENT = [.pod]perl5222delta.pod
$(PERLDELTA_CURRENT) : [.pod]perldelta.pod
Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
if (!str$case_blind_compare(env_tables[i],&crtlenv)) {
char *start;
int j;
- for (j = 0; environ[j]; j++) {
+ /* Start at the end, so if there is a duplicate we keep the first one. */
+ for (j = 0; environ[j]; j++);
+ for (j--; j >= 0; j--) {
if (!(start = strchr(environ[j],'='))) {
if (ckWARN(WARN_INTERNAL))
Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Ill-formed CRTL environ value \"%s\"\n",environ[j]);
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER = \5.22.1
+#INST_VER = \5.22.2
#
# Comment this out if you DON'T want your perl installation to have
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5221delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5222delta.pod
cd ..\win32
$(PERLEXE) $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
-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 \
- perl5221delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl5222delta.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 \
* LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
* LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
* LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
- * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
- * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
* LONG_DOUBLE_IS_UNKNOWN_FORMAT
* It is only defined if the system supports long doubles.
*/
#define LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN 2
#define LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN 3
#define LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN 4
-#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN 5
-#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN 6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE 5
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE 6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE 7
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE 8
#define LONG_DOUBLE_IS_UNKNOWN_FORMAT -1
#endif
* LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
* LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
* LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
- * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
- * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
+ * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
* LONG_DOUBLE_IS_UNKNOWN_FORMAT
* It is only defined if the system supports long doubles.
*/
#define LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN 2
#define LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN 3
#define LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN 4
-#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN 5
-#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN 6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE 5
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE 6
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE 7
+#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE 8
#define LONG_DOUBLE_IS_UNKNOWN_FORMAT -1
#endif
/* fcrypt.c */
/* Copyright (C) 1993 Eric Young - see README for more details */
#include <stdio.h>
+#include <errno.h>
/* Eric Young.
* This version of crypt has been developed from my MIT compatable
0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A
};
+/* the salt for classic DES crypt (which is all we implement here)
+ permits [./0-9A-Za-z], since '.' and '/' immediately preceed
+ '0' we don't need individual checks for '.' and '/'
+*/
+#define good_for_salt(c) \
+ ((c) >= '.' && (c) <= '9' || (c) >= 'A' && (c) <= 'Z' || \
+ (c) >= 'a' && (c) <= 'z')
+
char *
des_fcrypt(const char *buf, const char *salt, char *buff)
{
unsigned char *b=bb;
unsigned char c,u;
+ if (!good_for_salt(salt[0]) || !good_for_salt(salt[1])) {
+ errno = EINVAL;
+ return NULL;
+ }
+
/* eay 25/08/92
* If you call crypt("pwd","*") as often happens when you
* have * as the pwd field in /etc/passwd, the function
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER *= \5.22.1
+#INST_VER *= \5.22.2
#
# Comment this out if you DON'T want your perl installation to have
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5221delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5222delta.pod
$(PERLEXE) $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
-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 \
- perl5221delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl5222delta.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 \
perl5203delta.pod \
perl5220delta.pod \
perl5221delta.pod \
+ perl5222delta.pod \
perl561delta.pod \
perl56delta.pod \
perl581delta.pod \
perl5203delta.man \
perl5220delta.man \
perl5221delta.man \
+ perl5222delta.man \
perl561delta.man \
perl56delta.man \
perl581delta.man \
perl5203delta.html \
perl5220delta.html \
perl5221delta.html \
+ perl5222delta.html \
perl561delta.html \
perl56delta.html \
perl581delta.html \
perl5203delta.tex \
perl5220delta.tex \
perl5221delta.tex \
+ perl5222delta.tex \
perl561delta.tex \
perl56delta.tex \
perl581delta.tex \
* and one additional slot for a UNC name
*/
const int driveCount = ('Z'-'A')+1+1;
+const int driveLetterCount = ('Z'-'A')+1;
class VDir
{
* possiblities -- relative path or absolute path with or without drive letter
* OR UNC name
*/
+ int driveIndex;
char szBuffer[(MAX_PATH+1)*2];
char szlBuf[MAX_PATH+1];
int length = strlen(pInName);
}
/* strlen(pInName) is now <= MAX_PATH */
- if (pInName[1] == ':') {
+ if (length > 1 && pInName[1] == ':') {
/* has drive letter */
- if (IsPathSep(pInName[2])) {
+ if (length > 2 && IsPathSep(pInName[2])) {
/* absolute with drive letter */
DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
}
else {
/* relative path with drive letter */
- strcpy(szBuffer, GetDirA(DriveIndex(*pInName)));
+ driveIndex = DriveIndex(*pInName);
+ if (driveIndex < 0 || driveIndex >= driveLetterCount)
+ return (char *)pInName;
+ strcpy(szBuffer, GetDirA(driveIndex));
strcat(szBuffer, &pInName[2]);
if(strlen(szBuffer) > MAX_PATH)
szBuffer[MAX_PATH] = '\0';
}
else {
/* no drive letter */
- if (IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
+ if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
/* UNC name */
DoGetFullPathNameA((char*)pInName, sizeof(szLocalBufferA), szLocalBufferA);
}
* possiblities -- relative path or absolute path with or without drive letter
* OR UNC name
*/
+ int driveIndex;
WCHAR szBuffer[(MAX_PATH+1)*2];
WCHAR szlBuf[MAX_PATH+1];
int length = wcslen(pInName);
}
/* strlen(pInName) is now <= MAX_PATH */
- if (pInName[1] == ':') {
+ if (length > 1 && pInName[1] == ':') {
/* has drive letter */
if (IsPathSep(pInName[2])) {
/* absolute with drive letter */
}
else {
/* relative path with drive letter */
- wcscpy(szBuffer, GetDirW(DriveIndex((char)*pInName)));
+ driveIndex = DriveIndex(*pInName);
+ if (driveIndex < 0 || driveIndex >= driveLetterCount)
+ return (WCHAR *)pInName;
+ wcscpy(szBuffer, GetDirW(driveIndex));
wcscat(szBuffer, &pInName[2]);
if(wcslen(szBuffer) > MAX_PATH)
szBuffer[MAX_PATH] = '\0';
}
else {
/* no drive letter */
- if (IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
+ if (length > 1 && IsPathSep(pInName[1]) && IsPathSep(pInName[0])) {
/* UNC name */
DoGetFullPathNameW((WCHAR*)pInName, (sizeof(szLocalBufferW)/sizeof(WCHAR)), szLocalBufferW);
}