This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl5.git
3 years agotr///; simplify $utf8 =~ tr/nonutf8/nonutf8/
David Mitchell [Mon, 15 Jan 2018 15:29:27 +0000 (15:29 +0000)]
tr///; simplify $utf8 =~ tr/nonutf8/nonutf8/

The run-time code to handle a non-utf8 tr/// against a utf8 string
is complex, with many variants of similar code repeated depending on the
presence of the /s and /c flags.

Simplify them all into a single code block by changing how the translation
table is stored. Formerly, the tr struct contained possibly two tables:
the basic 0-255 slot one, plus in the presence of /c, a second one
to map the implicit search range (\x{100}...) against any residual
replacement chars not consumed by the first table.

This commit merges the two tables into a single unified whole. For example

    tr/\x00-\xfe/abcd/c

is equivalent to

    tr/xff-\x{7fffffff}/abcd/

which generates a 259-entry translation table consisting of:

    0x00  => -1
    0x01  => -1
    ...
    0xfe  => -1
    0xff  =>  a
    0x100 =>  b
    0x101 =>  c
    0x102 =>  d

In addition we store:
    1) the size of the translation table (0x103 in the example above);
    2) an extra 'wildcard' entry stored 1 slot beyond the main table,
       which specifies the action for any codepoints outside the range of
       the table (i.e. chars 0x103..0x7fffffff). This can be either:
        a) a character, when the last replacement char is repeated;
        b) -1 when /c isn't in effect;
        c) -2 when /d is in effect;
        c) -3 identity: when the replacement list is empty but not /d.

       In the example above, this would be
            0x103 =>  d

The addition of -3 as a valid slot value is new.

This makes the main runtime code for the utf8 string with non-utf8 tr//
case look like, at its core:

    size = tbl->size;
    mapped_ch = tbl->map[ch >= size ? size : ch];

which then processes mapped_ch based on whether its >=0, or -1/-2/-3.

This is a lot simpler than the old scheme, and should generally be faster
too.

3 years agotr///c: handle len(replacement charlist) > 32767
David Mitchell [Fri, 12 Jan 2018 16:21:48 +0000 (16:21 +0000)]
tr///c: handle len(replacement charlist) > 32767

RT #132608

In the non-utf8 case, the /c (complement) flag to tr adds an implied
\x{100}-\x{7fffffff} range to the search charlist. If the replacement list
contains more chars than are paired with the 0-255 part of the search
list, then the excess chars are stored in an extended part of the table.
The excess char count was being stored as a short, which caused problems
if the replacement list contained more than 32767 excess chars: either
substituting the wrong char, or substituting for a char located up to
0xffff bytes in memory before the real translation table.

So change it to SSize_t.

Note that this is only a problem when the search and replacement charlists
are non-utf8, the replacement list contains around 0x8000+ entries, and
where the string being translated is utf8 with at least one codepoint >=
U+8000.

3 years agoB, Deparse fixups for tr///c
David Mitchell [Fri, 12 Jan 2018 14:35:03 +0000 (14:35 +0000)]
B, Deparse fixups for tr///c

Recent commits slightly changed the layout of the extended map table: it
now always stores a repeat count, and there are now two structs defined,
rather than treating certain slots, like tbl[0x101], specially.

Update B and Deparse to reflect this.

3 years agoadd two structs for OP_TRANS
David Mitchell [Fri, 12 Jan 2018 12:00:30 +0000 (12:00 +0000)]
add two structs for OP_TRANS

Originally, the op_pv of an OP_TRANS op pointed to a 256-slot array of
shorts, which contained the translations. However, in the presence of
tr///c, extra information needs to be stored to handle utf8 strings.
The 256 slot array was extended, with slot 0x100 holding a length,
and slots 0x101 holding some extra chars.

This has made things a bit messy, so this commit adds two structs,
one being an array of 256 shorts, and the other being the same but with
some extra fields. So for example tbl->[0x100] has been replaced with
tbl->excess_len.

This commit should make no functional difference, but will allow us
shortly to fix a bug by changing the type of the excess_len field from
short to something bigger, for example.

3 years agoS_do_trans_complex(): re-indent
David Mitchell [Thu, 11 Jan 2018 14:41:33 +0000 (14:41 +0000)]
S_do_trans_complex(): re-indent

outdent a code block following previous commit.

3 years agofix "\x{100}..." =~ tr/.../.../cd
David Mitchell [Thu, 11 Jan 2018 11:45:49 +0000 (11:45 +0000)]
fix "\x{100}..." =~ tr/.../.../cd

In transliterations where the search and replacement charlists are
non-utf8, but where the string being modified contains codepoints >=
0x100, then tr/.../.../cd would always delete all such codepoints, rather
than potentially mapping some of them.

In more detail: in the presence of /c (complement), an implicit
0x100..0x7fffffff is added to a non-utf8 search charlist. If the
replacement list is longer than the < 0x100 part of the search list, then
the last few replacement chars should in principle be paired off against
the first few of (\x100, \x101, ...). However, this wasn't happening. For
example,

    tr/\x00-\xfd/ABCD/cd

should be equivalent to

    tr/\xfe-\x{7fffffff}/ABCD/d

which should
    map:
        \xfe    => A,
        \xff    => B,
        \x{100} => C,
        \x{101} => D,
    and delete \x{102} onwards.

But instead, it behaved like

    tr/\xfe-\x{7fffffff}/AB/d

and deleted all codepoints >= 0x100.

This commit fixes that by using the extended mapping table format
for all /c variants (formerly it excluded /cd).

I also changed a variable holding the mapped char from being I32 to UV:
principally to avoid a casting mess in the fixed code. This may (or may
not), as a side-effect, have fixed possible issues with very large
codepoints.

3 years agoOP_TRANS: change extended table format
David Mitchell [Tue, 9 Jan 2018 10:05:33 +0000 (10:05 +0000)]
OP_TRANS: change extended table format

For non-utf8, OP_TRANS(R) ops have a translation table consisting of an
array of 256 shorts attached. For tr///c, this table is extended to hold
information about chars in the replacement list which aren't paired with
chars in the search list.  For example,

    tr/\x00-AE-\xff/bcdefg/c

is equivalent to

    tr/BCD\x{100}-\x{7fffffff}/bcdefg/

which is equivalent to

    tr/BCD\x{100}-\x{7fffffff}/bcdefggggggggg..../

Only the BCD => bcd mappings can be stored in the basic 256-slot table,
so potentially the following extra information needs recording in an
extended table to handle codepoints > 0xff in the string being modified:

    1) the extra replacement chars ("efg");
    2) the number of extra replacement chars (3);
    3) the "repeat" char ('g').

Currently 2) and 3) are combined: the repeat char is found as the last
extra char, and if there are no extra chars, the repeat char is treated
as an extra char list of length 1.
Similarly, an 'extra chars' length value of 1 can imply either one extra
char, or no extra chars with the repeat char being faked as an extra char.
An 'extra chars' length of 0 implies an empty replacement list, i.e.
tr/....//c.

This commit changes it so that the repeat char is *always* stored (in slot
0x101), with the extra chars stored beginning at slot 0x102.
The 'extra chars' length value (located at slot 0x0100) has changed its
meaning slightly: now
    -1 implies tr/....//c
     0  implies no more replacement chars than search chars
    1+ the number of excess replacement chars.

This (should) make no function difference, but the extra information
stored will make it easier to fix some bugs shortly.

3 years agoS_pmtrans(): add assert and simplify conditional
David Mitchell [Mon, 8 Jan 2018 16:14:17 +0000 (16:14 +0000)]
S_pmtrans(): add assert and simplify conditional

in tr/search/replace/c, the number of 'paired' replacement chars
will always be <= length(replace). Assert this, and thus simplify a couple
of conditionals from >= to ==.

It should make no difference to execution, but reduces the cognitive
load.

3 years agot/op/tr.t: add tr///c tests
David Mitchell [Thu, 4 Jan 2018 13:20:59 +0000 (13:20 +0000)]
t/op/tr.t: add tr///c tests

The /c (complement) flag is almost completely untested. Indeed, for the
all non-utf8 case, nothing in core exercises a plain tr///c.

So this commit adds reasonably comprehensive tests for tr//c and variants
(/cs, /cd, /csd) where the search and replacement ranges are non-utf8, and
the string being matched may or may not be utf8.

A few tests are TODO for now as I've exposed some bugs - to be fixed
shortly.

3 years agoS_pmtrans(): always use op_private flag variables
David Mitchell [Mon, 8 Jan 2018 15:42:23 +0000 (15:42 +0000)]
S_pmtrans(): always use op_private flag variables

Various flag vars are set early on, such as:

    const I32 complement = o->op_private & OPpTRANS_COMPLEMENT;

but sometimes these vars weren't being used, and op_private was being
tested again.

3 years agoremove fossil debugging statement from do_trans()
David Mitchell [Tue, 26 Dec 2017 16:43:31 +0000 (16:43 +0000)]
remove fossil debugging statement from do_trans()

This:

    DEBUG_t( Perl_deb(aTHX_ "2.TBL\n"));

has been around in one form or another since perl1, but it makes no sense
since perl5,000, where -Dt now shows the name of the op being executed.

3 years agoS_pmtrans(): remove some whitespace
David Mitchell [Tue, 26 Dec 2017 17:11:01 +0000 (17:11 +0000)]
S_pmtrans(): remove some whitespace

Removal of MAD a long time ago left a couple of lines with very weird
indentation.

3 years agotr/// functions: add some basic code comments
David Mitchell [Tue, 26 Dec 2017 16:40:14 +0000 (16:40 +0000)]
tr/// functions: add some basic code comments

For the various C functions which implement the compile-time and
run-time aspects of OP_TRANS, add some basic code comments at the top of
each function explaining what its purpose is.

Also add lots of code comments to the body of S_pmtrans() (which compiles
a tr///).

Also comment what the OPpTRANS_ private flag bits mean.

No functional changes.

3 years agoFix original version of Socket in perldelta
Dagfinn Ilmari Mannsåker [Fri, 19 Jan 2018 11:17:13 +0000 (11:17 +0000)]
Fix original version of Socket in perldelta

The upgrade from 2.020_04 to 2.025 was not noted manually in
perldelta, since there was nothing particularly noteworthy in the
update, and the comment at the top of the section says this will
happen automatically as part of the release process.

3 years agoperldelta 60fa46621ae5d0d44c802aedc205274584701fa0
Zefram [Fri, 19 Jan 2018 06:38:07 +0000 (06:38 +0000)]
perldelta 60fa46621ae5d0d44c802aedc205274584701fa0

3 years agofix F0convert() on edge cases
Zefram [Fri, 19 Jan 2018 05:05:07 +0000 (05:05 +0000)]
fix F0convert() on edge cases

The F0convert() function used to implement the %.0f format specifier
more cheaply went wrong on some edge cases.  Its rounding went wrong
when the exponent is such that fractional values are not representable,
making the "+= 0.5" invoke floating point rounding.  Fix that by only
invoking that rounding logic for values that start out fractional.
That fixes the output part of [perl #47602].  It also failed to emit the
sign for negative zero.  Fix that by making it not apply to zero values.

3 years agoperldelta for 7d97880ddc4f275caa3eeab435a4f5a8cf601971
James E Keenan [Fri, 19 Jan 2018 03:26:35 +0000 (22:26 -0500)]
perldelta for 7d97880ddc4f275caa3eeab435a4f5a8cf601971

3 years agoSync Socket with CPAN (2.025 -> 2.027).
James E Keenan [Fri, 19 Jan 2018 03:05:45 +0000 (22:05 -0500)]
Sync Socket with CPAN (2.025 -> 2.027).

Addresses RT # 132737.

3 years agoGetting perldelta for 5.27.8 into shape.
Abigail [Fri, 19 Jan 2018 02:22:03 +0000 (03:22 +0100)]
Getting perldelta for 5.27.8 into shape.

3 years agoAdditional fix-ups for configure.com.
Craig A. Berry [Thu, 18 Jan 2018 21:59:09 +0000 (15:59 -0600)]
Additional fix-ups for configure.com.

Some things VMS doesn't have and one that it does.  All were
missing from the config.sh we generate.

3 years agooverride autodetection of mkostemp() on Darwin
Zefram [Thu, 18 Jan 2018 21:31:42 +0000 (21:31 +0000)]
override autodetection of mkostemp() on Darwin

On Darwin 15.6.0, mkostemp() was observed to be autodetected as present
but actually be unlinkable.  It is unknown what other Darwin versions
are affected, so for the time being just override the autodetection on
all versions.

3 years agoRevert "Revert "make PerlIO handle FD_CLOEXEC""
Zefram [Thu, 18 Jan 2018 21:23:55 +0000 (21:23 +0000)]
Revert "Revert "make PerlIO handle FD_CLOEXEC""

This reverts commit 523d71b314dc75bd212794cc8392eab8267ea744, reinstating
commit 2cdf406af42834c46ef407517daab0734f7066fc.  Reversion is not the
way to address the porting problem that motivated that reversion.

3 years agotick off release 5.27.7
Karen Etheridge [Thu, 18 Jan 2018 21:06:33 +0000 (13:06 -0800)]
tick off release 5.27.7

3 years agoCorrect pad.c pod: PadARRAY, not PAD_ARRAY
Father Chrysostomos [Thu, 18 Jan 2018 20:26:54 +0000 (12:26 -0800)]
Correct pad.c pod: PadARRAY, not PAD_ARRAY

3 years agoperl -Dr: avoid coredump in \1
David Mitchell [Thu, 18 Jan 2018 15:27:25 +0000 (15:27 +0000)]
perl -Dr: avoid coredump in \1

When displaying each reg node being executed, the code that dumps a REF
node assumed that a capture was valid if progs->offs[n].start != -1.
In fact during backtracking after a failure, a capture is "undone" by
merely setting progs->offs[n].end = -1.

So make the dump code account for that too.

This was causing a test in t/re/pat.t to coredump:

    use re qw(Debug EXECUTE);
    "x" =~ m{ () y | () \1 }x;

Although given that neither the test nor the REF code in regprop() have
changed recently, I'm not sure why this has only recently started crashing.

3 years agoRevert "make PerlIO handle FD_CLOEXEC"
Abigail [Thu, 18 Jan 2018 16:11:15 +0000 (17:11 +0100)]
Revert "make PerlIO handle FD_CLOEXEC"

This reverts commit 2cdf406af42834c46ef407517daab0734f7066fc.

The reason for the revert is that with this commit, perl fails to
compile on darwin (or at least, one some versions of it):

    ./miniperl -Ilib make_ext.pl lib/auto/DB_File/DB_File.bundle  MAKE="/Applications/Xcode.app/Contents/Developer/usr/bin/make" LIBPERL_A=libperl.a LINKTYPE=dynamic
    Parsing config.in...
    Looks Good.
    dyld: lazy symbol binding failed: Symbol not found: _mkostemp
      Referenced from: /private/tmp/perl/cpan/DB_File/../../miniperl
      Expected in: flat namespace

    dyld: Symbol not found: _mkostemp
      Referenced from: /private/tmp/perl/cpan/DB_File/../../miniperl
      Expected in: flat namespace

    Unsuccessful Makefile.PL(cpan/DB_File): code=5 at make_ext.pl line 518.
    make: *** [lib/auto/DB_File/DB_File.bundle] Error 2

3 years agoVMS does have sendmsg and recvmsg.
Craig A. Berry [Thu, 18 Jan 2018 03:55:57 +0000 (21:55 -0600)]
VMS does have sendmsg and recvmsg.

3 years agoVMS does have readv and writev.
Craig A. Berry [Thu, 18 Jan 2018 00:49:23 +0000 (18:49 -0600)]
VMS does have readv and writev.

3 years agoVMS does have mbrlen and mbrtowc.
Craig A. Berry [Wed, 17 Jan 2018 13:09:52 +0000 (07:09 -0600)]
VMS does have mbrlen and mbrtowc.

3 years agofix perlipc example regarding process group
Zefram [Thu, 18 Jan 2018 03:05:10 +0000 (03:05 +0000)]
fix perlipc example regarding process group

Fixes [perl #54412].

3 years ago(perl #131878) don't call croak() with a potential format string
Tony Cook [Thu, 12 Oct 2017 03:51:23 +0000 (14:51 +1100)]
(perl #131878) don't call croak() with a potential format string

Since this has security implications, explain the change in
perldelta.

3 years agoexpand documentation of $DB::sub
Zefram [Wed, 17 Jan 2018 23:07:06 +0000 (23:07 +0000)]
expand documentation of $DB::sub

3 years agodocument that argv strings must be writable for $0
Zefram [Wed, 17 Jan 2018 21:44:15 +0000 (21:44 +0000)]
document that argv strings must be writable for $0

Resolves [perl #44129].

3 years agoremove unused constant from test
Zefram [Wed, 17 Jan 2018 21:05:25 +0000 (21:05 +0000)]
remove unused constant from test

3 years agoskip cwd_enoent test on Cygwin
Zefram [Wed, 17 Jan 2018 21:03:00 +0000 (21:03 +0000)]
skip cwd_enoent test on Cygwin

Some of the getcwd() functions don't produce error responses when they
should on Cygwin, which is [perl #132733], and that causes cwd_enoent.t
to fail.  Pending actual fix of that bug, just skip this test on Cygwin.
This should allow [perl #132648] to be resolved.

3 years agohandy.h: Add comment
Karl Williamson [Tue, 16 Jan 2018 23:55:07 +0000 (16:55 -0700)]
handy.h: Add comment

3 years agoperlapi: Clarification
Karl Williamson [Mon, 15 Jan 2018 03:26:44 +0000 (20:26 -0700)]
perlapi: Clarification

3 years agore/pat_psycho.t: Allow override of watchdog timer count
Karl Williamson [Wed, 17 Jan 2018 18:48:48 +0000 (11:48 -0700)]
re/pat_psycho.t: Allow override of watchdog timer count

Like re/fold_grind.t, this test can take a long time to execute.  A
timer was added to keep the test suite running along.  But sometimes we
want to allow extra time for this test to complete, and this commit adds
the same mechanism that fold_grind already has, an environment variable,
PERL_TEST_TIME_OUT_FACTOR, that can be set to increase the watchdog
time.

3 years agoPPPort: silence a recent compiler warning
David Mitchell [Wed, 17 Jan 2018 14:15:11 +0000 (14:15 +0000)]
PPPort: silence a recent compiler warning

RealPPPort.c: In function ‘XS_Devel__PPPort_die_sv’:
RealPPPort.xs:1522:9: warning: variable ‘op’ set but not used [-Wunused-but-set-variable]
     OP *op;

3 years agoperldelta for 57bd660029
Tony Cook [Wed, 17 Jan 2018 01:01:03 +0000 (12:01 +1100)]
perldelta for 57bd660029

3 years ago(perl #131954) don't initialize mark before a possible move of the stack
Tony Cook [Thu, 24 Aug 2017 05:52:33 +0000 (15:52 +1000)]
(perl #131954) don't initialize mark before a possible move of the stack

3 years agoadditional test for lazy array element creation
Zefram [Tue, 16 Jan 2018 18:45:40 +0000 (18:45 +0000)]
additional test for lazy array element creation

3 years agotest for IO handle in localised glob
Zefram [Tue, 16 Jan 2018 18:08:57 +0000 (18:08 +0000)]
test for IO handle in localised glob

Tests the case in [perl #16113] that failed prior to Perl 5.19.10.

3 years agoFix -> inside C<> in perl58[89]delta
Dagfinn Ilmari Mannsåker [Tue, 16 Jan 2018 16:19:13 +0000 (16:19 +0000)]
Fix -> inside C<> in perl58[89]delta

3 years agoFix stray > in L<perlapi/sv_usepvn_flags>
Dagfinn Ilmari Mannsåker [Tue, 16 Jan 2018 16:18:24 +0000 (16:18 +0000)]
Fix stray > in L<perlapi/sv_usepvn_flags>

3 years agoFix broken POD markup in perlapi/Pad Data Structures
Dagfinn Ilmari Mannsåker [Tue, 16 Jan 2018 15:55:38 +0000 (15:55 +0000)]
Fix broken POD markup in perlapi/Pad Data Structures

3 years agofix parsing of braced subscript after parens
Zefram [Tue, 16 Jan 2018 08:04:08 +0000 (08:04 +0000)]
fix parsing of braced subscript after parens

Where an arrow is omitted between subscripts, if a parenthesised
subscript is followed by a braced one, PL_expect was getting set to
XBLOCK due to code intended for "foreach (...) {...}".  This broke
bareword autoquotation, and the parsing of operators following the
braced subscript.  Alter PL_expect from XBLOCK to XOPERATOR following
a parenthesised subscript.  Fixes [perl #8045].

3 years agovivify array elements when putting them on stack
Zefram [Tue, 16 Jan 2018 06:22:17 +0000 (06:22 +0000)]
vivify array elements when putting them on stack

When the elements of an array are put on the stack, by a padav, rv2av,
or padrange op, null pointers in the AvARRAY were being pushed as
&PL_sv_undef, which was OK in rvalue contexts but caused misbehaviour
in lvalue contexts.  Change this to vivify these elements.  There's no
attempt here to limit the vivification to lvalue contexts: the existing
op flags aren't enough to detect \(@a), and attempting to catch all
cases where a new flag needs to be set would be an error-prone process.
Fixes [perl #8910].

3 years agocorrect error returns from fast_abs_path()
Zefram [Tue, 16 Jan 2018 05:16:41 +0000 (05:16 +0000)]
correct error returns from fast_abs_path()

fast_abs_path() is documented as behaving like abs_path(), and is even
used as the main version of abs_path() on Cygwin, so it should indicate
errors in the same manner.  It was croaking; change this to return undef
with $! set.  Leave croaking for the error that breaks the abs_path()
rules, where fast_abs_path() has changed cwd and fails to change back.
Problem noted on [perl #132648].

3 years agoSet more sensible -O optimization on FreeBSD origin/tonyc/132704-freebsd-optimize
Tom Hukins [Wed, 10 Jan 2018 18:53:24 +0000 (18:53 +0000)]
Set more sensible -O optimization on FreeBSD

FreeBSD's /usr/share/mk/sys.mk specifies -O2 for architectures other
than arm and mips.  By default, compile perl with the same optimization
levels.

3 years ago(perl #132533) updates to Devel::PPPort
Tony Cook [Mon, 15 Jan 2018 23:56:37 +0000 (10:56 +1100)]
(perl #132533) updates to Devel::PPPort

3 years ago(perl #132533) bump $Devel::PPPort::VERSION
Tony Cook [Mon, 15 Jan 2018 23:28:53 +0000 (10:28 +1100)]
(perl #132533) bump $Devel::PPPort::VERSION

3 years ago(perl #132533) add missing generated file updates
Tony Cook [Mon, 15 Jan 2018 23:18:51 +0000 (10:18 +1100)]
(perl #132533) add missing generated file updates

3 years agoFix test warning: Use of uninitialized value
Pali [Sun, 3 Dec 2017 16:42:14 +0000 (17:42 +0100)]
Fix test warning: Use of uninitialized value

Function ok() compares values as strings which leads to stringification of
undef and throwing warning.

3 years agoFix security problem: CWE-134: Use of Externally-Controlled Format String
Pali [Sun, 3 Dec 2017 16:02:53 +0000 (17:02 +0100)]
Fix security problem: CWE-134: Use of Externally-Controlled Format String

Function croak() takes printf-like formatted string, so passing arbitrary
char* can leads to buffer overflow. Use croak_sv() which is now available
and avoids converting SV* to char*.

3 years agoUse croak_sv in threads
Pali [Sun, 3 Dec 2017 16:01:10 +0000 (17:01 +0100)]
Use croak_sv in threads

Now when croak_sv is available, there is no need to use croak() with SV* to
char* conversion.

3 years agoImplement mess
Pali [Sun, 3 Dec 2017 15:57:46 +0000 (16:57 +0100)]
Implement mess

This patch provides implementation of the following functions:
croak_sv, die_sv, mess_sv, warn_sv, mess, vmess, warn_nocontext,
croak_nocontext, croak_no_modify, croak_memory_wrap, croak_xs_usage

TonyC: add parts/inc/mess to MANIFEST

3 years agoAvoid some branches
Karl Williamson [Sat, 13 Jan 2018 22:40:34 +0000 (15:40 -0700)]
Avoid some branches

This replaces some looping with branchless code in two places: looking
for the first UTF-8 variant byte in a string (which is used under
several circumstances), and looking for an ASCII or non-ASCII character
during pattern matching.

Recent commits have changed these operations to do word-at-a-time look-
ups, essentially vectorizing the problem into 4 or 8 parallel probes.
But when the word is found which contains the desired byte, until this
commit, that word would be scanned byte-at-a-time in a loop.

I found some bit hacks on the internet, which when stitched togther, can
find the first desired byte in the word without branching, while doing
this while the word is still loaded, without having to load each byte.

3 years agoinline.h: Add comment.
Karl Williamson [Mon, 15 Jan 2018 22:15:14 +0000 (15:15 -0700)]
inline.h: Add comment.

3 years agoperldiag: miscapitalization
Father Chrysostomos [Mon, 15 Jan 2018 20:59:27 +0000 (12:59 -0800)]
perldiag: miscapitalization

3 years agoSort perldiag
Father Chrysostomos [Mon, 15 Jan 2018 20:57:41 +0000 (12:57 -0800)]
Sort perldiag

3 years agoVMS does have fchmod and fchown.
Craig A. Berry [Sun, 14 Jan 2018 19:42:05 +0000 (13:42 -0600)]
VMS does have fchmod and fchown.

The test for fchmod in t/io/fs.t does, however, reveal a wrinkle
that is also true of chmod on VMS: a mode argument of zero does
not mean turn off all permisions but rather set permissions to the
user's default.  This is probably an ancient behavior from
pre-standard days.  For now, just skip the affected test and
document what's different.

3 years agoregexec.c: Complement the correct operand
Karl Williamson [Mon, 15 Jan 2018 03:40:54 +0000 (20:40 -0700)]
regexec.c: Complement the correct operand

This was complementing the & mask which looks like 0x808080...
hence anding 0x7f7f7f... which is TRUE for all operands execpt the
0x808080....  It is being used to scan a string to find an ASCII
character, so it would return TRUE inappropriately, but never wrongly
returning FALSE.  Since the result is then checked for matching, this
didn't actually cause an error; just unnecessary work.

3 years agoperllocale: Wording/formatting nits
Karl Williamson [Mon, 15 Jan 2018 03:14:50 +0000 (20:14 -0700)]
perllocale: Wording/formatting nits

3 years agoperllocale: Fix typo
Karl Williamson [Sun, 14 Jan 2018 18:44:22 +0000 (11:44 -0700)]
perllocale: Fix typo

3 years agoDevel-PPPort: Rmv impediment to compiling under C++11
Karl Williamson [Sat, 19 Nov 2016 12:57:46 +0000 (05:57 -0700)]
Devel-PPPort: Rmv impediment to compiling under C++11

C++11 changed from earlier versions to require space between the end of
a string literal and a macro, so that a feature can unambiguously be
added to the language.  Starting in g++ 6.2, the compiler emits a
deprecation warning when there isn't a space (presumably so that future
versions can support C++11).

Although not required by the C++11 change, this patch also makes sure
there is space after a macro call, before a string literal.

Code and modules included with the Perl core need to be compilable using
C++.  This is so that perl can be embedded in C++ programs. (Actually,
only the hdr files need to be so compilable, but it would be hard to
test that just the hdrs are compilable.)  So we need to accommodate
changes to the C++ language.

3 years agoFix goto-into-string-eval under PERL_UNICODE
Father Chrysostomos [Fri, 12 Jan 2018 16:37:18 +0000 (08:37 -0800)]
Fix goto-into-string-eval under PERL_UNICODE

More precisely, goto-to-jump-into-the-parameter-of-a-string-eval,
which is tested in goto.t as of 6d90e98384, but fails as of that
commit under PERL_UNICODE, because entereval gets a second kid
op (a hintseval op) and ‘looks like’ a list operator, which
6d90e98384 generally forbad.

The easiest way to fix this is simply to add another exception.

3 years agoVMS does have gai_strerror.
Craig A. Berry [Thu, 11 Jan 2018 20:42:43 +0000 (14:42 -0600)]
VMS does have gai_strerror.

And we need to say we have it for the latest version of Socket
to build successfully.

3 years agoUpdate Socket to CPAN version 2.025
Dagfinn Ilmari Mannsåker [Tue, 9 Jan 2018 17:32:51 +0000 (17:32 +0000)]
Update Socket to CPAN version 2.025

2.025   2018-01-09 15:12:51
        [CHANGES]
         * Add IPPROTO_ICMPV6

        [BUGFIXES]
         * Fix for C++11 compilers - require a space either side of
           string-pasting macros (thanks Karl Williamson)
         * Fix for machines lacking HAS_SOCKADDR_IN6 (RT116913) (thanks ilmari)
         * Print to STDERR on test failures (RT123436) (thanks ilmari)

2.024   2016/08/11 13:49:48
        [BUGFIXES]
         * Restore back-compat to pre-2.011 behaviour on undefined port
           numbers to pack_sockaddr_in(6?) - silently accept undef as zero
           (RT116699)
         * Warn if pack_sockaddr_un is truncating an overly long path
           (mitigates but does not resolve RT116819)

2.023   2016/08/02 14:50:50
        [CHANGES]
         * Add more socket(7), ip(7) and ipv6(7) socket options from Linux

        [BUGFIXES]
         * Fix skip count for abstract AF_UNIX path tests when not running on
           Linux

2.022   2016/08/01 16:02:48
        [CHANGES]
         * Throw exceptions if pack/unpack sockaddr functions are passed
           undefined arguments (RT116624)

        [BUGFIXES]
         * Fix coverty complaint (RT111707)

2.021   2015/11/18 17:09:13
        [CHANGES]
         * Add constants for TCP fastopen (RT105155)

        [BUGFIXES]
         * Respect HAS_GETHOSTBYNAME before calling gethostbyname() (RT105947)
         * Fixes for inet_pton() fallback on Win32 (RT107058)
         * Fix for INET_ADDRSTRLEN on AmigaOS (really!) (RT106797)
         * Provide gai_strerror() fallback on platforms that lack one
           (RT76091)

3 years agofix Data-Dumper postentry for quoted glob
Zefram [Wed, 10 Jan 2018 21:09:45 +0000 (21:09 +0000)]
fix Data-Dumper postentry for quoted glob

In Data-Dumper, where a glob with a quoted name required a postentry,
the name part of the postentry was being emitted as just "}".  This was
an old bug affecting upgraded glob names, which the recent commit
abda9fe0fe75ae824723761c1c98af958f17a41c made affect all quoted glob
names.  Fix the postentry name to encompass the entire quoted name.
Fixes [perl #132695].

3 years agoloc_tools.pl: properly load fallback locales
Tomasz Konojacki [Wed, 10 Jan 2018 03:49:08 +0000 (04:49 +0100)]
loc_tools.pl: properly load fallback locales

It turns out that some tests using loc_tools.pl are being executed
from a different working directory than './t', which causes
do("./lib/locale/<locale>") to fail.

This fixes lib/warnings.t on Windows.

Discussion:
https://www.nntp.perl.org/group/perl.perl5.porters/2018/01/msg248652.html

3 years agoUse ck_null for ~.
Father Chrysostomos [Mon, 8 Jan 2018 16:29:26 +0000 (08:29 -0800)]
Use ck_null for ~.

It no longer needs ck_bitop, which it only used before for the
experimental warning that has been removed.

3 years agoDevel;:PPPort: Skip tests invalid on EBCDIC
Karl Williamson [Wed, 10 Jan 2018 02:49:32 +0000 (19:49 -0700)]
Devel;:PPPort: Skip tests invalid on EBCDIC

I don't think it's worth the effort to port these couple of tests.

3 years agot/loc_tools.pl: Remove debug line
Karl Williamson [Tue, 9 Jan 2018 21:20:35 +0000 (14:20 -0700)]
t/loc_tools.pl: Remove debug line

This was inadvertently left in in the previous commit

3 years agot/loc_tools.pl: Display diagnostic on non-found file
Karl Williamson [Tue, 9 Jan 2018 20:19:12 +0000 (13:19 -0700)]
t/loc_tools.pl: Display diagnostic on non-found file

The diagnostic output added in 759b442cd504fd04e125d71b981f7092ec3fbea1
shows that in some platforms that the path to certain files is not
correct at the time  (spotted by Tomasz Konojacki).

This commit tests for the existence of the files, and if not found warns
and doesn't process further.  This warning gives a better clue in the
future as to the cause of the problem.  The other warning remains, in
case there are other causes, now or in the future.

We are still working on the best way to specify these files, as the
hard-coded relative path that specifies them gets disrupted if the
current directory gets changed.

3 years agot/op/exec.t: Add missing /i
Karl Williamson [Tue, 9 Jan 2018 16:48:59 +0000 (09:48 -0700)]
t/op/exec.t: Add missing /i

This was failing on z/OS due to its capitalization of an expected word.
The similar tests in this file use /i; this is the only one missing it.

I'm presuming we don't want to do a qr// in testing this basic
functionality, othewise it would be better to use the same re everywhere
to avoid this kind of typo.

3 years agoUpdate Encode to CPAN version 2.94
Chris 'BinGOs' Williams [Tue, 9 Jan 2018 12:43:33 +0000 (12:43 +0000)]
Update Encode to CPAN version 2.94

  [DELTA]

$Revision: 2.94 $ $Date: 2018/01/09 05:53:00 $
! lib/Encode/Alias.pm
  Fixed: deep recursion in Encode::find_encoding when decoding
  bad MIME header
  https://github.com/dankogai/p5-encode/pull/127
! Encode.pm
  Pulled: Include more information about Encode::is_utf8() that it
  should not be normally used
  https://github.com/dankogai/p5-encode/pull/126
  Pulled: Remove misleading documentation about UTF8 flag
  https://github.com/dankogai/p5-encode/pull/125

3 years agoUpdate Time-HiRes to CPAN version 1.9752
Chris 'BinGOs' Williams [Tue, 9 Jan 2018 12:41:38 +0000 (12:41 +0000)]
Update Time-HiRes to CPAN version 1.9752

  [DELTA]

1.9752 [2018-01-04]
 - fix an error in the error message of utimensat() not available:
   it said futimens() not available
 - add --force alias for Makefile.PL --configure

1.9751 [2018-01-02]
 - in macOS/OSX/Darwin, use __has_builtin() check also for utimensat(),
   can cause errors like
   "HiRes.xs:1474:16: error: unrecognized platform name macOS"
   [rt.cpan.org #123994]
   (oversight from 1.9749)
 - do not define TIME_HIRES_STAT/d_hires_stat if none was found, instead
   of defining it to be zero, which case has no implementation in hrstatns()
   (thanks to Nigel Horne)
 - in t/utime.t try to divine if the filesystem of the tempfiles has been
   mounted with the 'noatime' option, which can prohibit updating the
   access time timestamp.  Also document this in HiRes.pm.
   (thanks to Nigel Horne, original analysis by Slaven Rezic)
 - synchronize the constant lists in HiRes.pm:@EXPORT_OK
   and Makefile.PL:doConstants and regenerate fallback/const-c.inc
   and fallback/const-xs.inc, this fixes Perl 5.6.2 issue with
   d_futimens not allegedly being a valid macro in t/utime.t
   (using Perl 5.26.1 for the regenerating, not 5.6.2)
   (thanks to Nigel Horne)
 - in t/utime.t define a nop sub done_testing for ancient Perls
   (like Perl 5.6.2)
 - in Perl 5.6.2 a bogus warning
   "Use of uninitialized value in subroutine entry"
   is issued from t/alarm.t: add a comment documenting that

3 years agoperldelta for #130936
Father Chrysostomos [Mon, 8 Jan 2018 16:18:21 +0000 (08:18 -0800)]
perldelta for #130936

3 years ago[perl #130936] Forbid some cases of inward goto
Father Chrysostomos [Mon, 8 Jan 2018 06:23:03 +0000 (22:23 -0800)]
[perl #130936] Forbid some cases of inward goto

This commit in general forbids entry into the parameter of a binary or
list operator, to avoid crashes and stack corruption.

In cases like

    goto f;
    push @array, do { f: }

and

    goto f;
    $a + do { f: };

it’s not possible to fix this in general.  Cases like

    goto f;
    do { f: } + $a;

(jumping into the first parameter) have never caused problems, but I
went ahead and forbad that usage too, since it would be too compli-
cated to figure out exactly which parameter is being jumped into.
(It’s not impossible; it would just double the amount of code used to
find labels.)

List operators taking just a simple list, such as die(), have never
worked properly, because goto() bypasses the pushmark.  They could be
made to work, but that would require extra work to distinguish cases
like push and print that have a first operand (sometimes implicit for
print) of a specific type.  I figured it was easier just to forbid
jumping into any list operator.  It’s also much easier to document.

3 years agostate.t: Allow to run under miniperl
Father Chrysostomos [Mon, 8 Jan 2018 05:13:01 +0000 (21:13 -0800)]
state.t: Allow to run under miniperl

Useful for debugging.

3 years agoStop alloc_LOGOP from always setting OPf_KIDS
Father Chrysostomos [Mon, 8 Jan 2018 04:46:54 +0000 (20:46 -0800)]
Stop alloc_LOGOP from always setting OPf_KIDS

Commit v5.21.1-125-g3253bf8, which added the function, caused entertry
to get a kid op.  Before:

$ perl5.20.1 -MO=Concise -eeval{}
5  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 2 -e:1) v:{ ->3
4     <@> leavetry vK ->5
3        <|> entertry(other->4) v ->6
6        <0> stub v ->4
-e syntax OK

Notice entertry has no K.  After:

$ perl5.22.0 -MO=Concise -eeval{}
5  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
4     <@> leavetry vK ->5
3        <|> entertry(other->4) vK ->6
6        <0> stub v ->4
-e syntax OK

This time it has a K, but it has no kid ops.

This causes problems for a patch I am working on, because one
can no longer depend on cUNOPo->op_first being non-null when
o->op_flags & OPf_KIDS.

alloc_LOGOP should only set the KIDS flag if it actually has kids.

3 years agoFacilitate building with quadmath on Cygwin.
Peter John Acklam [Sun, 7 Jan 2018 13:28:58 +0000 (08:28 -0500)]
Facilitate building with quadmath on Cygwin.

For: RT # 128627

3 years agoAlternate backup file rename test for VMS.
Craig A. Berry [Fri, 5 Jan 2018 19:54:35 +0000 (13:54 -0600)]
Alternate backup file rename test for VMS.

The existing test that made a directory called foo.bak and then
made sure the rename of a backup file from in-place edit failed
to overwrite the directory doesn't work on VMS because there is
no conflict between a file named foo.bak and directory named
[foo^.bak] in directory syntax or foo^.bak.DIR in filename syntax.
The .DIR extension is always there, and other dots in the name
are escaped with caret because dot is the directory delimiter.

So just make version 32767 of foo.bak and when the rename tries
to make the next higher version it will fail.  We're testing what
happens when the rename fails not why it fails, so we accomplish
the same goal via a different mechanism.

3 years agoDocument system(1, @args) under VMS in perlport.
Craig A. Berry [Fri, 5 Jan 2018 18:10:25 +0000 (12:10 -0600)]
Document system(1, @args) under VMS in perlport.

It's been there for Win32 for some time, but we've imitated the
Windows behavior since eed5d6a149b02c1699.

3 years agoHide Perl_isSCRIPT_RUN from the re extension.
Craig A. Berry [Thu, 4 Jan 2018 23:32:46 +0000 (17:32 -0600)]
Hide Perl_isSCRIPT_RUN from the re extension.

Otherwise the extension fails to build on VMS because the symbol
is multiply defined and a linker warning about that is escalated
to a run-time error.

3 years agoActually remove stray ';'
Karl Williamson [Thu, 4 Jan 2018 19:50:35 +0000 (12:50 -0700)]
Actually remove stray ';'

The previous commit was supposed to include this

3 years agoregexec.c: Clarify comments; remove stray ';'
Karl Williamson [Thu, 4 Jan 2018 19:24:43 +0000 (12:24 -0700)]
regexec.c: Clarify comments; remove stray ';'

3 years agoScript Run: Scripts couldn't start with Common
Karl Williamson [Thu, 4 Jan 2018 19:22:26 +0000 (12:22 -0700)]
Script Run: Scripts couldn't start with Common

The Common script is supposed to be intermixable with any other script.
But it wasn't properly handling the case where the first character in
the string was Common, and a subsequent character was some real script.

3 years agoScript runs: was swallowing next char in pattern
Karl Williamson [Thu, 4 Jan 2018 19:13:23 +0000 (12:13 -0700)]
Script runs: was swallowing next char in pattern

In /(+script_run:foo)bar/, the 'b' was being swallowed without being
acted upon.  This would affect the '$' to mean match end of string

3 years agoMake script run code a separate function
Karl Williamson [Mon, 1 Jan 2018 20:39:42 +0000 (13:39 -0700)]
Make script run code a separate function

This just does the minimal work (plus white space) to make this code
into a separate function, so that it can be called from elsewhere in the
core.

3 years agoAdd missing newline to the "Unable to flush stdout" diagnostic
Niko Tyni [Sat, 16 Sep 2017 08:24:18 +0000 (11:24 +0300)]
Add missing newline to the "Unable to flush stdout" diagnostic

Originally reported by Jakub Wilk.

Bug-Debian: https://bugs.debian.org/875361

3 years agopp_multiconcat(): fix win32 compiler warning
David Mitchell [Tue, 2 Jan 2018 13:55:29 +0000 (13:55 +0000)]
pp_multiconcat(): fix win32 compiler warning

pp_hot.c(930) : warning C4146: unary minus operator applied to unsigned type,
result still unsigned

Negating an unsigned STRLEN (aka Size_t) string length in this case will
never encounter a situation where the value is too big to be negated,
because at that point we have both the string and a grown buffer of at
least equal size in memory simultaneously, so targ_len < Size_t_MAX/2.

So just cast away the warning.

3 years agoQuote one-liner in exec.t on VMS.
Craig A. Berry [Mon, 1 Jan 2018 21:48:36 +0000 (15:48 -0600)]
Quote one-liner in exec.t on VMS.

On VMS, system() sends a complete command to the CLI rather than
passing arguments via exec.  So arguments need to be quoted if
they have anything the shell doesn't like or contain spaces.

3 years agoReenable numeric first argument of system() on VMS.
Craig A. Berry [Mon, 1 Jan 2018 16:10:33 +0000 (10:10 -0600)]
Reenable numeric first argument of system() on VMS.

This was broken in 64def2aeaeb63f92dadc6dfa334, and fixed for Win32
only in 8fe3452cc6ac7af8c08.  But VMS also uses a numeric first
argument to system() as a flag indicating spawn without waiting for
completion.

3 years agot/loc_tools.pl: Add diagnostic output
Karl Williamson [Mon, 1 Jan 2018 19:33:38 +0000 (12:33 -0700)]
t/loc_tools.pl: Add diagnostic output

We are getting non-fatal output from this on z/OS.  This will help pin
down the problem, and remain in place in case other such situations
arise.

3 years agot/loc_tools.pl: Implement fail() if not available
Karl Williamson [Mon, 1 Jan 2018 19:32:22 +0000 (12:32 -0700)]
t/loc_tools.pl: Implement fail() if not available

Previously, this file require the caller to have implemented ok() (which
they may not have done.  Now, it uses fail() instead if available, and
itsd own hand-rolled version otherwise.

3 years agot/loc_tools.pl: Tidy up
Karl Williamson [Sun, 31 Dec 2017 19:25:25 +0000 (12:25 -0700)]
t/loc_tools.pl: Tidy up

Instead of using $@, use the variable set to $@ just after the eval.
This is cleaner, and avoids an issue should new code be inserted between
them that affects $@

3 years agoregexec.c: Change declaration to U8
Karl Williamson [Sun, 31 Dec 2017 19:03:01 +0000 (12:03 -0700)]
regexec.c: Change declaration to U8

from char in the new script_run code.  This makes it more convenient to
run gdb on.

3 years agolocale.c: Add checks for improper locale
Karl Williamson [Sun, 31 Dec 2017 16:49:46 +0000 (09:49 -0700)]
locale.c: Add checks for improper locale

There has been code to check that the new locale is compatible with
ASCII when switching to one; this commit expands those checks.  A locale
that isn't ASCII-compatible doesn't play well with Perl.