This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl5.git
3 years agoperldelta b3893bfa90e8810497e2f81458a5a46db611cadf
Zefram [Fri, 15 Dec 2017 01:27:12 +0000 (01:27 +0000)]
perldelta b3893bfa90e8810497e2f81458a5a46db611cadf

3 years agoperldelta 0c9c439d08a65206d442724bcd9fb29fa5a7f937
Zefram [Fri, 15 Dec 2017 01:24:36 +0000 (01:24 +0000)]
perldelta 0c9c439d08a65206d442724bcd9fb29fa5a7f937

3 years agoperldelta 58be57636a42d6c6fd404c48c4e1cb87870182df
Zefram [Fri, 15 Dec 2017 01:20:03 +0000 (01:20 +0000)]
perldelta 58be57636a42d6c6fd404c48c4e1cb87870182df

3 years agoperldelta 7c6e7cf06853eef1d1b271077c402c5f8655fbe6
Zefram [Fri, 15 Dec 2017 01:16:14 +0000 (01:16 +0000)]
perldelta 7c6e7cf06853eef1d1b271077c402c5f8655fbe6

3 years agoperldelta 38a3df78b8fbbdf02988dd5fe691c23a8041334f
Zefram [Fri, 15 Dec 2017 01:14:01 +0000 (01:14 +0000)]
perldelta 38a3df78b8fbbdf02988dd5fe691c23a8041334f

3 years agoperldelta 557714184de18964b954b2c00fa13127fd3f216a
Zefram [Fri, 15 Dec 2017 01:11:47 +0000 (01:11 +0000)]
perldelta 557714184de18964b954b2c00fa13127fd3f216a

3 years agoperldelta 3c0dbbbaeb55e36a6beabd1cfc9f0432053bcaf0
Zefram [Fri, 15 Dec 2017 01:09:48 +0000 (01:09 +0000)]
perldelta 3c0dbbbaeb55e36a6beabd1cfc9f0432053bcaf0

3 years agoperldelta 7270698f29ae2f22f2cdfec7b156a75602cddf68
Zefram [Fri, 15 Dec 2017 01:08:38 +0000 (01:08 +0000)]
perldelta 7270698f29ae2f22f2cdfec7b156a75602cddf68

3 years agoperldelta d3f0c815eccb54ae88550259c06aa395b2274580
Zefram [Fri, 15 Dec 2017 01:07:08 +0000 (01:07 +0000)]
perldelta d3f0c815eccb54ae88550259c06aa395b2274580

3 years agoperldelta 39dc9d148281a0a05168f216359b3bdb696fec66
Zefram [Fri, 15 Dec 2017 01:04:32 +0000 (01:04 +0000)]
perldelta 39dc9d148281a0a05168f216359b3bdb696fec66

3 years agoperldelta 0740a29d60ebd4ff72090340b0140ec2210e90c7
Zefram [Fri, 15 Dec 2017 01:02:39 +0000 (01:02 +0000)]
perldelta 0740a29d60ebd4ff72090340b0140ec2210e90c7

3 years agoperldelta sub constructor documentation
Zefram [Fri, 15 Dec 2017 00:59:13 +0000 (00:59 +0000)]
perldelta sub constructor documentation

Covers commits 68cd13c6081a23a59561d3289dba5a99f73c1463,
a59b17fa6324328a12a1d86a5e187e07ba8cee6c, and
28ef70489d76deb9024de42a0571162f323148c8.

3 years agoperldelta 8bfeb7823012732f6bfd9c65485ae3ad9c0cce8d
Zefram [Fri, 15 Dec 2017 00:56:11 +0000 (00:56 +0000)]
perldelta 8bfeb7823012732f6bfd9c65485ae3ad9c0cce8d

3 years agoperldelta abda9fe0fe75ae824723761c1c98af958f17a41c
Zefram [Fri, 15 Dec 2017 00:51:21 +0000 (00:51 +0000)]
perldelta abda9fe0fe75ae824723761c1c98af958f17a41c

3 years agoperldelta a252c8fe5fbed43d9b362ed97d57a5a7764fac62
Zefram [Fri, 15 Dec 2017 00:47:10 +0000 (00:47 +0000)]
perldelta a252c8fe5fbed43d9b362ed97d57a5a7764fac62

3 years agomake exec keep its argument list more reliably
Zefram [Wed, 6 Dec 2017 21:27:15 +0000 (21:27 +0000)]
make exec keep its argument list more reliably

Bits of exec code were putting the constructed commands into globals
PL_Argv and PL_Cmd, which could then be clobbered by reentrancy.
These are only global in order to manage their freeing, but that's
better managed by using the scope stack.  So replace them with automatic
variables, with ENTER/SAVEFREEPV/LEAVE to free the memory.  Also copy
the strings acquired from SVs, to avoid magic clobbering the buffers of
SVs already read.  Fixes [perl #129888].

3 years agorefer to perldiag from perlfunc
Marco Fontani [Wed, 13 Dec 2017 10:11:44 +0000 (11:11 +0100)]
refer to perldiag from perlfunc

Rather than duplicating information as to which keyword, function, or
operator generates which warning, point the reader to the proper place
to read about which warnings Perl generates in which scenario, which are
well described in the POD for "warnings".  [perl #116080]

3 years agodon't lose mark when pp_reverse extends stack
Zefram [Fri, 8 Dec 2017 19:23:29 +0000 (19:23 +0000)]
don't lose mark when pp_reverse extends stack

Nullary reverse needs to extend the stack to push its result scalar.
It was actually extending the stack, but doing so invalidated MARK,
which it relied upon to place the stack pointer afterwards.  Upon stack
reallocation it was therefore leaving the stack pointer pointing to the
freed stack memory.  Reformulate stack manipulation to not rely on MARK
after extending.  Fixes [perl #132544].

3 years agoRevert "re_intuit_start(): rename some local vars"
David Mitchell [Thu, 14 Dec 2017 09:32:46 +0000 (09:32 +0000)]
Revert "re_intuit_start(): rename some local vars"

This reverts commit ea569f0097183cb2c1b98852f31b47264605f0b7.

This was just a cosmetic (if useful) change and clashes with a branch
Yves is working on. So I'll redo it some other time.

3 years agowarn on $a.$b.$c in void context
Zefram [Thu, 14 Dec 2017 04:23:58 +0000 (04:23 +0000)]
warn on $a.$b.$c in void context

$a.$b.$c gets transformed early on to execute as ($a.$b).=$c, which didn't
warn about void context becuase .= looks like a useful side effect.
Happily, the recently-added OPpCONCAT_NESTED flag identifies that this
has happened.  Make scalarvoid() pay attention to this flag when a concat
op is put into void context.  Fixes [perl #6997]

3 years agoCwd: Change strcmp into strEQ
Karl Williamson [Thu, 9 Mar 2017 19:06:34 +0000 (12:06 -0700)]
Cwd: Change strcmp into strEQ

The latter is easier to read

3 years agoFix typo in 183a822da3e11eb0f7dba393f5e6f2bc515cffe6
Karl Williamson [Thu, 14 Dec 2017 03:28:53 +0000 (20:28 -0700)]
Fix typo in 183a822da3e11eb0f7dba393f5e6f2bc515cffe6

Spotted by Tony Cook++

3 years agoData::Dumper: Change a strncmp to memBEGINs
Karl Williamson [Thu, 9 Mar 2017 17:54:20 +0000 (10:54 -0700)]
Data::Dumper: Change a strncmp to memBEGINs

The latter is much clearer as to what's going on

3 years agoData::Dumper: Change strcpy to strlcpy
Karl Williamson [Mon, 27 Mar 2017 20:24:41 +0000 (14:24 -0600)]
Data::Dumper: Change strcpy to strlcpy

strlcpy is safer.  This reverts to using strcpy if no version of strlcpy
is available (but one has been available in Perl since 5.9.4)

3 years agoadd preload to .gitignore
Zefram [Thu, 14 Dec 2017 02:37:03 +0000 (02:37 +0000)]
add preload to .gitignore

3 years agofix links in generated HTML documentation
Zefram [Thu, 14 Dec 2017 02:27:28 +0000 (02:27 +0000)]
fix links in generated HTML documentation

Invoke installhtml in the right way for it to generate relative links.
Fix installhtml's code for creating relative links in the index for
split documents.  Update Pod::Html's section name transformer to
match the actual output seen via Pod::Simple::XHTML.  Incidentally
update split-on-head code for the new style of HTML generated by
Pod::Simple::XHTML.  Fixes [perl #110056].

3 years agoAdd PERL_REENTRANT for XS modules
Karl Williamson [Thu, 14 Dec 2017 02:07:04 +0000 (19:07 -0700)]
Add PERL_REENTRANT for XS modules

This allows them to get the reentrant versions of libc functions
automatically.  Previously if they wanted to do this, they had to
declare themselves (shudder) as PERL_CORE or PERL_EXT.

3 years agoperlfunc: Add note about reentrant functions
Karl Williamson [Thu, 14 Dec 2017 01:36:02 +0000 (18:36 -0700)]
perlfunc: Add note about reentrant functions

perl automatically and silently uses reentrant versions of some
functions in threaded perls when such functions are available.  Note
this.

3 years agoautomatic titling in Pod::Html
Zefram [Wed, 13 Dec 2017 22:59:28 +0000 (22:59 +0000)]
automatic titling in Pod::Html

Automatic extraction of a title from the content was lost with the
switch to using Pod::Simple::XHTML for rendering.  It would be tricky
to add in Pod::Simple::XHTML, or anything else integrated into that
parser, because the stream-oriented approach plays poorly with any kind
of lookahead.  Instead go to a two-stage conversion, parsing the input
to tree form using Pod::Simple::SimpleTree and later feeding the tree
to the stream-oriented Pod::Simple::XHTML for output.  Between the two
stages, extract a default title from the tree, in time to use it when
setting options for Pod::Simple::XHTML.  Fixes [perl #110520].

3 years agopp_multiconcat() Use faster UTF-8 variant counting
Karl Williamson [Thu, 23 Nov 2017 06:10:58 +0000 (23:10 -0700)]
pp_multiconcat() Use faster UTF-8 variant counting

3 years agore_intuit_start()/S_reghop3(): don't go beyond end
David Mitchell [Wed, 13 Dec 2017 15:53:51 +0000 (15:53 +0000)]
re_intuit_start()/S_reghop3(): don't go beyond end

RT #132552

when hopping N characters along a string, if the 'end stop' lim wasn't
on a char boundary, the value returned by S_reghop3() could be up to
(but not including) one char's worth of bytes beyond lim.

This is fairly harmless, but gave valgrind/ASan palpitations.

So fixed by this commit.

3 years agore_intuit_start(): rename some local vars
David Mitchell [Wed, 13 Dec 2017 13:14:59 +0000 (13:14 +0000)]
re_intuit_start(): rename some local vars

(no functional changes)

For local variables which hold a length, rename that var with a _c or _b
suffix to indicate whether it holds a byte or character count.

There is a mixture of the two, and it's easy to get confused.

Also, in places, rename vars to more closely match the field they're
extracted from. For example, start_shift is set from the min_offset field
of the check slot of the substrings array, so it makes more sense to call
it check_min_offset_c.

Also add some code comments about what the vars are for.

3 years agoUpgrade Time::Piece from vesion 1.3202 to 1.3203
Steve Hay [Wed, 13 Dec 2017 08:37:43 +0000 (08:37 +0000)]
Upgrade Time::Piece from vesion 1.3202 to 1.3203

3 years agoinline.h: Fix wrong order of shift and mask
Karl Williamson [Wed, 13 Dec 2017 06:01:02 +0000 (23:01 -0700)]
inline.h: Fix wrong order of shift and mask

I realized that one should mask before the shift in this macro that is
used in is_utf8_invariant_string_loc() and variant_under_utf8_count().
This would only show up on a 32-bit platform that doesn't have 64-bit
ability at all.

3 years agorevise advice about DESTROY
Zefram [Wed, 13 Dec 2017 03:50:01 +0000 (03:50 +0000)]
revise advice about DESTROY

perlobj advised that a DESTROY method dying could clobber $@ for an
exception being thrown, which is no longer true since 5.14.  Remove that
caveat, and fix the description of what happens when a DESTROY method
dies.  Revise the related advice about localising global status variables,
including a list of all affected variables.  Fixes [perl #121761] and
[perl #122753].

3 years agoUpdate Filter::Util::Call to CPAN version 1.58
Chris 'BinGOs' Williams [Tue, 12 Dec 2017 11:39:20 +0000 (11:39 +0000)]
Update Filter::Util::Call to CPAN version 1.58

  [DELTA]

1.58 2017-11-15 rurban
----
  * Drop 5.005 support
  * Switch from DynaLoader to XSLoader [atoomic #5]
  * Replace use vars by our. [atoomic #5]
  * Lazy load Carp only when required. [atoomic #5]
  * Minor test improvements
  * Fix v5.8 cast warnings

3 years agoUpdate B-Debug to CPAN version 1.26
Chris 'BinGOs' Williams [Tue, 12 Dec 2017 11:32:35 +0000 (11:32 +0000)]
Update B-Debug to CPAN version 1.26

  [DELTA]

1.26 2017-12-03 rurban
  * Avoid too many -I when calling subprocess (sprout, RT#123816)

3 years agoUpdate experimental to CPAN version 0.019
Chris 'BinGOs' Williams [Tue, 12 Dec 2017 11:29:29 +0000 (11:29 +0000)]
Update experimental to CPAN version 0.019

  [DELTA]

0.019     2017-12-03 18:40:19+01:00 Europe/Amsterdam
          - Rerelease without NYTProf files

3 years agorevise doc about returning values from threads
Zefram [Tue, 12 Dec 2017 11:54:04 +0000 (11:54 +0000)]
revise doc about returning values from threads

Returning subs is now generally fine, as is creating threads in BEGIN
blocks et al.  Describe the problems that come from losing the identity
of returned objects.  Fixes [perl #96538].

3 years agobetter document version check aspect of "use"
Zefram [Tue, 12 Dec 2017 10:16:46 +0000 (10:16 +0000)]
better document version check aspect of "use"

3 years agofix GvSV refcounting in sort
Zefram [Tue, 12 Dec 2017 09:47:41 +0000 (09:47 +0000)]
fix GvSV refcounting in sort

Where a sort operation passes the comparands to a comparison block in $a
and $b, it wasn't taking account of the fact that the GvSV slots in *a
and *b are refcounted.  It would write the comparands into those slots
without altering any reference counts, and end by restoring the values
those slots had to start with.  This was all fine so long as nothing
else touched those slots during the process.  But code running during
the comparison is free to write to them by "*a = \1", which does frob
the reference counts.

Fix it by switching sort to manipulate GvSV in a refcount-preserving
manner, compatible with all other operations on those slots.  Fixes
[perl #92264].

3 years agoUpgrade CPAN from version 2.18-TRIAL to 2.20-TRIAL
Steve Hay [Tue, 12 Dec 2017 08:21:04 +0000 (08:21 +0000)]
Upgrade CPAN from version 2.18-TRIAL to 2.20-TRIAL

3 years agoproperly check readpipe()'s argument list
Zefram [Tue, 12 Dec 2017 06:24:01 +0000 (06:24 +0000)]
properly check readpipe()'s argument list

readpipe() wasn't applying context to its argument list, resulting in
readpipe()'s context leaking in, and broken stack discipline when a list
expression was used.  Fixes [perl #4574].

3 years agofix doc about filter subroutines' $_[0]
Zefram [Tue, 12 Dec 2017 03:53:33 +0000 (03:53 +0000)]
fix doc about filter subroutines' $_[0]

Filter subroutines established by an @INC callback have always received
a numeric zero as their first argument, not a referencet to the sub
as documented.  Fixes [perl #115754].

3 years agocorrect detection of arg absence in Data::Dumper
Zefram [Tue, 12 Dec 2017 03:19:26 +0000 (03:19 +0000)]
correct detection of arg absence in Data::Dumper

The combined getter/setter methods were mistaking a supplied undef
argument value (of a setter call) for absence of an argument (making it
a getter call).  Fixes [perl #113090].

3 years agosv.c: White-space only
Karl Williamson [Fri, 8 Dec 2017 01:47:34 +0000 (18:47 -0700)]
sv.c: White-space only

This outdents some lines that the previous commit removed an enclosing
block of.

3 years agoutf8_upgrade_flags_grow(): Use faster variant count
Karl Williamson [Fri, 8 Dec 2017 01:42:53 +0000 (18:42 -0700)]
utf8_upgrade_flags_grow(): Use faster variant count

Now that we have a much faster way of counting the characters that would
expand to two bytes when a string is translated into UTF-8, use that,
instead of trying to choose one of two methods.  This simplifies the
code.  Note that the faster method doesn't happen on EBCDIC platforms,
but the simplification is worth the potential loss of being able to
choose methods.

3 years agoinline.h: Change extensive comment to a link
Karl Williamson [Tue, 12 Dec 2017 02:13:45 +0000 (19:13 -0700)]
inline.h: Change extensive comment to a link

I'm thinking the explanation of how the algorithm works  doesn't belong
in the code, so replace it by the commit number so it can be found
quickly.

3 years agoAdd variant_under_utf8_count() core function
Karl Williamson [Thu, 23 Nov 2017 05:30:16 +0000 (22:30 -0700)]
Add variant_under_utf8_count() core function

This function takes a string that isn't encoded in UTF-8 (hence is
assumed to be in Latin1), and counts how many of the bytes therein
would change if it were to be translated into UTF-8.  Each such byte
would occupy two UTF-8 bytes.

This function is useful for calculating the expansion factor precisely
when converting to UTF-8, so as to know how much to malloc.

This function uses a non-obvious method to do the calculations
word-at-a-time, as opposed to the byte-at-a-time method used now, and
hence should be much faster than the current methods.

The performance change in short string lengths is equivocal.  Here is
the result for a single character and a 64-bit word.

          bytes    words Ratio %
        -------- -------- -------
     Ir    932.0    947.0    98.4
     Dr    325.0    325.0   100.0
     Dw    104.0    104.0   100.0
   COND    136.0    137.0    99.3
    IND     28.0     28.0   100.0

 COND_m      1.0      0.0   Inf
  IND_m      6.0      6.0   100.0

There are some extra instructions executed and an extra branch to check
for and handle the case where we can go word-by-word vs. not.  But the
one cache miss is removed.

The results are essentially the same until we get to being able to
handle a full word.  Some of the extra instructions are to ensure that
if the input is not aligned on a word boundary, that performance doesn't
suffer.

Here's the results for 8-bytes on a 64-bit system.

           bytes    words Ratio %
        -------- -------- -------
     Ir    974.0    955.0   102.0
     Dr    332.0    325.0   102.2
     Dw    104.0    104.0   100.0
   COND    143.0    138.0   103.6
    IND     28.0     28.0   100.0

 COND_m      1.0      0.0     Inf
  IND_m      6.0      6.0   100.0

Things keep improving as the strings get longer.  Here's for 24 bytes.

           bytes    words Ratio %
        -------- -------- -------
     Ir   1070.0    975.0   109.7
     Dr    348.0    327.0   106.4
     Dw    104.0    104.0   100.0
   COND    159.0    140.0   113.6
    IND     28.0     28.0   100.0

 COND_m      2.0      0.0     Inf
  IND_m      6.0      6.0   100.0

And 96:

           bytes    words Ratio %
        -------- -------- -------
     Ir   1502.0   1065.0   141.0
     Dr    420.0    336.0   125.0
     Dw    104.0    104.0   100.0
   COND    231.0    149.0   155.0
    IND     28.0     28.0   100.0

 COND_m      2.0      1.0   200.0
  IND_m      6.0      6.0   100.0

And 10,000

           bytes    words Ratio %
        -------- -------- -------
     Ir  60926.0  13445.0   453.1
     Dr  10324.0   1574.0   655.9
     Dw    104.0    104.0   100.0
   COND  10135.0   1387.0   730.7
    IND     28.0     28.0   100.0

 COND_m      2.0      1.0   200.0
  IND_m      6.0      6.0   100.0

I found this trick on the internet many years ago, but I can't seem to
find it again to give them credit.

3 years agois_utf8_invariant_string(): small speed optimization
Karl Williamson [Tue, 12 Dec 2017 01:17:29 +0000 (18:17 -0700)]
is_utf8_invariant_string(): small speed optimization

This adds a few shifing, masking, and integer arithmetic operations to a
conditional which in return makes sure that one branch is taken only
when it is going to do some good, avoiding a conditional in it.

3 years agoAPItest/t/handy_base.pl: Avoid uninitialized warning
Karl Williamson [Tue, 12 Dec 2017 01:26:52 +0000 (18:26 -0700)]
APItest/t/handy_base.pl: Avoid uninitialized warning

This .pl in /t is generally called from a test file in that directory,
but if run by hand, this commit makes sure things are properly
initialized

3 years agodocument rules for identifying smoke-me branches
Zefram [Mon, 11 Dec 2017 21:25:38 +0000 (21:25 +0000)]
document rules for identifying smoke-me branches

3 years agofakesdio.h: Typo
Father Chrysostomos [Mon, 11 Dec 2017 18:01:35 +0000 (10:01 -0800)]
fakesdio.h: Typo

3 years agoAPItest.xs: shenanigans to avoid warnings
Father Chrysostomos [Mon, 11 Dec 2017 17:59:47 +0000 (09:59 -0800)]
APItest.xs: shenanigans to avoid warnings

We have an unresolved issue that #include "fakesdio.h" causes one
of the typemaps to make assignments between different pointer types,
something we can’t fix straightforwardly with casts, since adding
casts to the default typemap (which we are trying to test) may
suppress real problems in production.  This is a temporary plaster
till we figure out what to do.

3 years agosvleak.t: Disable crashing test
Father Chrysostomos [Mon, 11 Dec 2017 17:56:29 +0000 (09:56 -0800)]
svleak.t: Disable crashing test

till we get to the bottom of it

3 years agoNote schedule for $[ removal in perlvar
Dagfinn Ilmari Mannsåker [Mon, 11 Dec 2017 12:31:30 +0000 (12:31 +0000)]
Note schedule for $[ removal in perlvar

3 years agoS_maybe_multiconcat(): use OPpCONCAT_NESTED flag
David Mitchell [Mon, 11 Dec 2017 12:02:57 +0000 (12:02 +0000)]
S_maybe_multiconcat(): use OPpCONCAT_NESTED flag

RT # 132554

I recently added the OPpCONCAT_NESTED flag to distinguish between

    $a .= ...

and
    $a . $b . $c

where the latter has been optimised into

    ($a . $b) .= $c

Update S_maybe_multiconcat() to recognise this new flag.
It was failing an assert on this code:

    ./perl -e 'H.-w.w.=0'

3 years agoDeclaration after statement in typemap
Father Chrysostomos [Mon, 11 Dec 2017 04:25:59 +0000 (20:25 -0800)]
Declaration after statement in typemap

A follow-up to 6da090e6cb and 732d3893ab.

3 years agoperldelta for #115814
Father Chrysostomos [Mon, 11 Dec 2017 01:13:17 +0000 (17:13 -0800)]
perldelta for #115814

db9848c8d3fb and 6da090e6cb.

3 years agoIncrease $ExtUtils::Typemaps::VERSION to 3.37
Father Chrysostomos [Mon, 11 Dec 2017 00:54:44 +0000 (16:54 -0800)]
Increase $ExtUtils::Typemaps::VERSION to 3.37

3 years agoAvoid newGVgen in blead-upstream modules
Father Chrysostomos [Mon, 11 Dec 2017 00:53:45 +0000 (16:53 -0800)]
Avoid newGVgen in blead-upstream modules

ExtUtils::ParseXS::Typemaps:
Just in documentation, but it’s good to change it, in case peo-
ple copy it.

Time::HiRes:
It doesn’t even use these typemap entries, but I changed it in case
they get used in the future.  (The changes are not identical to the
default typemap, because Time::HiRes is 5.6-compatible, at least
nominally.)

os2/os2.c:
No, this is not a module, but I changed it, too.

Some other instances of newGVgen are already handled properly, or are
just in tests, so I left them alone.

3 years agoAvoid newGVgen in default typemap
Father Chrysostomos [Mon, 11 Dec 2017 00:37:11 +0000 (16:37 -0800)]
Avoid newGVgen in default typemap

newGVgen leaks memory, because it puts it vivifies a typeglob in the
symbol table, without arranging for it to be deleted.  A typemap is not
an appropriate place to use it, since callers of newGVgen are responsible
for seeing that the GV is freed, if they care.

This came up in #115814.

3 years agoperlapio: wrong param type
Father Chrysostomos [Mon, 11 Dec 2017 00:33:22 +0000 (16:33 -0800)]
perlapio: wrong param type

3 years agorevise documentation about set-id
Zefram [Mon, 11 Dec 2017 00:28:43 +0000 (00:28 +0000)]
revise documentation about set-id

perlsec's section on set-id scripts was written confusingly, with several
half-formed references to the long-ago-deleted suidperl, and with temporal
references that are well out of date.  Revise that section, and slightly
expand the perldiag entry for the message about detecting a set-id script.
Add another section to perlsec about sudo.  Fixes [perl #74142].

3 years agoassert well-formedness of argv in perl_parse()
Zefram [Sun, 10 Dec 2017 23:20:18 +0000 (23:20 +0000)]
assert well-formedness of argv in perl_parse()

3 years agoremove incorrect doc para about exit from BEGIN
Zefram [Sun, 10 Dec 2017 22:23:31 +0000 (22:23 +0000)]
remove incorrect doc para about exit from BEGIN

I misinterpreted the behaviour of exit from BEGIN when writing that
paragraph.  exit from BEGIN actually does cause perl_parse() to return
normally, but perl_run() wouldn't subsequently do anything.

3 years agoproperly define perl_parse() return value
Zefram [Sun, 10 Dec 2017 21:37:16 +0000 (21:37 +0000)]
properly define perl_parse() return value

perl_parse()'s return value has historically had conflicting purposes.
perlmain.c uses it as a truth value, but perlembed.pod has shown it being
used as an exit code.  perl_parse() has not had its own documentation.
What the function has actually done is to return zero for normal
completion and an exit code for early termination.  For this to be
a usable convention depended on early termination never using exit
code 0, and that's specifically *native* exit code 0, which could have
any significance.  In fact exit code 0 could arise for a compile-time
termination even on Unix through "CHECK { exit 0 }", and the mishandling
of that situation was bug [perl #2754].

Since perl_destruct() provides a native exit code unencumbered by any
attempt to simultaneously be a truth value, perl_parse() doesn't really
need to provide an exit code.  So define that perl_parse()'s return
value is principally a truth value.  Change the perlembed tutorial to
show it being so used, with an exit code coming from perl_destruct().
However, most of the historical usage of perl_parse()'s return value
as an exit code can be preserved.  Make it return 0x100 for exit(0),
which both serves as the essential truth value and on Unix also serves
as the proper exit code, because that set bit will be masked off when
actually exiting.  This works on Unix but will have variable effect on
other OSes; at least it will reliably indicate an actual exit.

perl_run() has a similar problem in the interpretation of its return
value, but not affecting the main perl executable, because perlmain.c
ignores its return value.  Similarly define that it is principally a
truth value, with preserved usage of non-zero return values as exit
codes, with exit code 0 transformed into 0x100.  This requires some
extra logic to distinguish between local completion and exit(0), which
were not previously distinguished.

Fully document perl_parse(), perl_run(), and perl_destruct() as API
functions.  Make the perlembed tutorial always show a proper exit
from main(), using "exit(EXIT_SUCCESS)" for portability when errors
are not being checked.  Make perlembed always show a null argv[argc]
being supplied to perl_parse(), where an argv is constructed.  (Commit
54c85bb058e15520a2fc0ba34007743aae56be34 added a note to perlembed saying
that that's required, but didn't fix the examples to show it being done.)

3 years agosort perldiag
Father Chrysostomos [Sun, 10 Dec 2017 20:11:13 +0000 (12:11 -0800)]
sort perldiag

3 years ago[perl #74764] Forbid ‘goto’ jumping into ‘given’
Father Chrysostomos [Sun, 10 Dec 2017 15:07:07 +0000 (07:07 -0800)]
[perl #74764] Forbid ‘goto’ jumping into ‘given’

It does not make sense to jump into a ‘given’ any more than it makes
sense to jump into ‘foreach’, which has long been forbidden, since
there is no value to turn into a topic.  Up till now this construct
has always crashed.

3 years agoExplicitly test goto-into-foreach
Father Chrysostomos [Wed, 6 Dec 2017 21:55:26 +0000 (13:55 -0800)]
Explicitly test goto-into-foreach

It is already tested in t/op/goto.t, but only as part of an existing
test to see which of multiple identical labels gets chosen.

3 years agopp_ctl.c: Move goto-into-foreach error
Father Chrysostomos [Wed, 6 Dec 2017 21:44:32 +0000 (13:44 -0800)]
pp_ctl.c: Move goto-into-foreach error

Put it in a static function, instead of repeating the code.  This way I
can add more conditions to that code in subsequent commits.

3 years agoClarify different cases of assignment to list of scalars.
James E Keenan [Thu, 7 Dec 2017 21:09:54 +0000 (16:09 -0500)]
Clarify different cases of assignment to list of scalars.

Prepared in response to RT #132538, with feedback from Father Chrysostomos.

3 years agostop gensyming when vivifying IO handles
Zefram [Sun, 10 Dec 2017 01:34:04 +0000 (01:34 +0000)]
stop gensyming when vivifying IO handles

When open() is given as a handle a scalar with undef value, the rv2gv
op creates a new glob for the I/O handle, and mutates the scalar to
contain an RV referencing the glob.  This is documented behaviour.
The question arises of what GvNAME the glob should have.  There's some
compile-time logic that spots that this might happen, and if the handle
expression is simple enough it stores in the pad a name representing
that expression, and rv2gv uses that for the GvNAME.  But if no name
was supplied by that route then rv2gv was using newGVgen() to generate
the glob.  That succeeds in giving it some kind of name, but has the
unwanted side effect of interning the glob in the stash under that name.
From the user's point of view, that creates a phantom reference to the
glob, which means that killing the RV doesn't remove the last reference
to the glob and so doesn't close the handle.

Instead of gensyming, just create an uninterned glob and give it a
fixed GvNAME.  Fixes [perl #115814].

3 years agoBetter selection of homegrown ino_t in vmsish.h.
Craig A. Berry [Sat, 9 Dec 2017 14:54:39 +0000 (08:54 -0600)]
Better selection of homegrown ino_t in vmsish.h.

We had been using a 64-bit definition of myino_t only when
_LARGEFILE is defined, but we actually get large file support via
either _LARGEFILE or _USE_STD_STAT because both give us 64-bit
off_t, so look at both definitions.

The size of off_t is not any great indicator for the size of
ino_t, but this preserves the intent of the existing code.

TODO: figure out when _USE_STD_STAT became available; it's
possible we no longer need this hackish layer on top of the
stat struct.

3 years agoAPItest/t/utf8.t: Simplify some tests
Karl Williamson [Tue, 5 Dec 2017 00:40:58 +0000 (17:40 -0700)]
APItest/t/utf8.t: Simplify some tests

The complicated nested loops of tests this commit replaces don't need to
be such.  To test utf8_is_invariant_string, we just need to put a single
variant in each position of a string that spans more than a full word
(since we have full-word lookup now) and includes partial words on either
side.  We set those partial words up to be one byte each less than a
full word.  The code needs to work on strings that don't start on a full
word, and don't end on one, and this commit continues to do that.

3 years agoinline.h: Use new C99 emulation
Karl Williamson [Tue, 5 Dec 2017 20:51:48 +0000 (13:51 -0700)]
inline.h: Use new C99 emulation

We don't have to know explicitly if the platform is 64 or 32 bits, and
can derive the constants that were formerly hard-coded in.

3 years agoAllow %j on non-C99 platforms
Karl Williamson [Tue, 5 Dec 2017 20:39:27 +0000 (13:39 -0700)]
Allow %j on non-C99 platforms

Now that intmax_t is emulated, the %j format is usable on platforms that
aren't C99.

3 years agoEmulate some C99 macros and typedefs
Karl Williamson [Tue, 5 Dec 2017 20:12:48 +0000 (13:12 -0700)]
Emulate some C99 macros and typedefs

On systems that don't have them, this emulates

U?INT(16|32)_C
U?INTMAX_C

and the typedefs

u?intmax_t

Since, these are typedefs that can't be tested for if they exist, this
creates PERL_U?INTMAX_T typedefs instead, setting them to the standard
values in stdint.h if it is available.

In addition, it moves the pre-existing emulation of U?INT64_C from
handy.h to perl.h.  This is because there was duplicate-ish logic in the
two files, and the handy.h version appears to be better thought out.

It converts the couple of places in core that were using the other
deleted logic to instead use the C99 names.

3 years agoinline.h: White space only
Karl Williamson [Fri, 8 Dec 2017 17:38:24 +0000 (10:38 -0700)]
inline.h: White space only

Add indentation to account for block added in the previous commit around
this code.

3 years agois_utf8_invariant_string(): small speed optimization
Karl Williamson [Fri, 8 Dec 2017 17:20:24 +0000 (10:20 -0700)]
is_utf8_invariant_string(): small speed optimization

By pulling a test out of a while loop condition and doing it before the
while starts, we don't increase the number of conditionals; instead we
avoid doing the conditional each time through, and also skip
some conditionals for strings shorter than a word.

3 years agoFix WIDEST_UTYPE in Devel::PPPort.
Craig A. Berry [Fri, 8 Dec 2017 20:48:59 +0000 (14:48 -0600)]
Fix WIDEST_UTYPE in Devel::PPPort.

It was redefining this even when it had already been defined, and
because it was using HAS_QUAD to determine whether 64-bit ints were
available, and HAS_QUAD is undef'd in perl.h when PERL_CORE is not
defined, it was as likely as not redefining it to a 32-bit value
even when 64-bit integers are available.

So only define it if it doesn't exist and when we do define it,
make it depend on QUADKIND rather than HAS_QUAD.

Follow-up to de9e2639368.

3 years agoPATCH: [perl #132548] regcomp.c Fix memory leak
Karl Williamson [Fri, 8 Dec 2017 14:27:13 +0000 (07:27 -0700)]
PATCH: [perl #132548] regcomp.c Fix memory leak

3 years agoRT#132545: memory leak in S_init_main_stash()
Aaron Crane [Fri, 8 Dec 2017 10:17:30 +0000 (10:17 +0000)]
RT#132545: memory leak in S_init_main_stash()

3 years agoadd comment (to test pushing)
Yves Orton [Fri, 8 Dec 2017 10:00:57 +0000 (11:00 +0100)]
add comment (to test pushing)

3 years agoswitch from _qq to _q in t/re/reg_mesg.t
Yves Orton [Fri, 8 Dec 2017 09:56:05 +0000 (10:56 +0100)]
switch from _qq to _q in t/re/reg_mesg.t

we want the string as unescaped as is reasonable, as we want to paste
them into perldiag directly.

3 years agohandy.h: Fix definition of WIDEST_UTYPE for non-core
Karl Williamson [Fri, 8 Dec 2017 01:09:15 +0000 (18:09 -0700)]
handy.h: Fix definition of WIDEST_UTYPE for non-core

Because HAS_QUAD is not defined outside the perl core, this macro was
not getting defined properly for 64-bit systems.  This means, for
example, that someone using this to cast could end up with the wrong
answer.  For example isASCII(2**32) would yield true, because the high
bit would get dropped by the cast, making the value appear to be zero.

This unfortunately creates a warning message in the compile that
WIDEST_UTYPE is redefined, as the definition of that is defective in
PPPort.  It should only define it if it wasn't previously defined, and
it is wrongly using the 32 bit version.  This is added impetus to get
PPPort fixed

3 years agohandy.h: Make U64, I64 available outside core
Karl Williamson [Fri, 8 Dec 2017 00:52:52 +0000 (17:52 -0700)]
handy.h: Make U64, I64 available outside core

The ones corresponding to shorter sizes, like I32, are available
everywhere.  There is no reason to restrict just the 64 variety.

This fixes the bug in the definition for INT64_C and UINT64_C which
caused these to not be defined outside core on some platforms, such as
Windows.

See commit 3edba68397e487b39cca6e7fc0b75ab4a2f6a341 for more
explanation

3 years agoutf8_length() is not a pure function
Karl Williamson [Thu, 7 Dec 2017 04:55:21 +0000 (21:55 -0700)]
utf8_length() is not a pure function

Because it can output warnings.

3 years agoAPItest/t/utf8.t: Clarify a couple of test names
Karl Williamson [Fri, 8 Dec 2017 00:45:23 +0000 (17:45 -0700)]
APItest/t/utf8.t: Clarify a couple of test names

3 years agoAvoid integer overflow with 32-bit ints in hexfp.t.
Craig A. Berry [Fri, 8 Dec 2017 01:08:22 +0000 (19:08 -0600)]
Avoid integer overflow with 32-bit ints in hexfp.t.

3 years agodelete duplicate _qq from test
Zefram [Fri, 8 Dec 2017 00:11:59 +0000 (00:11 +0000)]
delete duplicate _qq from test

Commit af05e4c0b428a803fcdb60c956b1da7ff8a95926 added a _qq() sub
to t/re/reg_mesg.t that duplicates both the intent and the name of
t/test.pl's _qq(), causing a redefinition warning.  Remove the new _qq(),
because t/test.pl's version is better.

3 years agoassert min identifier length in S_pending_ident()
Zefram [Fri, 8 Dec 2017 00:03:16 +0000 (00:03 +0000)]
assert min identifier length in S_pending_ident()

3 years agofix #131649 - extended charclass can trigger assert
Yves Orton [Mon, 26 Jun 2017 11:19:55 +0000 (13:19 +0200)]
fix #131649 - extended charclass can trigger assert

The extended charclass parser makes some assumptions during the
first pass which are only true on well structured input, and it
does not properly catch various errors. later on the code assumes
that things the first pass will let through are valid, when in
fact they should trigger errors.

3 years agoAvoid like in t/re/reg_mesg.t
Yves Orton [Sun, 3 Dec 2017 11:51:50 +0000 (12:51 +0100)]
Avoid like in t/re/reg_mesg.t

Rolling our a own a bit allows us to produce more helpful diagnostics.

3 years agoin capture_warnings() we need to properly localize Level
Yves Orton [Sun, 3 Dec 2017 11:52:27 +0000 (12:52 +0100)]
in capture_warnings() we need to properly localize Level

otherwise we dont get the right line number back from calls to
like or ok() called from within the callback.

3 years agoregcomp.c: handle_regex_sets() - add DEBUG_PARSE and fixup 'depth' logic
Yves Orton [Sun, 25 Jun 2017 20:31:10 +0000 (22:31 +0200)]
regcomp.c: handle_regex_sets() - add DEBUG_PARSE and fixup 'depth' logic

'depth' is used to track the recursion depth during compilation,
and is used by things like DEBUG_PARSE() to show the compilation
process.

handle_regex_sets() was using its own 'depth' for two different purposes,
which is quite confusing.

At the same time, when we call handle_regex_sets() from reg() it is
important to increment 'depth'.

3 years agoprevent integer overflow when compiling a regexp
Tony Cook [Mon, 14 Aug 2017 05:10:22 +0000 (15:10 +1000)]
prevent integer overflow when compiling a regexp

Fixes [perl #131893].

3 years agohandle null op_next in stacked filetests
Zefram [Wed, 6 Dec 2017 18:53:16 +0000 (18:53 +0000)]
handle null op_next in stacked filetests

When a filetest op returns false, it skips past following ops that
are stacked filetests.  The code to do this was assuming that op_next
would always be non-null, which is not always the case, for example in
a sort comparator.  Allow for it to be null.  Fixes [perl #129347].

3 years agofix oct/bin fp fractions in non-HEXFP_UQUAD builds
Zefram [Wed, 6 Dec 2017 17:41:59 +0000 (17:41 +0000)]
fix oct/bin fp fractions in non-HEXFP_UQUAD builds

The code for binaryish floating point literals, on builds where
we're not confident of being able to fit a significand into an
integer type, had built-in knowledge that the radix is 16, after
the radix point.  This gave erroneous values for octal and binary
literals on those builds.  This was shown up by the tests added in
commit 58be57636a42d6c6fd404c48c4e1cb87870182df.  Correct it to use the
actual radix.

3 years agoclarify "bless" doc
Zefram [Wed, 6 Dec 2017 17:15:29 +0000 (17:15 +0000)]
clarify "bless" doc

A couple of points came out of discussion on [perl #124428] that are
worthy of explication.