This is a live mirror of the Perl 5 development currently hosted at
2 months agoIn Perl_gp_free() use PL_tmps_stack to avoid freeing glob entries immediately.
Nicholas Clark [Fri, 2 Jul 2021 09:55:00 +0000 (09:55 +0000)]
In Perl_gp_free() use PL_tmps_stack to avoid freeing glob entries immediately.

Typeglob assignment causes the current GP to be freed, and hence any package
variables it contains. As Perl's (data) stack is not reference counted, SVs
put on it are assumed to be owned by something else. For package variables,
this assumed owner is the typeglob. Hence if a single statement contains
both assignment to a typeglob and use of one of its variables, the
interpreter can read garbage (with all the usual explosive consequences).

This is yet another manifestation of "the stack is not reference counted",
and whilst troubling from a correctness perspective, can't be exploited
unless one can already run arbitrary code, in which case any attacker has
already won.

Whilst this problematic code doesn't turn up very often in real programs,
let alone hot paths, it is found quite often by researchers running
automated fuzzers. Previously these programs would trigger errors, that the
researchers would (legitimately) report, and then we would spend time
figuring out that the cause was "stack not reference counted" and so not a
dangerous security hole. This consumed a lot of researcher time, our time,
and prevents "interesting" security holes being uncovered.

Hence add code to use the temps stack to paper over the lack of stack
reference counting in this specific case. This should avoid a lot of time
spent on assessing and responding to legitimate but uninteresting security
reports, at a small cost in code complexity.

2 months agoFree tied hash iterator state immediately at the `untie` call
Nicholas Clark [Tue, 24 Aug 2021 16:15:51 +0000 (16:15 +0000)]
Free tied hash iterator state immediately at the `untie` call

Previously the state was only freed at the point when the hash was iterated
again, or re-tied, or destroyed.

This shouldn't make any difference to sane code, but the change can be
detected with suitably pathological pure-Perl code, so someone might just
(unwisely) be relying on this undocumented implementation detail.

2 months agoA test for the order of untie/iterator state interaction
Nicholas Clark [Tue, 24 Aug 2021 15:32:32 +0000 (15:32 +0000)]
A test for the order of untie/iterator state interaction

This is not intended as a test of *correctness*. The precise ordering of all
the events here is observable by code on CPAN, so potentially some of it
will inadvertently be relying on it (and likely not in any regression test).
Hence this "test" here is intended as a way to alert us if any core code
change has the side effect of altering this observable behaviour, so that we
can document it in the perldelta.

2 months agoTest the interaction of of tie/untie and hash iterators
Nicholas Clark [Thu, 16 Sep 2021 18:18:53 +0000 (18:18 +0000)]
Test the interaction of of tie/untie and hash iterators

This is not intended as a test of *correctness*. This behaviour is
observable by code on CPAN, so potentially some of it will inadvertently be
relying on it (and likely not in any regression test). Hence this "test"
here is intended as a way to alert us if any core code change has the side
effect of alerting this observable behaviour.

2 months agoUse fabs/fabsl/fabsq for NVs in pp_abs.
TAKAI Kousuke [Wed, 27 Jan 2021 14:53:48 +0000 (23:53 +0900)]
Use fabs/fabsl/fabsq for NVs in pp_abs.

In many floating point formats, fabs*() are rather simple operations
such as just clearing the sign bit, and will be slightly faster
than a conditional negation (especially with optimizing compilers).

2 months agoDon't try to Sv[PI]V() on an undef index SV in find_uninit_var() 19148/head
Tony Cook [Wed, 22 Sep 2021 01:47:55 +0000 (11:47 +1000)]
Don't try to Sv[PI]V() on an undef index SV in find_uninit_var()

When trying to evaluate:




where both the index and the hash or array entry was undefined,
when trying to report the entry as uninitialised, find_uninit_var()
would try to get the string or numeric value of the index,
recursively trying to produce a warning.

This would end up overflowing the stack, producing a segmentation fault.

Fixes #19147.

2 months agoNothing changed in SIGINFO for OpenBSD 7.0
Andrew Hewus Fresh [Tue, 21 Sep 2021 02:21:10 +0000 (19:21 -0700)]
Nothing changed in SIGINFO for OpenBSD 7.0

We'll check back in five years for OpenBSD 8.0 unless someone notices a
fix before then.

2 months agoPrep Module::CoreList for the 5.35.5 release
Matthew Horsfall [Tue, 21 Sep 2021 12:15:03 +0000 (08:15 -0400)]
Prep Module::CoreList for the 5.35.5 release

2 months agoIn Perl_hv_iternext_flags() move a variable to a tighter scope
Nicholas Clark [Tue, 21 Sep 2021 07:03:34 +0000 (07:03 +0000)]
In Perl_hv_iternext_flags() move a variable to a tighter scope

`xhv` was added to avoid repeated dereferences from the HV head in June 2001
as part of commit cbec93472053303a:
    Revert #10656 for performance reasons but leave in the
    use of Hv*() macros -- in comments, so that grepping the
    source is easier, from Abhijit.  (Also add the ENV_HV_NAME speedup
    suggested by Sarathy, also by Abhijit.)

Most uses were eliminated in May 2005 by commit bfcb351493b97935:
    Move hv_name, hv_eiter and hv_riter into a new aux structure.
    Provide (more efficient) _get and _set macros.
    Adjust the core to use them.

and commit 7b2c381cf37e4e46:
    Move the xpv_pv/xrv_rv member into the SV head, in a union with
    IV and UV. Avoid allocating a body for IVs and RVs.

The only other read of `xhv` was eliminated in June 2005 by commit
    Store the xhv_aux structure after the main array.
    This reduces the size of HV bodies from 24 to 20 bytes on a 32 bit
    build. It has the side effect of defined %symbol_table:: now always
    being true. defined %hash is already deprecated.

After that change xhv remained, saving the first deference, but it was
still dereferenced each time within a loop to read `xhv_max`.

Ideally that commit would have made this change - replace `xhv` with a
single lookup of HvMAX() in the scope where it is needed.

2 months ago`make distclean` should delete `makedepend_file`
Nicholas Clark [Tue, 21 Sep 2021 08:35:03 +0000 (08:35 +0000)]
`make distclean` should delete `makedepend_file`

2 months agoMerge branch 'perlgov-omnibus-amendments' into blead
Ricardo Signes [Tue, 21 Sep 2021 02:38:48 +0000 (22:38 -0400)]
Merge branch 'perlgov-omnibus-amendments' into blead

2 months agoperlgov: replace "administer" with "organize"
Ricardo Signes [Sat, 21 Aug 2021 14:29:35 +0000 (10:29 -0400)]
perlgov: replace "administer" with "organize"

Other parts of perlgov forbid PSC members from being vote
administrators, so using "administer" here was confusing.

2 months agoperlgov: clarify time frame for newly Term Election
Ricardo Signes [Sat, 29 May 2021 16:46:37 +0000 (12:46 -0400)]
perlgov: clarify time frame for newly Term Election

2 months agoperlgov: changes related to handling uncontested elections
Ricardo Signes [Thu, 15 Apr 2021 18:39:34 +0000 (14:39 -0400)]
perlgov: changes related to handling uncontested elections

2 months agoperlgov: allow deferral of Special Election
Ricardo Signes [Thu, 15 Apr 2021 02:25:25 +0000 (22:25 -0400)]
perlgov: allow deferral of Special Election

When, for example, there is a need for Special Election near the
date of an upcoming Term Election.

2 months agoUpdate release_announcement_template.txt year for the next poor soul
Matthew Horsfall [Mon, 20 Sep 2021 20:35:50 +0000 (16:35 -0400)]
Update release_announcement_template.txt year for the next poor soul

2 months agoUpdate Module::CoreList for v5.35.5
Matthew Horsfall [Mon, 20 Sep 2021 20:25:26 +0000 (16:25 -0400)]
Update Module::CoreList for v5.35.5

2 months agoBump versions from v5.35.4 to v5.35.5
Matthew Horsfall [Mon, 20 Sep 2021 20:16:11 +0000 (16:16 -0400)]
Bump versions from v5.35.4 to v5.35.5

2 months agonew perldelta for v5.35.5
Matthew Horsfall [Mon, 20 Sep 2021 20:09:51 +0000 (16:09 -0400)]
new perldelta for v5.35.5

2 months agoCheck off 5.35.4 in release_schedule.pod
Matthew Horsfall [Mon, 20 Sep 2021 19:59:20 +0000 (15:59 -0400)]
Check off 5.35.4 in release_schedule.pod

2 months agoUpdate epigraphs for 5.35.4 release
Matthew Horsfall [Mon, 20 Sep 2021 19:58:59 +0000 (15:58 -0400)]
Update epigraphs for 5.35.4 release

2 months agoMerge branch 'release-5.35.4' into blead
Matthew Horsfall [Mon, 20 Sep 2021 19:52:18 +0000 (15:52 -0400)]
Merge branch 'release-5.35.4' into blead

2 months agoAdd Olaf Alders to AUTHORS file
Olaf Alders [Mon, 20 Sep 2021 17:05:55 +0000 (13:05 -0400)]
Add Olaf Alders to AUTHORS file

2 months agoUpdate comment in POSIX::import()
Olaf Alders [Mon, 20 Sep 2021 15:53:38 +0000 (11:53 -0400)]
Update comment in POSIX::import()

This removes the use of grandfather as a verb. See #18830 for initial

2 months agoadd new release to perlhist v5.35.4
Matthew Horsfall [Mon, 20 Sep 2021 18:53:53 +0000 (14:53 -0400)]
add new release to perlhist

2 months agoFinalize perldelta
Matthew Horsfall [Mon, 20 Sep 2021 18:49:47 +0000 (14:49 -0400)]
Finalize perldelta

2 months agoperldelta: Update modules list
Matthew Horsfall [Mon, 20 Sep 2021 18:46:35 +0000 (14:46 -0400)]
perldelta: Update modules list

2 months agoperldelta: Acknowledge thyself
Matthew Horsfall [Mon, 20 Sep 2021 18:45:17 +0000 (14:45 -0400)]
perldelta: Acknowledge thyself

2 months agoUpdate Module::CoreList for 5.35.4
Matthew Horsfall [Mon, 20 Sep 2021 18:39:07 +0000 (14:39 -0400)]
Update Module::CoreList for 5.35.4

2 months agoPrepare perldelta for upcoming v5.35.4 release
Matthew Horsfall [Mon, 20 Sep 2021 18:25:43 +0000 (14:25 -0400)]
Prepare perldelta for upcoming v5.35.4 release

2 months agoperldelta for 983d5bee62
James E Keenan [Mon, 20 Sep 2021 14:21:50 +0000 (14:21 +0000)]
perldelta for 983d5bee62

2 months agoUnicode-Collate: synch with CPAN version 1.31
Tomoyuki Sadahiro [Mon, 20 Sep 2021 14:18:10 +0000 (14:18 +0000)]
Unicode-Collate: synch with CPAN version 1.31

2 months agoMove all the code that deletes the hash entry into one place
Nicholas Clark [Mon, 26 Jul 2021 09:43:13 +0000 (09:43 +0000)]
Move all the code that deletes the hash entry into one place

Move the code that removed the entry from the hash ahead of all the code
that post-processes that entry to update method caches.

The entry is now completely deleted from the hash before any needed MRO
related logic is triggered, and the code that is specific to the chosen hash
table implementation is now untangled from the MRO code.

2 months agoMerge the two `d_flags & G_DISCARD` tests in hv_delete_common()
Nicholas Clark [Mon, 26 Jul 2021 09:28:15 +0000 (09:28 +0000)]
Merge the two `d_flags & G_DISCARD` tests in hv_delete_common()

Read from HeVAL() once, and move the call to sv_2mortal() later.

2 months agoCall mro_method_changed_in() later in hv_delete_common()
Nicholas Clark [Sun, 25 Jul 2021 20:12:25 +0000 (20:12 +0000)]
Call mro_method_changed_in() later in hv_delete_common()

Move the call as late as possible - just before the deleted hash key is
freed if G_DISCARD is set. In particular, move it *after* the HE is

Move the code that sets HeVAL() to &PL_sv_placeholder into the if block that
handles restricted hashes - no need to set this on normal hashes, as the
structure is about to be freed anyway.

2 months agoRemove descriptions of deleted "Panics" from perldiag.pod
Nicholas Clark [Wed, 15 Sep 2021 09:20:31 +0000 (09:20 +0000)]
Remove descriptions of deleted "Panics" from perldiag.pod

"Bad hash" and "Can't modify nonexistent substring" were removed in March
2015 as part of commit 3dc78631ef832e5b:
    don't test non-null args

"Can't check filesystem of script "%s" for nosuid"
and "Can't stat script "%s"" were removed in Jan 2009 as part of
commit cc69b689ee7c2745:
    suidperl goes.

"do_study: out of memory" was removed in May 2012 as part of commit
    Delete the contents of pp_study

"Null realloc" was removed in June 1998 as part of commit 7614df0c0f0d0458:
    added patch, undo earlier workaround
            Subject: Re: Why does saferealloc(NULL,size) croak? [PATCH] against _66
            Message-ID: <>

"NULL regexp argument" was removed in April 2007 as part of commit
    Re: [PATCH (incomplete)] Make regcomp use SV* sv, instead of char* exp, char* xend
    Message-ID: <>

"panic: do_subst" was renamed in Dec 2000 as part of commit 2269b42e02cee868:
    Make some panic messages a bit more logical.

"panic: do_trans_%" was removed in Nov 2019 as part of commit f34acfecc286:
    Reimplement tr/// without swashes

"panic: last, type=%u" was removed in May 2015 as part of commit
    pp_last: only handle loop context types

"panic: leave_scope clearsv" was removed in April 1999 as part of commit
    remove duplicate code and an extra branch in sv_setsv() and
    other hot code by making SvTHINKFIRST() think about FAKE SVs

"panic: strxfrm() gets absurd - a => %u, ab => %u" was removed in April
2016 as part of commit 79f120c89a6e1237:
    Change calculation of locale collation coefficients

2 months agoPrefix "unexpected constant lvalue entersub" with "panic: "
Nicholas Clark [Wed, 15 Sep 2021 08:27:22 +0000 (08:27 +0000)]
Prefix "unexpected constant lvalue entersub" with "panic: "

In Sep 1999 commit cd06dffe59d6 added various "internal error" croak()s:
    initial implementation of lvalue subroutines (slightly fixed
    version of patch suggested by Ilya Zakharevich, which in turn
    is based on the one suggested by Tuomas J. Lukka <>)

One was "panic: unexpected lvalue entersub entry via type/targ %ld:%ld"
Another "Unexpected constant lvalue entersub entry via type/targ %ld:%ld"

Prefix the latter with "panic: " to make it consistent.

2 months agowin32: regen config_H.(gc|vc)
Tomasz Konojacki [Fri, 17 Sep 2021 22:34:42 +0000 (00:34 +0200)]
win32: regen config_H.(gc|vc)

2 months agoTest that for's iterator aliases the iterated list
Nicholas Clark [Wed, 15 Sep 2021 18:43:22 +0000 (18:43 +0000)]
Test that for's iterator aliases the iterated list

2 months agoAdd strict and warnings to t/op/for.t
Nicholas Clark [Wed, 15 Sep 2021 17:42:59 +0000 (17:42 +0000)]
Add strict and warnings to t/op/for.t

strict subs and refs, but not strict vars, because it's obvious that some
tests are explicitly about package variables, but it's not obvious whether
what they are testing is sensitive to rewriting the variables with full
package names.

Also convert it to done_testing(), and add a call to set_up_inc().

2 months agoext/B/t/o.t shouldn't generate the same test module each run.
Nicholas Clark [Tue, 14 Sep 2021 09:17:06 +0000 (09:17 +0000)]
ext/B/t/o.t shouldn't generate the same test module each run.

Extract its test module B::success into a real file, and eliminate lots
of runtime path creation, file creation and file deletion complexity.

2 months agoRemove all "configured without perlio" test SKIPs from ext/PerlIO-*
Nicholas Clark [Tue, 14 Sep 2021 08:41:36 +0000 (08:41 +0000)]
Remove all "configured without perlio" test SKIPs from ext/PerlIO-*

Also fix one skip that should have been for B, not PerlIO.

2 months agoRemove former SKIP blocks in ext/B/t/concise.t and re-indent
Nicholas Clark [Thu, 16 Sep 2021 10:40:27 +0000 (10:40 +0000)]
Remove former SKIP blocks in ext/B/t/concise.t and re-indent

2 months agoRemove all "configured without perlio" test SKIPs from ext/B
Nicholas Clark [Tue, 14 Sep 2021 08:02:05 +0000 (08:02 +0000)]
Remove all "configured without perlio" test SKIPs from ext/B

It's not been possible to build perl without perlio since v5.16.0

Also remove comments relating to code fixups that were removed in Oct 2006
by commit ab7e0f544dbf50e3:
    [patch] simplify optree test support
    Message-ID: <>

Remove redundant `use Config;`s, and correct one (intended) %Config::Config
lookup where Config was only required, and hence %Config was not imported.

2 months agoutf8.h: Rmv redundant asserts
Karl Williamson [Thu, 16 Sep 2021 12:41:09 +0000 (06:41 -0600)]
utf8.h: Rmv redundant asserts

These macros asserted both that the passed in parameter occupied no more
than a byte, and that it wasn't a pointer.  But pointers occupy more
than a byte, so if it passes the first check, meaning it occupies only a
byte, it will necessarily pass the second, making that check unnecessary.

2 months agoMerge branch 'smoke-me/jkeenan/g++10-build-time-warnings-20210913' into blead
James E Keenan [Thu, 16 Sep 2021 11:53:54 +0000 (11:53 +0000)]
Merge branch 'smoke-me/jkeenan/g++10-build-time-warnings-20210913' into blead

2 months agoKeep lines under 80 characters 19132/head
James E Keenan [Wed, 15 Sep 2021 17:21:20 +0000 (17:21 +0000)]
Keep lines under 80 characters

Per hv review in

2 months agog++10 -Wparentheses build-time warnings
James E Keenan [Mon, 13 Sep 2021 23:35:14 +0000 (23:35 +0000)]
g++10 -Wparentheses build-time warnings

Two build-time warnings appeared when building with g++10 as compared
with g++9.  Both were:

"suggest parentheses around assignment used as truth value"

2 months agoAvoid a use-after-free deleting 8-bit keys from stashes
Nicholas Clark [Mon, 26 Jul 2021 07:32:46 +0000 (07:32 +0000)]
Avoid a use-after-free deleting 8-bit keys from stashes

This code path only affects symbol tables, and can't be reached by regular
Perl code. It is only reachable using the XS API to delete a key from a
stash where the key was in the 8-bit range but passed in UTF-8 encoded.

This has been in the code since it was added in Oct 2010 by commit
    Rename stashes when they move around

Also there is no need to call SvPV() on keysv in S_hv_delete_common() as
its caller has always already done this. This entire code is not KISS.

2 months agoSimplify the code related to prime_env_iter().
Nicholas Clark [Sun, 12 Sep 2021 08:44:52 +0000 (08:44 +0000)]
Simplify the code related to prime_env_iter().

Of the platforms that define DYNAMIC_ENV_FETCH, prime_env_iter() is only
needed on VMS, so only call it on VMS. Previously we defined a dummy stub on
Win32 (with PERL_IMPLICIT_SYS defined), and did something different again
for __riscos__.

Remove the dummy definition for win32, and change the conditional compilation
to only call prime_env_iter() on VMS. This removes a call to mg_find() on
Win32, which likely can't be optimised away, as the compiler cannot know that
it has no side effects.

Because`iter` points to a structure immediately after of HvARRAY(), it needs
updating if HvARRAY() has moved because it has been expanded.

Code was added for VMS in Aug 2005 to address this bug with commit
    [patch@25334] hv.c vms environment fix.
    From: "John E. Malmberg" <>
    Message-ID: <>


However, the comment added in that code wasn't entirely accurate. The
iteration count doesn't need to be *reset* because prior to that first call
to prime_env_iter() there would be no entries in the hash. In fact, the
iterator *had* to be in its "reset" state - entry == NULL - to enter the
if block. Also, as prime_env_iter() only adds hash values but does not
change the hash's iterator state, it can't change iter->xhv_eiter. Hence
there's no need to re-read *that* value, is it will still be NULL.

Hence the only action needed is to re-initialise iter from HvAUX(), as the
structure it needs to point to has likely been moved in memory by the hash
stores performed by prime_env_iter().

2 months agoTest that %ENV iteration with prime_env_iter() is consistent
Nicholas Clark [Sun, 12 Sep 2021 08:17:29 +0000 (08:17 +0000)]
Test that %ENV iteration with prime_env_iter() is consistent

2 months agoTest SvIsBOOL() using XS::APItest
Paul "LeoNerd" Evans [Tue, 14 Sep 2021 20:59:22 +0000 (21:59 +0100)]
Test SvIsBOOL() using XS::APItest

Copy the Scalar::Util::isbool() tests into XS-APItest so we can avoid relying
on Scalar::Util just to check core functionality

2 months agomktables: Remove relics of removed legacy tables
Karl Williamson [Wed, 1 Sep 2021 12:10:49 +0000 (06:10 -0600)]
mktables: Remove relics of removed legacy tables

These mentions of the tables removed in
b852e1da77b497e086508451bebff00541073fb1 were missed in that commit.

2 months agot/re/fold_grind: Add a test case
Karl Williamson [Fri, 3 Sep 2021 12:33:28 +0000 (06:33 -0600)]
t/re/fold_grind: Add a test case

2 months agoSupport Unicode 14.0
Unicode Consortium [Wed, 15 Sep 2021 14:26:00 +0000 (08:26 -0600)]
Support Unicode 14.0

2 months agoregen/ Add comment
Karl Williamson [Wed, 15 Sep 2021 14:25:27 +0000 (08:25 -0600)]
regen/ Add comment

2 months agomktables: Split a Line Break equivalence class
Karl Williamson [Wed, 15 Sep 2021 13:36:41 +0000 (07:36 -0600)]
mktables: Split a Line Break equivalence class

This is used for the \b{lb}, and the rule is changing in Unicode 14.0

2 months agomktables: Reorder some comments, white-space
Karl Williamson [Wed, 15 Sep 2021 13:21:08 +0000 (07:21 -0600)]
mktables: Reorder some comments, white-space

Move comments closer to the action

2 months agomktables: Rename variable, and hoist calc from loop
Karl Williamson [Wed, 15 Sep 2021 13:08:05 +0000 (07:08 -0600)]
mktables: Rename variable, and hoist calc from loop

2 months agoSecond arg to force_list() is bool, so it should be written TRUE or FALSE
Paul "LeoNerd" Evans [Tue, 14 Sep 2021 23:16:54 +0000 (00:16 +0100)]
Second arg to force_list() is bool, so it should be written TRUE or FALSE

2 months agoFix OUTLIST handling for EU::ParseXS, and typemap fixes
Tony Cook [Mon, 13 Sep 2021 00:58:10 +0000 (10:58 +1000)]
Fix OUTLIST handling for EU::ParseXS, and typemap fixes

2 months agoParseXS: rename $c to $outlist_count
Tony Cook [Thu, 9 Sep 2021 01:04:05 +0000 (11:04 +1000)]
ParseXS: rename $c to $outlist_count

$c could be a count, but a count of what? clarify it.

2 months agotest and fix using T_CVREF_REFCOUNT as an output parameter
Tony Cook [Mon, 6 Sep 2021 05:33:19 +0000 (15:33 +1000)]
test and fix using T_CVREF_REFCOUNT as an output parameter

2 months agotest and fix using T_AVREF_REFCOUNT as an output parameter
Tony Cook [Mon, 6 Sep 2021 05:21:06 +0000 (15:21 +1000)]
test and fix using T_AVREF_REFCOUNT as an output parameter

2 months agotest and fix using T_HVREF_REFCOUNT as an output parameter
Tony Cook [Mon, 6 Sep 2021 05:09:49 +0000 (15:09 +1000)]
test and fix using T_HVREF_REFCOUNT as an output parameter

2 months agotest and fix using T_SVREF_REFCOUNT as an output parameter
Tony Cook [Mon, 6 Sep 2021 04:50:48 +0000 (14:50 +1000)]
test and fix using T_SVREF_REFCOUNT as an output parameter

2 months agobump $XS::Typemap::VERSION
Tony Cook [Mon, 6 Sep 2021 04:29:56 +0000 (14:29 +1000)]
bump $XS::Typemap::VERSION

2 months agotest and fix using T_SV as an OUTPUT parameter
Tony Cook [Mon, 6 Sep 2021 04:29:45 +0000 (14:29 +1000)]
test and fix using T_SV as an OUTPUT parameter

2 months agobump $ExtUtils::ParseXS::VERSION
Tony Cook [Mon, 6 Sep 2021 04:13:36 +0000 (14:13 +1000)]
bump $ExtUtils::ParseXS::VERSION

2 months agoParseXS: always XSprePUSH when producing an output list
Tony Cook [Mon, 6 Sep 2021 01:53:29 +0000 (11:53 +1000)]
ParseXS: always XSprePUSH when producing an output list

The late XSprePUSH with a non-PUSHx() RETVAL was causing the
stack and accesses to ST(n) to be out of sync.

If generated RETVAL code does write directly to ST(n) (as much does),
doesn't generate a push and we're generating output list code,
adjust SP to match to keep things in sync.

Also test that the original example case that worked, continues to

Fixes #19054

2 months agoCheck for NULL locale in S_emulate_setlocale
Hugo van der Sanden [Sun, 12 Sep 2021 09:39:53 +0000 (10:39 +0100)]
Check for NULL locale in S_emulate_setlocale

gcc-11.2.0 correctly warns that it is called with NULL from

2 months agoOn VMS, %ENV in scalar context must call prime_env_iter()
Nicholas Clark [Sun, 12 Sep 2021 10:42:25 +0000 (10:42 +0000)]
On VMS, %ENV in scalar context must call prime_env_iter()

Otherwise it will return wrong results, unless other code happens to
have iterated over %ENV. This bug has probably existed forever.

2 months agoSvIsBOOL's return type of 'bool' must be lowercase in =apidoc line
Paul "LeoNerd" Evans [Sat, 11 Sep 2021 21:40:37 +0000 (22:40 +0100)]
SvIsBOOL's return type of 'bool' must be lowercase in =apidoc line

2 months agoinstallhtml: set default podpath to './lib'
James E Keenan [Mon, 23 Aug 2021 16:35:51 +0000 (16:35 +0000)]
installhtml: set default podpath to './lib'

Previously (as reported nine years ago by Nick Clark in what is now, the default setting for
'podpath' was '.'.  This meant that, unless you explicitly set a
colon-delimited list of directories as the value for 'podpath', all
files containing POD under '.' were HTML-ified and installed.  The only
directories that always should have HTML-ized POD installed are 'lib'
and 'pod' itself.

Invoking 'installhtml' like the following should now DTRT:

        export HTMLDIR=$HOMEDIR/tmp/installhtml && \
        ./perl -Ilib ./installhtml    \
            --htmldir=$HTMLDIR     \
            --htmlroot=$HTMLDIR    \
            --splithead=pod/perlipc     \
            --recurse \
            --verbose 2>&1 | tee installhtml.log

2 months agoRun installhtml with $|
James E Keenan [Mon, 23 Aug 2021 15:26:36 +0000 (15:26 +0000)]
Run installhtml with $|

This will facilitate debugging of tickets like and

2 months agoFix a leak when copying a STATIC COW SV to a stringified SV
Nicholas Clark [Sat, 11 Sep 2021 10:11:21 +0000 (10:11 +0000)]
Fix a leak when copying a STATIC COW SV to a stringified SV

This is minor a a regression introduced by commit 914bb57489325d34:
    Define a third kind of COW state; STATIC


    sv_setsv_flags() and sv_setsv_cow() will preserve this state

There was a small omission in the copy code - it didn't handle the case where
the destination SV owned a string buffer already. This is actually
relatively rare - triggering it requires a scalar in code path that is
assigned both strings and booleans. Minimal test case is:

    my $got = 1;
    $got .= "";
    $got = ref "";

cut down from &is in t/comp/parser.t

2 months ago[MERGE] Stable tracking of "boolean intent" across SVs
Paul "LeoNerd" Evans [Fri, 10 Sep 2021 19:33:17 +0000 (20:33 +0100)]
[MERGE] Stable tracking of "boolean intent" across SVs

2 months agoAdd perldelta for stable bool
Paul "LeoNerd" Evans [Fri, 10 Sep 2021 17:48:48 +0000 (18:48 +0100)]
Add perldelta for stable bool

2 months agoAdd a Scalar::Util::isbool()
Paul "LeoNerd" Evans [Sat, 7 Aug 2021 14:11:40 +0000 (15:11 +0100)]
Add a Scalar::Util::isbool()

Remember to SvGETMAGIC() before testing SvIsBOOL() (thanks @tonycoz)

Unit-test that booleaness is preserved on values passed in to, out of, or captured by threads

2 months agoAdd SvIsBOOL() macro to test for SVs being boolean-intent
Paul "LeoNerd" Evans [Sat, 7 Aug 2021 13:48:32 +0000 (14:48 +0100)]
Add SvIsBOOL() macro to test for SVs being boolean-intent

These are identified as being static shared COW strings whose string
buffer points directly at PL_Yes / PL_No

Define sv_setbool() and sv_setbool_mg() macros

Use sv_setbool() where appropriate

Have sv_dump() annotate when an SV's PV buffer is one of the PL_(Yes|No) special booleans

2 months agoDefine a third kind of COW state; STATIC
Paul "LeoNerd" Evans [Sat, 7 Aug 2021 13:46:48 +0000 (14:46 +0100)]
Define a third kind of COW state; STATIC

Previously, when IsCOW flag was set there were two cases:
      PV is really a shared HEK

      PV is a COW structure with 1..256 refcount stored in its extra final byte

This change adds a third state:

  SvLEN()==0 && SvFLAGS() & SVppv_STATIC:
      PV is a shared static const pointer and must not be modified

sv_setsv_flags() and sv_setsv_cow() will preserve this state

sv_uncow() will copy it out to a regular string buffer

sv_dup() will preserve the static pointer into cloned threads

2 months agoIndentation fix in sv_gets() (whitespace only)
Hugo van der Sanden [Fri, 10 Sep 2021 16:17:59 +0000 (17:17 +0100)]
Indentation fix in sv_gets() (whitespace only)

gcc-11.2 correctly complains about this. [-Wmisleading-indentation]

2 months agoAPItest.xs: remove unneeded SvPV_force_nolen()
David Mitchell [Fri, 10 Sep 2021 08:32:28 +0000 (09:32 +0100)]
APItest.xs: remove unneeded SvPV_force_nolen()

The two API test wrappers utf16_to_utf8_reversed() and
utf8_to_utf16(_reversed() included a call to SvPV_force_nolen(), because
the underlying functions in utf8.c which they were wrapping used to
modify the src buffer.

However since v5.35.2-236-g5fd26678bf, these functions no longer modify
the buffer, so the force is superfluous. So this commit removes force.

As a side-effect, this fixes a failure in

    cd t; ./TEST -deparse ../ext/XS-APItest/t/utf16_to_utf8.t

because the test file has this line:

    $utf16_of_U10302 = utf8_to_utf16_reversed(chr 0x10302);

which after a round trip through deparse becomes:

    $utf16_of_U10302 = utf8_to_utf16_reversed("\x{10302}");

and it so happens that at compile time, the chr() form gets constant-
folded into a modifiable PADTMP string constant, which survives a call
to  SvPV_force(), while the latter form is a pure read-only constant SV
which croaks with "Modification of a read-only value attempted"

2 months agoC11 thread local in OpenBSD shared objects is buggy, so disable it.
Nicholas Clark [Thu, 9 Sep 2021 07:07:31 +0000 (01:07 -0600)]
C11 thread local in OpenBSD shared objects is buggy, so disable it.


Pull request:

2 months agoThe different xs_handshake() failures need distinct messages 19111/head
Nicholas Clark [Thu, 9 Sep 2021 09:57:12 +0000 (09:57 +0000)]
The different xs_handshake() failures need distinct messages

xs_handshake() makes two different comparisons that on failure are reported
as "got handshake key %p, needed %p", with opaque hexadecimal values.

The first is the "actual" key as generated by the HS_KEY() macro, which
encodes various values such as sizeof(PerlInterpreter) and the API version.
The second is the address of the current thread's PerlInterpreter struct.

Either can fail, and before this commit they would fail with identical text.
Hence it wasn't obvious what the problem was, causing "confusion and delay"
if one tried to decode the hexadecimal output as the wrong thing. (For
example when it's actually pointers mismatching, but one tries to decode the
values into API version and structure size, assuming that the values were
the packed output from HS_KEY().)

2 months should fall back on makedepend.SH from v5.34.0, not blead.
Nicholas Clark [Thu, 9 Sep 2021 08:26:19 +0000 (08:26 +0000)] should fall back on makedepend.SH from v5.34.0, not blead.

Post v5.34.0, commit 8d469d0ecbd06a99 completely changes how makedepend.SH
interacts with Makefile.SH, meaning that it's not a drop-in upgrade.

2 months agoMore tests for assigning to keys %hash
Nicholas Clark [Wed, 8 Sep 2021 12:19:39 +0000 (12:19 +0000)]
More tests for assigning to keys %hash

Change some calls from is()/isnt() to cmp_ok() to confirm that values
change in the expected direction, rather than merely being "different".

Re-order some calls to is()/cmp_ok() so that the "expected" value is second.

Don't assume that a hash can always hold `num_buckets()/2` keys.
(The test had previously assumed that assigning this value to keys wouldn't
change the hash size. Instead use the current number of keys, as clearly
the hash is already holding that many keys.)

2 months agoIn pp_defined assert that the SV is not a hash or array. 19106/head
Nicholas Clark [Wed, 8 Sep 2021 08:14:28 +0000 (08:14 +0000)]
In pp_defined assert that the SV is not a hash or array.

The code that handled hashes and arrays was removed by commit 2517717a8902:
    The cases for SVt_PVAV and SVt_PVHV in pp_defined are unreachable.

    Remove them, and hit to the C compiler that it's unlikely that someone used
    `defined` on a subroutine.

    These have been unreachable since `defined @array` and `defined %hash`
    became syntax errors. Whilst the same PP code is used for // and //=,
    expressions such as`@a // @b` put the left array (or hash) in scalar
    context, meaning that it always returns a define value.
    (Should we warn on these?)

However, it turns out that that the removed code was reachable by XS code
generating data structures that would be "illegal" in pure Perl (eg also
triggering "Bizarre copy of ..." errors). Hence with -DDEBUGGING, add logic
to report problematic cases, instead of silently continuing with changed

2 months agogh19081: perldelta for SIGFPE changes
Hugo van der Sanden [Tue, 31 Aug 2021 00:15:35 +0000 (01:15 +0100)]
gh19081: perldelta for SIGFPE changes

2 months agogh19081: add perlipc caveats for "fault"-type signal handlers
Hugo van der Sanden [Tue, 31 Aug 2021 00:10:01 +0000 (01:10 +0100)]
gh19081: add perlipc caveats for "fault"-type signal handlers

2 months agogh19081: also deliver SIGFPE in an "unsafe" manner
Hugo van der Sanden [Mon, 30 Aug 2021 18:48:01 +0000 (19:48 +0100)]
gh19081: also deliver SIGFPE in an "unsafe" manner

Bring it in line with the other "fault"-like signals SEGV, ILL and BUS.

2 months agoEvaluate arg to FITS_IN_8_BITS just once
Karl Williamson [Mon, 6 Sep 2021 09:21:11 +0000 (03:21 -0600)]
Evaluate arg to FITS_IN_8_BITS just once

This had been changed by 9555181b32f9b30122a8ea4e779c2c9916cec9f8 to
evaluating multiple times.

(sizeof() also is called with the parameter, but that doesn't actually
evaluate the parameter.)

The previous version of this commit used a comparison with 0xFF, but gcc
is smart enough to realise that `comparison is always true due to limited
range of data type`, but not smart enough to realise that the sizeof makes
that code unreachable. Hence with -Wtype-limits we get thousands of warnings.

Using >> defeats the warnings.

2 months agoProbe for C11 thread local storage, and use it for threading
Tony Cook [Tue, 7 Sep 2021 06:08:18 +0000 (16:08 +1000)]
Probe for C11 thread local storage, and use it for threading

Probe for compiler support for C11 thread local storage, and where
available use this for "implicit context" for XS extensions making API
calls for a threaded Perl build. This requires fewer function calls at
the C level than POSIX thread specific storage. We continue to use the
the pthreads approach if the C11 approach is not available.

Most operating systems ship a threaded Perl, and most XS extensions
don't specify PERL_NO_GET_CONTEXT, hence they make a lot of calls to
pthread_getspecific to retrieve the interpreter context to pass into
each Perl API call.

Using thread local storage instead doesn't eliminate all function
calls for a threaded shared object - there is still the need to make
one call to get the TLS block. However, it drastically reduces the
number of calls. For APItest.xs we go from

  $ grep -c 'bl.*pthread_getspecific' ext/XS-APItest/APItest.s


  $ grep -c 'bl.*__tls_get_addr' ext/XS-APItest/APItest.s

Curiously macOS doesn't support this even with current clang (due to
the MACH-O executable format) , whilst most vendor Unix compilers from
a decade ago support __thread even in C89 mode.

2 months agoUpdate perldelta with the C11 thread local storage probe and usage.
Nicholas Clark [Mon, 21 Jun 2021 05:43:41 +0000 (05:43 +0000)]
Update perldelta with the C11 thread local storage probe and usage.

2 months agocygwin can't support C11 thread local in shared objects, so disable it.
Nicholas Clark [Tue, 22 Jun 2021 13:59:19 +0000 (13:59 +0000)]
cygwin can't support C11 thread local in shared objects, so disable it.

This seems to be an unresolved bug in binutils, rather than any fundamental
object format problem.

2 months agoMACH-O can't support C11 thread local in shared objects, so disable it.
Nicholas Clark [Mon, 21 Jun 2021 08:01:29 +0000 (02:01 -0600)]
MACH-O can't support C11 thread local in shared objects, so disable it.

Apple's clang happily passes the probe and compiles _Thread_local no problem,
but building extensions fails with
    ld: illegal thread local variable reference to regular symbol _PL_current_context for architecture arm64

The Internet suggests that the MACH-O format fundamentally can't support
what is needed to implement C11 thread local storage in shared objects.
It's frustrating that the error message is "Less Than Awesome" at explaining
that this is the real problem here.

Hence disable the use of C11 thread local storage in the hints file, and
hence keep using pthreads.

2 months agoIf we have thread local storage, use it instead of posix_getspecific().
Nicholas Clark [Sun, 20 Jun 2021 17:24:15 +0000 (17:24 +0000)]
If we have thread local storage, use it instead of posix_getspecific().

Declare and use a variable PL_current_context to store a pointer to the
thread's interpreter struct. Use this to implement implicit context undef
ITHREADS, instead of a call to posix_getspecific().

For normal threaded code, this will eliminate function calls. For threaded
code in shared objects (the typical configuration for Linux distribution
builds) there still needs to be a function call to get the pointer to
thread local variables, but there will only be one per function, not one
per read of the variable.

2 months agoA Configure test for C11 thread local storage specificer, _Thread_local
Nicholas Clark [Sun, 20 Jun 2021 19:35:13 +0000 (19:35 +0000)]
A Configure test for C11 thread local storage specificer, _Thread_local

We also provbe for gcc's earlier syntax, __thread.

2 months agoutf8.c: Rmv redundnat assigns
Karl Williamson [Sun, 5 Sep 2021 12:08:34 +0000 (06:08 -0600)]
utf8.c: Rmv redundnat assigns

This fixes GH #19091

This is from a rebasing error.  The two variable assignments were
supposed to have been superceded by the first one in the function, and
these removed, but they didn't get removed, until now

2 months agoutf8.c: White-space, comment only
Karl Williamson [Sun, 5 Sep 2021 12:08:20 +0000 (06:08 -0600)]
utf8.c: White-space, comment only