This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl5.git
5 years agoregcomp.c: Split function into two functions
Karl Williamson [Mon, 21 Sep 2015 03:25:13 +0000 (21:25 -0600)]
regcomp.c: Split function into two functions

Sometimes we want to move to the next non-ignored character in the
input.  The nextchar() function does that (but buggily in UTF-8).

And sometimes we are already at the next character, but if it is one
that should be ignored, we want to move to the first one that isn't.
This commit creates a function to do the second task by extracting the
code in nextchar() to it, and making nextchar() a lightweight wrapper
around it, and hence likely to be optimized out by the compiler.

This is a step in the direction of fixing the UTF-8 problems with
nextchar(), and fixing some other bugs.  The new function has added
generality which won't be used until a later commit.

5 years agoregcomp.c: refactor a static function
Karl Williamson [Sun, 20 Sep 2015 03:13:54 +0000 (21:13 -0600)]
regcomp.c: refactor a static function

nextchar() advances the parse to the next byte beyond any ignorable
bytes, returning the parse pointer before the advancement.

I find this confusing, as

    foo = nextchar();

reads as if foo should point to the next character, instead of the
character where the parse already is at.  This functionality is hard for
a reader to grok, even if the name weren't misleading, as the place the
variable gets set in the source is far away from the call.  It's clearer
to say

    foo = current;
    nextchar();

This has confused others as well, as in one place several commits have
been required to get it so it works properly, and games have been played
to back up the parse if it turns out it shouldn't have been advanced,
whereas it's better to check first, then advance if it is the right
thing to do.  Ready-Fire-Aim is not a best practice.

This commit makes nextchar() return void, and changes the few places
where the en-passant value was used.

The new scheme is still buggy, as nextchar() only advances a single
byte, which may be the wrong thing to do when the pattern is UTF-8
encoded.  More work is needed to be in a position to fix this.  We have
only gotten away with this so far because apparently no one is using
non-ASCII white space under /x, and our meta characters are all ASCII,
and there are likely other things that reposition things to a character
boundary before problems have arisen.

5 years agoregcomp.c: Add a panic for code that shouldn't happen
Karl Williamson [Sun, 20 Sep 2015 02:16:46 +0000 (20:16 -0600)]
regcomp.c: Add a panic for code that shouldn't happen

It's better to quit than to blindly continue after failure.

5 years agoregcomp.c: Fixes to comments
Karl Williamson [Fri, 18 Sep 2015 20:32:56 +0000 (14:32 -0600)]
regcomp.c: Fixes to comments

One of these is because the latest vim is not smart enough to know that
a '{' in a comment isn't part of the code for the purposes of the bounce
between start and end brace operation.  This is over a large quantity of
lines, so it is quite helpful for that to work.

5 years agoutf8_heavy.pl: Clarify comment
Karl Williamson [Mon, 21 Sep 2015 17:39:57 +0000 (11:39 -0600)]
utf8_heavy.pl: Clarify comment

5 years agoif if is 0.0606 update Maintainers.pl, but only if if is
Chris 'BinGOs' Williams [Sat, 10 Oct 2015 15:02:18 +0000 (16:02 +0100)]
if if is 0.0606 update Maintainers.pl, but only if if is

5 years agoFix 683e3b31e8b72cce
H.Merijn Brand [Sat, 10 Oct 2015 13:27:09 +0000 (15:27 +0200)]
Fix 683e3b31e8b72cce

Found when backporting. JHI's reply:

Oops.

It should be define:define:define.

I was trying to stop the test that uses alarm() not to compiled in a
system where alarm() does not exist.

5 years agobump DynaLoader version to 1.35.
Craig A. Berry [Fri, 9 Oct 2015 15:54:43 +0000 (10:54 -0500)]
bump DynaLoader version to 1.35.

5 years agoMissed one statbuf declaration in 45a23732c73.
Craig A. Berry [Fri, 9 Oct 2015 15:29:44 +0000 (10:29 -0500)]
Missed one statbuf declaration in 45a23732c73.

The VMS-specific corner of the ifdef jungle ended up using
statbuf without declaring it, so add a declaration.

5 years agoConstant data in .c, not in a .h
Jarkko Hietaniemi [Thu, 8 Oct 2015 23:16:22 +0000 (19:16 -0400)]
Constant data in .c, not in a .h

clang says:
./sdbm.h:54:20: warning: 'extern' variable has an initializer [-Wextern-initializer]

5 years agoDynaLoader.doc was deleted 20 years ago in 3b35bae3
Jarkko Hietaniemi [Thu, 8 Oct 2015 23:09:00 +0000 (19:09 -0400)]
DynaLoader.doc was deleted 20 years ago in 3b35bae3

5 years agoTrailing comma is non-standard.
Jarkko Hietaniemi [Wed, 7 Oct 2015 11:13:01 +0000 (07:13 -0400)]
Trailing comma is non-standard.

(Found by cadvise, would have been found by gcc -pedantic.)

5 years agoSince NUM_ANYOF_CODE_POINTS is 256, this_end is always < 256.
Jarkko Hietaniemi [Wed, 26 Aug 2015 02:45:57 +0000 (22:45 -0400)]
Since NUM_ANYOF_CODE_POINTS is 256, this_end is always < 256.

(And the %04X will not happen.)

(regcomp.h says that in theory NUM_ANYOF_CODE_POINTS can be more than 256.)

Coverity CID 104774

5 years agot/op/pack.t: Fix some skipped tests on EBCDIC
Karl Williamson [Tue, 6 Oct 2015 16:23:34 +0000 (10:23 -0600)]
t/op/pack.t: Fix some skipped tests on EBCDIC

These tests were skipped on EBCDIC platforms because they failed there.
It turned out that the tests were ASCII-centric, and just had to be
modified slightly to pass.

5 years agot/op/pack.t: Clarify comment; change variable name
Karl Williamson [Tue, 6 Oct 2015 16:22:10 +0000 (10:22 -0600)]
t/op/pack.t: Clarify comment; change variable name

The variable is really the bytes that compose the utf8, not the utf8.
Make the name clearer.

5 years agopartial PL_statbuf removal
Daniel Dragan [Fri, 14 Aug 2015 22:34:09 +0000 (18:34 -0400)]
partial PL_statbuf removal

Perl_nextargv has to have access to the Stat_t that is written to inside
S_openn_cleanup or else run/switches.t, io/argv.t, io/inplace.t, and
io/iprefix.t will fail. Removing the uses of PL_statbuf that are using
PL_statbuf due to historical reason, and not using PL_statbuf to pass data
between different funcs/different callstacks. This patch makes it easier to
remove PL_statbuf in the future since the number uses of it has been
reduced.

-in Perl_apply move SETERRNO before tot--; so the branch can be combined
 with other "tot--;" branches by CC optmizer
-combine 2 Perl_croak(aTHX_ "Illegal suidscript"); statements in
 S_validate_suid to make code look simpler, drop my_perl arg for space
 efficiency on threads of rarely executed code

5 years agoProperly duplicate PerlIO::encoding objects
Vincent Pit [Fri, 28 Aug 2015 17:17:00 +0000 (14:17 -0300)]
Properly duplicate PerlIO::encoding objects

PerlIO::encoding objects are usually initialized by calling Perl methods,
essentially from the pushed() and getarg() callbacks. During cloning, the
PerlIO API will by default call these methods to initialize the duplicate
struct when the PerlIOBase parent struct is itself duplicated. This does
not behave so well because the perl interpreter is not ready to call
methods at this point, for the stacks are not set up yet.

The proper way to duplicate the PerlIO::encoding object is to call sv_dup()
on its members from the dup() PerlIO callback. So the only catch is to make
the getarg() and pushed() calls implied by the duplication of the underlying
PerlIOBase object aware that they are called during cloning, and make them
wait that the control flow returns to the dup() callback. Fortunately,
getarg() knows since its param argument is then non-null, and its return
value is passed immediately to pushed(), so it is enough to tag this
returned value with a custom magic so that pushed() can see it is being
called during cloning.

This fixes [RT #31923].

5 years agomake sv_backoff tailcall friendly
Daniel Dragan [Fri, 25 Sep 2015 04:40:43 +0000 (00:40 -0400)]
make sv_backoff tailcall friendly

Reorder the body of Perl_sv_backoff slightly to make it more tail-call
friendly, and change its signature from returning an int (always 0) to
void.

sv_backoff has only 1.5 function calls in it, there is a memcpy of a U32 *
for alignment reasons (I wont discuss U32_ALIGNMENT_REQUIRED) inside of
SvOOK_offset, and the explicit Move()/memmove. GCC and clang often inline
memcpy/memmove when the length is a constant and is small. Sometimes
a CC might also do unaligned memory reads if OS/CPU allows it
http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20130513/174807.html
so I'll assume memcpy by short constant isn't a func call for discussion.
By moving SvFLAGS modification before the one and only func call, and
changing the return type to void, there is no code to execute after the
Move func call so the CC, if it wants (OS/ABI/CPU, specifically I am
thinking about x86-64) can tailcall jump to memmove. Also var sv can be
stored in a cheaper vol reg since it is not saved around any func calls
(SvFLAGS set was moved) assuming the memcpy by short constant was inlined.

The before machine code size of Perl_sv_backoff with VC 2003 -O1 was
0x6d bytes. After size is 0x61. .text section size of perl523.dll was
after was 0xD2733 bytes long, before was 0xD2743 bytes long. VC perl does
not inline memcpys by default.

In commit a0d0e21ea6 "perl 5.000" the return 0 was added. The int ret type
is from day 1 of sv_backoff function existing/day 1 of SV *s
from commit 79072805bf "perl 5.0 alpha 2". str_backoff didn't exist AFAIK,
only str_grow would retake the memory at the start of the block. Since
sv_backoff is usually used in a "&& func()" macro (SvOOK_off), it needed a
non void ret type, a simple ", 0" in the macro fixes that. All CCs optimize
and remove "if(0)" machine instructions so the ", 0" is optimized away in
the perl binary.

5 years agoperlgit.pod: how to unescape 'git am' From lines
David Mitchell [Thu, 8 Oct 2015 15:07:06 +0000 (16:07 +0100)]
perlgit.pod: how to unescape 'git am' From lines

Due to Reasons, some UNIX mail systems escape any leading 'From ' lines
with a '>'. Explain how to un-escape them.

5 years agoUpdate Encode to CPAN version 2.78
Chris 'BinGOs' Williams [Wed, 7 Oct 2015 15:31:48 +0000 (16:31 +0100)]
Update Encode to CPAN version 2.78

  [DELTA]

$Revision: 2.78 $ $Date: 2015/09/24 02:19:21 $
! Makefile.PL
  Mend pull/42 again.  This time correctly.
! lib/Encode/Supported.pod
  Applied: RT#107146: [PATCH] fix a spelling mistake
  https://rt.cpan.org/Public/Bug/Display.html?id=107146

5 years agoperlsub.pod: note that anonymous subs can have signatures, too
Ricardo Signes [Tue, 6 Oct 2015 19:42:05 +0000 (15:42 -0400)]
perlsub.pod: note that anonymous subs can have signatures, too

5 years agoutf8.c: Slight code simplification
Karl Williamson [Sat, 3 Oct 2015 20:07:43 +0000 (14:07 -0600)]
utf8.c: Slight code simplification

The changed code computes the code point to output in a warning.
However, the function it calls will output essentially the same warning
if called with the proper flag.  So, just do that.  The slight change in
the output is that the calling function adds the operation name, like
"in print" to the end of the message, so this changes causes a better
message to be output.  I did not change the handling of surrogates here,
because the warning messages are too different.

5 years agoutf8.c: Fix comment
Karl Williamson [Fri, 25 Sep 2015 04:36:41 +0000 (22:36 -0600)]
utf8.c: Fix comment

5 years agoFix ext/File-Glob/t/rt114984.t for -DPERL_EXTERNAL_GLOB
Karl Williamson [Mon, 5 Oct 2015 22:54:24 +0000 (16:54 -0600)]
Fix ext/File-Glob/t/rt114984.t for -DPERL_EXTERNAL_GLOB

See https://rt.perl.org/Ticket/Display.html?id=126271

This commit changes a \n to a space so that when passed to a shell, it
doesn't think the 2nd line is a new sh command.

5 years agoperlapi: Note another exception to given rule
Karl Williamson [Mon, 5 Oct 2015 22:45:39 +0000 (16:45 -0600)]
perlapi: Note another exception to given rule

PERL_EXTERNAL_GLOB being defined also results in the described behavior.

5 years agoUpdate IO-Compress to CPAN version 2.069
Chris 'BinGOs' Williams [Tue, 6 Oct 2015 13:00:22 +0000 (14:00 +0100)]
Update IO-Compress to CPAN version 2.069

  [DELTA]

  2.069 26 Sept 2015

      * IO::Compress::FAQ
        - Added a section of bgzip
          RT #103295: IO::Compress Feature request

      * IO::Compress::Zip
        - Zip64 needs to be first in extra field to workaround a Windows Explorer Bug
          See http://www.info-zip.org/phpBB3/viewtopic.php?f=3&t=440 for details

5 years agoUpdate Compress-Raw-Zlib to CPAN version 2.069
Chris 'BinGOs' Williams [Tue, 6 Oct 2015 12:58:58 +0000 (13:58 +0100)]
Update Compress-Raw-Zlib to CPAN version 2.069

  [DELTA]

  2.069 26 Sept 2015

      * reduce compiler warnings and stderr noise
        [#101341]

      * amigaos4: cpan/Compress-Raw-Zlib: also __amigaos4__
        [#106799]

      * const all global data
        https://github.com/madler/zlib/commit/82e9dc60932bf2ce5422a5e76e66e5a05abd26e3
        [#101298]

      * Coverity finding: Unused value
        https://github.com/madler/zlib/commit/9859a94c1002484ee5f824c05683a5b2484cbf49
        [105414]

      * Coverity findings
        [102399]

      * Coverity finding: Overlapping buffer in memory copy
        [105413]

5 years agoUpdate Compress-Raw-Bzip2 to CPAN version 2.069
Chris 'BinGOs' Williams [Tue, 6 Oct 2015 12:56:23 +0000 (13:56 +0100)]
Update Compress-Raw-Bzip2 to CPAN version 2.069

  [DELTA]

  2.069 26 Sept 2015

      * reduce compiler warnings and stderr noise
        [#101340]

      * consting misc tables
        [#101296]

5 years agoCleanup, document, and restructure regen/regcomp.pl
Yves Orton [Mon, 5 Oct 2015 16:49:46 +0000 (18:49 +0200)]
Cleanup, document, and restructure regen/regcomp.pl

We cleanup the parsing code, replacing our set of arrays of
properties with an array of hashes of properties, with
utility subs registering new items, etc.

We also split up the output code into a set of subs,
one sub per output "blob" (generaly a var definition),
so that we have some visibility of the higher level strucuture
of our output code. With this patch visibility of the structure
of what we generate emerges from the nest of here docs. :-)

Note this change does not (greatly) alter regcomp.sym or
perldebguts.pod, it merely cleans up and generally speaking
modernizes and most importantly documents the code.

5 years agofix perl #126186 make all verbs allow an optional arg
Yves Orton [Sun, 4 Oct 2015 22:03:10 +0000 (00:03 +0200)]
fix perl #126186 make all verbs allow an optional arg

In perl #126186 it was pointed out we had started allowing name
arguments for verbs where we did not document them to be supported,
albeit in an inconsistent way. The previous patch cleaned up some
of the cause of this, but it seems better to just generally allow
the existing verbs to all support a mark name argument.

So this patch reverses the effect of the previous patch, and makes
all verbs, FAIL, ACCEPT, etc, allow an optional argument, and
set REGERROR/REGMARK appropriately as well.

5 years agofix perl #126186 - (*ACCEPT) does not allow arguments
Yves Orton [Sun, 4 Oct 2015 14:22:17 +0000 (16:22 +0200)]
fix perl #126186 - (*ACCEPT) does not allow arguments

5 years agoadd some tests for perl #126186
Yves Orton [Sun, 4 Oct 2015 13:45:05 +0000 (15:45 +0200)]
add some tests for perl #126186

5 years agoFuture-proof pp_trans against a possible future undefined behaviour
Vincent Pit [Thu, 1 Oct 2015 15:28:51 +0000 (12:28 -0300)]
Future-proof pp_trans against a possible future undefined behaviour

If do_trans() ever wants to modify the stack in the future, this would
cause an undefined behaviour as mPUSHi() invokes its parameter on the same
argument list as PUSHmortal, which itself touches the stack.

5 years agoadd changelog for if.pm
Ricardo Signes [Sun, 4 Oct 2015 22:48:21 +0000 (18:48 -0400)]
add changelog for if.pm

5 years agofix perl-126222 - (?!) OPFAIL optimization does work in (?(?!)yes|no)
Yves Orton [Sun, 4 Oct 2015 12:13:44 +0000 (14:13 +0200)]
fix perl-126222 - (?!) OPFAIL optimization does work in (?(?!)yes|no)

OPFAIL should trigger the no branch when used in this context

Thanks to Victor Adam for the report.

5 years agoAdd a todo test for perl-126222
Yves Orton [Sun, 4 Oct 2015 12:04:51 +0000 (14:04 +0200)]
Add a todo test for perl-126222

5 years agoregcomp.c: make an expression more legible
Yves Orton [Sun, 4 Oct 2015 11:21:25 +0000 (13:21 +0200)]
regcomp.c: make an expression more legible

5 years agoUpdate Devel-PPPort to CPAN version 3.32
Chris 'BinGOs' Williams [Sat, 3 Oct 2015 17:58:57 +0000 (18:58 +0100)]
Update Devel-PPPort to CPAN version 3.32

  [DELTA]

3.32 - 2015-09-30

    * Lexical topic no longer works as of perl 5.23

5 years agoUpdate Perl-OSType to CPAN version 1.009
Chris 'BinGOs' Williams [Sat, 3 Oct 2015 17:56:56 +0000 (18:56 +0100)]
Update Perl-OSType to CPAN version 1.009

  [DELTA]

1.009     2015-09-21 10:09:35-04:00 America/New_York

    [ADDED]

    - Added 'sco' as a Unix-type OS

5 years agoUpdate experimental to CPAN version 0.015
Chris 'BinGOs' Williams [Sat, 3 Oct 2015 17:56:02 +0000 (18:56 +0100)]
Update experimental to CPAN version 0.015

  [DELTA]

0.015     2015-10-03 14:21:18+02:00 Europe/Amsterdam
          Make lexical_topic a deprecated feature

5 years agoResort MANIFEST for 95318fb6
Jarkko Hietaniemi [Fri, 2 Oct 2015 23:15:33 +0000 (19:15 -0400)]
Resort MANIFEST for 95318fb6

(somehow in smokes and Jenkins the porting/manifest.t passed?)

5 years ago[MERGE] branch symbol-cleanup
Jarkko Hietaniemi [Fri, 2 Oct 2015 22:35:58 +0000 (18:35 -0400)]
[MERGE] branch symbol-cleanup

Cleanup unused Configure symbols.
- d_modfl_pow32_bug
- filesystem stat
- sendmsg/recvmsg

Use I_SYS_POLL.

Add a script for doing this kind of symbol cross-referencing.

There are plenty of remaining unused symbols, but these were
just some of the easy ones.

5 years agoUse <sys/poll.h> if available before going select().
Jarkko Hietaniemi [Mon, 17 Aug 2015 00:15:11 +0000 (20:15 -0400)]
Use <sys/poll.h> if available before going select().

Some BSD implementations might have <sys/poll.h> instead of <poll.h>.

Noticed while looking for unused symbols.

5 years agouconfig.h regen
Jarkko Hietaniemi [Thu, 1 Oct 2015 22:59:18 +0000 (18:59 -0400)]
uconfig.h regen

5 years agoRemove unused BSD sendmsg/recvmg symbols.
Jarkko Hietaniemi [Mon, 17 Aug 2015 00:24:17 +0000 (20:24 -0400)]
Remove unused BSD sendmsg/recvmg symbols.

Unused in CPAN, too.  There are uses of these symbols,
but under the Socket:: namespace.

5 years agoRemove unused d_modfl_pow32_bug symbol.
Jarkko Hietaniemi [Sun, 16 Aug 2015 20:02:59 +0000 (16:02 -0400)]
Remove unused d_modfl_pow32_bug symbol.

Even if the bug might still be present in ancient versions of glibc,
there's no code in the current Perl core using that.

5 years agoRemove unused filesystem stat symbols.
Jarkko Hietaniemi [Sat, 15 Aug 2015 16:54:08 +0000 (12:54 -0400)]
Remove unused filesystem stat symbols.

d_fs_data_s HAS_STRUCT_FS_DATA
d_fstatfs HAS_FSTATFS
d_fstatvfs HAS_FSTATVFS
d_getfsstat HAS_GETFSSTAT
d_getmnt HAS_GETMNT
d_getmntent HAS_GETMNTENT
d_hasmntopt HAS_HASMNTOPT
d_statfs_f_flags HAS_STRUCT_STATFS_F_FLAGS
d_statfs_s HAS_STRUCT_STATFS
d_ustat HAS_USTAT
i_mntent I_MNTENT
i_sysmount I_SYS_MOUNT
i_sysstatfs I_SYS_STATFS
i_sysstatvfs I_SYS_STATVFS
i_sysvfs I_SYS_VFS
i_ustat I_USTAT

Unused by the Perl core.

As far as I can remember I added these scans long ago, for some
purpose (df(1) kind of APIs?) but whatever it was, it obviously
hasn't exactly caught fire in the last 15 years.

Some rare uses of these APIs (not these defines, but e.g. statfs)
in CPAN (like the Quota module), but those seem to do their own
configuration.

5 years agoScript for checking config symbol use.
Jarkko Hietaniemi [Sat, 15 Aug 2015 15:24:58 +0000 (11:24 -0400)]
Script for checking config symbol use.

5 years agoremove documentation for the now-removed lexical topic
Ricardo Signes [Fri, 2 Oct 2015 16:16:40 +0000 (12:16 -0400)]
remove documentation for the now-removed lexical topic

5 years agogiven(): remove support for lexical $_
David Mitchell [Fri, 2 Oct 2015 16:19:22 +0000 (17:19 +0100)]
given(): remove support for lexical $_

There is dead code that used to allow

    my $_;
    ...
    given ($foo) {
        # lexical $_ aliased to $foo here
    }

Now that lexical $_ has been removed, remove the code.  I've left the
signatures of the newFOO() functions unchanged; they just expect a target
of 0 to always be passed now.

5 years agoadd removal of lexical topic to perldelta
Ricardo Signes [Fri, 2 Oct 2015 15:42:18 +0000 (11:42 -0400)]
add removal of lexical topic to perldelta

5 years ago[MERGE] EXTEND(), XSRETURN() wrap issues
David Mitchell [Fri, 2 Oct 2015 10:43:41 +0000 (11:43 +0100)]
[MERGE] EXTEND(), XSRETURN() wrap issues

5 years agoadd tests for XSRETURN* macros
Doug Bell [Wed, 3 Jun 2015 03:39:09 +0000 (22:39 -0500)]
add tests for XSRETURN* macros

5 years agoadd assertion to prevent stack corruption in XSUB
Doug Bell [Wed, 3 Jun 2015 03:34:42 +0000 (22:34 -0500)]
add assertion to prevent stack corruption in XSUB

We should not be able to return negative offsets from the stack in
XSUBs.

5 years agofix up EXTEND() callers
David Mitchell [Mon, 21 Sep 2015 13:49:22 +0000 (14:49 +0100)]
fix up EXTEND() callers

The previous commit made it clear that the N argument to EXTEND()
is supposed to be signed, in particular SSize_t, and now typically
triggers compiler warnings where this isn't the case.

This commit fixes the various places in core that passed the wrong sort of
N to EXTEND(). The fixes are in three broad categories.

First, where sensible, I've changed the relevant var to be SSize_t.

Second, where its expected that N could never be large enough to wrap,
I've just added an assert and a cast.

Finally, I've added extra code to detect whether the cast could
wrap/truncate, and if so set N to -1, which will trigger a panic in
stack_grow().

This also fixes
    [perl #125937] 'x' operator on list causes segfault with possible
    stack corruption

5 years agomake EXTEND() and stack_grow() safe(r)
David Mitchell [Mon, 7 Sep 2015 14:00:32 +0000 (15:00 +0100)]
make EXTEND() and stack_grow() safe(r)

This commit fixes various issues around stack_grow() and its
two main wrappers, EXTEND() and MEXTEND(). In particular it behaves
very badly on systems with 32-bit pointers but 64-bit ints.

One noticeable effect of this is commit is that various usages of EXTEND()
etc will now start to give compiler warnings - usually because they're
passing an unsigned N arg when it should be signed. This may indicate
a logic error in the caller's code which needs fixing. This commit causes
several such warnings to appear in core code, which will be fixed in the
next commit.

Essentially there are several potential false negatives in this basic
code:

     if (PL_stack_max - p < (SSize_t)(n))
        stack_grow(sp,p,(SSize_t)(n));

where it incorrectly skips the call to stack_grow() and then the caller
tramples over the end of the stack because it assumes that it has in fact
been extended. The value of N passed to stack_grow() can also potentially
get truncated or wrapped.

Note that the N arg of stack_grow() is SSize_t and EXTEND()'s N arg is
documented as SSize_t.  In earlier times, they were both ints.
Significantly, this means that they are both signed, and always have been.

In detail, the problems and their solutions are:

1) N is a signed value: if negative, it could be an indication of a
    caller's invalid logic or wrapping in the caller's code. This should
    trigger a panic. Make it so by adding an extra test to EXTEND() to
    always call stack_grow if negative, then add a check and panic in
    stack_grow() (and other places too). This extra test will be constant
    folded when EXTEND() is called with a literal N.

2) If the caller passes an unsigned value of N, then the comparison is
    between a signed and an unsigned value, leading to potential
    wrap-around. Casting N to SSize_t merely hides any compiler warnings,
    thus failing to alert the caller to a problem with their code. In
    addition, where sizeof(N) > sizeof(SSize_t), the cast may truncate N,
    again leading to false negatives. The solution is to remove the cast,
    and let the caller deal with any compiler warnings that result.

3) Similarly, casting stack_grow()'s N arg can hide any warnings issued by
    e.g. -Wconversion. So remove it.  It still does the wrong thing if the
    caller uses a non-signed type (usually a panic in stack_grow()), but
    coders have slightly more chance of spotting issues at compile time
    now.

4) If sizeof(N) > sizeof(SSize_t), then the N arg to stack_grow() may get
   truncated or sign-swapped. Add a test for this (basically that N is too
   big to fit in a SSize_t); for simplicity, in this case just set N to
   -1 so that stack_grow() panics shortly afterwards. In platforms where
   this can't happen, the test is constant folded away.

With all these changes, the macro now looks in essence like:

     if ( n < 0 || PL_stack_max - p < n)
        stack_grow(sp,p,
            (sizeof(n) > sizeof(SSize_t) && ((SSize_t)(n) != n) ? -1 : n));

5 years agofix some 32/64-bit compiler warnings
David Mitchell [Wed, 9 Sep 2015 12:02:40 +0000 (13:02 +0100)]
fix some 32/64-bit compiler warnings

Some bits of code don't do well on a 32-bit system with 64-bit ints
(-Duse64bitint)

In particular:

_MEM_WRAP_NEEDS_RUNTIME_CHECK:
    if sizeof(MEM_SIZE) > sizeof(n), then the shift count could be
        negative

S_regmatch:
    ln and n were two different sizes and signesses, so comparing them
    warned. Since they were being mis-used as two convenient temporary
    booleans anyway, just use temporary booleans instead.

Perl_sv_vcatpvfn_flags:
    the test/assertion (IV)elen < 0 was (I think) being used to test for
    signed/unsigned conversion wrap-around. elen is of type STRLEN which
    is a pointer-based type, so can be 32-bit while IV is 64-bit. Instead
    compare it to half the maximum value of a STRLEN var to see if it may
    have wrapped.

5 years agoUpgrade Module-Metadata from 1.000027 to 1.000029-TRIAL
Karen Etheridge [Thu, 1 Oct 2015 04:30:20 +0000 (21:30 -0700)]
Upgrade Module-Metadata from 1.000027 to 1.000029-TRIAL

1.000029  2015-09-11 16:25:43Z (TRIAL RELEASE)
  - fix missing "use" statement in refactored test helper (only affected older
    perls, due to other module interactions)

1.000028  2015-09-11 04:24:39Z (TRIAL RELEASE)
  - refactored and expanded test cases
  - fixed a $VERSION extraction issue on perl 5.6.2 (RT#105978, PR#17)
  - fix the detection of package Foo when $Foo::VERSION is set (RT#85961)

from
https://cpan.metacpan.org/authors/id/E/ET/ETHER/Module-Metadata-1.000029-TRIAL.tar.gz

distribution files omitted:
    CONTRIBUTING
    Changes
    INSTALL
    LICENSE
    MANIFEST
    META.json
    META.yml
    Makefile.PL
    README
    dist.ini
    t/00-report-prereqs.dd
    t/00-report-prereqs.t
    weaver.ini
    xt/author/00-compile.t
    xt/author/compat_lc.t
    xt/author/eol.t
    xt/author/kwalitee.t
    xt/author/mojibake.t
    xt/author/no-tabs.t
    xt/release/changes_has_content.t
    xt/release/cpan-changes.t
    xt/release/distmeta.t
    xt/release/minimum-version.t
    xt/release/pod-coverage.t
    xt/release/pod-no404s.t
    xt/release/pod-syntax.t
    xt/release/portability.t

5 years agoadd licensing information to pod
Karen Etheridge [Thu, 1 Oct 2015 01:44:35 +0000 (18:44 -0700)]
add licensing information to pod

5 years agoperlapi: Clarify process of using undocumented globals
Karl Williamson [Wed, 18 Jun 2014 00:49:53 +0000 (18:49 -0600)]
perlapi: Clarify process of using undocumented globals

One should send email to p5p first to get the go-ahead for documenting
and using an undocumented function or global variable.

5 years agoAdd a test for a goto regression from Aug 2010 fixed in Oct 2014.
Nicholas Clark [Wed, 30 Sep 2015 15:31:26 +0000 (17:31 +0200)]
Add a test for a goto regression from Aug 2010 fixed in Oct 2014.

An obscure bug involving goto within the same scope in the presence of
compile-time optimised away blocks was introduced in Aug 2010 by commit
ac56e7de46621c6f, "Peephole optimise adjacent pairs of nextstate ops."

The bug was fixed in Oct 2014 by commit f5b5c2a37af87535, "Simplify
double-nextstate optimisation"

Add a test, to ensure that we don't regress.

5 years agodocument the specific value of $!{E...}
Ricardo Signes [Wed, 30 Sep 2015 11:49:40 +0000 (07:49 -0400)]
document the specific value of $!{E...}

...and note that it is subject to change and not guaranteed

5 years agoperlfunc: Nit
Karl Williamson [Tue, 29 Sep 2015 17:55:02 +0000 (11:55 -0600)]
perlfunc: Nit

5 years agoMerge branch 'remove-lexical-topic' into blead
Ricardo Signes [Tue, 29 Sep 2015 15:16:52 +0000 (11:16 -0400)]
Merge branch 'remove-lexical-topic' into blead

5 years agoMatch ops no longer need OPpTARGET_MY origin/rjbs/remove-lexical-topic
Father Chrysostomos [Wed, 19 Aug 2015 21:39:15 +0000 (14:39 -0700)]
Match ops no longer need OPpTARGET_MY

Actually, I don’t think they have needed it for a while.

5 years agoRemove OPpGREP_LEX
Father Chrysostomos [Wed, 19 Aug 2015 21:30:40 +0000 (14:30 -0700)]
Remove OPpGREP_LEX

It is no longer used.

5 years agoStop using OPpGREP_LEX at run time
Father Chrysostomos [Wed, 19 Aug 2015 21:30:08 +0000 (14:30 -0700)]
Stop using OPpGREP_LEX at run time

It is no longer set.

5 years agoop.c: Stop searching for lexical $_
Father Chrysostomos [Wed, 19 Aug 2015 21:23:56 +0000 (14:23 -0700)]
op.c: Stop searching for lexical $_

at compile time.

5 years agopp.c:pp_reverse: Don’t use find_rundefsv
Father Chrysostomos [Wed, 19 Aug 2015 21:22:39 +0000 (14:22 -0700)]
pp.c:pp_reverse: Don’t use find_rundefsv

It just calls DEFSV now, so use DEFSV directly.

5 years agoRemove find_rundefsv2
Father Chrysostomos [Wed, 19 Aug 2015 21:21:50 +0000 (14:21 -0700)]
Remove find_rundefsv2

It was never public, and was only written for the sake of pp_coreargs,
which no longer uses it.

5 years agoIn pp.c:pp_coreargs, use DEFSV directly
Father Chrysostomos [Wed, 19 Aug 2015 21:20:36 +0000 (14:20 -0700)]
In pp.c:pp_coreargs, use DEFSV directly

rundefsv2 is only necessary for lexical $_.  It’s slower than a simple
DEFSV, which is what it falls back to anyway.

5 years agoGut public rundefsv functions
Father Chrysostomos [Wed, 19 Aug 2015 21:17:43 +0000 (14:17 -0700)]
Gut public rundefsv functions

As long as the lexical $_ syntax is disabled anyway, this is what they
would return.

5 years agoBump $warnings::VERSION to 1.34
Father Chrysostomos [Wed, 19 Aug 2015 21:16:39 +0000 (14:16 -0700)]
Bump $warnings::VERSION to 1.34

5 years agoRemove arybase lexical $_ tests
Father Chrysostomos [Wed, 19 Aug 2015 21:14:42 +0000 (14:14 -0700)]
Remove arybase lexical $_ tests

5 years agoRemove experimental::lexical_topic warnings category
Father Chrysostomos [Wed, 19 Aug 2015 20:12:11 +0000 (13:12 -0700)]
Remove experimental::lexical_topic warnings category

5 years agoDisable lexical $_
Father Chrysostomos [Wed, 19 Aug 2015 20:10:16 +0000 (13:10 -0700)]
Disable lexical $_

This just disables the syntax and modifes the tests.  The underlying
infrastructure has not been removed yet.

I had to change a couple of tests in cpan/.

5 years agokillpg for VMS.
Craig A. Berry [Sat, 26 Sep 2015 22:24:57 +0000 (17:24 -0500)]
killpg for VMS.

Implement our own killpg by scanning for processes in the specified
process group, which may not mean exactly the same thing as a Unix
process group, but at least we can now send a signal to a parent (or
master) process and all of its sub-processes.  In Perl-land, this
means we can now send a negative pid like so:

  kill SIGKILL, -$pid;

to signal all processes in the same group as $pid.

5 years agoMake ext/XS-APItest/t/cophh.t work on EBCDIC
Karl Williamson [Thu, 3 Sep 2015 00:00:55 +0000 (18:00 -0600)]
Make ext/XS-APItest/t/cophh.t work on EBCDIC

The new EBCDIC-only code will also work on ASCII platforms, but I left
the ASCII code as-is.

5 years agot/re/pat.t: EBCDIC fix
Karl Williamson [Wed, 23 Sep 2015 03:31:02 +0000 (21:31 -0600)]
t/re/pat.t: EBCDIC fix

5 years agoClarify FIRSTKEY and NEXTKEY usage.
Jarkko Hietaniemi [Fri, 25 Sep 2015 12:10:45 +0000 (08:10 -0400)]
Clarify FIRSTKEY and NEXTKEY usage.

5 years agoPOD fix in the documentation for SvTHINKFIRST
Rafael Garcia-Suarez [Fri, 25 Sep 2015 07:29:28 +0000 (09:29 +0200)]
POD fix in the documentation for SvTHINKFIRST

5 years ago[perl #126133] autodie touches its touch_me, make it writable
Tony Cook [Tue, 22 Sep 2015 23:33:50 +0000 (09:33 +1000)]
[perl #126133] autodie touches its touch_me, make it writable

autodie's utime.t touches touch_me, in a git checkout that's fine
since the file is writable, but in a distribution, all files are
read-only by default, and on Win32 the utime() call the test expects
to succeed fails.

Per Sisyphus's note, also make win32/GNUmakefile writable to match the
other Win32 makefiles, since they're often modified to configure the
build.

5 years agoFix typo and Module-CoreList is 5.20150920 on the CPAN now
Chris 'BinGOs' Williams [Tue, 22 Sep 2015 22:52:05 +0000 (23:52 +0100)]
Fix typo and Module-CoreList is 5.20150920 on the CPAN now

5 years agoUpdate Module::CoreList
Peter Martini [Mon, 21 Sep 2015 13:19:14 +0000 (09:19 -0400)]
Update Module::CoreList

5 years agoBump the perl version in various places for 5.23.4.
Peter Martini [Mon, 21 Sep 2015 12:37:35 +0000 (08:37 -0400)]
Bump the perl version in various places for 5.23.4.

5 years agoUpdate release_schedule
Peter Martini [Mon, 21 Sep 2015 11:28:16 +0000 (07:28 -0400)]
Update release_schedule

Tick off 5.23.3

5 years agoPorting/new-perldelta.pl regenerations
Peter Martini [Mon, 21 Sep 2015 11:27:05 +0000 (07:27 -0400)]
Porting/new-perldelta.pl regenerations

5 years agoAdd epigraph for 5.23.3
Peter Martini [Mon, 21 Sep 2015 11:04:57 +0000 (07:04 -0400)]
Add epigraph for 5.23.3

5 years agoAdd 5.23.3 to perlhist v5.23.3
Peter Martini [Mon, 21 Sep 2015 01:38:35 +0000 (21:38 -0400)]
Add 5.23.3 to perlhist

5 years agoFinalize perldelta with Acknowledgments
Peter Martini [Mon, 21 Sep 2015 01:28:13 +0000 (21:28 -0400)]
Finalize perldelta with Acknowledgments

5 years agoUpdate Module::CoreList for 5.23.3
Peter Martini [Mon, 21 Sep 2015 00:11:37 +0000 (20:11 -0400)]
Update Module::CoreList for 5.23.3

5 years agoperldelta updates for 5.23.3
Peter Martini [Mon, 21 Sep 2015 01:19:58 +0000 (21:19 -0400)]
perldelta updates for 5.23.3

5 years agoRemove unneeded ", from perldiag entry
Peter Martini [Mon, 21 Sep 2015 01:46:53 +0000 (21:46 -0400)]
Remove unneeded ", from perldiag entry

5 years agoop.c: ck_match does not use its context
Father Chrysostomos [Sun, 20 Sep 2015 22:07:36 +0000 (15:07 -0700)]
op.c: ck_match does not use its context

g++ told me so.

5 years ago[perl #126064] Apply scalar context to stat args
Father Chrysostomos [Sun, 20 Sep 2015 22:06:39 +0000 (15:06 -0700)]
[perl #126064] Apply scalar context to stat args

If we don’t apply scalar context to stat’s argument, then it doesn’t
get its context marked:

$ ./perl -Ilib -MO=Concise -le 'stat stat stat'
7  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
6     <1> stat vK/1 ->7
5        <1> stat K/1 ->6
4           <1> stat K/1 ->5
-              <1> ex-rv2sv sK/1 ->4
3                 <#> gvsv[*_] s ->4
-e syntax OK

and it might think that it is in void context at run time:

$ ./perl -Ilib -le 'print 1, 2, 3,(stat stat stat), 4, 5, 6'
1456

It ate my stack items!

If it reads past the beginning of the stack, it can crash.

Just apply scalar context, and Bob’s your uncle, of course.

5 years agoRemove VMS-specific bits of OP_KILL.
Craig A. Berry [Sun, 20 Sep 2015 02:54:02 +0000 (21:54 -0500)]
Remove VMS-specific bits of OP_KILL.

The rationale for this change almost twenty years ago was that
the "CRTL's emulation of Unix-style signals and kill()" couldn't
send signals that got noticed by images running in supervisor
mode.  This hasn't been true of the CRTL for some time, and we
haven't been using the CRTL's kill for a very long time either.

So remove this once-but-no-longer-necessary hack.  Experiments
show that it is still possible to kill any process we want,
assuming the signalling process has the necessary privileges (or
owns the target process).

TODO:  implement killpg() -- if Win32 can do it, surely it's
possible on VMS.

5 years agoAdd API tests for utf8.h macros
Karl Williamson [Thu, 27 Aug 2015 05:16:35 +0000 (23:16 -0600)]
Add API tests for utf8.h macros

5 years agoChange meaning of UNI_IS_INVARIANT on EBCDIC platforms
Karl Williamson [Mon, 3 Aug 2015 03:20:44 +0000 (21:20 -0600)]
Change meaning of UNI_IS_INVARIANT on EBCDIC platforms

This should make more CPAN and other code work without change.  Usually,
unwittingly, code that says UNI_IS_INVARIANT means to use the native
platform code values for code points below 256, so acquiesce to the
expected meaning and make the macro correspond.  Since the native values
on ASCII machines are the same as Unicode, this change doesn't affect
code running on them.

A new macro, OFFUNI_IS_INVARIANT, is created for those few places that
really do want a Unicode value.  There are just a few places in the Perl
core like that, which this commit changes.

5 years agoUpdate Encode to CPAN version 2.77
Ricardo Signes [Fri, 18 Sep 2015 17:29:43 +0000 (13:29 -0400)]
Update Encode to CPAN version 2.77

  [DELTA]

$Revision: 2.77 $ $Date: 2015/09/15 13:53:27 $
! Unicode/Unicode.xs Unicode/Unicode.pm
  Address RT#107043: If no BOM is found, the routine dies.
  When you decode from UTF-(16|32) without -BE or LE without BOM,
  Encode now assumes BE accordingly to RFC2781 and the Unicode
  Standard version 8.0
  https://rt.cpan.org/Public/Bug/Display.html?id=107043
! Makefile.PL encoding.t
  Mend pull/42
! Encode.xs Makefile.PL encoding.pm encoding.t
  Pulled: precompile 1252 table as that is now the Pod::Simple default
  https://github.com/dankogai/p5-encode/pull/42

5 years agoTentative fix for RT#125350 - AFL detected crash.
Shlomi Fish [Fri, 4 Sep 2015 19:26:12 +0000 (22:26 +0300)]
Tentative fix for RT#125350 - AFL detected crash.