This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl5.git
2 years agoregcomp.c: Silence (stupid) compiler warning
Karl Williamson [Wed, 27 Nov 2019 04:19:56 +0000 (21:19 -0700)]
regcomp.c: Silence (stupid) compiler warning

This can't really happen, but some compilers don't realize it.

2 years agoMove data for PL_InBitmap to charclass_invlists.h
Karl Williamson [Mon, 25 Nov 2019 04:21:39 +0000 (21:21 -0700)]
Move data for PL_InBitmap to charclass_invlists.h

This makes it consistent with the other inversion lists for this sort of
thing, and finishes the fix for GH #17154

2 years agoMove regex global variables to interpreter level
Karl Williamson [Mon, 25 Nov 2019 03:48:54 +0000 (20:48 -0700)]
Move regex global variables to interpreter level

This is part of fixing gh #17154

This scenario from the ticket
(https://github.com/Perl/perl5/issues/17154#issuecomment-558877358)
shows why this fix is necessary:

    main interpreter initializes PL_AboveLatin1 to an SV it owns

    loads threads::lite and creates a new thread/interpreter which
    initializes PL_AboveLatin1 to a SV owned by the new interpreter

    threads::lite child interpreter finishes, freeing all of its SVs,
    PL_AboveLatin1 is now invalid

    main interpreter uses a regexp that relies on PL_AboveLatin1, dies
    horribly.

By making these interpreter level variables, this is avoided.  There is
extra copying, but it is just the SV headers, as the real data is kept
as static C arrays.

2 years agoUpdate perlpolicy to reference GitHub issue tracker
Dan Book [Wed, 27 Nov 2019 00:12:33 +0000 (19:12 -0500)]
Update perlpolicy to reference GitHub issue tracker

2 years agoConvert issue links from rt.perl.org to GitHub
Dan Book [Wed, 27 Nov 2019 00:04:57 +0000 (19:04 -0500)]
Convert issue links from rt.perl.org to GitHub

2 years agoUpdate Porting documents to reference GitHub issues
Dan Book [Wed, 27 Nov 2019 00:02:22 +0000 (19:02 -0500)]
Update Porting documents to reference GitHub issues

2 years agoThe version for PPPort in CPAN is 3.56
Chris 'BinGOs' Williams [Tue, 26 Nov 2019 20:41:55 +0000 (20:41 +0000)]
The version for PPPort in CPAN is 3.56

2 years agoPATCH: gh #16045: add test descriptions for some basic tests
Vitali Peil [Fri, 23 Jun 2017 11:47:53 +0000 (13:47 +0200)]
PATCH: gh #16045: add test descriptions for some basic tests

Committer's note:  I'm belatedly applying the rest of the patches from
the original ticket.

2 years agore-work the cygwin action
Tony Cook [Sun, 24 Nov 2019 23:24:14 +0000 (10:24 +1100)]
re-work the cygwin action

This does a few things:

- checks out perl under the cygwin "home" directory, since cygwin only
  tries to make POSIX permissions work under that.  This allows a test
  of the copied file mode to work in lib/File/Copy.t

- checkout using cygwin's checkout, rather than checking out using Win32
  then refreshing it.

The checkout code is a bit ugly, it might be possible to use
action/checkout's path option to fix it.

2 years agoRevert "cygwin 2.1.0 can test -r just fine, incl. under admin"
Tony Cook [Mon, 25 Nov 2019 22:32:34 +0000 (09:32 +1100)]
Revert "cygwin 2.1.0 can test -r just fine, incl. under admin"

and re-work it to match what the core does to check for an admin user
under Cygwin.

I misunderstood what this was testing when submitted.

Yes, -r works under admin, and returns the correct result, but this is
specifically testing the behaviour as a non-admin.

2 years agomore closely match File::stat's -X behaviour to built-in on cygwin
Tony Cook [Mon, 25 Nov 2019 22:48:58 +0000 (09:48 +1100)]
more closely match File::stat's -X behaviour to built-in on cygwin

2 years agoMake FindBin dual-life
Tony Cook [Mon, 25 Nov 2019 04:37:12 +0000 (15:37 +1100)]
Make FindBin dual-life

2 years agomake test (via TestInit) in core and TAP::Harness set @INC
Tony Cook [Mon, 25 Nov 2019 04:30:36 +0000 (15:30 +1100)]
make test (via TestInit) in core and TAP::Harness set @INC

so we don't need the test code to do it

2 years agoUpdate gitignore:
Sawyer X [Wed, 6 Nov 2019 07:10:23 +0000 (09:10 +0200)]
Update gitignore:

This was done by calling:

    ./perl -Ilib regen/lib_cleanup.pl

2 years agoUpdate Maintainers.pl
Sawyer X [Wed, 6 Nov 2019 07:10:17 +0000 (09:10 +0200)]
Update Maintainers.pl

2 years agoRegenerate META:
Sawyer X [Wed, 6 Nov 2019 07:09:58 +0000 (09:09 +0200)]
Regenerate META:

Regenerate the META by calling:

    make regen_meta

2 years agoUpdate MANIFEST:
Sawyer X [Wed, 6 Nov 2019 07:09:36 +0000 (09:09 +0200)]
Update MANIFEST:

This was done by calling:

    ./perl -Ilib Porting/pod_rules.pl

2 years agoChange regex to look for t/ dir
Sawyer X [Wed, 6 Nov 2019 07:09:25 +0000 (09:09 +0200)]
Change regex to look for t/ dir

2 years agoMove FindBin to dist/
Sawyer X [Wed, 6 Nov 2019 07:09:13 +0000 (09:09 +0200)]
Move FindBin to dist/

2 years agoUpdate Storable's bugtracker
James E Keenan [Fri, 15 Nov 2019 23:52:33 +0000 (18:52 -0500)]
Update Storable's bugtracker

2 years agoFilter::Simple: fix and sanity check for executable_no_comments
Tony Cook [Thu, 29 Aug 2019 01:24:35 +0000 (11:24 +1000)]
Filter::Simple: fix and sanity check for executable_no_comments

fixes #17122

2 years agobump $Storable::VERSION
Tony Cook [Mon, 18 Nov 2019 20:59:39 +0000 (07:59 +1100)]
bump $Storable::VERSION

2 years agodisallow vstring magic strings over 2GB-1
Tony Cook [Wed, 21 Aug 2019 01:37:58 +0000 (11:37 +1000)]
disallow vstring magic strings over 2GB-1

On reads this could result in buffer overflows, so avoid writing
such large vstrings to avoid causing problems for older Storable.

Since we no longer write such large vstrings, we don't want to accept
them.

I doubt that restricting versions strings to under 2GB-1 will have
a practical effect on downstream users.

fixes #17306

2 years agoutf8.h: Rmv obsolete macros
Karl Williamson [Sun, 24 Nov 2019 19:12:19 +0000 (12:12 -0700)]
utf8.h: Rmv obsolete macros

These macros were missed in dd1a3ba7882ca70c1e85b0fd6c03d07856672075
and 059703b088f44d5665f67fba0b9d80cad89085fd.

Using them would cause things to fail to compile

2 years agoAdd missing back compat macros
Karl Williamson [Sun, 24 Nov 2019 19:11:09 +0000 (12:11 -0700)]
Add missing back compat macros

These are needed only to allow some modules to stay updated with blead.

2 years agoUpdate IO-Compress to CPAN version 2.091
Chris 'BinGOs' Williams [Sun, 24 Nov 2019 18:43:54 +0000 (18:43 +0000)]
Update IO-Compress to CPAN version 2.091

  [DELTA]

  2.091 23 November 2019

      * 000prereq.t: Drop LZMA Module as optional
        00d3c110ce6fd6e77dbede3e3aa6125394141891
        3697a7ced67d0989f2678514e9b04cbec3198f12
        7494437856fb815ba2d6b8762ef6fc623a6384e2

      * 011streamzip.t: Fixes for 5.6
        2078eb58c5f483341ac7e5c6fc5d48a0a752c585
        2f370b8ffb09b5cc5ad0830f9ef798b24a62f424
        30101188220dddbfaf1c42a2a91b9bac147909ab

2 years agoUpdate Compress-Raw-Bzip2 to CPAN version 2.091
Chris 'BinGOs' Williams [Sun, 24 Nov 2019 18:42:47 +0000 (18:42 +0000)]
Update Compress-Raw-Bzip2 to CPAN version 2.091

  [DELTA]

  2.091 23 November 2019

      * Silence compiler warnings
        https://github.com/pmqs/Compress-Raw-Bzip2/issues/1
        74756934f3502a0f7ca6b28099fd36057bd958da

2 years agoUpdate Compress-Raw-Zlib to CPAN version 2.091
Chris 'BinGOs' Williams [Sun, 24 Nov 2019 18:41:32 +0000 (18:41 +0000)]
Update Compress-Raw-Zlib to CPAN version 2.091

  [DELTA]

  2.091 23 November 2019

      * Silence "macro expands to multiple statements" warning
        Change sourced upstream from https://github.com/Perl/perl5/issues/17013
        https://github.com/pmqs/Compress-Raw-Zlib/issues/2
        da2bd1fc765b80d01ed10a79b6c4a035e5095ed8

2 years agoWell, she turned me into a newt!
Chris 'BinGOs' Williams [Sun, 24 Nov 2019 18:34:23 +0000 (18:34 +0000)]
Well, she turned me into a newt!

2 years agoregcomp.sym: Add comment
Karl Williamson [Fri, 22 Nov 2019 22:36:50 +0000 (15:36 -0700)]
regcomp.sym: Add comment

2 years agoregcomp.h: Delete obsolote macro
Karl Williamson [Fri, 22 Nov 2019 22:34:40 +0000 (15:34 -0700)]
regcomp.h: Delete obsolote macro

2 years agoregcomp.sym: Simplify a couple regnode defns
Karl Williamson [Fri, 22 Nov 2019 22:33:14 +0000 (15:33 -0700)]
regcomp.sym: Simplify a couple regnode defns

Under the given circumstances, these work precisely like others that
already have good descriptions.

2 years agoregcomp.c: Add assertion
Karl Williamson [Fri, 22 Nov 2019 22:31:51 +0000 (15:31 -0700)]
regcomp.c: Add assertion

This will catch illegal things a little earlier.

2 years agoPATCH: gh #17319 Segfault
Karl Williamson [Fri, 22 Nov 2019 22:28:13 +0000 (15:28 -0700)]
PATCH: gh #17319 Segfault

It turns out that one isn't supposed to fill in the offset to the next
regnode at node creation time.  And this node is like EXACTish, so the
string stuff isn't accounted for in its regcomp.sym definition

2 years agoMerge branch 'ppport' into blead
Karl Williamson [Fri, 22 Nov 2019 13:50:28 +0000 (06:50 -0700)]
Merge branch 'ppport' into blead

This includes the functionality for the forthcoming 3.56 release on
CPAN.

2 years agoD:P: parts/inc/misc: Silence Wide char warnings
Karl Williamson [Thu, 21 Nov 2019 20:35:59 +0000 (13:35 -0700)]
D:P: parts/inc/misc: Silence Wide char warnings

2 years agoD:P: Update parts/base, parts/todo to latest
Karl Williamson [Wed, 13 Nov 2019 23:11:03 +0000 (16:11 -0700)]
D:P: Update parts/base, parts/todo to latest

2 years agoD:P: parts/embed.fnc: Update to latest blead
Karl Williamson [Sun, 3 Nov 2019 22:22:46 +0000 (15:22 -0700)]
D:P: parts/embed.fnc: Update to latest blead

2 years agoD:P: HACKERS: Correct misstatement
Karl Williamson [Fri, 15 Nov 2019 01:49:31 +0000 (18:49 -0700)]
D:P: HACKERS: Correct misstatement

Replacement regions work the opposite way round what it said.

2 years agoD:P: HACKERS: Update for modern test infrastructure
Karl Williamson [Wed, 13 Nov 2019 19:18:19 +0000 (12:18 -0700)]
D:P: HACKERS: Update for modern test infrastructure

2 years agoD:P: PATCH: gh #156 sync_locale doesn't work in 5.20 maint
Karl Williamson [Wed, 13 Nov 2019 16:15:17 +0000 (09:15 -0700)]
D:P: PATCH: gh #156 sync_locale doesn't work in 5.20 maint

It turns out that there was special code added in the 5.20 maint series
that needed to be accounted for.

2 years agoD:P: devel/regenerate: Update script name
Karl Williamson [Tue, 12 Nov 2019 20:20:20 +0000 (13:20 -0700)]
D:P: devel/regenerate: Update script name

which has changed from .sh to .pl

2 years agoD:P: parts/apidoc.fnc: Update to latest blead
Karl Williamson [Sun, 3 Nov 2019 22:22:05 +0000 (15:22 -0700)]
D:P: parts/apidoc.fnc: Update to latest blead

2 years agoD:P: Convert ok() to is()
Karl Williamson [Sun, 3 Nov 2019 21:57:52 +0000 (14:57 -0700)]
D:P: Convert ok() to is()

There are some ok() that need to remain so, but this converts all the
ones that are really is() to be that.

After this commit, the remaining ok() can have a test description added
to them.

2 years agoD:P: Change to use modern skip functionality
Karl Williamson [Sun, 3 Nov 2019 03:18:03 +0000 (21:18 -0600)]
D:P: Change to use modern skip functionality

The new skip() has a count of tests.  Previously you had to loop
yourself.

2 years agoD:P: Convert to use modern Test functions
Karl Williamson [Fri, 1 Nov 2019 19:09:11 +0000 (13:09 -0600)]
D:P: Convert to use modern Test functions

This commit copies much of test.pl from blead to replace the Test ones.

These versions are much friendlier to use.  Several .t files required
minor changes to work with these.  pv_tools.t was the only file using
the old obsolete skip() functionality fully.  The new version does not
do a 'last SKIP', for compatibility.

like and unlike were not ported because of the absence of qr// in perls
this is supposed to work on.

And the portions of test.pl that were copied also required a few minor
changes to work back to 5.3.7.

Not all the ported functionality is currently in used.  It may be that
changes will have to be made to it to get it to work; or will have to be
deleted.

2 years agoD:P: fix mess.t failures when $0 contains backslashes
Tomasz Konojacki [Wed, 13 Nov 2019 17:43:33 +0000 (18:43 +0100)]
D:P: fix mess.t failures when $0 contains backslashes

This seems to happen only when Devel::PPPort was built with
Visual C++ and nmake as a standalone distribution.

perl/perl5@1ddd2f5fcd8802a45ffd773aec3af107f37613f6 had fixed that
before, but the change was made only in the autogenerated test file
and it was discarded when the tests were regenerated.

2 years agoDevel::PPPort: Bump version to 3.56
Karl Williamson [Fri, 22 Nov 2019 13:36:16 +0000 (06:36 -0700)]
Devel::PPPort: Bump version to 3.56

2 years agoFix MYMALLOC (PERL_MALLOC) build on Windows
Steve Hay [Fri, 22 Nov 2019 11:37:13 +0000 (11:37 +0000)]
Fix MYMALLOC (PERL_MALLOC) build on Windows

Commit 34716e2a6e changed the WIN32 version of Perl_my_setenv() from using
Newx() to using safesysmalloc() (in S_env_alloc()), but neglected to make
the corresponding change from Safefree() to safesysfree().

2 years agoPATCH: gh #17275 Silence new warning
Karl Williamson [Sat, 16 Nov 2019 23:13:57 +0000 (16:13 -0700)]
PATCH: gh #17275 Silence new warning

This was caused by a static inline function in a header that was
 #included in a file that didn't use it.  Normally, these functions are
 #ifdef'd so as to be visible only to files in which they are used.
 Some compilers warn that the function is defined but not used
 otherwise.  The solution is to remove this function's visibility from
 the file that didn't use it.

2 years agoregcomp.c: Fix order of fcn declaration
Karl Williamson [Thu, 21 Nov 2019 21:21:07 +0000 (14:21 -0700)]
regcomp.c: Fix order of fcn declaration

The static comes before the return type

2 years agoProperly handle filled /il regnodes and multi-char folds
Karl Williamson [Sat, 16 Nov 2019 22:44:42 +0000 (15:44 -0700)]
Properly handle filled /il regnodes and multi-char folds

Previously we were ignoring this possibility.  Suppose a pattern being
compiled under /il contains 'SS', and that it so happens that a regnode
becomes filled with the first 'S', so that the next regnode would begin
with the second one.  If at runtime, the locale is UTF-8, the pattern
should match match a LATIN SHARP S.  Until this commit, it wouldn't.
The commit just extends the current mechanism used in this situation (of
a filled regnode) for non-/l patterns.

If the locale isn't a UTF-8 one, the 'SS' sequence shouldn't match the
SHARP S, and it won't, but we have to construct the node so that it can
handle the UTF-8 case.

2 years agoTry to find the appropriate SHAs
Max Maischein [Tue, 19 Nov 2019 17:25:30 +0000 (18:25 +0100)]
Try to find the appropriate SHAs

We want all the patches between the branch-off point from
blead and the current branch. The current branch position lives in
$ENV{GITHUB_SHA}, and the (latest) branch-off point from blead is
found by running

    git merge-base $ENV{GITHUB_BASE_REF} $ENV{GITHUB_HEAD_REF}

We don't want to use the last commit, as it's a merge commit.

That commit will also have the Github mail address, not the real
git mail address of the author . Instead we use the (second)
parent commit to that merge commit.

2 years agoUpdate Module::CoreList for 5.31.7
Chris 'BinGOs' Williams [Wed, 20 Nov 2019 22:55:53 +0000 (22:55 +0000)]
Update Module::CoreList for 5.31.7

2 years agoBump the perl version in various places for 5.31.7
Chris 'BinGOs' Williams [Wed, 20 Nov 2019 22:52:35 +0000 (22:52 +0000)]
Bump the perl version in various places for 5.31.7

2 years agonew perldelta for v5.31.7
Chris 'BinGOs' Williams [Wed, 20 Nov 2019 22:37:45 +0000 (22:37 +0000)]
new perldelta for v5.31.7

2 years agoUpdate epigraphs.pod for v5.31.6 one
Chris 'BinGOs' Williams [Wed, 20 Nov 2019 22:31:43 +0000 (22:31 +0000)]
Update epigraphs.pod for v5.31.6 one

2 years agoMerge branch 'release-5.31.6' into blead
Chris 'BinGOs' Williams [Wed, 20 Nov 2019 22:27:33 +0000 (22:27 +0000)]
Merge branch 'release-5.31.6' into blead

2 years agoregcomp.c: Add invlist_lowest() and use it
Karl Williamson [Sun, 31 Mar 2019 20:00:25 +0000 (14:00 -0600)]
regcomp.c: Add invlist_lowest() and use it

This makes it less complicated to find the lowest code point in an
inversion list.  This makes the place where it's used clearer as to what
is going on.  And it may eventually be used in more than one place.

2 years agoAdd ANYOFHs regnode
Karl Williamson [Wed, 20 Nov 2019 02:15:38 +0000 (19:15 -0700)]
Add ANYOFHs regnode

This node is like ANYOFHb, but is used when more than one leading byte
is the same in all the matched code points.

ANYOFHb is used to avoid having to convert from UTF-8 to code point for
something that won't match.  It checks that the first byte in the UTF-8
encoded target is the desired one, thus ruling out most of the possible
code points.

But for higher code points that require longer UTF-8 sequences, many
many non-matching code points pass this filter.  Its almost 200K that it
is ineffective for for code points above 0xFFFF.

This commit creates a new node type that addresses this problem.
Instead of a single byte, it stores as many leading bytes that are the
same for all code points that match the class.  For many classes, that
will cut down the number of possible false positives by a huge amount
before having to convert to code point to make the final determination.

This regnode adds a UTF-8 string at the end.  It is still much smaller,
even in the rare worst case, than a plain ANYOF node because the maximum
string length, 15 bytes, is still shorter than the 32-byte bitmap that
is present in a plain ANYOF.  Most of the time the added string will
instead be at most 4 bytes.

2 years agoregcomp.c: DTRT in av_store()
Karl Williamson [Wed, 20 Nov 2019 02:08:15 +0000 (19:08 -0700)]
regcomp.c: DTRT in av_store()

We should be increasing the ref count in the scalars.  If those aren't
needed past the end of the function doing the av_store, their ref count
can be decremented there.

Otherwise, things are inconsistent, and error prone.

2 years agofind_first_differing_byte_pos
Karl Williamson [Tue, 19 Nov 2019 04:54:57 +0000 (21:54 -0700)]
find_first_differing_byte_pos

2 years agoregcomp.c fix comments, white-space
Karl Williamson [Mon, 18 Nov 2019 02:54:26 +0000 (19:54 -0700)]
regcomp.c fix comments, white-space

One comment was just a typo, another was erroneous

2 years agoMake makerel ignore other .git* files as well v5.31.6
Chris 'BinGOs' Williams [Wed, 20 Nov 2019 19:55:59 +0000 (19:55 +0000)]
Make makerel ignore other .git* files as well

2 years agoFinalise perldelta and update perlhist
Chris 'BinGOs' Williams [Wed, 20 Nov 2019 19:12:36 +0000 (19:12 +0000)]
Finalise perldelta and update perlhist

2 years agoUpdate Module::CoreList for 5.31.6
Chris 'BinGOs' Williams [Wed, 20 Nov 2019 18:40:03 +0000 (18:40 +0000)]
Update Module::CoreList for 5.31.6

2 years agoregcomp.sym: Add missing commas
Karl Williamson [Tue, 19 Nov 2019 16:29:07 +0000 (09:29 -0700)]
regcomp.sym: Add missing commas

I don't think lack of these affects anything, but they were inconsistent

2 years agoOutput information on the current pull request
Max Maischein [Sun, 17 Nov 2019 22:22:24 +0000 (23:22 +0100)]
Output information on the current pull request

2 years agoOutput information on the current pull request
Max Maischein [Sun, 17 Nov 2019 22:22:01 +0000 (23:22 +0100)]
Output information on the current pull request

2 years agoFix the author email address on Github Actions pull requests
Max Maischein [Sun, 17 Nov 2019 21:20:19 +0000 (22:20 +0100)]
Fix the author email address on Github Actions pull requests

Like Travis CI, Github Actions use the email address used to with Github
instead of using the email address the author might have used with Git.

This patch uses the mail address from the changes itself

2 years agofix POSIX.xs under VMS
David Mitchell [Tue, 19 Nov 2019 09:05:24 +0000 (09:05 +0000)]
fix POSIX.xs under VMS

My recent commit v5.31.5-346-g116e19abbf assumed that SA_SIGINFO and
sa_sigaction would always be available, but they aren't under VMS, so
guard its use.

2 years agoUpdate Test-Simple to CPAN version 1.302169
Chad Granum [Tue, 19 Nov 2019 02:27:29 +0000 (21:27 -0500)]
Update Test-Simple to CPAN version 1.302169

From Changes:

1.302169  2019-11-18 15:49:38-08:00 America/Los_Angeles

  - Update inline Object::HashBase
  - Avoid 'used only once' warnings in BEGIN and END blocks
    (James E Keenan <jkeenan@cpan.org>)

Committer: perldelta for synch-with-cpan

2 years agodocument that /c does nothing for s///
Tony Cook [Mon, 16 Sep 2019 04:55:01 +0000 (14:55 +1000)]
document that /c does nothing for s///

Another option would be to go through a deprecation cycle.

We can't just remove it, since there might be existing code that
has (the non-functional) /c.

fixes #17071

2 years agoFix qr/[...]/ for 32 bit platforms with 64bit UV's
Karl Williamson [Mon, 18 Nov 2019 22:01:35 +0000 (15:01 -0700)]
Fix qr/[...]/ for 32 bit platforms with 64bit UV's

A Size_t should have been a UV.

2 years agoFix CCHOME setting for MinGW
Max Maischein [Mon, 18 Nov 2019 16:46:00 +0000 (17:46 +0100)]
Fix CCHOME setting for MinGW

2 years agoClean up -Dy debugging
Karl Williamson [Mon, 18 Nov 2019 21:28:30 +0000 (14:28 -0700)]
Clean up -Dy debugging

Commit 5d7580af4b14229eafb27db9b7a34b8b918876b4 didn't have it quite
right.

2 years agoFix tr/// for 32 bit platforms with 64bit ints
Karl Williamson [Mon, 18 Nov 2019 21:26:31 +0000 (14:26 -0700)]
Fix tr/// for 32 bit platforms with 64bit ints

Various variables were declared wrongly to be Size_t, instead of the
needed 'UV'.

2 years agoop.c: Rmv redundant line in tr/// table
Karl Williamson [Mon, 18 Nov 2019 21:13:35 +0000 (14:13 -0700)]
op.c: Rmv redundant line in tr/// table

The line was a relict of debugging.  I don't know if this could lead to
a bug or not, but it certainly did not belong.

2 years agoUpdates to perldelta
Karl Williamson [Mon, 18 Nov 2019 20:17:53 +0000 (13:17 -0700)]
Updates to perldelta

2 years agoperlguts: sprintf %p now works
Karl Williamson [Sat, 16 Nov 2019 16:09:49 +0000 (09:09 -0700)]
perlguts: sprintf %p now works

So recommend it instead of saying don't use it.

2 years agoSet CCHOME to make op/taint.t pass
Max Maischein [Sun, 17 Nov 2019 22:22:24 +0000 (23:22 +0100)]
Set CCHOME to make op/taint.t pass

Thanks to TonyC for providing the missing piece

2 years agoAdd smoke support for OSX
Max Maischein [Sun, 17 Nov 2019 19:48:48 +0000 (20:48 +0100)]
Add smoke support for OSX

2 years agoGithub Actions only get 2 CPUs
Max Maischein [Sun, 17 Nov 2019 19:39:16 +0000 (20:39 +0100)]
Github Actions only get 2 CPUs

We could maybe use 3 for testing, but that's a later optimization

2 years agoMSVC100FREE -> MSVC100
Max Maischein [Sun, 17 Nov 2019 18:52:18 +0000 (19:52 +0100)]
MSVC100FREE -> MSVC100

2 years agoSkip the TTY tests since we don't have a TTY
Max Maischein [Sun, 17 Nov 2019 08:00:03 +0000 (09:00 +0100)]
Skip the TTY tests since we don't have a TTY

This should fix the op/stat failure

2 years agoUse Cygwin native git to fix file permissions
Max Maischein [Sun, 17 Nov 2019 07:59:32 +0000 (08:59 +0100)]
Use Cygwin native git to fix file permissions

This should fix the porting/ related test failures

2 years agoMemoize: rewrite expmod_t.t
David Mitchell [Mon, 18 Nov 2019 13:29:20 +0000 (13:29 +0000)]
Memoize: rewrite expmod_t.t

This test script checks that cache entries expire correctly. However, it
occasionally causes smoke failures, since it's sensitive to timing and
so very slow machines may trip it up.

This commit rewrites the test script so that (hopefully) it will be
immune to timing issues.

It just repeatedly calls the memoized function, each time recording the
time just before and after, which gives a bracketed time range within
which we know the function was called. Then the previous range and the
current range can be analysed to determine whether a new or cached value
was returned, and in either case whether this was within or beyond any possible
expiry time.

Note that I removed the use Time::HiRes, as there seems to be a bug with
Memoize::Expire whereby the returned cached value gets stringified,
which can cause rounding errors if the original value was an NV.
Sticking with integers makes life easier.

2 years agoperlguts: Remove stray POD characters
Dagfinn Ilmari Mannsåker [Mon, 18 Nov 2019 10:41:30 +0000 (10:41 +0000)]
perlguts: Remove stray POD characters

- double qoutes inside C<> (not used elsewhere in this doc)
- trailing ctrl-backslash

2 years agoperldelta for v5.31.5-346-g116e19abbf
David Mitchell [Mon, 18 Nov 2019 10:41:05 +0000 (10:41 +0000)]
perldelta for v5.31.5-346-g116e19abbf

Document the sighandler changes.

2 years ago[MERGE] fixup perl's OS signal handling
David Mitchell [Mon, 18 Nov 2019 10:20:54 +0000 (10:20 +0000)]
[MERGE] fixup perl's OS signal handling

First some background:

UNIXy OSes support two types of signal handler function:

    Signal_t handler1(int sig);
    Signal_t handler3(int sig, siginfo_t *info, void *uap);

The original one-argument handler was set using the signal(2) system
call. The newer sigaction(2) system call allows either a 1-arg or
3-arg handler to be specified:

    act.sa_handler = handler1;
    sigaction(sig, act, NULL);

    act.sa_sigaction = handler3;
    act.sa_sa_flags |= SA_SIGINFO;
    sigaction(sig, act, NULL);

The current behaviour in perl core is that, in the presence of
HAS_SIGACTION and SA_SIGINFO, the signal handler type and function are
both declared as 3-arg, but perl still tells the kernel that the
supplied signal handler function takes one arg. This means that whenever
the kernel calls the handler, args 2 and 3 are whatever garbage the OS
and architecture cause them to happen to be.

Note that POSIX.xs *does* allow a 3-arg signal handler to be specified
by passing the SA_SIGINFO flag, and a couple of tests check for this.

Recently, gcc-8 has (quite reasonably) been warning that we're passing
around 3-arg function pointers where a 1-arg function pointer is
expected.

This branch fixes things up by declaring the signal handler type as
1-arg to match reality. It also introduces a new type, Siginfo_t, which
is a wrapper for those platforms which have siginfo_t, and a dummy
implementation for those which don't.

In addition it adds new explicit handler functions with a known
number of args, e.g. Perl_sighandler1() and Perl_sighandler3(), which
can be used by POSIX.xs when it wants to use a specific handler type.

It also adds a new function, Perl_perly_sighandler(), which is called by
the underlying OS signal handler to do the actual perl-level call to
$SIG{FOO}, and which has an extra arg to indicate whether it is being
called via a safe signal path or not.

2 years agoPerl_csighandler(): remove forward declaration
David Mitchell [Tue, 12 Nov 2019 11:36:38 +0000 (11:36 +0000)]
Perl_csighandler(): remove forward declaration

There's a forward declaration of this function in mg.c. This should be
redundant in these days of embed.fnc and embed.h, so remove it.

2 years agoPerl_perly_sighandler: re-indent some code
David Mitchell [Tue, 12 Nov 2019 11:32:06 +0000 (11:32 +0000)]
Perl_perly_sighandler: re-indent some code

Fix indentation after previous commits modified scopes; also indent
some nested #if's correctly.

Whitespace-only change

2 years agoPerl_perly_sighandler: combine two conditions
David Mitchell [Tue, 12 Nov 2019 11:28:21 +0000 (11:28 +0000)]
Perl_perly_sighandler: combine two conditions

The branch is only taken if a number of conditions are true. Combine
them into a single if statement, with the sip test first, so that an
unnecessary call to sigaction() may be skipped if its only going to
immediately fail afterwards because sip isn't true.

Shouldn't be any change in functionality.

2 years agoremove some redundant sig handler type casts
David Mitchell [Tue, 12 Nov 2019 11:19:15 +0000 (11:19 +0000)]
remove some redundant sig handler type casts

2 years agodeclare perl core's sig handler as 1-arg
David Mitchell [Tue, 12 Nov 2019 10:47:30 +0000 (10:47 +0000)]
declare perl core's sig handler as 1-arg

First some background:

UNIXy OSes support two types of signal handler function:

    Signal_t handler1(int sig);
    Signal_t handler3(int sig, siginfo_t *info, void *uap);

The original one-argument handler was set using the signal(2) system
call. The newer sigaction(2) system call allows either a 1-arg or
3-arg handler to be specified:

    act.sa_handler = handler1;
    sigaction(sig, act, NULL);

    act.sa_sigaction = handler3;
    act.sa_sa_flags |= SA_SIGINFO;
    sigaction(sig, act, NULL);

The current behaviour in perl core is that, in the presence of
HAS_SIGACTION and SA_SIGINFO, the signal handler type and function are
both declared as 3-arg, but perl still tells the kernel that the
supplied signal handler function takes one arg. This means that whenever
the kernel calls the handler, args 2 and 3 are whatever garbage the OS
and architecture cause them to happen to be.

Note that POSIX.xs *does* allow a 3-arg signal handler to be specified
by passing the SA_SIGINFO flag, and a couple of tests check for this.

Recently, gcc-8 has (quite reasonably) been warning that we're passing
around 3-arg function pointers where a 1-arg function pointer is
expected.

After the groundwork laid down by the previous commits in this branch,
this commit flips things over so that the perl core now declares its
handlers and handler type as being 1-arg, thus reflecting the reality
that the core has actually being using 1-arg handlers.

This makes a whole bunch of compiler noise like this go away:

    perl.h:2825:51: warning: cast between incompatible function types
    from ‘__sighandler_t’ {aka ‘void (*)(int)’} to ‘void (*)(int,
    siginfo_t *, void *)’ {aka ‘void (*)(int,  struct <anonymous> *,
    void *)’} [-Wcast-function-type]

In theory this should make no functional difference. It might cause
3rd-party XS modules to emit compiler warnings now if they are relying
on things like Sighandler_t to represent a 3-arg function - this commit
flips it to being 1-arg.

2 years agoPOSIX::sigaction(): use correct sig handler
David Mitchell [Mon, 11 Nov 2019 16:06:26 +0000 (16:06 +0000)]
POSIX::sigaction(): use correct sig handler

Depending on whether sigaction() is called with the SA_SIGINFO flag set,
it should be setting either a 1-arg or 3-arg signal handler for the
kernel to call back. In fact it was always passing a 3-arg handler, and
telling the kernel that it was a 1-arg handler, which means that in
1-arg handler situations, the handler was being called with args 2 and 3
containing random garbage.

Instead, use the newly-added explicit-arg handler functions, which take
the specified number of args regardless of OS / configuration.`

There's a temporary hack included in the patch because perl core is
still claiming to use 3-arg handlers while actually supplying 1-arg
ones. This will be fixed shortly and the hack removed.

2 years agoadd explicit 1-arg and 3-arg sig handler functions
David Mitchell [Mon, 11 Nov 2019 15:49:58 +0000 (15:49 +0000)]
add explicit 1-arg and 3-arg sig handler functions

Currently, whether the OS-level signal handler function is declared as
1-arg or 3-arg depends on the configuration. Add explicit versions of
these functions, principally so that POSIX.xs can call which version of
the handler it wants regardless of configuration: see next commit.

2 years agofix unsafe signals under exceptions
David Mitchell [Mon, 11 Nov 2019 14:03:41 +0000 (14:03 +0000)]
fix unsafe signals under exceptions

The preceding commit flagged up an existing bug, but kept old the buggy
behaviour. This commit fixes the bug. I haven't added a test, since it
seems that the test suite doesn't try with unsafe signals. But this
code:

    $SIG{USR1} = sub { $gotit++, die };
    eval { kill SIGUSR1, $$ } for 1..2;
    print "gotit=$gotit\n";

when run before erroneously gave 1, but now correctly gives 2.

Basically the code that restores the signal mask after a sig handler
dies, should do it only in a direct (unsafe) signal handler: the
deferred (safe) signal handler will have already done it. The bug was
that the inbuilt perl unsafe signal handler was being incorrectly
treated as safe. The code path via POSIX (and for which a test was added
with v5.13.9-531-gc22d665b55) *was* ok.

2 years agoadd a new function, Perl_perly_sighandler()
David Mitchell [Mon, 11 Nov 2019 11:26:45 +0000 (11:26 +0000)]
add a new function, Perl_perly_sighandler()

This function implements the body of what used to be Perl_sighandler(),
the latter becoming a thin wrapper round Perl_perly_sighandler().

The main reason for this change is that it allows us to add an extra
arg, 'safe' to the function without breaking backcompat. This arg
indicates whether the function is being called directly from the OS
signal handler (safe==0), or deferred via Perl_despatch_signals()
(safe==1).

This allows an infelicity in the code to be fixed - it was formerly
trying to determine the route it had been called by (and hence whether a
'safe' route) by seeing if either of the sig/uap parameters was
non-null. It turns out that this was highly dogdy, and only worked by
luck. The safe caller did indeed pass NULL args, but due to a bug
(shortly to be fixed), sometimes the kernel thinks its calling a 1-arg
sig handler when its actually calling a 3-arg one. This means that the
sig/uap args are random garbage, and happen to be non-zero only by happy
coincidence on the OS/platforms so far.

Also, it turns out that the call via Perl_csighandler() was getting it
wrong: its explicit (NULL,NULL) args made it look like a safe signal
call. This will be corrected in the next commit, but for this commit the
old wrong behaviour is preserved.

See RT #82040 for details of when/why the original dodgy 'safe' check
was
added.

2 years agoadd PERL_USE_3ARG_SIGHANDLER macro
David Mitchell [Mon, 11 Nov 2019 10:46:56 +0000 (10:46 +0000)]
add PERL_USE_3ARG_SIGHANDLER macro

There are a bunch of places in core that do

   #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)

to decide whether the C signal handler function should be declared with,
and called with, 1 arg or 3 args.

This commit just adds

   #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
   #  define PERL_USE_3ARG_SIGHANDLER
   #endif

Then uses the new macro in all other places rather than checking
HAS_SIGACTION and SA_SIGINFO. Thus there is no functional change; it just
makes the code more readable.

However, it turns out that all is not well with core's use of 1-arg
versus 3-arg, and the few commits will fix this.