Closed
Description
Description
We embed multiple perl interpreters into some of our applications. After upgrading from 5.26.0 to 5.30.2 (also confirmed that it exists on 5.31.11, 5.28.2 is still unknown), we see the following intermittent crash
* thread #1, name = 'perl', stop reason = signal SIGSEGV: invalid address (fault address: 0x408c58a18)
frame #0: 0x00000000005968db perl`Perl__inverse_folds(my_perl=<unavailable>, cp=97, first_folds_to=0x00007fffffffb40c, remaining_folds_to=0x00007fffffffb410) at utf8.c:3436:16
3433 /* 'index' is guaranteed to be non-negative, as this is an inversion map
3434 * that covers all possible inputs. See [perl #133365] */
3435 SSize_t index = _invlist_search(PL_utf8_foldclosures, cp);
-> 3436 I32 base = _Perl_IVCF_invmap[index];
3437
3438 PERL_ARGS_ASSERT__INVERSE_FOLDS;
3439
(lldb) bt
* thread #1, name = 'perl', stop reason = signal SIGSEGV: invalid address (fault address: 0x408c58a18)
* frame #0: 0x00000000005968db perl`Perl__inverse_folds(my_perl=<unavailable>, cp=97, first_folds_to=0x00007fffffffb40c, remaining_folds_to=0x00007fffffffb410) at utf8.c:3436:16
frame #1: 0x00000000004bce96 perl`S_regclass(my_perl=0x0000000801c22000, pRExC_state=0x00007fffffffbf60, flagp=0x00007fffffffb7bc, depth=9, stop_at_1=<unavailable>, allow_mutiple_chars=true, silence_non_portable=<unavailable>, strict=<unavailable>, optimizable=<unavailable>, ret_invlist=0x0000000000000000) at regcomp.c:19332:53
frame #2: 0x00000000004b02b8 perl`S_regatom(my_perl=0x0000000801c22000, pRExC_state=0x00007fffffffbf60, flagp=0x00007fffffffb7bc, depth=<unavailable>) at regcomp.c:13487:15
frame #3: 0x00000000004ae0c1 perl`S_regbranch [inlined] S_regpiece(my_perl=<unavailable>, pRExC_state=<unavailable>) at regcomp.c:12600:11
frame #4: 0x00000000004ae0a1 perl`S_regbranch(my_perl=0x0000000801c22000, pRExC_state=0x00007fffffffbf60, flagp=0x00007fffffffb8a8, first=<unavailable>, depth=8) at regcomp.c:12520
frame #5: 0x0000000000490370 perl`S_reg(my_perl=0x0000000801c22000, pRExC_state=0x00007fffffffbf60, paren=2, flagp=0x00007fffffffba1c, depth=<unavailable>) at regcomp.c:12222:10
frame #6: 0x00000000004b00ce perl`S_regatom(my_perl=0x0000000801c22000, pRExC_state=<unavailable>, flagp=0x00007fffffffbbec, depth=<unavailable>) at regcomp.c:13509:15
frame #7: 0x00000000004ae0c1 perl`S_regbranch [inlined] S_regpiece(my_perl=<unavailable>, pRExC_state=<unavailable>) at regcomp.c:12600:11
frame #8: 0x00000000004ae0a1 perl`S_regbranch(my_perl=0x0000000801c22000, pRExC_state=0x00007fffffffbf60, flagp=0x00007fffffffbcd8, first=<unavailable>, depth=4) at regcomp.c:12520
frame #9: 0x0000000000490370 perl`S_reg(my_perl=0x0000000801c22000, pRExC_state=0x00007fffffffbf60, paren=0, flagp=0x00007fffffffc0cc, depth=<unavailable>) at regcomp.c:12222:10
frame #10: 0x000000000048cfe8 perl`Perl_re_op_compile(my_perl=0x0000000801c22000, patternp=<unavailable>, pat_count=<unavailable>, expr=<unavailable>, eng=0x0000000000994358, old_re=0x0000000000000000, is_bare_re=0x0000000000000000, orig_rx_flags=0, pm_flags=0) at regcomp.c:7854:9
frame #11: 0x000000000042af4e perl`Perl_pmruntime(my_perl=0x0000000801c22000, o=0x0000000817fdfe10, expr=<unavailable>, repl=0x0000000000000000, flags=<unavailable>, floor=<unavailable>) at op.c:8359:6
frame #12: 0x0000000000486067 perl`Perl_yyparse(my_perl=0x0000000801c22000, gramtype=<unavailable>) at perly.y:1293:23
frame #13: 0x000000000054df6c perl`S_doeval_compile(my_perl=0x0000000801c22000, gimme=<unavailable>, outside=<unavailable>, seq=<unavailable>, hh=<unavailable>) at pp_ctl.c:3540:77
frame #14: 0x000000000054c7d7 perl`Perl_pp_require [inlined] S_require_file(my_perl=<unavailable>, sv=<unavailable>) at pp_ctl.c:4363:9
frame #15: 0x000000000054b41d perl`Perl_pp_require(my_perl=0x0000000801c22000) at pp_ctl.c:4387
frame #16: 0x00000000004f3d06 perl`Perl_runops_standard(my_perl=0x0000000801c22000) at run.c:41:26
frame #17: 0x000000000044ec83 perl`Perl_call_sv(my_perl=0x0000000801c22000, sv=0x000000080fb9ec30, flags=13) at perl.c:3089:6
frame #18: 0x000000000044b2e8 perl`Perl_call_list(my_perl=0x0000000801c22000, oldscope=15, paramList=0x0000000810876c78) at perl.c:5128:6
frame #19: 0x0000000000438e38 perl`S_process_special_blocks(my_perl=0x0000000801c22000, floor=603, fullname=<unavailable>, gv=0x000000080f9ea4e0, cv=0x000000080fb9ec30) at op.c:11733:6
frame #20: 0x0000000000430436 perl`Perl_newATTRSUB_x(my_perl=0x0000000801c22000, floor=603, o=<unavailable>, proto=<unavailable>, attrs=0x0000000000000000, block=0x000000081276b830, o_is_gv=<unavailable>) at op.c:11659:21
frame #21: 0x0000000000431923 perl`Perl_utilize(my_perl=0x0000000801c22000, aver=<unavailable>, floor=603, version=<unavailable>, idop=<unavailable>, arg=<unavailable>) at op.c:8821:5
frame #22: 0x0000000000484c5d perl`Perl_yyparse(my_perl=0x0000000801c22000, gramtype=<unavailable>) at perly.y:347:6
frame #23: 0x000000000054df6c perl`S_doeval_compile(my_perl=0x0000000801c22000, gimme=<unavailable>, outside=<unavailable>, seq=<unavailable>, hh=<unavailable>) at pp_ctl.c:3540:77
frame #24: 0x000000000054c7d7 perl`Perl_pp_require [inlined] S_require_file(my_perl=<unavailable>, sv=<unavailable>) at pp_ctl.c:4363:9
frame #25: 0x000000000054b41d perl`Perl_pp_require(my_perl=0x0000000801c22000) at pp_ctl.c:4387
frame #26: 0x00000000004f3d06 perl`Perl_runops_standard(my_perl=0x0000000801c22000) at run.c:41:26
frame #27: 0x000000000044ec83 perl`Perl_call_sv(my_perl=0x0000000801c22000, sv=0x00000008120a5900, flags=13) at perl.c:3089:6
frame #28: 0x000000000044b2e8 perl`Perl_call_list(my_perl=0x0000000801c22000, oldscope=11, paramList=0x000000081233f480) at perl.c:5128:6
frame #29: 0x0000000000438e38 perl`S_process_special_blocks(my_perl=0x0000000801c22000, floor=491, fullname=<unavailable>, gv=0x00000008120a5c48, cv=0x00000008120a5900) at op.c:11733:6
frame #30: 0x0000000000430436 perl`Perl_newATTRSUB_x(my_perl=0x0000000801c22000, floor=491, o=<unavailable>, proto=<unavailable>, attrs=0x0000000000000000, block=0x0000000819d48a90, o_is_gv=<unavailable>) at op.c:11659:21
frame #31: 0x0000000000431923 perl`Perl_utilize(my_perl=0x0000000801c22000, aver=<unavailable>, floor=491, version=<unavailable>, idop=<unavailable>, arg=<unavailable>) at op.c:8821:5
frame #32: 0x0000000000484c5d perl`Perl_yyparse(my_perl=0x0000000801c22000, gramtype=<unavailable>) at perly.y:347:6
frame #33: 0x000000000054df6c perl`S_doeval_compile(my_perl=0x0000000801c22000, gimme=<unavailable>, outside=<unavailable>, seq=<unavailable>, hh=<unavailable>) at pp_ctl.c:3540:77
frame #34: 0x000000000054c7d7 perl`Perl_pp_require [inlined] S_require_file(my_perl=<unavailable>, sv=<unavailable>) at pp_ctl.c:4363:9
frame #35: 0x000000000054b41d perl`Perl_pp_require(my_perl=0x0000000801c22000) at pp_ctl.c:4387
frame #36: 0x00000000004f3d06 perl`Perl_runops_standard(my_perl=0x0000000801c22000) at run.c:41:26
frame #37: 0x000000000044ec83 perl`Perl_call_sv(my_perl=0x0000000801c22000, sv=0x00000008103dd3c0, flags=13) at perl.c:3089:6
frame #38: 0x000000000044b2e8 perl`Perl_call_list(my_perl=0x0000000801c22000, oldscope=7, paramList=0x00000008103ddb28) at perl.c:5128:6
frame #39: 0x0000000000438e38 perl`S_process_special_blocks(my_perl=0x0000000801c22000, floor=379, fullname=<unavailable>, gv=0x000000080fb22f30, cv=0x00000008103dd3c0) at op.c:11733:6
frame #40: 0x0000000000430436 perl`Perl_newATTRSUB_x(my_perl=0x0000000801c22000, floor=379, o=<unavailable>, proto=<unavailable>, attrs=0x0000000000000000, block=0x0000000819d48690, o_is_gv=<unavailable>) at op.c:11659:21
frame #41: 0x0000000000431923 perl`Perl_utilize(my_perl=0x0000000801c22000, aver=<unavailable>, floor=379, version=<unavailable>, idop=<unavailable>, arg=<unavailable>) at op.c:8821:5
frame #42: 0x0000000000484c5d perl`Perl_yyparse(my_perl=0x0000000801c22000, gramtype=<unavailable>) at perly.y:347:6
frame #43: 0x000000000054df6c perl`S_doeval_compile(my_perl=0x0000000801c22000, gimme=<unavailable>, outside=<unavailable>, seq=<unavailable>, hh=<unavailable>) at pp_ctl.c:3540:77
frame #44: 0x000000000054c7d7 perl`Perl_pp_require [inlined] S_require_file(my_perl=<unavailable>, sv=<unavailable>) at pp_ctl.c:4363:9
frame #45: 0x000000000054b41d perl`Perl_pp_require(my_perl=0x0000000801c22000) at pp_ctl.c:4387
frame #46: 0x00000000004f3d06 perl`Perl_runops_standard(my_perl=0x0000000801c22000) at run.c:41:26
frame #47: 0x000000000044ec83 perl`Perl_call_sv(my_perl=0x0000000801c22000, sv=0x000000081c9ac8d0, flags=13) at perl.c:3089:6
frame #48: 0x000000000044b2e8 perl`Perl_call_list(my_perl=0x0000000801c22000, oldscope=3, paramList=0x00000008123f9c78) at perl.c:5128:6
frame #49: 0x0000000000438e38 perl`S_process_special_blocks(my_perl=0x0000000801c22000, floor=258, fullname=<unavailable>, gv=0x0000000816fd3ee8, cv=0x000000081c9ac8d0) at op.c:11733:6
frame #50: 0x0000000000430436 perl`Perl_newATTRSUB_x(my_perl=0x0000000801c22000, floor=258, o=<unavailable>, proto=<unavailable>, attrs=0x0000000000000000, block=0x0000000819d481f8, o_is_gv=<unavailable>) at op.c:11659:21
frame #51: 0x0000000000431923 perl`Perl_utilize(my_perl=0x0000000801c22000, aver=<unavailable>, floor=258, version=<unavailable>, idop=<unavailable>, arg=<unavailable>) at op.c:8821:5
frame #52: 0x0000000000484c5d perl`Perl_yyparse(my_perl=0x0000000801c22000, gramtype=<unavailable>) at perly.y:347:6
frame #53: 0x000000000054df6c perl`S_doeval_compile(my_perl=0x0000000801c22000, gimme=<unavailable>, outside=<unavailable>, seq=<unavailable>, hh=<unavailable>) at pp_ctl.c:3540:77
frame #54: 0x000000000054d85d perl`Perl_pp_entereval(my_perl=<unavailable>) at pp_ctl.c:4519:9
frame #55: 0x00000000004f3d06 perl`Perl_runops_standard(my_perl=0x0000000801c22000) at run.c:41:26
frame #56: 0x000000000044e4aa perl`S_run_body(my_perl=0x0000000801c22000, oldscope=<unavailable>) at perl.c:0
frame #57: 0x000000000044e291 perl`perl_run(my_perl=0x0000000801c22000) at perl.c:2682:2
frame #58: 0x00000000004213e0 perl`main(argc=<unavailable>, argv=<unavailable>, env=0x00007fffffffe150) at perlmain.c:127:9
frame #59: 0x000000000042115d perl`_start + 141
Steps to Reproduce
Unknown
Expected behavior
Should not seg fault.
Perl configuration
Summary of my perl5 (revision 5 version 31 subversion 11) configuration:
Platform:
osname=freebsd
osvers=11.3-release
archname=amd64-freebsd-thread-multi
uname='freebsd freebsd11-2.build.lan 11.3-release freebsd 11.3-release #0 r349754: fri jul 5 04:45:24 utc 2019 [email protected]:usrobjusrsrcsysgeneric amd64 '
config_args='-de -Duserelocatableinc -Dusethreads -Dlocincpth=none -Dloclibpth=none -Dprefix=.../.. -Dbin=bin -Dcc=cc -Dld=clang++ -Dccflags=-DPERL_RELOCATABLE_INCPUSH -fexceptions -maes -fPIC -D_REENTRANT -Aldflags= -Wl,--rpath,/usr/local/Striata/lib -Wl,--rpath,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -Alddlflags= -shared -Wl,--rpath,/usr/local/Striata/lib -Wl,--rpath,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -Dprivlib=.../../lib -Dprivlibexp=.../../lib -Darchlib=.../../lib/freebsd -Darchlibexp=.../../lib/freebsd -Dsitelib=.../../site/lib -Dsitelibexp=.../../site/lib -Dsitearch=.../../site/lib/freebsd -Dsitearchexp=.../../site/lib/freebsd -Dvendorprefix=.../../vendor -Dvendorlib=.../../vendor/lib -Dvendorlibexp=.../../vendor/lib -Dvendorarch=.../../vendor/lib/freebsd -Dvendorarchexp=.../../vendor/lib/freebsd -Dstartperl=#!/usr/home/build/dev/clang-64/medusa-freebsd64/medusa/build/perl/cpan/perl/install/perl/bin/perl -Dperlpath=/usr/home/build/dev/clang-64/medusa-freebsd64/medusa/build/perl/cpan/perl/install/perl/bin/perl -Accflags=-DPERL_USE_SAFE_PUTENV -Doptimize=-O3 -DDEBUGGING=-g -Duse64bitint -Duse64bitall=define'
hint=recommended
useposix=true
d_sigaction=define
useithreads=define
usemultiplicity=define
use64bitint=define
use64bitall=define
uselongdouble=undef
usemymalloc=n
default_inc_excludes_dot=define
bincompat5005=undef
Compiler:
cc='cc'
ccflags ='-DPERL_RELOCATABLE_INCPUSH -fexceptions -maes -fPIC -D_REENTRANT -DPERL_USE_SAFE_PUTENV -fno-strict-aliasing -pipe -fstack-protector-strong -D_FORTIFY_SOURCE=2'
optimize='-O3 -g'
cppflags='-DPERL_RELOCATABLE_INCPUSH -fexceptions -maes -fPIC -D_REENTRANT -DPERL_USE_SAFE_PUTENV -fno-strict-aliasing -pipe -fstack-protector-strong'
ccversion=''
gccversion='4.2.1 Compatible FreeBSD Clang 8.0.0 (tags/RELEASE_800/final 356365)'
gccosandvers=''
intsize=4
longsize=8
ptrsize=8
doublesize=8
byteorder=12345678
doublekind=3
d_longlong=define
longlongsize=8
d_longdbl=define
longdblsize=16
longdblkind=3
ivtype='long'
ivsize=8
nvtype='double'
nvsize=8
Off_t='off_t'
lseeksize=8
alignbytes=8
prototype=define
Linker and Libraries:
ld='clang++'
ldflags ='-pthread -Wl,-E -Wl,--rpath,/usr/local/Striata/lib -Wl,--rpath,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -fstack-protector-strong'
libpth=/usr/lib /usr/local/lib /usr/lib/clang/8.0.0/lib /usr/lib
libs=-lpthread -ldl -lm -lcrypt -lutil
perllibs=-lpthread -ldl -lm -lcrypt -lutil
libc=
so=so
useshrplib=false
libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs
dlext=so
d_dlsymun=undef
ccdlflags=' '
cccdlflags='-DPIC -fPIC'
lddlflags='-shared -shared -Wl,--rpath,/usr/local/Striata/lib -Wl,--rpath,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -fstack-protector-strong'
Characteristics of this binary (from libperl):
Compile-time options:
HAS_TIMES
MULTIPLICITY
PERLIO_LAYERS
PERL_COPY_ON_WRITE
PERL_DONT_CREATE_GVSV
PERL_IMPLICIT_CONTEXT
PERL_MALLOC_WRAP
PERL_OP_PARENT
PERL_PRESERVE_IVUV
PERL_RELOCATABLE_INCPUSH
PERL_USE_SAFE_PUTENV
USE_64_BIT_ALL
USE_64_BIT_INT
USE_ITHREADS
USE_LARGE_FILES
USE_LOCALE
USE_LOCALE_COLLATE
USE_LOCALE_CTYPE
USE_LOCALE_NUMERIC
USE_LOCALE_TIME
USE_PERLIO
USE_PERL_ATOF
USE_REENTRANT_API
Built under freebsd
Compiled at May 8 2020 17:59:29
@INC:
/usr/home/build/dev/clang-64/medusa-freebsd64/medusa/build/perl/cpan/perl/install/perl/vendor/lib/freebsd
/usr/home/build/dev/clang-64/medusa-freebsd64/medusa/build/perl/cpan/perl/install/perl/vendor/lib
/usr/home/build/dev/clang-64/medusa-freebsd64/medusa/build/perl/cpan/perl/install/perl/site/lib/freebsd
/usr/home/build/dev/clang-64/medusa-freebsd64/medusa/build/perl/cpan/perl/install/perl/site/lib
/usr/home/build/dev/clang-64/medusa-freebsd64/medusa/build/perl/cpan/perl/install/perl/lib/freebsd
/usr/home/build/dev/clang-64/medusa-freebsd64/medusa/build/perl/cpan/perl/install/perl/lib
Metadata
Metadata
Assignees
Labels
No labels