This is a live mirror of the Perl 5 development currently hosted at
5 years agoAPItest/t/ Eliminate hash element
Karl Williamson [Fri, 26 May 2017 02:09:07 +0000 (20:09 -0600)]
APItest/t/ Eliminate hash element

This is leftover from an earlier version of the tests, and can be
calculated instead of having to manually specify it.

5 years agoAPItest/t/ Standardize overflow test detection
Karl Williamson [Wed, 14 Jun 2017 21:24:29 +0000 (15:24 -0600)]
APItest/t/ Standardize overflow test detection

There are two methods currently for detecting if a test is for overflow.
This standardizes on the one where the expected code point is 0, and
uses the already existing variable instead of qr//

5 years agoAPItest/t/utf8.t: Don't test above IV_MAX
Karl Williamson [Mon, 15 May 2017 15:54:40 +0000 (09:54 -0600)]
APItest/t/utf8.t: Don't test above IV_MAX

For 32-bit platforms, this means moving  the tests to the 64-bit only portion of
the file.  And it comments out the tests that are above 64-bit IV_MAX.

This is in preparation for IV_MAX being the upper legal limit for code

5 years agoAPItest/t/utf8.t: Add a test
Karl Williamson [Wed, 5 Jul 2017 17:31:12 +0000 (11:31 -0600)]
APItest/t/utf8.t: Add a test

This test will be important when we convert to limiting code points to
at most IV_MAX.

5 years agoAPItest/t/utf8.t: Comments, white-space only
Karl Williamson [Sun, 14 May 2017 04:58:00 +0000 (22:58 -0600)]
APItest/t/utf8.t: Comments, white-space only

5 years agoAPItest/t/utf8.t: Better handle some platforms
Karl Williamson [Sun, 14 May 2017 04:53:47 +0000 (22:53 -0600)]
APItest/t/utf8.t: Better handle some platforms

A future commit will cause some expected errors to not actually be
errors on some platforms.  This detects and handles these.

5 years agoAPItest/t/utf8.t: Remove unnecessary hash initializations
Karl Williamson [Sun, 14 May 2017 04:51:43 +0000 (22:51 -0600)]
APItest/t/utf8.t: Remove unnecessary hash initializations

5 years agoAPItest/t/utf8.t: Fix some convoluted code
Karl Williamson [Sun, 14 May 2017 04:50:26 +0000 (22:50 -0600)]
APItest/t/utf8.t: Fix some convoluted code

This code got overly complex as time went by, and can be cleaned up.

5 years agoAPItest/t/utf8.t: Rmv useless line
Karl Williamson [Mon, 8 May 2017 15:47:41 +0000 (09:47 -0600)]
APItest/t/utf8.t: Rmv useless line

This entry is overwritten by the next line.

5 years agoAPItest/t: Change some variable names
Karl Williamson [Tue, 27 Jun 2017 04:27:23 +0000 (22:27 -0600)]
APItest/t: Change some variable names

One of these is used in multiple test files in this directory.

The names are ambiguous for the contexts they occur in.  'first' can
mean earliest in the string, but here it means the lowest ordinal value.

5 years agoAPItest/t/ Make sure diagnostics are on separate lines
Karl Williamson [Thu, 15 Jun 2017 18:01:15 +0000 (12:01 -0600)]
APItest/t/ Make sure diagnostics are on separate lines

This changes diagnostic output to guarantee each element of the array
starts on a new line, for easier readability.  The array may or may not
already have terminating \n characters in the elements.

5 years agoAPItest/t/ Split function into two
Karl Williamson [Tue, 30 May 2017 02:58:32 +0000 (20:58 -0600)]
APItest/t/ Split function into two

This function outputs a byte string as hex bytes.  A future commit will
want that output without surrounding quotes, so create a version that
doesn't have them.

5 years agoutf8n_to_uvchr(): Avoid some work
Karl Williamson [Tue, 27 Jun 2017 04:08:01 +0000 (22:08 -0600)]
utf8n_to_uvchr(): Avoid some work

By adding a single mask, we can avoid some unnecessary work, as that
work is not necessary if just the one bit is set.

5 years agoutf8.c: Comments, white-space only
Karl Williamson [Fri, 30 Jun 2017 18:37:15 +0000 (12:37 -0600)]
utf8.c: Comments, white-space only

5 years agoutf8.c: Consolidate duplicated string constants
Karl Williamson [Fri, 30 Jun 2017 18:35:53 +0000 (12:35 -0600)]
utf8.c: Consolidate duplicated string constants

This reduces maintenance costs if they have to be updated.

5 years agoutf8.c: Don't calc code point from overflowing UTF8
Karl Williamson [Wed, 10 May 2017 02:16:13 +0000 (20:16 -0600)]
utf8.c: Don't calc code point from overflowing UTF8

This avoids calculating a code point from UTF-8 that is known to
overflow.  This could give incorrect results (used only in warning
messages), but is done only when there are 3 (or more) malformations:
overflow, overlong, UTF-8 terminated early, so it's unlikely to actually
happen in the field.

I am not adding any tests, as I don't know of any existing failures, and
soon there will be a commit that limits code points to be at most
IV_MAX.  That commit will cause cause existing tests to fail without
this fix, so that is good enough to test it.  I imagine a brute force
generator of UTF-8 would find some string that showed this problem up,
absent the other coming changes, but it's not worth it.

5 years agot/uni/parser.t: Skip some tests on 32-bit platforms
Karl Williamson [Tue, 4 Jul 2017 00:59:50 +0000 (18:59 -0600)]
t/uni/parser.t: Skip some tests on 32-bit platforms

These tests require code points that are too large for 32-bit platforms,
so skip there.

5 years agoMove test from t/opbasic to t/uni
Karl Williamson [Wed, 10 May 2017 02:27:40 +0000 (20:27 -0600)]
Move test from t/opbasic to t/uni

This test is really not very basic, so it doesn't belong in opbasic.  It
is for having a string delimiter be a very large code point, well above
the legal strict Unicode max.  The code point is 2**32 - 1, which is
UV_MAX on 32-bit platforms.

Use of UV_MAX for a delimiter is about to become illegal, and so this
test needs to be skipped on these.  Since this is compile time, there
are a few complications in getting the script to compile on such
systems, even though it is skipped at run time.

The opbasic test file is so basic that it doesn't even use t/,
whereas the one in t/uni does use that, and that has better
infrastructure for handling this issue, including getting it to work on
EBCDIC platforms.

5 years agot/comp/parser.t: Skip test on 32-bit builds
Karl Williamson [Mon, 3 Jul 2017 17:30:52 +0000 (11:30 -0600)]
t/comp/parser.t: Skip test on 32-bit builds

This code point is no longer legal on such builds.  We need to use this
code point to trigger the bug, so can't lower it to work on those

5 years agot/op/index.t: Skip now illegal code points on 32 bit builds
Karl Williamson [Mon, 3 Jul 2017 19:52:31 +0000 (13:52 -0600)]
t/op/index.t: Skip now illegal code points on 32 bit builds

These tests use code points that are now illegal on 32-bit platforms, so
skip them there.  The failures these tests were added for did not happen
except on these now-illegal code points.

5 years agot/op/chop.t: Don't use too large code points
Karl Williamson [Mon, 3 Jul 2017 15:33:09 +0000 (09:33 -0600)]
t/op/chop.t: Don't use too large code points

The bug this was testing for requires a code point that will no longer
be legal on 32-bit machines.  So skip unless we're on a 64-bit platform,
and revise to use chr() in the skipped code instead of "\x{}".  The
latter would try to be compiled even if execution gets skipped, so would
cause it to die, whereas chr() is runtime, so get skipped if
inappropriate.  This also tested the very highest legal code point on
64-bit machines, which is now illegal, so test the new very highest one.

5 years agot/re/pat_advanced.t: Revise some tests
Karl Williamson [Sun, 2 Jul 2017 16:34:12 +0000 (10:34 -0600)]
t/re/pat_advanced.t: Revise some tests

These tests used the highest available code points, but those will soon
be made illegal.  The tests don't need to be for these particular code
points, but there do need to be tests of user-defined properties of high
code points, so this commit changes to use the highest ones that will be
legal after that change.

5 years agoRestore a portion of reverted commits
Karl Williamson [Mon, 3 Jul 2017 19:46:42 +0000 (13:46 -0600)]
Restore a portion of reverted commits

See the previous commit for details.

5 years agoRevert: Restrict code points to <= IV_MAX
Karl Williamson [Mon, 3 Jul 2017 18:26:34 +0000 (12:26 -0600)]
Revert: Restrict code points to <= IV_MAX

This reverts the two related commits
51099b64db323d0e1d871837f619d72bea8ca2f9  (partially)
13f4dd346e6f3b61534a20f246de3a80b3feb743  (entirely)

I was in the middle of a long branch dealing with this and related
issues when these were pushed to blead.  It was far easier for me to
revert these at the beginning of my branch than to try to rebase
unreverted.  And there are changes needed to the approaches taken in the
reverted commits.  A third related commit,
113b8661ce6d987db4dd217e2f90cbb983ce5d00, doesn't cause problems so
isn't reverted.

I reverted the second commit, then the first one, and squashed them
together into this one.  No other changes were done in this commit.
The reason for the squashing is to avoid problems when bisecting on a
32-bit machine.  If the bisect landed between the commits, it could show
failures.  The portion of the first commit that wasn't reverted was the
part that was rendered moot because of the changes in the meantime that
forbid bitwise operations on strings containing code points above

The next commit in this series will reinstate portions of these commits.
I reverted as much as possible here to make this reversion commit

The biggest problem with these commits, is that some Perl applications
are made vulnerable to Denial of Service attacks.  I do believe it is ok
to croak when a program tries, for example, to do chr() of too large a
number, which is what the reverted commit does (and what this branch
will eventually reinstate doing).  But when parsing UTF-8, you can't
just die if you find something too large.  That would be an easy DOS on
any program, such as a web server, that gets its UTF-8 from the public.
Perl already has a means to deal with too-large code points (before
5.26, this was those code points that overflow the word size), and web
servers should have already been written in such a way as to deal with
these.  This branch just adapts the code so that anything above IV_MAX
is considered to be overflowing.  Web servers should not have to change
as a result.

A second issue is that one of the reasons we did the original
deprecation is so that we can use the forbidden code points internally
ourselves, such as Perl 6 does to store Grapheme Normal Form.  The
implementation should not burn bridges, but allow that use to easily
happen when the time comes.  For that reason, some tests should not be
deleted, but commented out, so they can be quickly adapted.

While working on this branch, I found several unlikely-to-occur bugs in
the existing code.  These should be fixed now in the code that handles
up to UV_MAX code points, so that when we do allow internal use of such,
the bugs are already gone.

I also had researched the tests that fail as a result of the IV_MAX
restriction.  Some of the test changes in these reverted commits were

For example, some tests that got changed were for bugs that happen only
on code points that are now illegal on 32-bit builds.  Lowering the code
point in the test to a legal value, as was done in some instances,  no
longer tests for the original bug.  Instead, where I found this, I just
skip the test on 32-bit platforms.

Other tests were simply deleted, where a lower code point would have
worked, and the test is useful with a lower code point.  I retain such
tests, using a lower code point.  In some cases, it was probably ok to
delete the tests on 32-bit platforms, as something was retained for a
64-bit one, but since I had already done the adaptive work, I retain

And still other tests were from files that I extensively revamp, so I
went with the revamp.

The following few commits fix those as far as possible now.  This is so
that the reversion of the tests and my changes are close together in the
final commit series.  Some changes have to wait to later, as for those
where the entire test files are revamped, or when the deprecation
messages finally go away in the final commit of this series.

In cases where the message wording I was contemplating using conflicts
with the reverted commits, I change mine to use that of the reverted

5 years agot/re/pat_advanced.t: Fix test to work on EBCDIC
Karl Williamson [Tue, 11 Jul 2017 02:11:09 +0000 (20:11 -0600)]
t/re/pat_advanced.t: Fix test to work on EBCDIC

5 years agot/op/sprintf2.t: Generalize test to work on EBCDIC
Karl Williamson [Tue, 11 Jul 2017 02:09:25 +0000 (20:09 -0600)]
t/op/sprintf2.t: Generalize test to work on EBCDIC

5 years agoperldelta for 6091bd4ca4a4
Tony Cook [Mon, 10 Jul 2017 06:51:18 +0000 (16:51 +1000)]
perldelta for 6091bd4ca4a4

5 years ago(perl #131597) ensure the GV slot is filled for our [%$@]foo: attr
Tony Cook [Mon, 19 Jun 2017 04:59:53 +0000 (14:59 +1000)]
(perl #131597) ensure the GV slot is filled for our [%$@]foo: attr

5 years agoTest that ref works in tainted statements
Father Chrysostomos [Mon, 10 Jul 2017 05:53:52 +0000 (22:53 -0700)]
Test that ref works in tainted statements

This commit broke Module::Runtime in debugging builds:

commit ba75e9a42bd919d317a4f5deb1e487c13586929d
Author: David Mitchell <>
Date:   Fri Jan 6 14:59:54 2017 +0000

    make OP_REF support boolean context

This commit restored the previous, behaviour:

commit a10e04b588b6b10ac6d059efacd8dec25d14bdb3
Author: David Mitchell <>
Date:   Thu Jun 15 14:29:56 2017 +0100

    pp_ref: do SvSETMAGIC(TARG)

But no test was added to make sure it stays fixed.  Here is a test.

5 years agoperldelta for 67c3640a57440a
Tony Cook [Mon, 10 Jul 2017 05:41:52 +0000 (15:41 +1000)]
perldelta for 67c3640a57440a

5 years ago(perl #131570) don't skip the temps stack entry we just allocated
Tony Cook [Wed, 21 Jun 2017 05:00:56 +0000 (15:00 +1000)]
(perl #131570) don't skip the temps stack entry we just allocated

5 years agoAdd test descriptions for some tests in t/base/translate.t.
Vitali Peil [Mon, 26 Jun 2017 23:03:01 +0000 (19:03 -0400)]
Add test descriptions for some tests in t/base/translate.t.

This partially resolves RT # 131655.

Vitali Peil is now a Perl author.

5 years agoRevert "use symbolic constants for substrs[] indices"
David Mitchell [Wed, 5 Jul 2017 13:02:24 +0000 (14:02 +0100)]
Revert "use symbolic constants for substrs[] indices"

This reverts commit 2ac902efe11ee156653eb2ca1369f0e5f4546c31.

See thread at Message-ID: <>

5 years agoregcomp.c: use symbolic constants for substrs[] indices
Dagfinn Ilmari Mannsåker [Wed, 5 Jul 2017 10:51:29 +0000 (11:51 +0100)]
regcomp.c: use symbolic constants for substrs[] indices

5 years agoperldebug: cross reference to perldebguts
Ricardo Signes [Tue, 4 Jul 2017 18:50:31 +0000 (14:50 -0400)]
perldebug: cross reference to perldebguts

5 years agobump $PerlIO::scalar::VERSION
Tony Cook [Wed, 21 Jun 2017 07:07:17 +0000 (17:07 +1000)]
bump $PerlIO::scalar::VERSION

5 years ago(perl #131546) return a reasonable error code opening a read-only scalar
Tony Cook [Wed, 21 Jun 2017 07:07:02 +0000 (17:07 +1000)]
(perl #131546) return a reasonable error code opening a read-only scalar

5 years ago(perl #131546) some notes on in-memory files for open()
Tony Cook [Mon, 12 Jun 2017 01:03:35 +0000 (11:03 +1000)]
(perl #131546) some notes on in-memory files for open()

5 years agoRemove #ifdef USE_ITHREADS around MUTEX_* calls
Dagfinn Ilmari Mannsåker [Tue, 27 Jun 2017 22:23:45 +0000 (23:23 +0100)]
Remove #ifdef USE_ITHREADS around MUTEX_* calls

These macros are defined as NOOP outside USE_ITHREADS, so there's no
point in guarding them with it.

5 years agoProperly NOOP macros in thread.h
Dagfinn Ilmari Mannsåker [Wed, 28 Jun 2017 13:40:16 +0000 (14:40 +0100)]
Properly NOOP macros in thread.h

5 years agoproperly init si_stack_hwm
David Mitchell [Mon, 3 Jul 2017 13:20:42 +0000 (14:20 +0100)]
properly init si_stack_hwm

It was being initialised when a new stack was pushed, but not for the main
This didn't matter most of the time as runops() would set it anyway,

    perl -e 'INIT {}'

was doing a call_sv() before/outside of any runops loop, so showed up in
valgrind as uninitialised usage.

5 years agosave si_stack_hwm across JMPENV_PUSH
David Mitchell [Mon, 3 Jul 2017 12:43:27 +0000 (13:43 +0100)]
save si_stack_hwm across JMPENV_PUSH

When continuing after an exception (JMPENV_PUSH() returns 3),
restore the value of PL_curstackinfo->si_stack_hwm.

This is a recently added variable on debugging builds that detects
attempts to push stuff on the stack without extending it.
After an exception  its value may be invalid and trigger a false panic.

5 years ago[MERGE] scan_data_t: make fixed/float data array
David Mitchell [Sun, 2 Jul 2017 20:25:35 +0000 (21:25 +0100)]
[MERGE] scan_data_t: make fixed/float data array

While compiling a pattern, rather than storing information about the
current longest fixed and floating substring as individual fields of this
struct - such as minlen_fixed, minlen_float etc - create a 2-element array
to hold fixed and float data. So for example





This mimics the way that substring data is stored in the regex struct
once the pattern has been compiled.

Similarly, move some fixed/float-specific flags from data->flags
into a new per-substr subfield, data->subfield[i].flags.

Also, the fixed substring now has both max and min offset fields, which
are set equal to each other.

This set of commits should make no functional difference apart from
minor changes to debugging output (e.g. fixed offsets displayed as N..N
rather than N).

The various commits in this branch are mainly concerned with harmonising
fixed and float code paths, and finally parameterising them, e.g.

    data->lookbehind_fixed = ...;
    data->lookbehind_float = ...;


    data->substr[0].lookbehind = ...;
    data->substr[1].lookbehind = ...;

and finally becomes

    for (i = 0; i < 2; i++) {
        data->substr[i].lookbehind = ...;

The two big advantages of this approach are;

1) it simplifies and rationalises the code, avoiding two similar blocks of
code in several places;
2) it may allow for future expansion where there isn't necessarily at most
1 fixed and 1 floating substring.

Note that this only affects the regex compile-time code. The run-time
code in re_intuit_start is still a mess and could benefit from a similar
rationalisation (it already has the arrray[2], but doesn't do much

5 years agoregcomp.c: parameterise scan_data_t substrs[]
David Mitchell [Sun, 2 Jul 2017 18:24:07 +0000 (19:24 +0100)]
regcomp.c: parameterise scan_data_t substrs[]

Now that the scan_data_t stores its fixed and floating substring data
as a 2-element array, replace various bits of duplicated code which
separately handled fixed and floating substrings with for (i = 0; i < 2;
i++) loops etc.

This makes the code shorter and simpler, and will make it easier in future
to expand to more than a single each of fixed+float.

There should be no functional changes, except that debugging output
now displays N..N rather than just just N for the fixed substring
start range (i.e. its now just a subset of float where max == min)

5 years agoscan_data_t: rename 'longest' field
David Mitchell [Fri, 30 Jun 2017 11:43:00 +0000 (12:43 +0100)]
scan_data_t: rename 'longest' field

.. to 'cur_is_floating'

It's an index into either the fixed or float substring info; the
information it provides is whether the currently being captured substring
is fixed or floating; it's nothing to do with whether the fixed or the
floating is currently the longest.

5 years agoregcomp.c: remove float_min_offset etc macro use
David Mitchell [Fri, 30 Jun 2017 09:33:37 +0000 (10:33 +0100)]
regcomp.c: remove float_min_offset etc macro use

In this src file, expand all the various macros like

    #define  anchored_offset   substrs->data[0].min_offset
    #define  float_min_offset  substrs->data[1].min_offset

This will later allow parts of the code to be parameterised, e.g.

    for (i=0; i<1; i++) {
        substrs->data[i].min_offset = ...;

5 years agoregcomp.c: S_setup_longest(): simplify args
David Mitchell [Fri, 30 Jun 2017 09:20:11 +0000 (10:20 +0100)]
regcomp.c: S_setup_longest(): simplify args

Rather than passing e.g.


pass the single arg


(float_foo are macros which expand to substrs->data[1].foo)

5 years agoregcomp: set fixed max_offset to min_offset
David Mitchell [Fri, 30 Jun 2017 08:55:32 +0000 (09:55 +0100)]
regcomp: set fixed max_offset to min_offset

previously scan_data_t had the three fields


a few commits ago that was converted into a 2 element array (for fixed
and float), each with the fields


where the max_offset was unused in fixed (substrs[0]) case.

Instead, set it equal to min_offset

This makes the fixed and float code paths more similar.

At the same time expand a few of the 'float_max_offset' type macros
to make it clearer what's going on.

5 years agoS_study_chunk: have per substring flags
David Mitchell [Thu, 29 Jun 2017 20:40:41 +0000 (21:40 +0100)]
S_study_chunk: have per substring flags

Currently the scan_data_t struct has a flags field which contains
SF_ and SCF_ flags. Some of the SF_ flags are general; others are specific
to the fixed or floating substr. For example there are these 3 flags:


This commit adds a flags field to the per-substring substruct and sets
some flags per-substring instead. For example

previously we did:                now we would do:
--------------------------------  --------------------------------------
data->flags |= SF_BEFORE_MEOL     unchanged
data->flags |= SF_FIX_BEFORE_MEOL data->substrs[0].flags |= SF_BEFORE_MEOL
data->flags |= SF_FL_BEFORE_MEOL  data->substrs[1].flags |= SF_BEFORE_MEOL

This allows us to simplify the code (e.g. eliminating some args from
S_setup_longest()) and in future will allow more than one fixed or
floating substring.

5 years agoregcomp.c: DEBUG_PEEP(): invalid flags
David Mitchell [Thu, 29 Jun 2017 21:16:19 +0000 (22:16 +0100)]
regcomp.c: DEBUG_PEEP(): invalid flags

DEBUG_PEEP(..., flags) was  invoked from 3 functions - however in two of
throse functions, the 'flags' local var did *not*  contain SF_ and SCF_
bits, so the flag bits were being incorrectly displayed as SF_ etc.

In those two functions, change it instead to DEBUG_PEEP(...., 0)

5 years agoregcomp.c: convert debugging macros to static fns
David Mitchell [Thu, 29 Jun 2017 19:15:56 +0000 (20:15 +0100)]
regcomp.c: convert debugging macros to static fns

make these 3 macros into thin wrappers around some new static
functions, rather than just being huge macros:


Also, avoid the macros implicitly using local vars: make them into
explicit parameters instead (this is one of my pet peeves).

5 years agomake struct scan_data_t->longest an index val
David Mitchell [Thu, 29 Jun 2017 15:45:39 +0000 (16:45 +0100)]
make struct scan_data_t->longest an index val

In this private data structure used during regex compilation, the
'longest' field was an SV** pointer which was always set to point to
one of these two addresses:


Instead, just make it a U8 with the value 0 or 1.

5 years agoS_setup_longest() pass struct rather than fields
David Mitchell [Thu, 29 Jun 2017 15:24:12 +0000 (16:24 +0100)]
S_setup_longest() pass struct rather than fields

Now that a substring is a separate struct, pass as a single pointer
rather than as 4 separate args.

5 years agostruct scan_data_t: make some fields into an array
David Mitchell [Thu, 29 Jun 2017 14:05:03 +0000 (15:05 +0100)]
struct scan_data_t: make some fields into an array

This private struct is used just within regcomp.c while compiling a
pattern. It has a set of fields for a fixed substring, and similar set for
floating, e.g.

    SV *longest_fixed;
    SV *longest_float;

    SSize_t *minlen_fixed;
    SSize_t *minlen_float;


Instead have a 2 element array, one for fixed, one for float, so e.g.




There are 3 reasons for doing this.

First, it makes the code more regular, and allows a whole substr ptr to be
passed as an arg to a function rather than having to pass every individual

second, it makes the compile-time struct more similar to the runtime
struct, which already has such an arrangement;

third, it allows for a hypothetical future expansion where there aren't
necessarily at most 1 fixed and 1 floating substring.

Note that a side effect of this commit has been to change
lookbehind_fixed from I32 to SSize_t; lookbehind_float was already
SSize_t, so the I32 was probably a bug.

5 years ago[perl #131679] Fix ‘our sub foo::bar’ message
Father Chrysostomos [Sun, 2 Jul 2017 18:35:20 +0000 (11:35 -0700)]
[perl #131679] Fix ‘our sub foo::bar’ message

It should say subroutine, not variable.

5 years agoop.c: Remove unused THX param
Father Chrysostomos [Sun, 2 Jul 2017 18:27:32 +0000 (11:27 -0700)]
op.c: Remove unused THX param

5 years ago[perl #131645] Fix assert fail in pp_sselect
Father Chrysostomos [Sun, 25 Jun 2017 13:37:19 +0000 (06:37 -0700)]
[perl #131645] Fix assert fail in pp_sselect

pp_sselect (4-arg select) process its first three bitfield arguments
first, making sure each one has a valid PV, and then it moves on to
the final, timeout argument.

SvGETMAGIC() on the timeout argument will wipe out any values the SV
holds, so if the same scalar is used as a bitfield argument *and* as
the timeout, it will no longer hold a valid PV.

Assertions later in pp_sselect make sure there is a valid PV.

This commit solves the assertion failure by making a temporary copy of
any gmagical or overloaded argument.  When the temporary copy is made,
the values written to the temporary copies of the bitfield arguments
are then copied back to the original magical arguments.

5 years agopad.c: comment typo
Father Chrysostomos [Mon, 26 Jun 2017 00:26:33 +0000 (17:26 -0700)]
pad.c: comment typo

5 years agopad.c: POD typo
Father Chrysostomos [Mon, 26 Jun 2017 00:21:29 +0000 (17:21 -0700)]
pad.c: POD typo

5 years agoCouple of test file comments
Father Chrysostomos [Sun, 25 Jun 2017 13:12:21 +0000 (06:12 -0700)]
Couple of test file comments

5 years agot/porting/bench.t: add debugging output for a test
David Mitchell [Sun, 2 Jul 2017 17:49:14 +0000 (18:49 +0100)]
t/porting/bench.t: add debugging output for a test

one test is intermittently failing. Add debugging output for when it

5 years agomktables: Don't output anything above IV_MAX
Karl Williamson [Wed, 10 May 2017 14:45:03 +0000 (08:45 -0600)]
mktables: Don't output anything above IV_MAX

This is in preparation for later commits to restrict Unicode code points
to IV_MAX.  No tables are currently output that go this high, so this
change has no current effect.

5 years agoutf8n_to_uvchr(): Don't display too many bytes in msg
Karl Williamson [Sat, 17 Jun 2017 23:56:10 +0000 (17:56 -0600)]
utf8n_to_uvchr(): Don't display too many bytes in msg

When raising a message about malformed UTF-8, we shouldn't display bytes
from the next character, unless those bytes were expected to have been
part of the current one.  Tests for this will be added in future commits
in ext/XS-APItest/t/

5 years ago_byte-dump_string() callable from regcomp, regexec
Karl Williamson [Fri, 16 Jun 2017 20:56:04 +0000 (14:56 -0600)]
_byte-dump_string() callable from regcomp, regexec

This changes the function so it's visible from re_comp, re_exec

5 years agoutf8.c: Move some #defines here, the only file that uses them
Karl Williamson [Fri, 12 May 2017 03:31:58 +0000 (21:31 -0600)]
utf8.c: Move some #defines here, the only file that uses them

These are very specialized #defines to determine if UTF-8 overflows the
word size of the platform.  I think its unwise to make them kinda
generally available.

5 years agoperlapi: Add note about utf8n_to_uvchr_error() return
Karl Williamson [Fri, 30 Jun 2017 16:12:32 +0000 (10:12 -0600)]
perlapi: Add note about utf8n_to_uvchr_error() return

5 years agoAdd epigraphs for 5.22.4-RC1 and 5.24.2-RC1
Steve Hay [Sat, 1 Jul 2017 22:05:27 +0000 (23:05 +0100)]
Add epigraphs for 5.22.4-RC1 and 5.24.2-RC1

5 years ago5.22.4-RC1 and 5.24.2-RC1 today
Steve Hay [Sat, 1 Jul 2017 20:15:43 +0000 (21:15 +0100)]
5.22.4-RC1 and 5.24.2-RC1 today

5 years agohv.c: fixup args assert for HV_FREE_ENTRIES
Yves Orton [Sat, 1 Jul 2017 14:40:24 +0000 (16:40 +0200)]
hv.c: fixup args assert for HV_FREE_ENTRIES

5 years agohv.c: rename static function S_hfreeentries() to S_hv_free_entries()
Yves Orton [Sat, 1 Jul 2017 14:32:28 +0000 (16:32 +0200)]
hv.c: rename static function S_hfreeentries() to S_hv_free_entries()

hfreeentries() reads very poorly - hv_free_entries() makes more sense too.

5 years agofixup typo in comment
Yves Orton [Sat, 1 Jul 2017 14:30:37 +0000 (16:30 +0200)]
fixup typo in comment

5 years ago5.27.0 contained 5.20170531; 5.27.1 contained 5.20170621
Steve Hay [Thu, 29 Jun 2017 17:07:55 +0000 (18:07 +0100)]
5.27.0 contained 5.20170531; 5.27.1 contained 5.20170621

The 5.27.0 data was correct until commit a6b08d8b5d, which wrongly updated
it to 5.20170620 instead of adding 5.27.1 stubs saying that.
That mistake was perhaps the reason that 5.27.1 ended up containing
5.20170621 rather than the expected 5.20170620?

5 years agoImpending 5.27.2 release will be 20 July, not 22 June
Steve Hay [Thu, 29 Jun 2017 16:49:45 +0000 (17:49 +0100)]
Impending 5.27.2 release will be 20 July, not 22 June

5 years agoTick off 5.27.1 release
Steve Hay [Thu, 29 Jun 2017 16:44:00 +0000 (17:44 +0100)]
Tick off 5.27.1 release

5 years agoadd an additional test for whitespace tolerance in caret word-vars
Yves Orton [Thu, 29 Jun 2017 11:20:49 +0000 (13:20 +0200)]
add an additional test for whitespace tolerance in caret word-vars

5 years agoParse caret vars with subscripts the same as normal vars inside of ${..} escaping
Yves Orton [Thu, 29 Jun 2017 09:31:14 +0000 (11:31 +0200)]
Parse caret vars with subscripts the same as normal vars inside of ${..} escaping

This behavior is discussed in perl #131664, which complains that
"${^CAPTURE}[0]" does not work as expected. Abigail explains the
behavior is by design and Eirik Berg Hanssen expands on that explanation
pointing out that what /should/ work, "${^CAPTURE[0]}" does not,
which Sawyer then ruled was a bug.

So this patch makes "${^CAPTURE[0]}" (and "${^CAPTURE [0]}" [hi
abigial]) work the same as they would if the var was called @foo.

5 years agot/op/hash.t: fixup intermittently failing test
Yves Orton [Tue, 27 Jun 2017 14:36:57 +0000 (16:36 +0200)]
t/op/hash.t: fixup intermittently failing test

5 years agoUpdate release schedule
Steve Hay [Tue, 27 Jun 2017 12:43:57 +0000 (13:43 +0100)]
Update release schedule

I'm hoping to get 5.22.4/5.24.2 released in the next few weeks,
with 5.26.1 following around a month after that.

5 years agoPERL_SNPRINTF_CHECK(): off by 1 error
David Mitchell [Tue, 27 Jun 2017 08:59:41 +0000 (09:59 +0100)]
PERL_SNPRINTF_CHECK(): off by 1 error

PERL_SNPRINTF_CHECK() is used as part of a wrapper for snprintf()
to check that snprintf didn't return more bytes than the buffer size
given it to it (which should never happen anyway). But it was checking
return_value >= buf_size rather than >. So a spurious panic could ensue
if the formatted string exactly matched the buffer size.

This hadn't been detected before because the old Perl_sv_vcatpvfn_flags()
implementation added lots of fudge factors to the buffer size.

At the same time, change the code in Perl_sv_vcatpvfn_flags() which grows
PL_efloatbuf if its not big enough for float_need:

1) Make it require the buf size to be at least float_need + 1 rather than
just float_need, to accommodate the \0 appended by snprintf() (we don't
strictly need the \0, and a conforming snprintf() implementation should
just return the string without trailing \0 if there isn't room for it,
but its possible an snprintf() out there might stumble).

2) When growing PL_efloatbuf, grow by an extra margin of 0x20, to
reduce the likelihood of multiple reallocs.

5 years agoFile::Glob - tweak rt131211.t to be less sensitive on wonky boxes
Yves Orton [Tue, 27 Jun 2017 08:22:23 +0000 (10:22 +0200)]
File::Glob - tweak rt131211.t to be less sensitive on wonky boxes

make the test less senstive and avoid divide by zero errors,
also we skip the test if either elapsed_match or elapsed_fail is
true, as we can not rely on the timings then. For the operations
we are doing we should get a non-zero timing from Time::HiRes.

This should mean that running this test on boxes with heavy
load, etc, will no longer result in false positives.

5 years agoregcomp.c: correct the regdata which paratermers under DEBUG
Yves Orton [Tue, 27 Jun 2017 08:28:05 +0000 (10:28 +0200)]
regcomp.c: correct the regdata which paratermers under DEBUG

this worked because 'a' and 'o' are treated the same for all intents
and purposes, but it is confusing as 'a' stands for array, and 'o'
for hash, and the DEBUG mode code here adds two arrays not hashes.

5 years agoregcomp.c: document reg_data types better in reg_dup
Yves Orton [Tue, 27 Jun 2017 08:27:37 +0000 (10:27 +0200)]
regcomp.c: document reg_data types better in reg_dup

5 years agoUpdate Math-BigRat to CPAN version 0.2613
Eric Herman [Mon, 26 Jun 2017 14:48:58 +0000 (16:48 +0200)]
Update Math-BigRat to CPAN version 0.2613

Includes test addressing Bug #131410:
 "Math::BigRat in perl-5.26.0-RC2 severely broken"
See Also:

5 years agoS_gen_constant_list(): initialise si_stack_hwm
David Mitchell [Mon, 26 Jun 2017 13:34:20 +0000 (14:34 +0100)]
S_gen_constant_list(): initialise si_stack_hwm

This is purely to shut up valgrind.

S_gen_constant_list() directly calls Perl_pp_anonlist() while not
in a runops loop. So PL_curstackinfo->si_stack_hwm doesn't get
initialised. Which is harmless, as only a runops loop is concerned with
its value. But valgrind gets upset:

    Conditional jump or move depends on uninitialised value(s)
       at 0x651D90: Perl_pp_anonlist (pp.c:5257)

Can be reproduced with '@a = (1,0..0);' (or any list that can be constant

5 years agot/porting/customized.t: delete stale entries.
David Mitchell [Sat, 24 Jun 2017 09:56:26 +0000 (10:56 +0100)]
t/porting/customized.t: delete stale entries.

I just ran

    t/porting/customized.t --regen

It seems that /customized.t doesn't complain about stale entries.

5 years agoPATCH: [perl #131646] Assertion fail UTF-8 error msg
Karl Williamson [Sat, 24 Jun 2017 17:47:19 +0000 (11:47 -0600)]
PATCH: [perl #131646] Assertion fail UTF-8 error msg

Instead of croaking with a proper message, creating the message creates
an assertion failure.

The cause was that there were two ++ operators on a string, so one
should subtract 2 to get to the string start, but only 1 was being

This is a 5.26 regression, but not terribly consequential, as the
program is about to die, but it is a trivial fix that allows the reason
the crash is happening to be properly displayed to aid debugging, so I'm
adding my vote for it for 5.26.1.

5 years agoUpdate Time-HiRes to CPAN version 1.9742
Chris 'BinGOs' Williams [Sat, 24 Jun 2017 13:48:59 +0000 (14:48 +0100)]
Update Time-HiRes to CPAN version 1.9742


1.9742 [2017-04-16]
  - prefer 3-argument open: blead 1ae6ead9
  - fix dist/Time-HiRes/t/*.t that assumed '.' in @INC: blead 465db51d
  - fix cases where 'do file' should be 'do ./file'.: blead 8b69401c

5 years agoparanoia: parenthesize macro parameters
Lukas Mai [Sat, 24 Jun 2017 12:57:36 +0000 (14:57 +0200)]
paranoia: parenthesize macro parameters

5 years agofix #ifdef directives with extra tokens
Lukas Mai [Sat, 24 Jun 2017 12:56:50 +0000 (14:56 +0200)]
fix #ifdef directives with extra tokens

5 years agoadd PL_curstackinfo->si_stack_hwm
David Mitchell [Tue, 13 Jun 2017 08:11:13 +0000 (09:11 +0100)]
add PL_curstackinfo->si_stack_hwm

On debugging builds only, add a mechanism for checking pp function calls
for insufficient stack extending. It works by:

* make the runops loop set a high-water-mark (HWM) variable equal to
  PL_stack_sp just before calling each pp function;

* make EXTEND() etc update this HWM;

* on return from the pp function, panic if PL_stack_sp is > HWM.

This detects whether pp functions are pushing more items onto the stack
than they are requesting space for.

There's a possibility of false positives if the code is doing weird stuff
like direct manipulation of stacks via PL_curstack, SWITCHSTACK() etc.

It's also possible that one pp function "knows" that a previous pp
function will have already grown the stack enough. Currently the only
place in core that seems to do this is pp_enteriter, which allocates 1
stack slot so that pp_iter doesn't have to check each time it returns
&PL_sv_yes/no. To accommodate this, the new macro EXTEND_SKIP() has been
added, that tells perl that it's safely skipping an EXTEND() here.

5 years agoupgrade Time-Piece from 1.31 to 1.3201
David Mitchell [Sat, 24 Jun 2017 08:27:50 +0000 (09:27 +0100)]
upgrade Time-Piece from 1.31 to 1.3201

1.3201  2017-06-22
        - Fix compile errors on MS
        - Use macro for buf sizes
        - Remove some compile warnings
        - SP of by 1 in _crt_localtime

1.32    2017-06-20
        - Since 1.31:
        - New truncate() method
        - Add new flags: %F, %T, %P + more
        - Add rudimentary locale support via use_locale()
        - More tests
        - Less bugs (hopefully)

1.31_04 2017-06-16
        - Tests for %F and %T
        - Fix wrong test count on Windows
        - Use sensible defaults for strptime

1.31_03 2017-06-14
        - Don't use localization on default
        - Bugs with %s in strptime fixed

1.31_02 2017-01-16
        - Add better localization between strftime and strptime

1.31_01 2017-01-13
        - Respect singular for 1 sec, min, etc. in pretty (choroba)
        - Add truncate() (openstrike)
        - Add many more tests (openstrike)
        - Add more compatibility to strf/strptime

5 years agoupgrade Scalar-List-Utils from 1.47 to 1.48
David Mitchell [Sat, 24 Jun 2017 08:16:02 +0000 (09:16 +0100)]
upgrade Scalar-List-Utils from 1.47 to 1.48

 * Note in documentation that outer function's @_ can be accessed in
   some blocks, but ought not be (thanks wchristian)

 * Ensure pairmap extends its stack correctly (thanks davem)
 * Fix name of List::Util::unpairs in its error messages

5 years agoadd DEBUGGING_RE_ONLY define
David Mitchell [Fri, 23 Jun 2017 11:25:30 +0000 (12:25 +0100)]

re.xs and re_top.h both turn DEBUGGING on. make them set
DEBUGGING_RE_ONLY too so that its easy to tell this is a fake DEBUGGING.

5 years agoporting/bench.t: skip under ASAN
David Mitchell [Fri, 23 Jun 2017 07:37:08 +0000 (08:37 +0100)]
porting/bench.t: skip under ASAN

Address Sanitizer and cachegrind don't play nicely together

Also change a couple of 'is length($out), 0' to 'is $out, ""'
so that $out is displayed to stderr if not empty.

5 years ago[perl #131627] Fix multideref for $x{qw/a/->$*}
Dagfinn Ilmari Mannsåker [Thu, 22 Jun 2017 19:41:58 +0000 (20:41 +0100)]
[perl #131627] Fix multideref for $x{qw/a/->$*}

qw// sets OPf_PARENS on the OP_CONST it generates, which persists when
->$* turns it into an OP_GV.

This used to cause an assertion failure on debugging builds, and didn't
get the multideref optimisation on non-debugging.

5 years agoModule-CoreList/Changes for 5.20170622
Eric Herman [Thu, 22 Jun 2017 18:28:52 +0000 (20:28 +0200)]
Module-CoreList/Changes for 5.20170622

5 years agoupdate Module::CoreList to reflect v5.27.2
Eric Herman [Thu, 22 Jun 2017 18:20:15 +0000 (20:20 +0200)]
update Module::CoreList to reflect v5.27.2

Note that porting tests pass again.

5 years agoBump the perl version 5.27.1 -> 5.27.2
Eric Herman [Thu, 22 Jun 2017 15:20:08 +0000 (17:20 +0200)]
Bump the perl version 5.27.1 -> 5.27.2

Note that at this stage, porting tests fail:
Failed 3 tests out of 2390, 99.87% okay.

5 years agoXS::APItest::test_hv_free_ent: extend stack
David Mitchell [Thu, 15 Jun 2017 10:24:02 +0000 (11:24 +0100)]
XS::APItest::test_hv_free_ent: extend stack

... when pushing results. Ditto for


5 years agorecv: reset stack when returning undef
David Mitchell [Thu, 15 Jun 2017 10:43:42 +0000 (11:43 +0100)]
recv: reset stack when returning undef

When recv() detects an error, it returns undef: but it was failing to pop
its args off the stack first. So in list context it returned both its
original args and undef. It was also then not extending the stack to push
the undef.

After this commit  it resets SP to the base of its args list first,
like the other ops already do which share the Perl_pp_systread() function