Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

threaded perl-5.18.0 fails re/pat_rt_report_thr.t on i586 #12993

Closed
p5pRT opened this issue May 25, 2013 · 27 comments
Closed

threaded perl-5.18.0 fails re/pat_rt_report_thr.t on i586 #12993

p5pRT opened this issue May 25, 2013 · 27 comments

Comments

@p5pRT
Copy link

p5pRT commented May 25, 2013

Migrated from rt.perl.org#118175 (status was 'resolved')

Searchable as RT118175$

@p5pRT
Copy link
Author

p5pRT commented May 25, 2013

From @shlomif

This is a bug report for perl from shlomif@​shlomifish.org,
generated with the help of perlbug 1.39 running under perl 5.16.3.

Threaded perl-5.18.0 fails the re/pat_rt_report_thr.t test script on
Mageia Linux 3 i586 (32-bit x86 - NOT x86-64). To reproduce, use Mageia Linux
3 and either of the following build files​:

[QUOTE]
#!/bin/bash

# This script reproduces a failure at the "make test" stage with perl-5.18.0
# on i586 Mageia Linux 3 (and Mageia Linux Cauldron).
#
# To reproduce do​:
# tar -xvf perl-5.18.0.tar.bz2.
# cd perl-5.18.0.
# bash ~/build-perl-on-i586-with-failure/build-perl-with-failure.bash
# make
# make test

# Based on the Mageia's perl-5.18.0-1's .src.rpm's .spec.

sh Configure -des \
  -Doptimize='-O2' -DDEBUGGING=-g \
  -Dperllibs='-lnsl -ldl -lm -lcrypt -lutil -lc -pthread' \
  -Ud_csh \
  -Duseshrplib \
  -Duseithreads \

[/QUOTE]

[QUOTE]
#!/bin/bash

# This script reproduces a failure at the "make test" stage with perl-5.18.0
# on i586 Mageia Linux 3 (and Mageia Linux Cauldron).
#
# To reproduce do​:
# tar -xvf perl-5.18.0.tar.bz2.
# cd perl-5.18.0.
# bash ~/build-perl-on-i586-with-failure/build-perl-with-failure.bash
# make
# make test

# Based on the Mageia's perl-5.18.0-1's .src.rpm's .spec.

sh Configure -des \
  -Dinc_version_list="5.18.0 5.16.3 5.16.3 5.16.2 5.16.2 5.16.1 5.16.1 5.16.0
5.16.0 5.14.2 5.14.1 5.14.0" \ -Dcc='/usr/bin/gcc' \
  -Doptimize='-O2' -DDEBUGGING=-g \
-Dmyhostname=localhost -Dperladmin=root@​localhost \
-Dcf_email=root@​localhost \
  -Dperllibs='-lnsl -ldl -lm -lcrypt -lutil -lc -pthread' \
  -Ud_csh \
  -Duseshrplib \
  -Duseithreads \
  -Di_db \
  -Di_ndbm \
  -Di_gdbm \

[/QUOTE]

This bug was discovered when building perl-5.18.0 for the Mageia development
version by Olivier Blin, and more info about reproducing can be found at​:

https://github.com/shlomif/build-perl-with-failure-on-i586

The test failures are​:

[QUOTE]
# Failed test 55 - UTF-8 regex matches above 32k; Bug 20020630.002 at
re/pat_rt_report.t line 224 # <utf8 x 32000>; pos = 1
# Failed test 57 - UTF-8 regex matches above 32k; Bug 20020630.002 at
re/pat_rt_report.t line 224 # <utf8 x 32768>; pos = 1
# Failed test 59 - UTF-8 regex matches above 32k; Bug 20020630.002 at
re/pat_rt_report.t line 224 # <utf8 x 33000>; pos = 1
re/pat_rt_report_thr.t ..
1..2530
# running tests in a new thread
ok 1 - Match UTF-8 char in presence of (??{ }); Bug 20000731.001
ok 2 - Used to cause a SEGV; Bug 20001021.005
ok 3 - bug id 20001008.001
ok 4 - bug id 20001008.001
ok 5 - bug id 20001008.001
ok 6 - bug id 20001008.001
ok 7 - bug id 20001008.001
ok 8 - bug id 20001008.001
ok 9 - bug id 20001008.001
ok 10 - bug id 20001008.001
ok 11 - HEBREW ACCENT QADMA matched by .*; Bug 20001028.003
ok 12 - HEBREW ACCENT QADMA matched by .*; Bug 20001028.003
ok 13 - HEBREW ACCENT QADMA matched by .*; Bug 20001028.003
ok 14 - HEBREW ACCENT QADMA in replacement; Bug 20001028.003
ok 15 - HEBREW ACCENT QADMA in replacement; Bug 20001028.003
ok 16 - Repeated s///; Bug 20001108.001
ok 17 - Repeated s///; Bug 20001108.001
ok 18 - s/// on UTF-8 string; Bug 20000517.001
ok 19 - s/// on UTF-8 string; Bug 20000517.001
ok 20 - \C and É; Bug 20001230.002
ok 21 - \C and É; Bug 20001230.002
ok 22 - Don't dump core; Bug 20010306.008
ok 23 - /g in scalar context; Bug 20010410.006
ok 24 - /g in scalar context; Bug 20010410.006
ok 25 - /g in scalar context; Bug 20010410.006
ok 26 - /g in scalar context; Bug 20010410.006
ok 27 - /g in scalar context; Bug 20010410.006
ok 28 - \012 not in [[​:print​:]]; Bug 20010619.003
ok 29 - \011 not in [[​:print​:]]; Bug 20010619.003
ok 30 - \014 not in [[​:print​:]]; Bug 20010619.003
ok 31 - \015 not in [[​:print​:]]; Bug 20010619.003
ok 32 - ' ' in [[​:print​:]]; Bug 20010619.003
ok 33 - pos() works with () = m//; Bug 20010814.004
ok 34 - UTF-8 return values from functions; Bug 20010407.006
ok 35 - UTF-8 return values from functions; Bug 20010407.006
ok 36 - UTF-8 return values from functions; Bug 20010407.006
ok 37 - UTF-8 return values from functions; Bug 20010407.006
ok 38 - High bit fine
ok 39 - UTF-8 hash keys and /$/
ok 40 - UTF-8 hash keys and /$/
ok 41 - UTF-8 hash keys and /$/
ok 42 - s///eg [change 13f46d0]; Bug 20020124.005
ok 43 - s///eg [change 13f46d0]; Bug 20020124.005
ok 44 - s///eg [change 13f46d0]; Bug 20020124.005
ok 45 - Correct pmop flags checked when empty pattern; Bug 20020412.005
ok 46 - Correct pmop flags checked when empty pattern; Bug 20020412.005
ok 47 - Correct pmop flags checked when empty pattern; Bug 20020412.005
ok 48 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 49 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 50 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 51 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 52 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 53 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 54 - UTF-8 regex matches above 32k; Bug 20020630.002
not ok 55 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 56 - UTF-8 regex matches above 32k; Bug 20020630.002
not ok 57 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 58 - UTF-8 regex matches above 32k; Bug 20020630.002
not ok 59 - UTF-8 regex matches above 32k; Bug 20020630.002
ok 60 - No panic​: end_shift [change 0e93322]
[/QUOTE]

Regards,

-- Shlomi Fish


Flags​:
  category=core
  severity=low


Site configuration information for perl 5.16.3​:

Configured by Mageia at Sun Mar 17 18​:51​:26 UTC 2013.

Summary of my perl5 (revision 5 version 16 subversion 3) configuration​:
 
  Platform​:
  osname=linux, osvers=3.4.24-server-3.mga2, archname=i386-linux-thread-multi
  uname='linux jonund.mageia.org 3.4.24-server-3.mga2 #1 smp sat jan 5
03​:09​:04 utc 2013 i686 i686 i686 gnulinux ' config_args='-des
-Dinc_version_list=5.16.3 5.16.3/i386-linux-thread-multi 5.16.2
5.16.2/i386-linux-thread-multi 5.16.1 5.16.1/i386-linux-thread-multi 5.16.0
5.16.0/i386-linux-thread-multi 5.14.2 5.14.1 5.14.0 5.12.3 5.12.2 5.12.1 5.12.0
-Darchname=i386-linux -Dcc=gcc -Doptimize=-O2 -g -pipe -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector
--param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic
-fasynchronous-unwind-tables -Wl,--as-needed -Wl,-z,relro -Wl,-O1
-Wl,--build-id -Wl,--enable-new-dtags -pthread -DDEBUGGING=-g -Dprefix=/usr
-Dvendorprefix=/usr -Dsiteprefix=/usr -Dsitebin=/usr/local/bin
-Dsiteman1dir=/usr/local/share/man/man1 -Dsiteman3dir=/usr/local/share/man/man3
-Dman3dir=/usr/share/man/man3pm -Dvendorman3dir=/usr/share/man/man3
-Dman3ext=3pm -Dcf_by=Mageia -Dmyhostname=localhost -Dperladmin=root@​localhost
-Dcf_email=root@​localhost -Dperllibs=-lnsl -ldl -lm -lcrypt -lutil -lc -pthread
-Ud_csh -Duseshrplib -Duseithreads -Di_db -Di_ndbm -Di_gdbm' hint=recommended,
useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n,
bincompat5005=undef Compiler​: cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2 -g -pipe -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector
--param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic
-fasynchronous-unwind-tables -Wl,--as-needed -Wl,-z,relro -Wl,-O1
-Wl,--build-id -Wl,--enable-new-dtags -pthread', cppflags='-D_REENTRANT
-D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector
-I/usr/local/include' ccversion='', gccversion='4.7.2', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=4, prototype=define Linker and Libraries​: ld='gcc', ldflags ='
-fstack-protector -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc -lgdbm_compat
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc libc=/lib/libc-2.17.so,
so=so, useshrplib=true, libperl=libperl.so gnulibc_version='2.17' Dynamic
Linking​: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E
-Wl,-rpath,/usr/lib/perl5/5.16.3/i386-linux-thread-multi/CORE'
cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector
--param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic
-fasynchronous-unwind-tables -Wl,--as-needed -Wl,-z,relro -Wl,-O1
-Wl,--build-id -Wl,--enable-new-dtags -pthread -L/usr/local/lib'

Locally applied patches​:
  Mageia patches


@​INC for perl 5.16.3​:
  /usr/lib/perl5/site_perl/5.16.3/i386-linux-thread-multi
  /usr/lib/perl5/site_perl/5.16.3
  /usr/lib/perl5/vendor_perl/5.16.3/i386-linux-thread-multi
  /usr/lib/perl5/vendor_perl/5.16.3
  /usr/lib/perl5/5.16.3/i386-linux-thread-multi
  /usr/lib/perl5/5.16.3
  /usr/lib/perl5/site_perl/5.16.3
  /usr/lib/perl5/site_perl/5.16.3/i386-linux-thread-multi
  /usr/lib/perl5/site_perl
  /usr/lib/perl5/vendor_perl/5.16.3
  /usr/lib/perl5/vendor_perl/5.16.3/i386-linux-thread-multi
  /usr/lib/perl5/vendor_perl/5.16.2
  /usr/lib/perl5/vendor_perl/5.16.2/i386-linux-thread-multi
  /usr/lib/perl5/vendor_perl
  .


Environment for perl 5.16.3​:
  HOME=/home/shlomif_vm
  LANG=en_US.UTF-8
  LANGUAGE=en_US.UTF-8​:en_US​:en
  LC_ADDRESS=en_US.UTF-8
  LC_COLLATE=en_US.UTF-8
  LC_CTYPE=en_US.UTF-8
  LC_IDENTIFICATION=en_US.UTF-8
  LC_MEASUREMENT=en_US.UTF-8
  LC_MESSAGES=en_US.UTF-8
  LC_MONETARY=en_US.UTF-8
  LC_NAME=en_US.UTF-8
  LC_NUMERIC=en_US.UTF-8
  LC_PAPER=en_US.UTF-8
  LC_SOURCED=1
  LC_TELEPHONE=en_US.UTF-8
  LC_TIME=en_US.UTF-8
  LD_LIBRARY_PATH (unset)
  LOGDIR (unset)
  PATH=/usr/local/bin​:/bin​:/usr/bin​:/usr/local/sbin​:/usr/sbin​:/sbin​:/usr/games
  PERL_BADLANG (unset)
  SHELL=/bin/bash

Complete configuration data for perl 5.16.3​:

Author=''
CONFIG='true'
Date='$Date'
Header=''
Id='$Id'
Locker=''
Log='$Log'
PATCHLEVEL='16'
PERL_API_REVISION='5'
PERL_API_SUBVERSION='0'
PERL_API_VERSION='16'
PERL_CONFIG_SH='true'
PERL_PATCHLEVEL=''
PERL_REVISION='5'
PERL_SUBVERSION='3'
PERL_VERSION='16'
RCSfile='$RCSfile'
Revision='$Revision'
SUBVERSION='3'
Source=''
State=''
_a='.a'
_exe=''
_o='.o'
afs='false'
afsroot='/afs'
alignbytes='4'
ansi2knr=''
aphostname=''
api_revision='5'
api_subversion='0'
api_version='16'
api_versionstring='5.16.0'
ar='ar'
archlib='/usr/lib/perl5/5.16.3/i386-linux-thread-multi'
archlibexp='/usr/lib/perl5/5.16.3/i386-linux-thread-multi'
archname='i386-linux-thread-multi'
archname64=''
archobjs=''
asctime_r_proto='REENTRANT_PROTO_B_SB'
awk='awk'
baserev='5.0'
bash=''
bin='/usr/bin'
bin_ELF='define'
binexp='/usr/bin'
bison='bison'
byacc='byacc'
byteorder='1234'
c=''
castflags='0'
cat='cat'
cc='gcc'
cccdlflags='-fPIC'
ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.16.3/i386-linux-thread-multi/CORE'
ccflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64' ccflags_nolargefiles='-D_REENTRANT -D_GNU_SOURCE
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include '
ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccname='gcc'
ccsymbols='' ccversion=''
cf_by='Mageia'
cf_email='root@​localhost'
cf_time='Sun Mar 17 18​:51​:26 UTC 2013'
charbits='8'
charsize='1'
chgrp=''
chmod='chmod'
chown=''
clocktype='clock_t'
comm='comm'
compress=''
config_arg0='Configure'
config_arg1='-des'
config_arg10='-Dsitebin=/usr/local/bin'
config_arg11='-Dsiteman1dir=/usr/local/share/man/man1'
config_arg12='-Dsiteman3dir=/usr/local/share/man/man3'
config_arg13='-Dman3dir=/usr/share/man/man3pm'
config_arg14='-Dvendorman3dir=/usr/share/man/man3'
config_arg15='-Dman3ext=3pm'
config_arg16='-Dcf_by=Mageia'
config_arg17='-Dmyhostname=localhost'
config_arg18='-Dperladmin=root@​localhost'
config_arg19='-Dcf_email=root@​localhost'
config_arg2='-Dinc_version_list=5.16.3 5.16.3/i386-linux-thread-multi 5.16.2
5.16.2/i386-linux-thread-multi 5.16.1 5.16.1/i386-linux-thread-multi 5.16.0
5.16.0/i386-linux-thread-multi 5.14.2 5.14.1 5.14.0 5.12.3 5.12.2 5.12.1
5.12.0' config_arg20='-Dperllibs=-lnsl -ldl -lm -lcrypt -lutil -lc -pthread'
config_arg21='-Ud_csh' config_arg22='-Duseshrplib' config_arg23='-Duseithreads'
config_arg24='-Di_db'
config_arg25='-Di_ndbm'
config_arg26='-Di_gdbm'
config_arg3='-Darchname=i386-linux'
config_arg4='-Dcc=gcc'
config_arg5='-Doptimize=-O2 -g -pipe -Wformat -Werror=format-security
-Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4
-fomit-frame-pointer -march=i586 -mtune=generic -fasynchronous-unwind-tables
-Wl,--as-needed -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags
-pthread' config_arg6='-DDEBUGGING=-g' config_arg7='-Dprefix=/usr'
config_arg8='-Dvendorprefix=/usr' config_arg9='-Dsiteprefix=/usr'
config_argc='26' config_args='-des -Dinc_version_list=5.16.3
5.16.3/i386-linux-thread-multi 5.16.2 5.16.2/i386-linux-thread-multi 5.16.1
5.16.1/i386-linux-thread-multi 5.16.0 5.16.0/i386-linux-thread-multi 5.14.2
5.14.1 5.14.0 5.12.3 5.12.2 5.12.1 5.12.0 -Darchname=i386-linux -Dcc=gcc
-Doptimize=-O2 -g -pipe -Wformat -Werror=format-security
-Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4
-fomit-frame-pointer -march=i586 -mtune=generic -fasynchronous-unwind-tables
-Wl,--as-needed -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags
-pthread -DDEBUGGING=-g -Dprefix=/usr -Dvendorprefix=/usr -Dsiteprefix=/usr
-Dsitebin=/usr/local/bin -Dsiteman1dir=/usr/local/share/man/man1
-Dsiteman3dir=/usr/local/share/man/man3 -Dman3dir=/usr/share/man/man3pm
-Dvendorman3dir=/usr/share/man/man3 -Dman3ext=3pm -Dcf_by=Mageia
-Dmyhostname=localhost -Dperladmin=root@​localhost -Dcf_email=root@​localhost
-Dperllibs=-lnsl -ldl -lm -lcrypt -lutil -lc -pthread -Ud_csh -Duseshrplib
-Duseithreads -Di_db -Di_ndbm -Di_gdbm' contains='grep' cp='cp' cpio=''
cpp='cpp' cpp_stuff='42' cppccsymbols='' cppflags='-D_REENTRANT -D_GNU_SOURCE
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include' cpplast='-'
cppminus='-' cpprun='gcc -E' cppstdin='gcc -E' cppsymbols='_FILE_OFFSET_BITS=64
_GNU_SOURCE=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=200809L
_POSIX_SOURCE=1 _REENTRANT=1 _XOPEN_SOURCE=700 _XOPEN_SOURCE_EXTENDED=1
__ATOMIC_ACQUIRE=2 __ATOMIC_ACQ_REL=4 __ATOMIC_CONSUME=1 __ATOMIC_RELAXED=0
__ATOMIC_RELEASE=3 __ATOMIC_SEQ_CST=5 __BIGGEST_ALIGNMENT__=16
__BYTE_ORDER__=1234 __CHAR16_TYPE__=short\ unsigned\ int
__CHAR32_TYPE__=unsigned\ int __CHAR_BIT__=8 __DBL_DECIMAL_DIG__=17
__DBL_DENORM_MIN__=((double)4.94065645841246544177e-324L) __DBL_DIG__=15
__DBL_EPSILON__=((double)2.22044604925031308085e-16L) __DBL_HAS_DENORM__=1
__DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53
__DBL_MAX_10_EXP__=308 __DBL_MAX_EXP__=1024
__DBL_MAX__=((double)1.79769313486231570815e+308L) __DBL_MIN_10_EXP__=(-307)
__DBL_MIN_EXP__=(-1021) __DBL_MIN__=((double)2.22507385850720138309e-308L)
__DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX_EXP__=6145
__DEC128_MAX__=9.999999999999999999999999999999999E6144DL
__DEC128_MIN_EXP__=(-6142) __DEC128_MIN__=1E-6143DL
__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL
__DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX_EXP__=97
__DEC32_MAX__=9.999999E96DF __DEC32_MIN_EXP__=(-94) __DEC32_MIN__=1E-95DF
__DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD
__DEC64_MANT_DIG__=16 __DEC64_MAX_EXP__=385
__DEC64_MAX__=9.999999999999999E384DD __DEC64_MIN_EXP__=(-382)
__DEC64_MIN__=1E-383DD __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD
__DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __DEC_EVAL_METHOD__=2 __ELF__=1
__FINITE_MATH_ONLY__=0 __FLOAT_WORD_ORDER__=1234 __FLT_DECIMAL_DIG__=9
__FLT_DENORM_MIN__=1.40129846432481707092e-45F __FLT_DIG__=6
__FLT_EPSILON__=1.19209289550781250000e-7F __FLT_EVAL_METHOD__=2
__FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1
__FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX_EXP__=128
__FLT_MAX__=3.40282346638528859812e+38F __FLT_MIN_10_EXP__=(-37)
__FLT_MIN_EXP__=(-125) __FLT_MIN__=1.17549435082228750797e-38F __FLT_RADIX__=2
__GCC_ATOMIC_BOOL_LOCK_FREE=2 __GCC_ATOMIC_CHAR16_T_LOCK_FREE=2
__GCC_ATOMIC_CHAR32_T_LOCK_FREE=2 __GCC_ATOMIC_CHAR_LOCK_FREE=2
__GCC_ATOMIC_INT_LOCK_FREE=2 __GCC_ATOMIC_LLONG_LOCK_FREE=2
__GCC_ATOMIC_LONG_LOCK_FREE=2 __GCC_ATOMIC_POINTER_LOCK_FREE=2
__GCC_ATOMIC_SHORT_LOCK_FREE=2 __GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1
__GCC_ATOMIC_WCHAR_T_LOCK_FREE=2 __GCC_HAVE_DWARF2_CFI_ASM=1
__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1
__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1
__GLIBC_MINOR__=17 __GLIBC__=2 __GNUC_GNU_INLINE__=1 __GNUC_MINOR__=7
__GNUC_PATCHLEVEL__=2 __GNUC__=4 __GNU_LIBRARY__=6 __GXX_ABI_VERSION=1002
__INT16_C(c)=c __INT16_MAX__=32767 __INT16_TYPE__=short\ int __INT32_C(c)=c
__INT32_MAX__=2147483647 __INT32_TYPE__=int __INT64_C(c)=cLL
__INT64_MAX__=9223372036854775807LL __INT64_TYPE__=long\ long\ int
__INT8_C(c)=c __INT8_MAX__=127 __INT8_TYPE__=signed\ char __INTMAX_C(c)=cLL
__INTMAX_MAX__=9223372036854775807LL __INTMAX_TYPE__=long\ long\ int
__INTPTR_MAX__=2147483647 __INTPTR_TYPE__=int __INT_FAST16_MAX__=2147483647
__INT_FAST16_TYPE__=int __INT_FAST32_MAX__=2147483647 __INT_FAST32_TYPE__=int
__INT_FAST64_MAX__=9223372036854775807LL __INT_FAST64_TYPE__=long\ long\ int
__INT_FAST8_MAX__=127 __INT_FAST8_TYPE__=signed\ char __INT_LEAST16_MAX__=32767
__INT_LEAST16_TYPE__=short\ int __INT_LEAST32_MAX__=2147483647
__INT_LEAST32_TYPE__=int __INT_LEAST64_MAX__=9223372036854775807LL
__INT_LEAST64_TYPE__=long\ long\ int __INT_LEAST8_MAX__=127
__INT_LEAST8_TYPE__=signed\ char __INT_MAX__=2147483647
__LDBL_DENORM_MIN__=3.64519953188247460253e-4951L __LDBL_DIG__=18
__LDBL_EPSILON__=1.08420217248550443401e-19L __LDBL_HAS_DENORM__=1
__LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64
__LDBL_MAX_10_EXP__=4932 __LDBL_MAX_EXP__=16384
__LDBL_MAX__=1.18973149535723176502e+4932L __LDBL_MIN_10_EXP__=(-4931)
__LDBL_MIN_EXP__=(-16381) __LDBL_MIN__=3.36210314311209350626e-4932L
__LONG_LONG_MAX__=9223372036854775807LL __LONG_MAX__=2147483647L
__ORDER_BIG_ENDIAN__=4321 __ORDER_LITTLE_ENDIAN__=1234
__ORDER_PDP_ENDIAN__=3412 __PRAGMA_REDEFINE_EXTNAME=1
__PTRDIFF_MAX__=2147483647 __PTRDIFF_TYPE__=int __REGISTER_PREFIX__=
__SCHAR_MAX__=127 __SHRT_MAX__=32767 __SIG_ATOMIC_MAX__=2147483647
__SIG_ATOMIC_MIN__=(-2147483647\ -\ 1) __SIG_ATOMIC_TYPE__=int
__SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT__=4 __SIZEOF_INT__=4
__SIZEOF_LONG_DOUBLE__=12 __SIZEOF_LONG_LONG__=8 __SIZEOF_LONG__=4
__SIZEOF_POINTER__=4 __SIZEOF_PTRDIFF_T__=4 __SIZEOF_SHORT__=2
__SIZEOF_SIZE_T__=4 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4
__SIZE_MAX__=4294967295U __SIZE_TYPE__=unsigned\ int __STDC_HOSTED__=1
__STDC__=1 __UINT16_C(c)=c __UINT16_MAX__=65535 __UINT16_TYPE__=short\
unsigned\ int __UINT32_C(c)=cU __UINT32_MAX__=4294967295U
__UINT32_TYPE__=unsigned\ int __UINT64_C(c)=cULL
__UINT64_MAX__=18446744073709551615ULL __UINT64_TYPE__=long\ long\ unsigned\
int __UINT8_C(c)=c __UINT8_MAX__=255 __UINT8_TYPE__=unsigned\ char
__UINTMAX_C(c)=cULL __UINTMAX_MAX__=18446744073709551615ULL
__UINTMAX_TYPE__=long\ long\ unsigned\ int __UINTPTR_MAX__=4294967295U
__UINTPTR_TYPE__=unsigned\ int __UINT_FAST16_MAX__=4294967295U
__UINT_FAST16_TYPE__=unsigned\ int __UINT_FAST32_MAX__=4294967295U
__UINT_FAST32_TYPE__=unsigned\ int __UINT_FAST64_MAX__=18446744073709551615ULL
__UINT_FAST64_TYPE__=long\ long\ unsigned\ int __UINT_FAST8_MAX__=255
__UINT_FAST8_TYPE__=unsigned\ char __UINT_LEAST16_MAX__=65535
__UINT_LEAST16_TYPE__=short\ unsigned\ int __UINT_LEAST32_MAX__=4294967295U
__UINT_LEAST32_TYPE__=unsigned\ int
__UINT_LEAST64_MAX__=18446744073709551615ULL __UINT_LEAST64_TYPE__=long\ long\
unsigned\ int __UINT_LEAST8_MAX__=255 __UINT_LEAST8_TYPE__=unsigned\ char
__USER_LABEL_PREFIX__= __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_GNU=1
__USE_LARGEFILE64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX199309=1
__USE_POSIX199506=1 __USE_POSIX2=1 __USE_POSIX=1 __USE_REENTRANT=1 __USE_SVID=1
__USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 __VERSION__="4.7.2"
__WCHAR_MAX__=2147483647L __WCHAR_MIN__=(-2147483647L\ -\ 1)
__WCHAR_TYPE__=long\ int __WINT_MAX__=4294967295U __WINT_MIN__=0U
__WINT_TYPE__=unsigned\ int __gnu_linux__=1 __i386=1 __i386__=1 __i586=1
__i586__=1 __linux=1 __linux__=1 __pentium=1 __pentium__=1 __unix=1 __unix__=1
i386=1 linux=1 unix=1' crypt_r_proto='REENTRANT_PROTO_B_CCS' cryptlib=''
csh='csh' ctermid_r_proto='0' ctime_r_proto='REENTRANT_PROTO_B_SB'
d_Gconvert='gcvt((x),(n),(b))' d_PRIEUldbl='define' d_PRIFUldbl='define'
d_PRIGUldbl='define' d_PRIXU64='define' d_PRId64='define' d_PRIeldbl='define'
d_PRIfldbl='define' d_PRIgldbl='define' d_PRIi64='define' d_PRIo64='define'
d_PRIu64='define' d_PRIx64='define' d_SCNfldbl='define' d__fwalk=''
d_access='define' d_accessx='' d_aintl='' d_alarm='define' d_archlib='define'
d_asctime64='' d_asctime_r='define' d_atolf='' d_atoll='define'
d_attribute_deprecated='define' d_attribute_format='define'
d_attribute_malloc='define' d_attribute_nonnull='define'
d_attribute_noreturn='define' d_attribute_pure='define'
d_attribute_unused='define' d_attribute_warn_unused_result='define'
d_bcmp='define' d_bcopy='define' d_bsd='' d_bsdgetpgrp='' d_bsdsetpgrp=''
d_builtin_choose_expr='define' d_builtin_expect='define' d_bzero='define'
d_c99_variadic_macros='define' d_casti32='' d_castneg='define' d_charvspr=''
d_chown='define' d_chroot='define' d_chsize='' d_class='' d_clearenv='define'
d_closedir='define' d_cmsghdr_s='define' d_const='define' d_copysignl='define'
d_cplusplus='' d_crypt='define' d_crypt_r='define' d_csh='' d_ctermid='define'
d_ctermid_r='' d_ctime64='' d_ctime_r='define' d_cuserid='define'
d_dbl_dig='define' d_dbminitproto='define' d_difftime='define' d_difftime64=''
d_dir_dd_fd='' d_dirfd='define' d_dirnamlen='' d_dlerror='define'
d_dlopen='define' d_dlsymun='' d_dosuid='' d_drand48_r='define'
d_drand48proto='define' d_dup2='define' d_eaccess='define' d_endgrent='define'
d_endgrent_r='' d_endhent='define' d_endhostent_r='' d_endnent='define'
d_endnetent_r='' d_endpent='define' d_endprotoent_r='' d_endpwent='define'
d_endpwent_r='' d_endsent='define' d_endservent_r='' d_eofnblk='define'
d_eunice='' d_faststdio='define' d_fchdir='define' d_fchmod='define'
d_fchown='define' d_fcntl='define' d_fcntl_can_lock='define'
d_fd_macros='define' d_fd_set='define' d_fds_bits='define' d_fgetpos='define'
d_finite='define' d_finitel='define' d_flexfnam='define' d_flock='define'
d_flockproto='define' d_fork='define' d_fp_class='' d_fpathconf='define'
d_fpclass='' d_fpclassify='' d_fpclassl='' d_fpos64_t='' d_frexpl='define'
d_fs_data_s='' d_fseeko='define' d_fsetpos='define' d_fstatfs='define'
d_fstatvfs='define' d_fsync='define' d_ftello='define' d_ftime=''
d_futimes='define' d_gdbm_ndbm_h_uses_prototypes=''
d_gdbmndbm_h_uses_prototypes='define' d_getaddrinfo='define' d_getcwd='define'
d_getespwnam='' d_getfsstat='' d_getgrent='define' d_getgrent_r='define'
d_getgrgid_r='define'
d_getgrnam_r='define'
d_getgrps='define'
d_gethbyaddr='define'
d_gethbyname='define'
d_gethent='define'
d_gethname='define'
d_gethostbyaddr_r='define'
d_gethostbyname_r='define'
d_gethostent_r='define'
d_gethostprotos='define'
d_getitimer='define'
d_getlogin='define'
d_getlogin_r='define'
d_getmnt=''
d_getmntent='define'
d_getnameinfo='define'
d_getnbyaddr='define'
d_getnbyname='define'
d_getnent='define'
d_getnetbyaddr_r='define'
d_getnetbyname_r='define'
d_getnetent_r='define'
d_getnetprotos='define'
d_getpagsz='define'
d_getpbyname='define'
d_getpbynumber='define'
d_getpent='define'
d_getpgid='define'
d_getpgrp='define'
d_getpgrp2=''
d_getppid='define'
d_getprior='define'
d_getprotobyname_r='define'
d_getprotobynumber_r='define'
d_getprotoent_r='define'
d_getprotoprotos='define'
d_getprpwnam=''
d_getpwent='define'
d_getpwent_r='define'
d_getpwnam_r='define'
d_getpwuid_r='define'
d_getsbyname='define'
d_getsbyport='define'
d_getsent='define'
d_getservbyname_r='define'
d_getservbyport_r='define'
d_getservent_r='define'
d_getservprotos='define'
d_getspnam='define'
d_getspnam_r='define'
d_gettimeod='define'
d_gmtime64=''
d_gmtime_r='define'
d_gnulibc='define'
d_grpasswd='define'
d_hasmntopt='define'
d_htonl='define'
d_ilogbl='define'
d_inc_version_list='define'
d_index=''
d_inetaton='define'
d_inetntop='define'
d_inetpton='define'
d_int64_t='define'
d_ipv6_mreq='define'
d_isascii='define'
d_isblank='define'
d_isfinite=''
d_isinf='define'
d_isnan='define'
d_isnanl='define'
d_killpg='define'
d_lchown='define'
d_ldbl_dig='define'
d_libm_lib_version='define'
d_link='define'
d_localtime64=''
d_localtime_r='define'
d_localtime_r_needs_tzset='define'
d_locconv='define'
d_lockf='define'
d_longdbl='define'
d_longlong='define'
d_lseekproto='define'
d_lstat='define'
d_madvise='define'
d_malloc_good_size=''
d_malloc_size=''
d_mblen='define'
d_mbstowcs='define'
d_mbtowc='define'
d_memchr='define'
d_memcmp='define'
d_memcpy='define'
d_memmove='define'
d_memset='define'
d_mkdir='define'
d_mkdtemp='define'
d_mkfifo='define'
d_mkstemp='define'
d_mkstemps='define'
d_mktime='define'
d_mktime64=''
d_mmap='define'
d_modfl='define'
d_modfl_pow32_bug=''
d_modflproto='define'
d_mprotect='define'
d_msg='define'
d_msg_ctrunc='define'
d_msg_dontroute='define'
d_msg_oob='define'
d_msg_peek='define'
d_msg_proxy='define'
d_msgctl='define'
d_msgget='define'
d_msghdr_s='define'
d_msgrcv='define'
d_msgsnd='define'
d_msync='define'
d_munmap='define'
d_mymalloc=''
d_ndbm='define'
d_ndbm_h_uses_prototypes='define'
d_nice='define'
d_nl_langinfo='define'
d_nv_preserves_uv='define'
d_nv_zero_is_allbits_zero='define'
d_off64_t='define'
d_old_pthread_create_joinable=''
d_oldpthreads=''
d_oldsock=''
d_open3='define'
d_pathconf='define'
d_pause='define'
d_perl_otherlibdirs=''
d_phostname=''
d_pipe='define'
d_poll='define'
d_portable='define'
d_prctl='define'
d_prctl_set_name='define'
d_printf_format_null='define'
d_procselfexe='define'
d_pseudofork=''
d_pthread_atfork='define'
d_pthread_attr_setscope='define'
d_pthread_yield='define'
d_pwage=''
d_pwchange=''
d_pwclass=''
d_pwcomment=''
d_pwexpire=''
d_pwgecos='define'
d_pwpasswd='define'
d_pwquota=''
d_qgcvt='define'
d_quad='define'
d_random_r='define'
d_readdir='define'
d_readdir64_r='define'
d_readdir_r='define'
d_readlink='define'
d_readv='define'
d_recvmsg='define'
d_rename='define'
d_rewinddir='define'
d_rmdir='define'
d_safebcpy=''
d_safemcpy=''
d_sanemcmp='define'
d_sbrkproto='define'
d_scalbnl='define'
d_sched_yield='define'
d_scm_rights='define'
d_seekdir='define'
d_select='define'
d_sem='define'
d_semctl='define'
d_semctl_semid_ds='define'
d_semctl_semun='define'
d_semget='define'
d_semop='define'
d_sendmsg='define'
d_setegid='define'
d_seteuid='define'
d_setgrent='define'
d_setgrent_r=''
d_setgrps='define'
d_sethent='define'
d_sethostent_r=''
d_setitimer='define'
d_setlinebuf='define'
d_setlocale='define'
d_setlocale_r=''
d_setnent='define'
d_setnetent_r=''
d_setpent='define'
d_setpgid='define'
d_setpgrp='define'
d_setpgrp2=''
d_setprior='define'
d_setproctitle=''
d_setprotoent_r=''
d_setpwent='define'
d_setpwent_r=''
d_setregid='define'
d_setresgid='define'
d_setresuid='define'
d_setreuid='define'
d_setrgid=''
d_setruid=''
d_setsent='define'
d_setservent_r=''
d_setsid='define'
d_setvbuf='define'
d_sfio=''
d_shm='define'
d_shmat='define'
d_shmatprototype='define'
d_shmctl='define'
d_shmdt='define'
d_shmget='define'
d_sigaction='define'
d_signbit='define'
d_sigprocmask='define'
d_sigsetjmp='define'
d_sin6_scope_id='define'
d_sitearch='define'
d_snprintf='define'
d_sockaddr_in6='define'
d_sockaddr_sa_len=''
d_sockatmark='define'
d_sockatmarkproto='define'
d_socket='define'
d_socklen_t='define'
d_sockpair='define'
d_socks5_init=''
d_sprintf_returns_strlen='define'
d_sqrtl='define'
d_srand48_r='define'
d_srandom_r='define'
d_sresgproto='define'
d_sresuproto='define'
d_statblks='define'
d_statfs_f_flags='define'
d_statfs_s='define'
d_static_inline='define'
d_statvfs='define'
d_stdio_cnt_lval=''
d_stdio_ptr_lval='define'
d_stdio_ptr_lval_nochange_cnt=''
d_stdio_ptr_lval_sets_cnt='define'
d_stdio_stream_array=''
d_stdiobase='define'
d_stdstdio='define'
d_strchr='define'
d_strcoll='define'
d_strctcpy='define'
d_strerrm='strerror(e)'
d_strerror='define'
d_strerror_r='define'
d_strftime='define'
d_strlcat=''
d_strlcpy=''
d_strtod='define'
d_strtol='define'
d_strtold='define'
d_strtoll='define'
d_strtoq='define'
d_strtoul='define'
d_strtoull='define'
d_strtouq='define'
d_strxfrm='define'
d_suidsafe=''
d_symlink='define'
d_syscall='define'
d_syscallproto='define'
d_sysconf='define'
d_sysernlst=''
d_syserrlst='define'
d_system='define'
d_tcgetpgrp='define'
d_tcsetpgrp='define'
d_telldir='define'
d_telldirproto='define'
d_time='define'
d_timegm='define'
d_times='define'
d_tm_tm_gmtoff='define'
d_tm_tm_zone='define'
d_tmpnam_r='define'
d_truncate='define'
d_ttyname_r='define'
d_tzname='define'
d_u32align=''
d_ualarm='define'
d_umask='define'
d_uname='define'
d_union_semun=''
d_unordered=''
d_unsetenv='define'
d_usleep='define'
d_usleepproto='define'
d_ustat='define'
d_vendorarch='define'
d_vendorbin='define'
d_vendorlib='define'
d_vendorscript='define'
d_vfork=''
d_void_closedir=''
d_voidsig='define'
d_voidtty=''
d_volatile='define'
d_vprintf='define'
d_vsnprintf='define'
d_wait4='define'
d_waitpid='define'
d_wcstombs='define'
d_wctomb='define'
d_writev='define'
d_xenix=''
date='date'
db_hashtype='u_int32_t'
db_prefixtype='size_t'
db_version_major='5'
db_version_minor='3'
db_version_patch='21'
defvoidused='15'
direntrytype='struct dirent'
dlext='so'
dlsrc='dl_dlopen.xs'
doublesize='8'
drand01='drand48()'
drand48_r_proto='REENTRANT_PROTO_I_ST'
dtrace=''
dynamic_ext='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper
Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob
Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO
IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode
POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Socket
Storable Sys/Hostname Sys/Syslog Text/Soundex Tie/Hash/NamedCapture Time/HiRes
Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap arybase
attributes mro re threads threads/shared' eagain='EAGAIN' ebcdic='' echo='echo'
egrep='egrep' emacs='' endgrent_r_proto='0' endhostent_r_proto='0'
endnetent_r_proto='0' endprotoent_r_proto='0'
endpwent_r_proto='0'
endservent_r_proto='0'
eunicefix='​:'
exe_ext=''
expr='expr'
extensions='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper
Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob
Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO
IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode
POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Socket
Storable Sys/Hostname Sys/Syslog Text/Soundex Tie/Hash/NamedCapture Time/HiRes
Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap arybase
attributes mro re threads threads/shared Archive/Extract Archive/Tar
Attribute/Handlers AutoLoader B/Debug B/Deparse B/Lint CGI CPAN CPAN/Meta
CPAN/Meta/YAML CPANPLUS CPANPLUS/Dist/Build Carp Devel/SelfStubber Digest
Dumpvalue Env Errno ExtUtils/CBuilder ExtUtils/Command ExtUtils/Constant
ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/ParseXS
File/CheckTree File/Fetch File/Path File/Temp FileCache Filter/Simple
Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags IO/Compress IO/Zlib IPC/Cmd
IPC/Open3 JSON/PP Locale/Codes Locale/Maketext Locale/Maketext/Simple
Log/Message Log/Message/Simple Math/BigInt Math/BigRat Math/Complex Memoize
Module/Build Module/CoreList Module/Load Module/Load/Conditional Module/Loaded
Module/Metadata Module/Pluggable NEXT Net/Ping Object/Accessor
Package/Constants Params/Check Parse/CPAN/Meta Perl/OSType
PerlIO/via/QuotedPrint Pod/Escapes Pod/Functions Pod/Html Pod/LaTeX Pod/Parser
Pod/Perldoc Pod/Simple Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap
Term/Complete Term/ReadLine Term/UI Test Test/Harness Test/Simple Text/Abbrev
Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File
Tie/Memoize Tie/RefHash Time/Local Version/Requirements XSLoader autodie
autouse base bignum constant encoding/warnings if lib libnet parent perlfaq
podlators' extern_C='extern' extras='' fflushNULL='define' fflushall='' find=''
firstmakefile='makefile' flex='' fpossize='16' fpostype='fpos_t'
freetype='void' from='​:' full_ar='/usr/bin/ar' full_csh='csh'
full_sed='/usr/bin/sed' gccansipedantic='' gccosandvers='' gccversion='4.7.2'
getgrent_r_proto='REENTRANT_PROTO_I_SBWR'
getgrgid_r_proto='REENTRANT_PROTO_I_TSBWR'
getgrnam_r_proto='REENTRANT_PROTO_I_CSBWR'
gethostbyaddr_r_proto='REENTRANT_PROTO_I_TsISBWRE'
gethostbyname_r_proto='REENTRANT_PROTO_I_CSBWRE'
gethostent_r_proto='REENTRANT_PROTO_I_SBWRE'
getlogin_r_proto='REENTRANT_PROTO_I_BW'
getnetbyaddr_r_proto='REENTRANT_PROTO_I_uISBWRE'
getnetbyname_r_proto='REENTRANT_PROTO_I_CSBWRE'
getnetent_r_proto='REENTRANT_PROTO_I_SBWRE'
getprotobyname_r_proto='REENTRANT_PROTO_I_CSBWR'
getprotobynumber_r_proto='REENTRANT_PROTO_I_ISBWR'
getprotoent_r_proto='REENTRANT_PROTO_I_SBWR'
getpwent_r_proto='REENTRANT_PROTO_I_SBWR'
getpwnam_r_proto='REENTRANT_PROTO_I_CSBWR'
getpwuid_r_proto='REENTRANT_PROTO_I_TSBWR'
getservbyname_r_proto='REENTRANT_PROTO_I_CCSBWR'
getservbyport_r_proto='REENTRANT_PROTO_I_ICSBWR'
getservent_r_proto='REENTRANT_PROTO_I_SBWR'
getspnam_r_proto='REENTRANT_PROTO_I_CSBWR' gidformat='"lu"' gidsign='1'
gidsize='4' gidtype='gid_t' git_branch='' git_commit_id=''
git_commit_id_title='' git_describe='' git_uncommitted_changes=''
glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib
' gmake='gmake' gmtime_r_proto='REENTRANT_PROTO_S_TS' gnulibc_version='2.17'
grep='grep' groupcat='cat /etc/group' groupstype='gid_t'
gzip='gzip'
h_fcntl='false'
h_sysfile='true'
hint='recommended'
hostcat='cat /etc/hosts'
html1dir=' '
html1direxp=''
html3dir=' '
html3direxp=''
i16size='2'
i16type='short'
i32size='4'
i32type='long'
i64size='8'
i64type='long long'
i8size='1'
i8type='signed char'
i_arpainet='define'
i_assert='define'
i_bsdioctl=''
i_crypt='define'
i_db='define'
i_dbm='define'
i_dirent='define'
i_dld=''
i_dlfcn='define'
i_fcntl=''
i_float='define'
i_fp=''
i_fp_class=''
i_gdbm='define'
i_gdbm_ndbm=''
i_gdbmndbm='define'
i_grp='define'
i_ieeefp=''
i_inttypes='define'
i_langinfo='define'
i_libutil=''
i_limits='define'
i_locale='define'
i_machcthr=''
i_malloc='define'
i_mallocmalloc=''
i_math='define'
i_memory=''
i_mntent='define'
i_ndbm='define'
i_netdb='define'
i_neterrno=''
i_netinettcp='define'
i_niin='define'
i_poll='define'
i_prot=''
i_pthread='define'
i_pwd='define'
i_rpcsvcdbm=''
i_sfio=''
i_sgtty=''
i_shadow='define'
i_socks=''
i_stdarg='define'
i_stdbool='define'
i_stddef='define'
i_stdlib='define'
i_string='define'
i_sunmath=''
i_sysaccess=''
i_sysdir='define'
i_sysfile='define'
i_sysfilio=''
i_sysin=''
i_sysioctl='define'
i_syslog='define'
i_sysmman='define'
i_sysmode=''
i_sysmount='define'
i_sysndir=''
i_sysparam='define'
i_syspoll='define'
i_sysresrc='define'
i_syssecrt=''
i_sysselct='define'
i_syssockio=''
i_sysstat='define'
i_sysstatfs='define'
i_sysstatvfs='define'
i_systime='define'
i_systimek=''
i_systimes='define'
i_systypes='define'
i_sysuio='define'
i_sysun='define'
i_sysutsname='define'
i_sysvfs='define'
i_syswait='define'
i_termio=''
i_termios='define'
i_time='define'
i_unistd='define'
i_ustat='define'
i_utime='define'
i_values='define'
i_varargs=''
i_varhdr='stdarg.h'
i_vfork=''
ignore_versioned_solibs='y'
inc_version_list='5.16.3 5.16.3/i386-linux-thread-multi 5.16.2
5.16.2/i386-linux-thread-multi 5.16.1 5.16.1/i386-linux-thread-multi 5.16.0
5.16.0/i386-linux-thread-multi 5.14.2 5.14.1 5.14.0 5.12.3 5.12.2 5.12.1
5.12.0'
inc_version_list_init='"5.16.3","5.16.3/i386-linux-thread-multi","5.16.2","5.16.2/i386-linux-thread-multi","5.16.1","5.16.1/i386-linux-thread-multi","5.16.0","5.16.0/i386-linux-thread-multi","5.14.2","5.14.1","5.14.0","5.12.3","5.12.2","5.12.1","5.12.0",0'
incpath='' inews='' initialinstalllocation='/usr/bin'
installarchlib='/usr/lib/perl5/5.16.3/i386-linux-thread-multi'
installbin='/usr/bin' installhtml1dir=''
installhtml3dir=''
installman1dir='/usr/share/man/man1'
installman3dir='/usr/share/man/man3pm'
installprefix='/usr'
installprefixexp='/usr'
installprivlib='/usr/lib/perl5/5.16.3'
installscript='/usr/bin'
installsitearch='/usr/lib/perl5/site_perl/5.16.3/i386-linux-thread-multi'
installsitebin='/usr/local/bin'
installsitehtml1dir=''
installsitehtml3dir=''
installsitelib='/usr/lib/perl5/site_perl/5.16.3'
installsiteman1dir='/usr/local/share/man/man1'
installsiteman3dir='/usr/local/share/man/man3'
installsitescript='/usr/local/bin'
installstyle='lib/perl5'
installusrbinperl=''
installvendorarch='/usr/lib/perl5/vendor_perl/5.16.3/i386-linux-thread-multi'
installvendorbin='/usr/bin'
installvendorhtml1dir=''
installvendorhtml3dir=''
installvendorlib='/usr/lib/perl5/vendor_perl/5.16.3'
installvendorman1dir='/usr/share/man/man1'
installvendorman3dir='/usr/share/man/man3'
installvendorscript='/usr/bin'
intsize='4'
issymlink='test -h'
ivdformat='"ld"'
ivsize='4'
ivtype='long'
known_extensions='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File
Data/Dumper Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl
File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash
I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File
ODBM_File Opcode POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via
SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex
Tie/Hash/NamedCapture Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize
VMS/DCLsym VMS/Stdio Win32 Win32API/File Win32CORE XS/APItest XS/Typemap
arybase attributes mro re threads threads/shared ' ksh='' ld='gcc'
ld_can_script='define' lddlflags='-shared -O2 -g -pipe -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector
--param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic
-fasynchronous-unwind-tables -Wl,--as-needed -Wl,-z,relro -Wl,-O1
-Wl,--build-id -Wl,--enable-new-dtags -pthread -L/usr/local/lib' ldflags='
-fstack-protector -L/usr/local/lib' ldflags_nolargefiles=' -fstack-protector
-L/usr/local/lib' ldflags_uselargefiles='' ldlibpthname='LD_LIBRARY_PATH'
less='less' lib='lib' lib_ext='.a' libc='/lib/libc-2.17.so'
libdb_needs_pthread='N' libperl='libperl.so'
libpth='/usr/local/lib /lib /usr/lib' libs='-lnsl -lgdbm -ldb -ldl -lm -lcrypt
-lutil -lpthread -lc -lgdbm_compat' libs_nolargefiles='-lnsl -lgdbm -ldb -ldl
-lm -lcrypt -lutil -lpthread -lc -lgdbm_compat' libsdirs=' /lib' libsfiles='
libnsl.so libgdbm.so libdb.so libdl.so libm.so libcrypt.so libutil.so
libpthread.so libc.so libgdbm_compat.so'
libsfound=' /lib/libnsl.so /lib/libgdbm.so /lib/libdb.so /lib/libdl.so /lib/libm.so /lib/libcrypt.so /lib/libutil.so /lib/libpthread.so /lib/libc.so /lib/libgdbm_compat.so'
libspath=' /usr/local/lib /lib /usr/lib' libswanted='sfio socket inet nsl nm
ndbm gdbm dbm db malloc dl dld ld sun m crypt sec util pthread c cposix posix
ucb BSD gdbm_compat' libswanted_nolargefiles='sfio socket inet nsl nm ndbm gdbm
dbm db malloc dl dld ld sun m crypt sec util pthread c cposix posix ucb BSD
gdbm_compat' libswanted_uselargefiles='' line='' lint='' lkflags='' ln='ln'
lns='/usr/bin/ln -s'
localtime_r_proto='REENTRANT_PROTO_S_TS'
locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
longdblsize='12'
longlongsize='8'
longsize='4'
lp=''
lpr=''
ls='ls'
lseeksize='8'
lseektype='off_t'
mad=''
madlyh=''
madlyobj=''
madlysrc=''
mail=''
mailx=''
make='make'
make_set_make='#'
mallocobj=''
mallocsrc=''
malloctype='void *'
man1dir='/usr/share/man/man1'
man1direxp='/usr/share/man/man1'
man1ext='1'
man3dir='/usr/share/man/man3pm'
man3direxp='/usr/share/man/man3pm'
man3ext='3pm'
mips_type=''
mistrustnm=''
mkdir='mkdir'
mmaptype='void *'
modetype='mode_t'
more='more'
multiarch=''
mv=''
myarchname='i686-linux'
mydomain='.(none)'
myhostname='localhost'
myuname='linux jonund.mageia.org 3.4.24-server-3.mga2 #1 smp sat jan 5 03​:09​:04
utc 2013 i686 i686 i686 gnulinux ' n='-n'
need_va_copy=''
netdb_hlen_type='size_t'
netdb_host_type='const void *'
netdb_name_type='const char *'
netdb_net_type='in_addr_t'
nm='nm'
nm_opt=''
nm_so_opt='--dynamic'
nonxs_ext='Archive/Extract Archive/Tar Attribute/Handlers AutoLoader B/Debug
B/Deparse B/Lint CGI CPAN CPAN/Meta CPAN/Meta/YAML CPANPLUS CPANPLUS/Dist/Build
Carp Devel/SelfStubber Digest Dumpvalue Env Errno ExtUtils/CBuilder
ExtUtils/Command ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker
ExtUtils/Manifest ExtUtils/ParseXS File/CheckTree File/Fetch File/Path
File/Temp FileCache Filter/Simple Getopt/Long HTTP/Tiny I18N/Collate
I18N/LangTags IO/Compress IO/Zlib IPC/Cmd IPC/Open3 JSON/PP Locale/Codes
Locale/Maketext Locale/Maketext/Simple Log/Message Log/Message/Simple
Math/BigInt Math/BigRat Math/Complex Memoize Module/Build Module/CoreList
Module/Load Module/Load/Conditional Module/Loaded Module/Metadata
Module/Pluggable NEXT Net/Ping Object/Accessor Package/Constants Params/Check
Parse/CPAN/Meta Perl/OSType PerlIO/via/QuotedPrint Pod/Escapes Pod/Functions
Pod/Html Pod/LaTeX Pod/Parser Pod/Perldoc Pod/Simple Safe Search/Dict
SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Term/UI Test
Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs
Thread/Queue Thread/Semaphore Tie/File Tie/Memoize Tie/RefHash Time/Local
Version/Requirements XSLoader autodie autouse base bignum constant
encoding/warnings if lib libnet parent perlfaq podlators' nroff='nroff'
nvEUformat='"E"' nvFUformat='"F"' nvGUformat='"G"'
nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
nv_preserves_uv_bits='32' nveformat='"e"' nvfformat='"f"' nvgformat='"g"'
nvsize='8' nvtype='double' o_nonblock='O_NONBLOCK' obj_ext='.o'
old_pthread_create_joinable='' optimize='-O2 -g -pipe -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector
--param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic
-fasynchronous-unwind-tables -Wl,--as-needed -Wl,-z,relro -Wl,-O1
-Wl,--build-id -Wl,--enable-new-dtags -pthread' orderlib='false' osname='linux'
osvers='3.4.24-server-3.mga2' otherlibdirs=' ' package='perl5'
pager='/usr/bin/less -R' passcat='cat /etc/passwd' patchlevel='16' path_sep='​:'
perl='perl' perl5='/usr/bin/perl' perl_patchlevel='' perl_static_inline='static
__inline__' perladmin='root@​localhost' perllibs='-lnsl -ldl -lm -lcrypt -lutil
-lpthread -lc' perlpath='/usr/bin/perl'
pg='pg'
phostname=''
pidtype='pid_t'
plibpth='/lib/i586-mageia-linux-gnu/4.7.2 /lib /usr/lib/i586-mageia-linux-gnu/4.7.2 /usr/lib'
pmake=''
pr=''
prefix='/usr'
prefixexp='/usr'
privlib='/usr/lib/perl5/5.16.3'
privlibexp='/usr/lib/perl5/5.16.3'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
quadkind='3'
quadtype='long long'
randbits='48'
randfunc='drand48'
random_r_proto='REENTRANT_PROTO_I_St'
randseedtype='long'
ranlib='​:'
rd_nodata='-1'
readdir64_r_proto='REENTRANT_PROTO_I_TSR'
readdir_r_proto='REENTRANT_PROTO_I_TSR'
revision='5'
rm='rm'
rm_try='/usr/bin/rm -f try try a.out .out try.[cho] try..o core core.try*
try.core*' rmail=''
run=''
runnm='false'
sGMTIME_max='2147483647'
sGMTIME_min='-2147483648'
sLOCALTIME_max='2147483647'
sLOCALTIME_min='-2147483648'
sPRIEUldbl='"LE"'
sPRIFUldbl='"LF"'
sPRIGUldbl='"LG"'
sPRIXU64='"LX"'
sPRId64='"Ld"'
sPRIeldbl='"Le"'
sPRIfldbl='"Lf"'
sPRIgldbl='"Lg"'
sPRIi64='"Li"'
sPRIo64='"Lo"'
sPRIu64='"Lu"'
sPRIx64='"Lx"'
sSCNfldbl='"Lf"'
sched_yield='sched_yield()'
scriptdir='/usr/bin'
scriptdirexp='/usr/bin'
sed='sed'
seedfunc='srand48'
selectminbits='32'
selecttype='fd_set *'
sendmail=''
setgrent_r_proto='0'
sethostent_r_proto='0'
setlocale_r_proto='0'
setnetent_r_proto='0'
setprotoent_r_proto='0'
setpwent_r_proto='0'
setservent_r_proto='0'
sh='/bin/sh'
shar=''
sharpbang='#!'
shmattype='void *'
shortsize='2'
shrpenv=''
shsharp='true'
sig_count='65'
sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM
TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO
PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43
NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56
NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED '
sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS",
"FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT",
"CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ",
"VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN",
"NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42",
"NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50",
"NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58",
"NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL",
"UNUSED", 0' sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
22 23 24 25 26 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 '
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='/usr/lib/perl5/site_perl/5.16.3/i386-linux-thread-multi'
sitearchexp='/usr/lib/perl5/site_perl/5.16.3/i386-linux-thread-multi'
sitebin='/usr/local/bin' sitebinexp='/usr/local/bin' sitehtml1dir=''
sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp=''
sitelib='/usr/lib/perl5/site_perl/5.16.3'
sitelib_stem='/usr/lib/perl5/site_perl'
sitelibexp='/usr/lib/perl5/site_perl/5.16.3'
siteman1dir='/usr/local/share/man/man1'
siteman1direxp='/usr/local/share/man/man1'
siteman3dir='/usr/local/share/man/man3'
siteman3direxp='/usr/local/share/man/man3' siteprefix='/usr'
siteprefixexp='/usr' sitescript='/usr/local/bin' sitescriptexp='/usr/local/bin'
sizesize='4' sizetype='size_t' sleep='' smail='' so='so' sockethdr=''
socketlib='' socksizetype='socklen_t' sort='sort'
spackage='Perl5'
spitshell='cat'
srand48_r_proto='REENTRANT_PROTO_I_LS'
srandom_r_proto='REENTRANT_PROTO_I_TS'
src='.'
ssizetype='ssize_t'
st_ino_sign='1'
st_ino_size='8'
startperl='#!/usr/bin/perl'
startsh='#!/bin/sh'
static_ext=' '
stdchar='char'
stdio_base='((fp)->_IO_read_base)'
stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)'
stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
stdio_filbuf=''
stdio_ptr='((fp)->_IO_read_ptr)'
stdio_stream_array=''
strerror_r_proto='REENTRANT_PROTO_B_IBW'
strings='/usr/include/string.h'
submit=''
subversion='3'
sysman='/usr/share/man/man1'
tail=''
tar=''
targetarch=''
tbl=''
tee=''
test='test'
timeincl='/usr/include/sys/time.h /usr/include/time.h '
timetype='time_t'
tmpnam_r_proto='REENTRANT_PROTO_B_B'
to='​:'
touch='touch'
tr='tr'
trnl='\n'
troff=''
ttyname_r_proto='REENTRANT_PROTO_I_IBW'
u16size='2'
u16type='unsigned short'
u32size='4'
u32type='unsigned long'
u64size='8'
u64type='unsigned long long'
u8size='1'
u8type='unsigned char'
uidformat='"lu"'
uidsign='1'
uidsize='4'
uidtype='uid_t'
uname='uname'
uniq='uniq'
uquadtype='unsigned long long'
use5005threads=''
use64bitall=''
use64bitint=''
usecrosscompile=''
usedevel=''
usedl='define'
usedtrace=''
usefaststdio=''
useithreads='define'
usekernprocpathname=''
uselargefiles='define'
uselongdouble=''
usemallocwrap='define'
usemorebits=''
usemultiplicity='define'
usemymalloc='n'
usenm='false'
usensgetexecutablepath=''
useopcode='true'
useperlio='define'
useposix='true'
usereentrant=''
userelocatableinc=''
usesfio='false'
useshrplib='true'
usesitecustomize=''
usesocks=''
usethreads='define'
usevendorprefix='define'
usevfork='false'
usrinc='/usr/include'
uuname=''
uvXUformat='"lX"'
uvoformat='"lo"'
uvsize='4'
uvtype='unsigned long'
uvuformat='"lu"'
uvxformat='"lx"'
vaproto='define'
vendorarch='/usr/lib/perl5/vendor_perl/5.16.3/i386-linux-thread-multi'
vendorarchexp='/usr/lib/perl5/vendor_perl/5.16.3/i386-linux-thread-multi'
vendorbin='/usr/bin'
vendorbinexp='/usr/bin'
vendorhtml1dir=' '
vendorhtml1direxp=''
vendorhtml3dir=' '
vendorhtml3direxp=''
vendorlib='/usr/lib/perl5/vendor_perl/5.16.3'
vendorlib_stem='/usr/lib/perl5/vendor_perl'
vendorlibexp='/usr/lib/perl5/vendor_perl/5.16.3'
vendorman1dir='/usr/share/man/man1'
vendorman1direxp='/usr/share/man/man1'
vendorman3dir='/usr/share/man/man3'
vendorman3direxp='/usr/share/man/man3'
vendorprefix='/usr'
vendorprefixexp='/usr'
vendorscript='/usr/bin'
vendorscriptexp='/usr/bin'
version='5.16.3'
version_patchlevel_string='version 16 subversion 3'
versiononly=''
vi=''
voidflags='15'
xlibpth='/usr/lib/386 /lib/386'
yacc='yacc'
yaccflags=''
zcat=''
zip='zip'

--


Shlomi Fish http​://www.shlomifish.org/
List of Networking Clients - http​://shlom.in/net-clients

I hope that you agree with me that 99.9218485921% of the users wouldn’t bother
themselves with recompilation (or any other manual step for that matter) to
make their games run 1.27127529900685765% faster ;-) — Nadav Har’El

Please reply to list if it's a mailing list post - http​://shlom.in/reply .

@p5pRT
Copy link
Author

p5pRT commented May 26, 2013

From @jkeenan

On Sat May 25 09​:36​:11 2013, shlomif@​shlomifish.org wrote​:

This is a bug report for perl from shlomif@​shlomifish.org,
generated with the help of perlbug 1.39 running under perl 5.16.3.

Threaded perl-5.18.0 fails the re/pat_rt_report_thr.t test script on
Mageia Linux 3 i586 (32-bit x86 - NOT x86-64). To reproduce, use
Mageia Linux
3 and either of the following build files​:

[QUOTE]
#!/bin/bash

# This script reproduces a failure at the "make test" stage with perl-
5.18.0
# on i586 Mageia Linux 3 (and Mageia Linux Cauldron).
#
# To reproduce do​:
# tar -xvf perl-5.18.0.tar.bz2.
# cd perl-5.18.0.
# bash ~/build-perl-on-i586-with-failure/build-perl-with-failure.bash
# make
# make test

# Based on the Mageia's perl-5.18.0-1's .src.rpm's .spec.

sh Configure -des \
-Doptimize='-O2' -DDEBUGGING=-g \
-Dperllibs='-lnsl -ldl -lm -lcrypt -lutil -lc -pthread' \
-Ud_csh \
-Duseshrplib \
-Duseithreads \

I built with these arguments on dromedary and all tests passed. Now,
dromedary is x86_64; I don't have a Linux 586 available.

That suggests that the test failures you witnessed are specific to the
platform/OS/options combination chosen.

I would recommend trying other builds on this system, adding one
argument at a time until the failing tests emerge.

Thank you very much.
Jim Keenan

@p5pRT
Copy link
Author

p5pRT commented May 26, 2013

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented May 26, 2013

From @shlomif

Hi James,

On Sat May 25 17​:19​:15 2013, jkeenan wrote​:

On Sat May 25 09​:36​:11 2013, shlomif@​shlomifish.org wrote​:

This is a bug report for perl from shlomif@​shlomifish.org,
generated with the help of perlbug 1.39 running under perl 5.16.3.

Threaded perl-5.18.0 fails the re/pat_rt_report_thr.t test script on
Mageia Linux 3 i586 (32-bit x86 - NOT x86-64). To reproduce, use
Mageia Linux
3 and either of the following build files​:

[QUOTE]
#!/bin/bash

# This script reproduces a failure at the "make test" stage with perl-
5.18.0
# on i586 Mageia Linux 3 (and Mageia Linux Cauldron).
#
# To reproduce do​:
# tar -xvf perl-5.18.0.tar.bz2.
# cd perl-5.18.0.
# bash ~/build-perl-on-i586-with-failure/build-perl-with-failure.bash
# make
# make test

# Based on the Mageia's perl-5.18.0-1's .src.rpm's .spec.

sh Configure -des \
-Doptimize='-O2' -DDEBUGGING=-g \
-Dperllibs='-lnsl -ldl -lm -lcrypt -lutil -lc -pthread' \
-Ud_csh \
-Duseshrplib \
-Duseithreads \

I built with these arguments on dromedary and all tests passed. Now,
dromedary is x86_64; I don't have a Linux 586 available.

The fact that it fails on i586 was the whole point. All tests are
successful on x86-64 with the same configuration.

Can't you set up an i586 Linux VM? See https://www.virtualbox.org/ .

That suggests that the test failures you witnessed are specific to the
platform/OS/options combination chosen.

Yes, maybe.

I would recommend trying other builds on this system, adding one
argument at a time until the failing tests emerge.

Yes, I already reduced the flags considerably and I will reduce them
even further.

Regards,

-- Shlomi Fish

Thank you very much.
Jim Keenan

@p5pRT
Copy link
Author

p5pRT commented May 26, 2013

From @shlomif

Hi all,

On Sun May 26 01​:11​:10 2013, shlomif wrote​:

I would recommend trying other builds on this system, adding one
argument at a time until the failing tests emerge.

Yes, I already reduced the flags considerably and I will reduce them
even further.

Regards,

-- Shlomi Fish

I was able to reproduce it on Mageia Linux 3 i586 with this​:

https://github.com/shlomif/build-perl-with-failure-on-i586/blob/master/build-perl-with-failure.bash

< QUOTE >
sh Configure -des \
  -Duseithreads \
< / QUOTE >

Is there a need for further reduction?

I am now going to try that on a Debian 7.x (Stable) i386 VM.

Regards,

-- Shlomi Fish

@p5pRT
Copy link
Author

p5pRT commented May 26, 2013

From @shlomif

Hi all,

On Sun May 26 01​:48​:36 2013, shlomif wrote​:

Hi all,

On Sun May 26 01​:11​:10 2013, shlomif wrote​:

I would recommend trying other builds on this system, adding one
argument at a time until the failing tests emerge.

Yes, I already reduced the flags considerably and I will reduce them
even further.

Regards,

-- Shlomi Fish

I was able to reproduce it on Mageia Linux 3 i586 with this​:

https://github.com/shlomif/build-perl-with-failure-on-
i586/blob/master/build-perl-with-failure.bash

< QUOTE >
sh Configure -des \
-Duseithreads \
< / QUOTE >

With these flags on debian-7.0.0-i686 (installed from the LXDE CD at
http​://mirror.isoc.org.il/pub/debian-cd/i386/iso-cd/ ) - the test in
question appears to pass. But Mageia Linux 3 has different versions of
the packages and dependencies (gcc, glibc, etc.). I'm now running "make
test" there.

Regards,

-- Shlomi Fish

@p5pRT
Copy link
Author

p5pRT commented May 26, 2013

From @shlomif

On Sun May 26 02​:41​:06 2013, shlomif wrote​:

Hi all,

On Sun May 26 01​:48​:36 2013, shlomif wrote​:

Hi all,

On Sun May 26 01​:11​:10 2013, shlomif wrote​:

I would recommend trying other builds on this system, adding one
argument at a time until the failing tests emerge.

Yes, I already reduced the flags considerably and I will reduce them
even further.

Regards,

-- Shlomi Fish

I was able to reproduce it on Mageia Linux 3 i586 with this​:

https://github.com/shlomif/build-perl-with-failure-on-
i586/blob/master/build-perl-with-failure.bash

< QUOTE >
sh Configure -des \
-Duseithreads \
< / QUOTE >

With these flags on debian-7.0.0-i686 (installed from the LXDE CD at
http​://mirror.isoc.org.il/pub/debian-cd/i386/iso-cd/ ) - the test in
question appears to pass. But Mageia Linux 3 has different versions of
the packages and dependencies (gcc, glibc, etc.). I'm now running "make
test" there.

And all tests are successful on Debian-7.0.0-i385 stable.

Regards,

-- Shlomi Fish

Regards,

-- Shlomi Fish

@p5pRT
Copy link
Author

p5pRT commented May 27, 2013

From @nwc10

On Sun, May 26, 2013 at 02​:48​:36AM -0700, Shlomi Fish via RT wrote​:

On Sun May 26 02​:41​:06 2013, shlomif wrote​:

Hi all,

On Sun May 26 01​:48​:36 2013, shlomif wrote​:

Hi all,

I was able to reproduce it on Mageia Linux 3 i586 with this​:

https://github.com/shlomif/build-perl-with-failure-on-
i586/blob/master/build-perl-with-failure.bash

< QUOTE >
sh Configure -des \
-Duseithreads \
< / QUOTE >

With these flags on debian-7.0.0-i686 (installed from the LXDE CD at
http​://mirror.isoc.org.il/pub/debian-cd/i386/iso-cd/ ) - the test in
question appears to pass. But Mageia Linux 3 has different versions of
the packages and dependencies (gcc, glibc, etc.). I'm now running "make
test" there.

And all tests are successful on Debian-7.0.0-i385 stable.

I can't replicate this on a 32-bit build on a Debian 6 system. Everything
else I have access to that is or can build 32-bit is also Debian based
(and newer). So I can't help here.

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented May 27, 2013

From @shlomif

Hi Nicholas,

On Mon, 27 May 2013 15​:11​:51 +0100
Nicholas Clark <nick@​ccl4.org> wrote​:

On Sun, May 26, 2013 at 02​:48​:36AM -0700, Shlomi Fish via RT wrote​:

On Sun May 26 02​:41​:06 2013, shlomif wrote​:

Hi all,

On Sun May 26 01​:48​:36 2013, shlomif wrote​:

Hi all,

I was able to reproduce it on Mageia Linux 3 i586 with this​:

https://github.com/shlomif/build-perl-with-failure-on-
i586/blob/master/build-perl-with-failure.bash

< QUOTE >
sh Configure -des \
-Duseithreads \
< / QUOTE >

With these flags on debian-7.0.0-i686 (installed from the LXDE CD at
http​://mirror.isoc.org.il/pub/debian-cd/i386/iso-cd/ ) - the test in
question appears to pass. But Mageia Linux 3 has different versions of
the packages and dependencies (gcc, glibc, etc.). I'm now running "make
test" there.

And all tests are successful on Debian-7.0.0-i385 stable.

I can't replicate this on a 32-bit build on a Debian 6 system. Everything
else I have access to that is or can build 32-bit is also Debian based
(and newer). So I can't help here.

Would it be possible for you to set up a Mageia 3 32-bit i586 VM so you can
debug it? You can download a CD .iso from http​://www.mageia.org/en/downloads/ -
the dualarch or the LiveCD KDE/LiveCD GNOME will do. Is there anything else I
can do to help debug this problem?

Regards,

  Shlomi Fish

--


Shlomi Fish http​://www.shlomifish.org/
http​://www.shlomifish.org/humour/Summerschool-at-the-NSA/

Mephiqoleth​: THERE ARE JEWS OF MANY SPECIES.
Selina​: Really? That’s great - can I have a Jewish lady-cat? I want one
so she can mother cute little Jewish kittens.
  — http​://www.shlomifish.org/humour/Selina-Mandrake/

Please reply to list if it's a mailing list post - http​://shlom.in/reply .

@p5pRT
Copy link
Author

p5pRT commented May 27, 2013

From @rjbs

* Shlomi Fish <shlomif@​shlomifish.org> [2013-05-27T13​:03​:30]

Would it be possible for you to set up a Mageia 3 32-bit i586 VM so you can
debug it? You can download a CD .iso from http​://www.mageia.org/en/downloads/
- the dualarch or the LiveCD KDE/LiveCD GNOME will do. Is there anything else
I can do to help debug this problem?

Have you tried contacting someone with a vested interest in having perl work on
Mageia? Specifically, the Mageia community?

--
rjbs

@p5pRT
Copy link
Author

p5pRT commented May 27, 2013

From @shlomif

Hi Ricardo,

On Mon May 27 10​:16​:43 2013, perl.p5p@​rjbs.manxome.org wrote​:

* Shlomi Fish <shlomif@​shlomifish.org> [2013-05-27T13​:03​:30]

Would it be possible for you to set up a Mageia 3 32-bit i586 VM so
you can
debug it? You can download a CD .iso from
http​://www.mageia.org/en/downloads/
- the dualarch or the LiveCD KDE/LiveCD GNOME will do. Is there
anything else
I can do to help debug this problem?

Have you tried contacting someone with a vested interest in having
perl work on
Mageia? Specifically, the Mageia community?

Well, I am part of the Magiea community - being a packager for them and
helping with other things I can, and reported this bug on behalf of
Jerome Quelin and Olivier Blin and other packagers who discovered this
bug, as I was able to reproduce it. And we don't know exactly how to
start debugging this bug, so we are asking your for help. It may be
caused by a new glibc version or may be a gcc bug or whatever.

In any case, installing a VM of a system that causes problems is not
such a huge ordeal, and Mageia installs and runs fine inside VirtualBox,
which is gratis and open source and usable. For this KDE bug report -
https://bugs.kde.org/show_bug.cgi?id=224447#c103 - I set up and
installed an Archlinux VM, which was a frustrating experience, only to
see if I can reproduce that bug (which wasn't introduced by me, but
which I could not reproduce on my local system) and I also set up a
Debian 7.0.0 VM for debugging this perl problem now (which was more time
consuming than setting up a Mageia 3 VM).

Regards,

-- Shlomi Fish

@p5pRT
Copy link
Author

p5pRT commented May 28, 2013

From @shlomif

Hi all,

I am now getting the same test failures after building a threaded perl
using
https://github.com/shlomif/build-perl-with-failure-on-i586/blob/master/build-perl-with-failure.bash
, and running
https://github.com/shlomif/build-perl-with-failure-on-i586/blob/master/run_only_failing_test.bash
on a most up-to-date http​://manjaro.org/ i586 VM (= Manjaro Linux, an
Arch Linux derivative). Please let me know if you need any more
information. So it influences more than just Mageia Linux 3.

Regards,

-- Shlomi Fish

@p5pRT
Copy link
Author

p5pRT commented May 28, 2013

From @tonycoz

On Sat, May 25, 2013 at 09​:36​:12AM -0700, shlomif@​shlomifish.org (via RT) wrote​:

Threaded perl-5.18.0 fails the re/pat_rt_report_thr.t test script on
Mageia Linux 3 i586 (32-bit x86 - NOT x86-64). To reproduce, use Mageia Linux
3 and either of the following build files​:

The failure on Megeia essentially comes down to​:

[tony@​localhost perl]$ ./perl -Ilib -Mthreads -le 'sub foo { $s = "\x{1ff}" . "f" x 32000; my $r = $s =~ /\x{1ff}f*/gc; print $r; print pos($s) } foo()'
1
32001
[tony@​localhost perl]$ ./perl -Ilib -Mthreads -le 'sub foo { $s = "\x{1ff}" . "f" x 32000; my $r = $s =~ /\x{1ff}f*/gc; print $r; print pos($s) } my $t = threads->create(\&foo); $t->join'
1
1

Note that the pos() value is low even for smaller strings​:

[tony@​localhost perl]$ ./perl -Ilib -Mthreads -le 'sub foo { $s = "\x{1ff}" . "f" x 32; my $r = $s =~ /\x{1ff}f*/gc; print $r; print pos($s) } my $t = threads->create(\&foo); $t->join'
1
1

Tony

@p5pRT
Copy link
Author

p5pRT commented May 28, 2013

From @tonycoz

On Tue, May 28, 2013 at 07​:07​:07PM +1000, Tony Cook wrote​:

On Sat, May 25, 2013 at 09​:36​:12AM -0700, shlomif@​shlomifish.org (via RT) wrote​:

Threaded perl-5.18.0 fails the re/pat_rt_report_thr.t test script on
Mageia Linux 3 i586 (32-bit x86 - NOT x86-64). To reproduce, use Mageia Linux
3 and either of the following build files​:

Note that the pos() value is low even for smaller strings​:

[tony@​localhost perl]$ ./perl -Ilib -Mthreads -le 'sub foo { $s = "\x{1ff}" . "f" x 32; my $r = $s =~ /\x{1ff}f*/gc; print $r; print pos($s) } my $t = threads->create(\&foo); $t->join'
1
1

The obvious thing to check​:

[tony@​localhost perl]$ ./perl -Mre=debug -Ilib -Mthreads -le 'sub foo { $s = "\x{1ff}" . "f" x 32; my $r = $s =~ /\x{1ff}f*/gc; print $r; print pos($s) } my $t = threads->create(\&foo); $t->join'
Compiling REx "\x{1ff}f*"
Final program​:
  1​: EXACT <\x{1ff}> (3)
  3​: STAR (6)
  4​: EXACT <f> (0)
  6​: END (0)
anchored utf8 "%x{1ff}" at 0 (checking anchored) minlen 1
Guessing start of match in sv for REx "\x{1ff}f*" against "%x{1ff}ffffffffffffffffffffffffffffffff"
UTF-8 pattern and string...
Found anchored substr "%x{1ff}" at offset 0...
Guessed​: match at offset 0
Matching REx "\x{1ff}f*" against "%x{1ff}ffffffffffffffffffffffffffffffff"
UTF-8 pattern and string...
  0 <> <%x{1ff}fff> | 1​:EXACT <\x{1ff}>(3)
  2 <%x{1ff}> <ffffffffff> | 3​:STAR(6)
  EXACT <f> can match 0 times out of 2147483647...
  2 <%x{1ff}> <ffffffffff> | 6​: END(0)
Match successful!
1
1
Freeing REx​: "\x{1ff}f*"
Freeing REx​: "\x{1ff}f*"

@p5pRT
Copy link
Author

p5pRT commented May 28, 2013

From @tonycoz

A bit of "printf" debugging, and I believe it's a bug in perl, not in
Mageia's libraries.

S_regrepeat() sets max to I32_MAX when the supplied value is
REG_INFTY​:

  if (max == REG_INFTY)
  max = I32_MAX;

so at this point max is half our address space.

If the character we're matching ('f' in this case) is invariant (it
is) and the regexp and string are the same type UTF-8-wise, we take
the simple branch.

In the simple branch, then​:

  if (utf8_target && scan + max < loceol) {
  /* We didn't adjust <loceol> because is UTF-8, but ok to do so,
  * since here, to match at all, 1 char == 1 byte */
  loceol = scan + max;
  }

Our test regexp is UTF-8, if scan were under 0x80000000 this code
would be sane, unfortunately, the string in my test cases we being
allocated at very high address, from debugging code I added​:

Trying to match EXACT \x66 vs \x66 (@​b690046a eol 36900469 regeol b690048a)

(scan = b690046a, loceol = 36900469, PL_regeol = b690048a)

so our C<< scan + max < loceol >> condition is true, and the pointer
addition overflows.

The scan loop​:

  while (scan < loceol && UCHARAT(scan) == c) {
  scan++;
  }

then terminates early since loceol starts out less than scan.

Tony

@p5pRT
Copy link
Author

p5pRT commented May 28, 2013

From @shlomif

Hi Tony,

thanks for your help in this diagnosis. It's very appreciated.

Regards,

  Shlomi Fish.

On Tue, 28 May 2013 20​:05​:32 +1000
Tony Cook <tony@​develop-help.com> wrote​:

A bit of "printf" debugging, and I believe it's a bug in perl, not in
Mageia's libraries.

S_regrepeat() sets max to I32_MAX when the supplied value is
REG_INFTY​:

if \(max == REG\_INFTY\)
    max = I32\_MAX;

so at this point max is half our address space.

If the character we're matching ('f' in this case) is invariant (it
is) and the regexp and string are the same type UTF-8-wise, we take
the simple branch.

In the simple branch, then​:

        if \(utf8\_target && scan \+ max \< loceol\) \{
            /\* We didn't adjust \<loceol> because is UTF\-8\, but ok to do

so,
* since here, to match at all, 1 char == 1 byte */
loceol = scan + max;
}

Our test regexp is UTF-8, if scan were under 0x80000000 this code
would be sane, unfortunately, the string in my test cases we being
allocated at very high address, from debugging code I added​:

Trying to match EXACT \x66 vs \x66 (@​b690046a eol 36900469 regeol b690048a)

(scan = b690046a, loceol = 36900469, PL_regeol = b690048a)

so our C<< scan + max < loceol >> condition is true, and the pointer
addition overflows.

The scan loop​:

        while \(scan \< loceol && UCHARAT\(scan\) == c\) \{
            scan\+\+;
        \}

then terminates early since loceol starts out less than scan.

Tony

--


Shlomi Fish http​://www.shlomifish.org/
Stop Using MSIE - http​://www.shlomifish.org/no-ie/

<mst> I find it’s usually safe to assume that whatever shlomif’s doing, there
isn’t a good reason for it.

Please reply to list if it's a mailing list post - http​://shlom.in/reply .

@p5pRT
Copy link
Author

p5pRT commented May 28, 2013

From @tonycoz

On Tue, May 28, 2013 at 08​:05​:32PM +1000, Tony Cook wrote​:

so our C<< scan + max < loceol >> condition is true, and the pointer
addition overflows.

The scan loop​:

        while \(scan \< loceol && UCHARAT\(scan\) == c\) \{
            scan\+\+;
        \}

then terminates early since loceol starts out less than scan.

The attached patch fixes this particular instance of the bug, but from
inspection there are more (any C<< scan + max >> is suspect in
S_regrepeat.)

Tony

@p5pRT
Copy link
Author

p5pRT commented May 28, 2013

From @tonycoz

0001-avoid-overflowing-a-pointer-for-repeated-EXACT-nodes.patch
From 932efe1a848ca53f7a355589d74c5a0a50e6063f Mon Sep 17 00:00:00 2001
From: Tony Cook <tony@develop-help.com>
Date: Tue, 28 May 2013 20:43:28 +1000
Subject: [PATCH] avoid overflowing a pointer for repeated EXACT nodes

there may be many other similar bugs in S_regrepeat
---
 regexec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/regexec.c b/regexec.c
index 4590a81..5f4da4b 100644
--- a/regexec.c
+++ b/regexec.c
@@ -6730,7 +6730,7 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
          * can use UTF8_IS_INVARIANT() even if the pattern isn't UTF-8, as it's
          * true iff it doesn't matter if the argument is in UTF-8 or not */
         if (UTF8_IS_INVARIANT(c) || (! utf8_target && ! is_utf8_pat)) {
-            if (utf8_target && scan + max < loceol) {
+            if (utf8_target && loceol - scan > max) {
                 /* We didn't adjust <loceol> because is UTF-8, but ok to do so,
                  * since here, to match at all, 1 char == 1 byte */
                 loceol = scan + max;
-- 
1.8.1.5

@p5pRT
Copy link
Author

p5pRT commented May 30, 2013

From @tonycoz

On Tue May 28 03​:06​:14 2013, tonyc wrote​:

Our test regexp is UTF-8, if scan were under 0x80000000 this code
would be sane, unfortunately, the string in my test cases we being
allocated at very high address, from debugging code I added​:

Last night I spent some time trying to figure out if I can run the
entire test suite allocating above the 2G line, but I couldn't see a
simple way to do it.

The glibc supplied with Mageia appears to switch to mmap() for allocation
(instead of brk()) inside threads, and mmap() is allocating above the
2G line.

The only other way I can see to do that would be a custom malloc(), but
I'm not sure I want to work that hard.

Tony

@p5pRT
Copy link
Author

p5pRT commented Jun 3, 2013

From @tonycoz

On Tue May 28 03​:49​:19 2013, tonyc wrote​:

On Tue, May 28, 2013 at 08​:05​:32PM +1000, Tony Cook wrote​:

so our C<< scan + max < loceol >> condition is true, and the pointer
addition overflows.

The scan loop​:

        while \(scan \< loceol && UCHARAT\(scan\) == c\) \{
            scan\+\+;
        \}

then terminates early since loceol starts out less than scan.

The attached patch fixes this particular instance of the bug, but from
inspection there are more (any C<< scan + max >> is suspect in
S_regrepeat.)

I've applied this fix, and a few similar changes to S_regrepeat as
the merge commit 285a3ca.

I think this is a candidate for maint.

Tony

@p5pRT
Copy link
Author

p5pRT commented Jun 7, 2013

From @rjbs

* Tony Cook via RT <perlbug-followup@​perl.org> [2013-06-03T08​:32​:13]

I've applied this fix, and a few similar changes to S_regrepeat as
the merge commit 285a3ca.

I think this is a candidate for maint.

Would some other committer please have a look at this code and comment on its
suitability for safey backporting?

Thanks.

--
rjbs

@p5pRT
Copy link
Author

p5pRT commented Jun 7, 2013

From @nwc10

On Wed, May 29, 2013 at 05​:22​:05PM -0700, Tony Cook via RT wrote​:

On Tue May 28 03​:06​:14 2013, tonyc wrote​:

Our test regexp is UTF-8, if scan were under 0x80000000 this code
would be sane, unfortunately, the string in my test cases we being
allocated at very high address, from debugging code I added​:

Last night I spent some time trying to figure out if I can run the
entire test suite allocating above the 2G line, but I couldn't see a
simple way to do it.

The glibc supplied with Mageia appears to switch to mmap() for allocation
(instead of brk()) inside threads, and mmap() is allocating above the
2G line.

The only other way I can see to do that would be a custom malloc(), but
I'm not sure I want to work that hard.

I suspect that Perl's malloc can be (ab)used so that it always allocates
"more core" by using mmap. But in turn I don't know if mmap() can be told
to allocate address above 2G (distinct from "allocate at this address).
And I agree, I'm not sure if it's worth it.

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Jun 7, 2013

From @cpansprout

On Fri Jun 07 08​:35​:09 2013, perl.p5p@​rjbs.manxome.org wrote​:

* Tony Cook via RT <perlbug-followup@​perl.org> [2013-06-03T08​:32​:13]

I've applied this fix, and a few similar changes to S_regrepeat as
the merge commit 285a3ca.

I think this is a candidate for maint.

Would some other committer please have a look at this code and comment
on its
suitability for safey backporting?

’Fraid I’m not familiar with that code at all.

--

Father Chrysostomos

@p5pRT
Copy link
Author

p5pRT commented Jun 8, 2013

From @hvds

Ricardo Signes <perl.p5p@​rjbs.manxome.org> wrote​:
:* Tony Cook via RT <perlbug-followup@​perl.org> [2013-06-03T08​:32​:13]
:> I've applied this fix, and a few similar changes to S_regrepeat as
:> the merge commit 285a3ca.
:>
:> I think this is a candidate for maint.
:
:Would some other committer please have a look at this code and comment on its
:suitability for safey backporting?

The change is essentially four variants of this​:

- if (utf8_target && scan + max < loceol) {
+ if (utf8_target && loceol - scan > max) {

I think this is correct only if scan and loceol are guaranteed to be
pointers into the same string, and the difference guaranteed to fit in
I32 (the type of I<max>) without wrapping.

I think the former is intended to be the case, but the docs and comments
do not clearly indicate it, and I can't easily prove it. I've no idea
under what circumstances the latter is guaranteed.

I wonder whether it would make all this significantly clearer if
almost all these pointers were replaced with offsets. In particular,
it might make rather more obvious if we are trying to do stuff that
simply isn't going to work when a string can exceed 2GB.

I don't think the change makes anything worse, in the sense that I don't
think there's a universe in which the new code can go wrong but the old
code can't. But if there are any universes in which the new code can go
wrong, then in some of those universes I believe it may go wrong more,
or worse, than the old code. Hope that helps. :)

For the record, in this case I also think one commit would have been
a (small) improvement over four.

Hugo

@p5pRT
Copy link
Author

p5pRT commented Jun 8, 2013

From @tonycoz

On Sat, Jun 08, 2013 at 08​:43​:18AM +0100, hv@​crypt.org wrote​:

Ricardo Signes <perl.p5p@​rjbs.manxome.org> wrote​:
:* Tony Cook via RT <perlbug-followup@​perl.org> [2013-06-03T08​:32​:13]
:> I've applied this fix, and a few similar changes to S_regrepeat as
:> the merge commit 285a3ca.
:>
:> I think this is a candidate for maint.
:
:Would some other committer please have a look at this code and comment on its
:suitability for safey backporting?

The change is essentially four variants of this​:

- if (utf8_target && scan + max < loceol) {
+ if (utf8_target && loceol - scan > max) {

I think this is correct only if scan and loceol are guaranteed to be
pointers into the same string, and the difference guaranteed to fit in
I32 (the type of I<max>) without wrapping.

The difference isn't required to fit into I32 - C's promotion rules
will upgrade both sides of the comparison to the larger of ptrdiff_t
or I32, the type of the left and right sides of the comparison.

scan and loceol are pointers in the string being matched against -
scan is the current position being matched, loceol is initialized with
the end of the string and otherwise set to values within the string
(without the changes loceol could point outside the string.)

I think the former is intended to be the case, but the docs and comments
do not clearly indicate it, and I can't easily prove it. I've no idea
under what circumstances the latter is guaranteed.

It's clearer with davem's changes in blead where PL_regeol has become
reginfo->strend.

I wonder whether it would make all this significantly clearer if
almost all these pointers were replaced with offsets. In particular,
it might make rather more obvious if we are trying to do stuff that
simply isn't going to work when a string can exceed 2GB.

Neither version has a problem with strings larger than 2GB, but
neither will match more than 2**31-1 items.

I don't think the change makes anything worse, in the sense that I don't
think there's a universe in which the new code can go wrong but the old
code can't. But if there are any universes in which the new code can go
wrong, then in some of those universes I believe it may go wrong more,
or worse, than the old code. Hope that helps. :)

Please propose an example.

For the record, in this case I also think one commit would have been
a (small) improvement over four.

I mostly wanted to make the fixes match the tests added (for the two
cases where tests were added.)

Tony

@p5pRT
Copy link
Author

p5pRT commented Jun 15, 2013

From @iabyn

On Mon, Jun 03, 2013 at 05​:32​:13AM -0700, Tony Cook via RT wrote​:

On Tue May 28 03​:49​:19 2013, tonyc wrote​:

On Tue, May 28, 2013 at 08​:05​:32PM +1000, Tony Cook wrote​:

so our C<< scan + max < loceol >> condition is true, and the pointer
addition overflows.

The scan loop​:

        while \(scan \< loceol && UCHARAT\(scan\) == c\) \{
            scan\+\+;
        \}

then terminates early since loceol starts out less than scan.

The attached patch fixes this particular instance of the bug, but from
inspection there are more (any C<< scan + max >> is suspect in
S_regrepeat.)

I've applied this fix, and a few similar changes to S_regrepeat as
the merge commit 285a3ca.

I think this is a candidate for maint.

Now cherry-picked into maint-5.18 as
4149c71.

--
Little fly, thy summer's play my thoughtless hand
has terminated with extreme prejudice.
  (with apologies to William Blake)

@p5pRT
Copy link
Author

p5pRT commented Jun 15, 2013

@iabyn - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant