This is a live mirror of the Perl 5 development currently hosted at
3 years agot/ Special case openbsd
Karl Williamson [Mon, 19 Mar 2018 15:11:24 +0000 (09:11 -0600)]
t/ Special case openbsd

The openbsd setlocale() doesn't behave at all like what one would expect
from that function.  The comments added in this commit give some

3 years agot/run/locale.t: Refactor to use done_testing()
Karl Williamson [Tue, 17 Apr 2018 18:06:53 +0000 (12:06 -0600)]
t/run/locale.t: Refactor to use done_testing()

Various platforms have different locale abilities.  It was getting
complicated to make sure the skip counts are valid for each combination.

3 years agot/run/locale.t: Add debugging code
Karl Williamson [Thu, 15 Feb 2018 04:25:41 +0000 (21:25 -0700)]
t/run/locale.t: Add debugging code

This has proved useful at times

3 years agore/regexp_unicode_prop.t: Add test
Karl Williamson [Sun, 8 Apr 2018 21:03:56 +0000 (15:03 -0600)]
re/regexp_unicode_prop.t: Add test

User-defined properties can have the same name as, and override an
official property definition.  This may or may not be the correct
behavior going forward, but it shouldn't be changed inadvertently.

3 years agomktables: Add tests for t/re/unipropsFOO
Karl Williamson [Sun, 8 Apr 2018 20:40:49 +0000 (14:40 -0600)]
mktables: Add tests for t/re/unipropsFOO

Make sure that a non-binary property doesn't get mistakenly matched in
\p{}, which is only for binary ones.  There are some ambiguities that
this test keeps us from falling victim to.

3 years agoregen/ Remove improper line
Karl Williamson [Fri, 6 Apr 2018 02:40:19 +0000 (20:40 -0600)]
regen/ Remove improper line

I don't know what this line was supposed to do, but it wasn't working.
This commit also uses DeMorgan's law to clarify, and makes sure that
before looking at an entry in an array, that the entry exists

3 years agoregcomp.c: Fix typo in comment
Karl Williamson [Tue, 17 Apr 2018 16:17:54 +0000 (10:17 -0600)]
regcomp.c: Fix typo in comment

3 years agot/re/reg_mesg.t: Add test for [perl #132055]
Karl Williamson [Tue, 17 Apr 2018 16:08:28 +0000 (10:08 -0600)]
t/re/reg_mesg.t: Add test for [perl #132055]

3 years agot/ Increase stack size on AIX
Karl Williamson [Tue, 17 Apr 2018 04:58:55 +0000 (22:58 -0600)]
t/ Increase stack size on AIX

This is starting to core dump.  I increased it arbitrarily by 50%.

3 years agoheap-buffer-overflow
Karl Williamson [Tue, 17 Apr 2018 04:13:30 +0000 (22:13 -0600)]

The fix is simpler than in the maintenance releases due to prior changes
in 5.27.

The problem is that under some circumstances the sharp s takes up two
bytes when space for only one had been allocated.  Just the right set of
circumstances are required for this to happen.

3 years agoRevert "PATCH: (perl #132227 CVE-2018-6797] heap-buffer-overflow"
Karl Williamson [Tue, 17 Apr 2018 03:12:03 +0000 (21:12 -0600)]
Revert "PATCH: (perl #132227 CVE-2018-6797] heap-buffer-overflow"

This reverts commit 2407a17ad5d780a1625dddfb668056ab05459194.

It turns out that I applied the wrong patch, which was a preliminary one
that did not solve the entire problem.  The next commit will apply a
correct fix, with test.

3 years agofix TRIE_READ_CHAR and DECL_TRIE_TYPE to account for non-utf8 target
Yves Orton [Tue, 13 Feb 2018 23:29:26 +0000 (10:29 +1100)]
fix TRIE_READ_CHAR and DECL_TRIE_TYPE to account for non-utf8 target

This is the third commit involved in [perl #132063, and the bottom line
cause of it.  The problem is that the code is incorrectly branching to a
portion of the code that expects it is handling UTF-8. And the input
isn't UTF-8.  The fix is to handle this case and branch correctly.  This
bug requires the following things in order to manifest:
    1) the pattern is compiled under /il
    2) the pattern does not contain any characters below 256
    3) the target string is not UTF-8.

(The committer changed the test to test this issue on EBCDIC, as the
original \xFF is an invariant there that wouldn't exercise the problem.
We want a start byte for a long UTF-8 sequence for a single character.
On the EBCDIC pages we support, \xFE fits that bill.

3 years agoSubject: PATCH: [perl #132063]: Heap buffer overflow
Karl Williamson [Tue, 6 Feb 2018 21:50:48 +0000 (14:50 -0700)]
Subject: PATCH: [perl #132063]: Heap buffer overflow

There were three things that were fixed as a result of this ticket, any
one of which would have avoided the issue.

Commit 421da25c4318861925129cd1b17263289db3443c already has fixed
one of those.  The issue was reading beyond the end of a buffer, and
that commit keeps from reading beyond a NUL, which normally should be
present, marking the end of the buffer.

This commit fixes the issue where the code was told that reading that
many bytes was ok to do.  This is several instances in regexec.c of the
code assuming that the input was valid UTF-8, whereas the input was too
short for what the start byte claimed it would be.

I grepped through the core for any other similar uses, and did not find

The next commit will fix the third thing.

3 years agofix SEGV in XS::APItest::Backrefs::Comctl32Version()
Daniel Dragan [Thu, 12 Apr 2018 18:53:09 +0000 (14:53 -0400)]
fix SEGV in XS::APItest::Backrefs::Comctl32Version()

really old Mingw GCCs (3.4.5 specifically) dont implement _alloca
correctly, switch to a simpler variation

a follow on to perl #133084 and see also problems I had with alloca on
very old GCCs in

3 years agoregen uconfig.h
Tony Cook [Tue, 17 Apr 2018 01:21:26 +0000 (11:21 +1000)]
regen uconfig.h

3 years agoRegen after backporting and merging
H.Merijn Brand [Mon, 16 Apr 2018 17:16:10 +0000 (19:16 +0200)]
Regen after backporting and merging

I am aware that this might break a few tests

3 years agoRevert "S_regmatch: eliminate WHILEM_A_min paren saving"
David Mitchell [Mon, 16 Apr 2018 10:47:00 +0000 (11:47 +0100)]
Revert "S_regmatch: eliminate WHILEM_A_min paren saving"

This reverts commit 77584140f7cbfe714083cacfa671085466e98a7b.

This optimisation of mine from 5.25.9 is ill-conceived; under the right
permutations of backtracking, it is possible for the current positions
of one of more captures not to restored to their previous positions.

This commit reverts the code change, but keeps the benchmark part of
that commit, and adds a test

3 years agoregen/ stop at 256 for latin1 lists
Karl Williamson [Fri, 6 Apr 2018 02:35:22 +0000 (20:35 -0600)]
regen/ stop at 256 for latin1 lists

This changes the max of a range down from the platform's infinity to
256 when calculating things dealing with the 0-255 range.  Otherwise, on
some properties, it could go 256..infinity using up all the machine's

3 years agoregen/ Add comment
Karl Williamson [Fri, 6 Apr 2018 02:29:29 +0000 (20:29 -0600)]
regen/ Add comment

This gives the paradigm to use should this be needed

3 years ago(perl #131844) fix various space calculation issues in pp_pack.c
Tony Cook [Mon, 7 Aug 2017 23:32:58 +0000 (09:32 +1000)]
(perl #131844) fix various space calculation issues in pp_pack.c

- for the originally reported case, if the start/cur pointer is in the
  top 75% of the address space the add (cur) + glen addition would
  overflow, resulting in the condition failing incorrectly.

- the addition of the existing space used to the space needed could
  overflow, resulting in too small an allocation and a buffer overflow.

- the scaling for UTF8 could overflow.

- the multiply to calculate the space needed for many items could

For the first case, do a space calculation without making new pointers.

For the other cases, detect the overflow and croak if there's an

Originally this used Size_t_MAX as the maximum size of a memory
allocation, but for -DDEBUGGING builds realloc() throws a panic for
allocations over half the address space in size, changing the error
reported for the allocation.

For non-DEBUGGING builds the Size_t_MAX limit has the small chance
of finding a system that has 3GB of contiguous space available, and
allocating that space, which could be a denial of servce in some cases.

Unfortunately changing the limit to half the address space means that
the exact case with the original issue can no longer occur, so the
test is no longer testing against the address + length issue that
caused the original problem, since the allocation is failing earlier.

One option would be to change the test so the size request by pack is
just under 2GB, but this has a higher (but still low) probability that
the system has the address space available, and will actually try to
allocate the memory, so let's not do that.

3 years agoSynch cpan/version/* and other files with CPAN version 0.9923.
John Peacock [Mon, 16 Apr 2018 01:19:38 +0000 (21:19 -0400)]
Synch cpan/version/* and other files with CPAN version 0.9923.

Per recommendation of Karl Williamson.  Used this program to perform

3 years agoperlbug: Ask confirmation if would overwrite existing file
Karl Williamson [Tue, 3 Apr 2018 16:27:25 +0000 (10:27 -0600)]
perlbug: Ask confirmation if would overwrite existing file

This adds a prompt asking for confirmation if the perlbug report would
overwrite an existing file. My guess is that the normal answer will be

3 years agoPATCH: (perl #132227 CVE-2018-6797] heap-buffer-overflow
Karl Williamson [Fri, 2 Feb 2018 22:14:27 +0000 (15:14 -0700)]
PATCH: (perl #132227 CVE-2018-6797] heap-buffer-overflow

Restart an EXACTFish node if we change to uni rules within the node and
encounter a sharp S.  Otherwise we might size too small in pass1,
leading to a buffer overflow.

3 years agoutf8.c: Don't dump malformation past first NUL
Karl Williamson [Tue, 13 Feb 2018 14:03:43 +0000 (07:03 -0700)]
utf8.c: Don't dump malformation past first NUL

When a UTF-8 string contains a malformation, the bytes are dumped out as
a debugging aid.  One should exercise caution, however, and not dump out
bytes that are actually past the end of the string.  Commit 99a765e9e37
from 2016 added the capability to signal to the dumping routines that
we're not sure where the string ends, and to dump the minimal possible.

It occurred to me that an additional safety measure can be easily added,
which this commit does.  And that is, in the dumping routines to stop at
the first NUL.  All PVs in SVs automatically get a traiing NUL added,
even if they contain embedded NULs.  A NUL can never be part of a
malformation, and so its presence likely signals the end of the string.

3 years agoPATCH: [perl #132055] Assertion failure
Karl Williamson [Sat, 24 Mar 2018 16:38:59 +0000 (10:38 -0600)]
PATCH: [perl #132055] Assertion failure

This checks for and aborts if it find control characters in a supposed
Unicode property name.  Code further along could not handle these.

This also fixes #132553 and #132658

3 years agofix -DNO_MATHOMS build, mathomed syms were not removed from perldll.def
Daniel Dragan [Wed, 11 Apr 2018 06:15:18 +0000 (02:15 -0400)]
fix -DNO_MATHOMS build, mathomed syms were not removed from perldll.def

Commit 3f1866a8f6 assumed "A" flag means a function can't be mathomed. Not
true. Many funcs were listed in embed.fnc as "A" yet were in mathoms.c.
This caused a missing symbol link failure on Win32 with -DNO_MATHOMS,
since the "A" mathomed funcs were now put into perlldll.def while
previously they were parsed out of mathoms.c by Revise the
logic so "b" means instant removal from the export list on a no mathoms

embed.fnc "b" flag adds were generated from a missing symbol list from my
linker, some funcs not in my build/platform config might need to be "b"
flagged in future. Some funcs like ASCII_TO_NEED were already marked "b"
but still being by mistake exported because they were also "A".

sv_2bool, sv_eq and sv_collxfrm also needed a "p" flag or a Perl_-less
symbol was declared in proto.h. sv_2bool and sv_collxfrm also failed
porting/args_assert.t so add those macros to mathoms.c

3 years agoMove utf8_to_uvchr out of mathoms.c
Karl Williamson [Sun, 15 Apr 2018 04:53:14 +0000 (22:53 -0600)]
Move utf8_to_uvchr out of mathoms.c

This function can't be in mathoms because of its use in Devel::PPPort.
I tried fixing that, but the tools just hung, so this commit moves it
back to utf8.c, while still deprecated.

3 years agoThem bones
Chris 'BinGOs' Williams [Sat, 14 Apr 2018 17:20:34 +0000 (18:20 +0100)]
Them bones

3 years agoTick off 5.24.4 and 5.26.2
Steve Hay [Sat, 14 Apr 2018 12:11:29 +0000 (13:11 +0100)]
Tick off 5.24.4 and 5.26.2

3 years ago5.26.2 today
Steve Hay [Sat, 14 Apr 2018 09:24:59 +0000 (10:24 +0100)]
5.26.2 today

(cherry picked from commit b4140ca05cb1b2f60e143219cfdc57a8808662c2)

3 years ago5.24.4 today
Steve Hay [Sat, 14 Apr 2018 09:24:48 +0000 (10:24 +0100)]
5.24.4 today

(cherry picked from commit 3e87ffef3c714f1b79cd46c90c0f45012290c35b)

3 years agoImport perl5244delta.pod and perl5262delta.pod
Steve Hay [Sat, 14 Apr 2018 11:59:41 +0000 (12:59 +0100)]
Import perl5244delta.pod and perl5262delta.pod

3 years agoUpdate Module-CoreList with data for 5.24.4 and 5.26.2
Steve Hay [Sat, 14 Apr 2018 11:54:13 +0000 (12:54 +0100)]
Update Module-CoreList with data for 5.24.4 and 5.26.2

3 years agoEpigraphs for 5.24.4 and 5.26.2
Steve Hay [Sat, 14 Apr 2018 11:41:40 +0000 (12:41 +0100)]
Epigraphs for 5.24.4 and 5.26.2

3 years agoSynch cpan/version/* and other files with CPAN version 0.9921.
John Peacock [Thu, 12 Apr 2018 15:22:58 +0000 (11:22 -0400)]
Synch cpan/version/* and other files with CPAN version 0.9921.

Committer's note:  In large part probably due to the CUSTOMIZED aspect of
'version' in Porting/, the regular 'Porting/sync-with-cpan'
program did not give good results when I attempted to use it for
So I hacked together my own program, available here:

3 years agofix win32 with GCC 3.4.5 build
Daniel Dragan [Fri, 6 Apr 2018 22:41:22 +0000 (18:41 -0400)]
fix win32 with GCC 3.4.5 build

dlltool from Strawberry 5.12 and
dlltool 2.17.50 20060824 from Strawberry 5.8.9 were making a libperl527.a
that caused perl.exe and all XS DLLs to import "perl527.exp.dll" while
the disk file is called perl527.dll.

This bug was eventually fixed, since in my testing dlltool 2.25 no date
code, Copyright 2014 from Strawberry 5.22.1 doesn't have this problem. I
suspect the bug was fixed in binutils commit 04276a0cf5
"2010-12-01 Kai Tietz <>"
in version "AM_INIT_AUTOMAKE(bfd, 2.21.51)" or 1 ver bump higher. Just
always pass an explicit DLL name to dlltool instead of any kind of
dlltool version checking at build time and then optional arg.

The breakage for 3.4.5 was introduced in
commit bf543eaf90d "add parallelness to win32/GNUmakefile" where I added
parallelness by making the import lib .a file from just perldll.def,
rather than the import lib being a build product coming out of g++
linking perl527.dll. The old serial build recipie passed --dllname
to dlltool, my newer code didn't.

Passing $(PERLDLL) to dlltool's -D causes this harmless but scary warning

"dlltool: Path components stripped from dllname, '..\perl527.dll'."

So create PERLDLLBASE to silence the warning.

win32.h: In old GCCs, a function marked
declspec(dllimport) is not a constant. VC from day 1, and newer GCCs use
the address of a 1 instruction jump stub function if a constant function
pointer is needed to a function from a DLL that wont be known till runtime.
This can be worked around in older GCCs by deoptimizing them to always
use the jump stub for all references, and not the newer GCC and VC way
where x86 call instructions directly read the import table in the caller,
while constant functions ptrs in data or vars always refer to the jump
stubs. Since these are old GCCs, performance isn't the highest priority
and building at all is a more important goal. I suspect gcc 3.4.5 has
been broken since 5.13.6 when the declspec(dllimport) code was added.

3 years agoUpdate Config::Perl::V with test on 5.27.11 (rsync version)
H.Merijn Brand [Thu, 12 Apr 2018 12:16:08 +0000 (14:16 +0200)]
Update Config::Perl::V with test on 5.27.11 (rsync version)

3 years agoperlvar: update the docs on "my $_" to note its removal
Ricardo Signes [Tue, 10 Apr 2018 12:42:08 +0000 (08:42 -0400)]
perlvar: update the docs on "my $_" to note its removal

3 years agoS_regmatch(): improve debugging output
David Mitchell [Tue, 3 Apr 2018 13:19:42 +0000 (14:19 +0100)]
S_regmatch(): improve debugging output

Make the various debugging outputs identify where the message is coming
from; e,g, change

    trying longer...


    WHILEM: B min fail: trying longer...

and change some existing "whilem: ..." messages to "WHILEM: ..." for

3 years agofix parallel ALL_STATIC Win32 build
Daniel Dragan [Fri, 6 Apr 2018 13:12:48 +0000 (09:12 -0400)]
fix parallel ALL_STATIC Win32 build

Normalize depends on mktables's output. Mktables is a very long serial CPU
intensive build product. No other modules except Normalize depend on
mktables. Normalize XS module must be split out from all other XS modules
to fill CPU cores with parallel work, so that the 2 longest running
tagets, Mktables and all XS modules, run in parallel instead of 1 after
another. Since Normalize was hardcoded as a dynamic module, in an
ALL_STATIC build, Normalize was build twice, once as a static in the
big Extensions_static target, and once as a dynamic module, a race
happened if a parallel build was done, and if the Extensions_static target
got around to trying to build Normalize static, before by chance Normalize
dyn was build, Normalize static failed. This can be demostrated by cleaning
the src tree and building each target individually explicitly. Fix the race
by creating a Normalize static and dynamic target and dropout the deps
depending on if its ALL_STATIC or not. Also the now "big" Extensions_static
target when doing an ALL_STATIC build also failed because the general XS
modules that need to build didn't have available when their
Makefile.PL'es were run. For example cpan/Compress-Raw-Bzip2 needs
to build. So separate out from Dynaloader target so both dyn
extensions and static exts have available. Technically, static exts
dont need unless its ALL_STATIC, since for dyn win32 perl Win32CORE
is the only static module, but is relativly fast and easy and low
dep to build so build it anyways for static ext target in non-ALL_STATIC
mode rather than special case the dep between ALL_STATIC and
non-ALL_STATIC. doesn't need
-normalize doesn't need

Reverts "Fix static builds with MinGW" commit 9999704e7ac and adds fixes.
This is a follow on to [perl #132992].

To reduce the diff-ness between the dmake and gmake mkfs. Make the
distclean identical. For dmkf, dont delete twice. And for gmfk
add Amiga dir deletion since requires it for dmkf but the
original day 1 of gmkf in commit 342634f3c8 "kmx's original GNUmakefile"
never had the Amiga line, but that day 1 commit also never added
GNUmakefile to the way was already added and
chked for its dir clean list. So add GNUmakefile to be chked by the way the other 2 win32 mkfs are checked. In gmfk move line to match dmfk which is more psuedo-alpha sorted. Also
fix the Test vs Test2 typo.

Some more text is available in the ticket associated with this patch.

3 years agoprevent warnings from building Storable on x64 Win32 with gcc
Tony Cook [Thu, 29 Mar 2018 00:11:23 +0000 (11:11 +1100)]
prevent warnings from building Storable on x64 Win32 with gcc

3 years agoPATCH: [perl #133074] 5.26.1: some coverity fixes
Marc-Philip [Sun, 8 Apr 2018 18:15:29 +0000 (12:15 -0600)]
PATCH: [perl #133074] 5.26.1: some coverity fixes

we have some coverity code scans here. They have found this
uninilialized variable in pp.c and the integer overrun in toke.c.
Though it might be possible that these are false positives (no
reasonable control path gets there), it's good to mute the scan here to
see the real problems easier.

3 years agoAdd Marc-Philip Werner to AUTHORS
Karl Williamson [Sun, 8 Apr 2018 18:24:32 +0000 (12:24 -0600)]
Add Marc-Philip Werner to AUTHORS

3 years agofix utf8.c overflowed VC6's preproc macro buffer and syntax errored
Daniel Dragan [Sun, 8 Apr 2018 04:19:11 +0000 (00:19 -0400)]
fix utf8.c overflowed VC6's preproc macro buffer and syntax errored

Only happened with CFG=Debug/-DDEBUGGING. Non-debugging VC6 build not

cl -c -nologo -GF -W3 -I.\include -I. -I.. -DWIN32 -D_CONSOLE -DNO_STRICT
-DPERL_IS_MINIPERL -Fomini\utf8.obj -Fdmini\utf8.pdb ..\utf8.c
..\utf8.c(4057) : error C2017: illegal escape sequence
..\utf8.c(4057) : error C2017: illegal escape sequence
..\utf8.c(4057) : error C2017: illegal escape sequence
..\utf8.c(4057) : error C2017: illegal escape sequence
..\utf8.c(4057) : error C2143: syntax error : missing ')' before 'string'
..\utf8.c(4057) : error C2017: illegal escape sequence
..\utf8.c(4057) : error C2017: illegal escape sequence
..\utf8.c(4057) : error C2017: illegal escape sequence
..\utf8.c(4057) : error C2059: syntax error : ')'
..\utf8.c(4057) : error C2059: syntax error : ')'
..\utf8.c(4057) : error C2059: syntax error : ')'
..\utf8.c(4057) : error C2017: illegal escape sequence
..\utf8.c(4057) : fatal error C1013: compiler limit : too many open
GNUmakefile:1439: recipe for target 'mini\utf8.obj' failed

The VC6 C preprocessor breaks down and messes up the number of \s
in escaping asserts in asserts in asserts to make a double quote string
litteral for an assert message. VC7/VC 2003 doesn't have this problem.

Fix the asserts in asserts by factoring out EIGHT_BIT_UTF8_TO_NATIVE
macro which has asserts inside it from L1_func aka toFOLD_LC which is
another macro that has asserts inside it.

Some adtl details in RT ticket associated with the patch.

3 years agoPATCH: [perl #133037] new warning in inline.h
Karl Williamson [Thu, 5 Apr 2018 14:27:32 +0000 (08:27 -0600)]
PATCH: [perl #133037] new warning in inline.h

This just uses an intermediate variable of the correct type to store the
result, and then casts it, as the value is guaranteed to be a number
between 0 and 7.

3 years agoSpelling correction for consistency with pod/perldebguts.pod.
James E Keenan [Sun, 8 Apr 2018 14:12:20 +0000 (10:12 -0400)]
Spelling correction for consistency with pod/perldebguts.pod.

3 years agoSpelling correction for consistency with pod/perldebguts.pod.
James E Keenan [Sun, 8 Apr 2018 14:09:37 +0000 (10:09 -0400)]
Spelling correction for consistency with pod/perldebguts.pod.

3 years agoOne more spelling correction from Ville Skyttä.
James E Keenan [Sun, 8 Apr 2018 13:56:06 +0000 (09:56 -0400)]
One more spelling correction from Ville Skytt√§.

The original patch had a problem during 'git apply', so the committer chopped
it up and applied all parts except this in commit f0d9624a416d3eb926048f8054b82304fba159.

3 years agoProvide additional email address for author.
James E Keenan [Sun, 8 Apr 2018 13:53:31 +0000 (09:53 -0400)]
Provide additional email address for author.

3 years agoSpelling corrections from Ville Skytt.
James E Keenan [Sun, 8 Apr 2018 13:49:22 +0000 (09:49 -0400)]
Spelling corrections from Ville Skytt.

For: RT # 133071

3 years agoRevert "inline.h: Silence compiler warning"
Karl Williamson [Wed, 4 Apr 2018 15:24:02 +0000 (09:24 -0600)]
Revert "inline.h: Silence compiler warning"

This reverts commit 0cb291171cc75e1aed1c415a7178c1ea9441259b which was
causing real failures.  Since I don't have access to this platform, I
think the way to go is to get the OP to work with me to come up with a
solution before committing to blead.  [perl #13307]

3 years remove 'use utf8' from example
David Mitchell [Wed, 4 Apr 2018 10:30:19 +0000 (11:30 +0100)] remove 'use utf8' from example

It's not needed.

RT #125619

3 years ago(perl #127743) don't use a freed context
Tony Cook [Wed, 4 Apr 2018 04:28:41 +0000 (14:28 +1000)]
(perl #127743) don't use a freed context

With fa575cfed I made the TRACEME() macro use a cached
$Storable::DEBUGME value stored in the Storable context.

Unfortunately I missed a few cases where the TRACEME() macro is
used but the context value is invalid.

Reported privately by Dave Mitchell.

3 years agoUse unsigned to avoid compiler warning
Karl Williamson [Tue, 3 Apr 2018 15:35:46 +0000 (09:35 -0600)]
Use unsigned to avoid compiler warning

The code points that Unicode furnishes will always be unsigned.  This
changes to uniformly treat the ones in the constructed tables of Unicode
properties to be unsigned, avoiding possible signedness compiler
warnings on some systems.

Spotted by Dave Mitchell.

3 years resolve ambiguous #If
David Mitchell [Tue, 3 Apr 2018 07:50:19 +0000 (08:50 +0100)] resolve ambiguous #If

In an XS file,

    # If ...

is being interpreted by at least one compiler / build system as a
CPP macro rather than as an XS code comment.

Indent it to remove ambiguity.

3 years agoinline.h: Silence compiler warning
Karl Williamson [Tue, 3 Apr 2018 03:57:10 +0000 (21:57 -0600)]
inline.h: Silence compiler warning

Some compilers depending on memory and pointer size, emitted a warning

3 years agoPATCH: [perl #132167] Parse error in regex_sets
Karl Williamson [Tue, 3 Apr 2018 03:54:59 +0000 (21:54 -0600)]
PATCH: [perl #132167] Parse error in regex_sets

When popping the stack, the code inappropriately also subtracted one
from the result.  This is probably left over from an earlier change in
the implementation.  The top of the stack contained the correct value;
subtracting was a mistake.

3 years agoRT #133039 dont build a with a static perl build origin/tonyc/132992-storable-deps
Daniel Dragan [Mon, 2 Apr 2018 14:49:54 +0000 (10:49 -0400)]
RT #133039 dont build a with a static perl build

All static perls aren't capable of making shared libs that will never
execute anyways. Commit c0e3b4b51c make depend on
which isnt supposed to exist in a static build but the EUMM makefile still
has enough logic/targets defined that "dynamic ext on static perl" will
probably generate a disk file to satisfy that target (execution is another
story). Except on Win32, where global data vars must be declared in C if
they are stored inside or outside the DLL where the reference will be made.
PL_sv_placeholder is one such var. On no-threads static win32 Perl I assume
even more breakage and missing symbol warnings.

Fix the problem by making sure the .a/.lib and perlstatic.exe or .so/.dll
are built respectfully before running

I also noticed dist/Storable/lib was untracked and unignored, so put it
on ignore list because it is a build product.

See more details in #133039.

Related to RT #127743

3 years agoregexec.c: Use macro intended for the purpose
Karl Williamson [Wed, 7 Mar 2018 17:27:20 +0000 (10:27 -0700)]
regexec.c: Use macro intended for the purpose

The macro hides the underlying implementation detail.

3 years ago(perl #132876) define API macros on if the NEED_ macro is defined
Tony Cook [Wed, 21 Feb 2018 03:50:13 +0000 (14:50 +1100)]
(perl #132876) define API macros on if the NEED_ macro is defined

Rather then always defining an API macro such as "croak_xs_usage",
only define it if the NEED_ macro is defined.

This means that code that checks if the API macro is defined won't
get a false positive and try to use an API that's neither available nor

If the including code attempts to define its own fallback, as EU::PXS
code does, it also prevents a macro redefinition, most likely with a
different token sequence which the C standard forbids.

This change has the (I think unlikely) risk that a user of ppport.h
might include ppport.h for the macro definition and then define their
own DPPP_some_api() function.  I attempted to check via,
but it wasn't working at the time.

3 years ago(perl #132876) only define croak_xs_usage()'s assert macro if cxu requested
Tony Cook [Wed, 21 Feb 2018 00:24:00 +0000 (11:24 +1100)]
(perl #132876) only define croak_xs_usage()'s assert macro if cxu requested

This avoids an interaction with the code ExtUtils::ParseXS generates to
define a fallback croak_xs_usage().

That code checks whether the assert macro is defined rather than checking
if croak_xs_usage() is defined, and since ppport.h was always defining
the assert macro, the EU::PXS code would fail to define its own
croak_xs_usage() fallback.

3 years ago(perl #133009) *nix builds need too
Tony Cook [Sun, 1 Apr 2018 23:54:14 +0000 (09:54 +1000)]
(perl #133009) *nix builds need too

3 years agoStorable: the should depend on the code generating it
Tony Cook [Thu, 29 Mar 2018 03:34:37 +0000 (14:34 +1100)]
Storable: the should depend on the code generating it

3 years ago(perl #133009) handle the XP fallback after we're ready to write
Tony Cook [Thu, 22 Mar 2018 00:48:29 +0000 (11:48 +1100)]
(perl #133009) handle the XP fallback after we're ready to write

Also, check we can use Storable before trying to probe recursion

As bulk88 points out, Win32 may return 0 from system even if the
probe crashes, so instead have the probe output some text after the
recursion check and test that the text is output.

3 years agoPATCH: [perl #133405] POSIX.xs: Silence compiler warning
Karl Williamson [Sun, 1 Apr 2018 14:55:46 +0000 (08:55 -0600)]
PATCH: [perl #133405] POSIX.xs: Silence compiler warning

3 years agoregexec.c: Silence a compiler warning
Karl Williamson [Sat, 31 Mar 2018 21:56:12 +0000 (15:56 -0600)]
regexec.c: Silence a compiler warning

The argument is 32 bits, but only the lowest 8 are used.

3 years agoregcomp.c: Simplify a function
Karl Williamson [Sat, 31 Mar 2018 19:01:42 +0000 (13:01 -0600)]
regcomp.c: Simplify a function

Now that the case folding rules are compiled-in, we don't have to avoid
using them so much.  This removes some #ifdef'd code.  The remaining
hard-coded rules could have also been removed, but since they don't
require #ifdef's and were already there, I left them in.

3 years agoutf8.c: Add missing const in formal parameter
Karl Williamson [Sat, 31 Mar 2018 21:29:34 +0000 (15:29 -0600)]
utf8.c: Add missing const in formal parameter

Only the win32 compiler caught this

3 years agoutf8.c: Remove unused thread context for core-only fcn
Karl Williamson [Sat, 31 Mar 2018 18:47:32 +0000 (12:47 -0600)]
utf8.c: Remove unused thread context for core-only fcn

3 years agoregexec.c: Simplify a little
Karl Williamson [Sat, 31 Mar 2018 18:39:46 +0000 (12:39 -0600)]
regexec.c: Simplify a little

A Previous commit has changed the circumstances of this code so that we
know certain things to be true that we didn't use to.

3 years agoregexec.c: White-space only
Karl Williamson [Sat, 31 Mar 2018 18:34:01 +0000 (12:34 -0600)]
regexec.c: White-space only

This outdents to to the removal of an enclosing block by a previous

3 years agoregcomp.c: White-space only
Karl Williamson [Sat, 31 Mar 2018 18:28:51 +0000 (12:28 -0600)]
regcomp.c: White-space only

Adjust the indentation given that a prior commit removed an enclosing

3 years agoMerge branch 'use swashes less often' into blead
Karl Williamson [Sat, 31 Mar 2018 21:37:20 +0000 (15:37 -0600)]
Merge branch 'use swashes less often' into blead

Most of the commits on this branch are to remove uses of swashes in
favor of pre-compiled-in inversion lists.  It has been a long term goal
to stop using swashes because they require switching to perl code and
loading lib/, and have it typically read in a file from
disk.  This new implementation has the C structures forming the
inversion lists in the read-only data section of the perl executable.
The belief is that the operating system will page in the ones it needs
as it goes along.

Also, there are various issues with switching to perl code in the middle
of execution.

The swashes that this code omits using are frequently used, as they
comprise the POSIX classes and /i matching.

What is left using swashes is all the \p{} Unicode properties and tr///
involving above-Latin1 Unicode code points.

3 years agoregcomp.c: Rmv no longer used variable
Karl Williamson [Sat, 31 Mar 2018 18:23:29 +0000 (12:23 -0600)]
regcomp.c: Rmv no longer used variable

3 years agoregcomp.c: Rmv no longer used core-only function
Karl Williamson [Sat, 31 Mar 2018 18:20:50 +0000 (12:20 -0600)]
regcomp.c: Rmv no longer used core-only function

3 years agoregen/ Fix to work on early Unicode
Karl Williamson [Sat, 31 Mar 2018 18:04:40 +0000 (12:04 -0600)]
regen/ Fix to work on early Unicode

The earliest Unicode release only had 2**16 code points.  Add a test for
that so it will generate the proper tables if perl is compiled with that

3 years agoregen/ Improve error message
Karl Williamson [Sat, 31 Mar 2018 18:01:27 +0000 (12:01 -0600)]
regen/ Improve error message

3 years agoutf8.c: Rmv no longer used function
Karl Williamson [Sat, 31 Mar 2018 18:14:45 +0000 (12:14 -0600)]
utf8.c: Rmv no longer used function

The previous commit completely stopped using this core-only function.
Remove it.

3 years agoUse compiled-in C structure for inverted case folds
Karl Williamson [Thu, 29 Mar 2018 22:32:49 +0000 (16:32 -0600)]
Use compiled-in C structure for inverted case folds

This commit changes to use the C data structures generated by the
previous commit to compute what characters fold to a given one.  This is
used to find out what things should match under /i.

This now avoids the expensive start up cost of switching to perl, loading a file from disk, and constructing a hash from

3 years agoregen/ Generate tables for inverted case folds
Karl Williamson [Thu, 29 Mar 2018 00:20:10 +0000 (18:20 -0600)]
regen/ Generate tables for inverted case folds

This table will be used in the next commit

3 years agoregen/ Inversion maps don't have to be IV
Karl Williamson [Thu, 29 Mar 2018 00:01:50 +0000 (18:01 -0600)]
regen/ Inversion maps don't have to be IV

An inversion map currently is used only for Unicode-range code points,
which can fit in an int, so don't use the space unnecessarily

3 years agoregexec.c: Remove no longer used macros
Karl Williamson [Thu, 29 Mar 2018 00:00:30 +0000 (18:00 -0600)]
regexec.c: Remove no longer used macros

These are unused now that all the POSIX class lookups are done through
inversion lists, instead of swashes.

3 years agoregen/ Change some fcns to return a ref
Karl Williamson [Wed, 28 Mar 2018 15:55:52 +0000 (09:55 -0600)]
regen/ Change some fcns to return a ref

They previously returned an array.  This is in preparation for a future
commit, where a similar function will return multiple arguments.

3 years agoRemove obsolete variables
Karl Williamson [Tue, 27 Mar 2018 21:56:30 +0000 (15:56 -0600)]
Remove obsolete variables

These were for when some of the Posix character classes were implemented
as swashes, which is no longer the case, so these can be removed.

3 years agoregexec.c: White-space, comment only
Karl Williamson [Tue, 27 Mar 2018 21:38:04 +0000 (15:38 -0600)]
regexec.c: White-space, comment only

Fix up indentation based on the previous few commits

3 years agoregexec.c: Convert swash lookup to inversion list
Karl Williamson [Tue, 27 Mar 2018 21:19:55 +0000 (15:19 -0600)]
regexec.c: Convert swash lookup to inversion list

3 years agoregexec.c: Convert swash lookup to inversion list
Karl Williamson [Tue, 27 Mar 2018 21:03:50 +0000 (15:03 -0600)]
regexec.c: Convert swash lookup to inversion list

Previously this had two loops, the first one was used to keep from
loading the swash for as long as possible.  Now that it is loaded by
default, there is no need to do this.  This overwrites the first loop
with  the second loop

3 years agoregexec.c: Convert swash lookup to inversion list
Karl Williamson [Tue, 27 Mar 2018 20:15:54 +0000 (14:15 -0600)]
regexec.c: Convert swash lookup to inversion list

3 years agoregexec.c: Explicitly use case: instead of default:
Karl Williamson [Tue, 27 Mar 2018 20:06:03 +0000 (14:06 -0600)]
regexec.c: Explicitly use case: instead of default:

This is so the default: can be used for another purpose in the next

3 years agoregexec.c: Check for UTF-8 fitting
Karl Williamson [Tue, 27 Mar 2018 21:49:06 +0000 (15:49 -0600)]
regexec.c: Check for UTF-8 fitting

We've been burned before by malformed UTF-8 causing us to read outside
the buffer bounds.  Here is a case I saw during code inspection, and
it's easy to add the buffer end limit

3 years agoregexec.c: Convert one swash to inversion list
Karl Williamson [Tue, 27 Mar 2018 19:43:50 +0000 (13:43 -0600)]
regexec.c: Convert one swash to inversion list

I'm doing this one-at-a-time for bisection reasons, in case I make a

3 years agoregexec.c: Rmv obsolete macro
Karl Williamson [Tue, 27 Mar 2018 19:33:41 +0000 (13:33 -0600)]
regexec.c: Rmv obsolete macro

This macro is obsolete because the inversion list for this property is
now always loaded, so no need to load.

3 years agoUse charnames inversion lists
Karl Williamson [Sat, 31 Mar 2018 17:18:38 +0000 (11:18 -0600)]
Use charnames inversion lists

This commit makes the inversion lists for parsing character name global
instead of interpreter level, so can be initialized once per process,
and no copies are created upon new thread instantiation.  More
importantly, this is another instance where no longer
needs to be loaded, and the definition files read from disk.

3 years agoregen/ Generate charnames inversion lists
Karl Williamson [Tue, 27 Mar 2018 19:00:38 +0000 (13:00 -0600)]
regen/ Generate charnames inversion lists

This is so we won't have to load and read them from disk
when they are first encountered.

3 years agoRemove no longer used constant and #if checks.
Karl Williamson [Tue, 27 Mar 2018 18:52:35 +0000 (12:52 -0600)]
Remove no longer used constant and #if checks.

This is now obsolete as a result of the last few commits.

3 years agoutf8.c: Change no longer used params to dummys
Karl Williamson [Tue, 27 Mar 2018 18:44:54 +0000 (12:44 -0600)]
utf8.c: Change no longer used params to dummys

The previous commits have caused certain parameters to be ignored in
some calls to these functions.  Change them to dummys, so if a mistake
is made, it can be caught, and not promulgated

3 years agoMove init of 2 inversion lists to perl.c
Karl Williamson [Tue, 27 Mar 2018 17:55:56 +0000 (11:55 -0600)]
Move init of 2 inversion lists to perl.c

These read-only globals can be initialized in perl.c, which allows us to
remove runtime checks that they are initialized.  This commit also takes
advantage of the fact that they are now always initialized to use them
as inversion lists, avoid swash creation.

3 years agoFix bug in mathoms fcn _is_utf8_xidcont()
Karl Williamson [Tue, 27 Mar 2018 17:55:23 +0000 (11:55 -0600)]
Fix bug in mathoms fcn _is_utf8_xidcont()

This was using the wrong variable, the one used by plain

Since both of these are in mathoms.c, and deprecated, this really wasn't
causing an issue in the field.

3 years agoutf8.c: Avoid calling swash code
Karl Williamson [Tue, 27 Mar 2018 16:50:28 +0000 (10:50 -0600)]
utf8.c: Avoid calling swash code

Now that we prefer inversion lists over swashes, we can just use the
inversion lists functions if we have an inversion list, avoiding the
swash code altogether in these instances.

This commit stops using inversion lists for two internal properties, but
the next commit will restore that.

3 years agoutf8.c: Prefer an inversion list over a swash
Karl Williamson [Tue, 27 Mar 2018 16:18:03 +0000 (10:18 -0600)]
utf8.c: Prefer an inversion list over a swash

Measurements I took in 8946fcd98c63bdc848cec00a1c72aaf232d932a1 indicate
that at the sizes that Unicode inversion lists are, there is no slowdown
in retrieval of data using an inversion list vs a hash.  Converting to
use an inversion list, when possible, avoids the hash construction
overhead, and eventually to the removal of a bunch of code.