This is a live mirror of the Perl 5 development currently hosted at
2 years ago(perl #108276) indent optimize_op() loop body
Tony Cook [Wed, 30 Jan 2019 00:06:52 +0000 (11:06 +1100)]
(perl #108276) indent optimize_op() loop body

2 years ago(perl #108276) remove recursion from optimize_op()
Tony Cook [Tue, 29 Jan 2019 05:29:04 +0000 (16:29 +1100)]
(perl #108276) remove recursion from optimize_op()

The prevented code like:

  ./miniperl -e 'my $line = "\$cond ? \$a : \n"; my $code = ($line x 100000) . "\$b;\n"; eval $code;'

from crashing due to stack overflow.

It does however take a long time to compile.

Because it doesn't strictly recurse through the op tree (due
to OP_SUBST), I couldn't use traverse_op_tree().

I considered wrapping a traverse_op_tree() loop inside a defer op
loop, so OP_SUBST would defer its op, but processing order is
somewhat important from setting PL_curcop.

This also processes the child ops in reverse order, I'm not sure if
that's a real problem (no tests failed), but the next commit fixes
that order.

2 years ago(perl #108276) add wrappers for deferred op processing
Tony Cook [Tue, 29 Jan 2019 04:03:43 +0000 (15:03 +1100)]
(perl #108276) add wrappers for deferred op processing

To avoid duplication of the declarations.

2 years ago(perl #108276) indent body of new finalize_op() loop
Tony Cook [Tue, 29 Jan 2019 03:22:02 +0000 (14:22 +1100)]
(perl #108276) indent body of new finalize_op() loop

2 years ago(perl #108276) eliminate recursion from finalize_op()
Tony Cook [Tue, 29 Jan 2019 02:57:51 +0000 (13:57 +1100)]
(perl #108276) eliminate recursion from finalize_op()

whitespace in next commit

2 years agoGrammatical correction only.
James E Keenan [Mon, 4 Feb 2019 14:11:09 +0000 (09:11 -0500)]
Grammatical correction only.

Sentences ending with a parenthetical phrase that ends
with an abbreviation such as 'etc.' still require a period
outside of the parentheses.


For: RT 133820.  Christopher Chavez is now a Perl author.

2 years agoDefine _GNU_SOURCE if using the musl libc on linux.
Andy Dougherty [Thu, 31 Jan 2019 19:05:41 +0000 (14:05 -0500)]
Define _GNU_SOURCE if using the musl libc on linux.

Together with prior commits ba73a4cb8ff8d82a1010, and 63c1fa6a98,
this should close [perl #133760].

2 years agoImprove detection of memrchr, strlcat, and strlcpy.
Andy Dougherty [Thu, 31 Jan 2019 18:04:32 +0000 (13:04 -0500)]
Improve detection of memrchr, strlcat, and strlcpy.

This is continuation of commit f8d82a1010 addressing [perl #133760].
Linux systems using the musl C library have memmem, memrchr, strlcat, and
strlcpy, but the prototypes are only visible if _GNU_SOURCE is defined.
This patch makes Configure test both whether the prototype is visible
and whether the C symbol is visible.

Still to be done is automatically adding _GNU_SOURCE if the musl library
is being used -- probably in hints/

2 years agoUpdate Encode to CPAN version 3.00
Chris 'BinGOs' Williams [Thu, 31 Jan 2019 09:12:29 +0000 (09:12 +0000)]
Update Encode to CPAN version 3.00


$Revision: 3.00 $ $Date: 2019/01/31 04:51:32 $
  VERSION bumped to 3.00 to make PAUSE happy

2.100 2019/01/31 04:26:40
!  Encode.xs MANIFEST
+  t/xml.t
  Pulled: Do not access SV* buffer if we have not called SvPV_force()
  remove utf8messages.t which is already deleted from the repository.

2 years agoIf comparison is always true, while (1) should suffice.
James E Keenan [Fri, 30 Nov 2018 15:33:07 +0000 (10:33 -0500)]
If comparison is always true, while (1) should suffice.

Per suggestion by Dave Mitchell in RT 133703, re-implemented in RT

2 years agoperldelta for d4c456e337e6
Tony Cook [Tue, 29 Jan 2019 23:20:08 +0000 (10:20 +1100)]
perldelta for d4c456e337e6

2 years ago(perl #133782) set magic when changing $^R
Tony Cook [Mon, 21 Jan 2019 00:41:03 +0000 (11:41 +1100)]
(perl #133782) set magic when changing $^R

The regexp engine sets and restores $^R in a few places, but didn't
mg_set() (SvSETMAGIC()) it at all.

Calls to length() on $^R, both within regexp code blocks and on
a successful match could add utf8 length magic to $^R, and modifying
$^R without mg_set() could leave now invalid length magic.

2 years agoSplit t/re/fold_grind.t into multiple test files
Karl Williamson [Mon, 28 Jan 2019 09:28:25 +0000 (02:28 -0700)]
Split t/re/fold_grind.t into multiple test files

This has been a goal for a long time, but I thought it would be a lot of
work, but now have realized that there was a fairly easy simplistic

The core file is renamed  It formerly had an outer loop
which iterated over the possible character set regex pattern modifiers,
/a, /l, etc that were tested.  Now that loop is just a block and new
wrapper files have been created, one per modifier.  They just pass a
global to the core file that gives which modifier this test file is to
use.  Hence each file corresponds to one iteration of the old outer
loop, splitting the tests up into 6 smaller tests that can run in

2 years agoUpdate Test-Simple to CPAN version 1.302161
Chris 'BinGOs' Williams [Tue, 29 Jan 2019 20:02:22 +0000 (20:02 +0000)]
Update Test-Simple to CPAN version 1.302161


1.302161  2019-01-29 09:34:27-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Remove SHM Optimization

2 years agobump $IO::VERSION
Tony Cook [Tue, 29 Jan 2019 05:44:01 +0000 (16:44 +1100)]

2 years agoAvoid indenting POD paragraphs in dist/IO
Shlomi Fish [Sun, 27 Jan 2019 08:53:32 +0000 (10:53 +0200)]
Avoid indenting POD paragraphs in dist/IO

It is considered monospaced code blocks and was misformatted by

Submitted via

Signed-off-by: Todd Rinaldo <>
2 years agoUpdate perlfaq to CPAN version 5.20190126
Chris 'BinGOs' Williams [Mon, 28 Jan 2019 14:31:57 +0000 (14:31 +0000)]
Update perlfaq to CPAN version 5.20190126


5.20190126  2019-01-26 04:39:37Z
  * Many typos and pod markup fixed (PR#75, #76) thanks, Joaquin Ferrero!)
  * Added reference in perlfaq to new ~ syntax in indented here-docs (PR#77,
    thanks Celejar!)

2 years agodon't leak temp files
Tony Cook [Mon, 28 Jan 2019 03:11:50 +0000 (14:11 +1100)]
don't leak temp files

the test I added allocated more temp files, but didn't arrange for
backup files to be cleaned up.

Modified the cleanup to clean up every generated temp and backup file
even if more are allocated in the future with mkfiles()

2 years agoPERL_OP_PARENT is always defined, stop testing for it
Tony Cook [Thu, 24 Jan 2019 23:32:42 +0000 (10:32 +1100)]
PERL_OP_PARENT is always defined, stop testing for it

PERL_OP_PARENT is the new reality, leaving the pre-processor
checks is more confusing that anything else.

I left the test in perl.c for consistency with the other checks in that

2 years agoAnother attempt to improve Configure detection of memmem() [perl #133760].
Andy Dougherty [Thu, 24 Jan 2019 02:39:39 +0000 (21:39 -0500)]
Another attempt to improve Configure detection of memmem() [perl #133760].

This updates commit ca152fd8207cf53816b1407d5f54f6ea160a3ef8.
Linux systems have memmem, but the prototype in <string.h> is only
visible if __GNU_SOURCE is defined.  This version tests for both the
prototype in <string.h> and the symbol in libc.  (Thanks to Tony C. for
the suggestion.)  (For BSD systems, no extra define is needed.)

2 years agoAdd ability to include literal text in the prototype check.
Andy Dougherty [Thu, 24 Jan 2019 02:12:29 +0000 (21:12 -0500)]
Add ability to include literal text in the prototype check.

This is the same technique as in the metaconfig unit Protochk.U.
See that unit for more usage information.  It is a bit clunky,
but does work.

2 years agofind.t: Use temporary testing directory for all blocks of tests.
James E Keenan [Wed, 16 Jan 2019 15:56:44 +0000 (10:56 -0500)]
find.t: Use temporary testing directory for all blocks of tests.

During the execution of ext/File-Find/t/taint.t certain files and directories
are created.  As inferred from smoke-test reports, when testing in parallel
these entities ran the risk of being detected by certain tests in
ext/File-Find/t/find.t, thereby causing intermittent failures in the smoke

Problem is being addressed by (a) moving the block of tests created in August 2014
(RT #122547) to prevent processing of misspelled options to a place in the
file where we have moved from the current working directory one level down to
a temporary testing directory; and (b) providing a list of basenames of files
we expect to find therewithin.

2 years agosv_utf8_(downgrade|decode) no longer marked experimental
Tony Cook [Tue, 22 Jan 2019 23:07:43 +0000 (10:07 +1100)]
sv_utf8_(downgrade|decode) no longer marked experimental

These have been marked with the 'M' may change flag since that flag
was introduced, they're used commonly on CPAN and except for consting
they haven't changed since then.

[perl #133788]

2 years agoImprove Configure detection of memmem() [perl #133760].
Andy Dougherty [Tue, 22 Jan 2019 19:17:05 +0000 (14:17 -0500)]
Improve Configure detection of memmem() [perl #133760].

Linux systems have memmem, but the header prototype is only visible if
the C library, but didn't check if the correct prototype is available.
This patch compiles & runs a test program that will fail if the prototype
is needed but not available.

This does not completely close [perl #133760].  The tests for strlcat()
and strlcpy() may also need to be similarly changed.  Also, this patch
does not change whether _GNU_SOURCE is defined or not.  Presumably that
would be done separately in the linux hints file.

2 years agoperldelta for 4829a1eae86e
Tony Cook [Tue, 22 Jan 2019 03:58:59 +0000 (14:58 +1100)]
perldelta for 4829a1eae86e

2 years ago(perl #133751) qr// is already blessed
Tony Cook [Tue, 15 Jan 2019 22:42:16 +0000 (09:42 +1100)]
(perl #133751) qr// is already blessed

2 years agoperldelta for 5d4636a3aa0b
Tony Cook [Tue, 22 Jan 2019 03:26:47 +0000 (14:26 +1100)]
perldelta for 5d4636a3aa0b

2 years ago(perl #130367) separate error for push etc on hash/glob
Tony Cook [Sun, 18 Dec 2016 23:49:27 +0000 (10:49 +1100)]
(perl #130367) separate error for push etc on hash/glob

2 years agoTest file in Encode is no longer customised
Chris 'BinGOs' Williams [Mon, 21 Jan 2019 14:42:56 +0000 (14:42 +0000)]
Test file in Encode is no longer customised

2 years agoEncode: synch with CPAN version 2.99
Dan Kogai [Mon, 21 Jan 2019 14:25:18 +0000 (09:25 -0500)]
Encode: synch with CPAN version 2.99

2 years ago(perl #131562) correct large line numbers copying eval lines on #line
Tony Cook [Wed, 23 Aug 2017 04:18:26 +0000 (14:18 +1000)]
(perl #131562) correct large line numbers copying eval lines on #line

Previously this used I32 for line numbers, which takes half the range
of line_t and folds it into negative numbers, leading to trying to store
the lines at negative indexes.

The while loop was also modified to stop storing if/when the line number
no longer fits into cop_line, or no longer fits into SSize_t (as a
positive number) since the index parameter to av_store() is a SSize_t.

2 years agoProvide defined value for $TODO only where test should not run.
James E Keenan [Sun, 20 Jan 2019 20:48:19 +0000 (15:48 -0500)]
Provide defined value for $TODO only where test should not run.

Some tests should not be run on older perls.  To indicate that, provide
an undef rather than a defined but false value.

This reflects Test::Builder synch with CPAN for upstream bug fix:

Note that these should really be SKIPs rather than TODOs (but we can handle that later).

2 years agoProvide defined value for $TODO only where test is still failing.
James E Keenan [Sun, 20 Jan 2019 20:23:13 +0000 (15:23 -0500)]
Provide defined value for $TODO only where test is still failing.

Reflecting Test::Builder synch with CPAN for upstream bug fix:

Provide description for previously TODO-ed test.

2 years agoHere be unicorns
Chris 'BinGOs' Williams [Sun, 20 Jan 2019 10:27:10 +0000 (10:27 +0000)]
Here be unicorns

2 years agofix version in delta
Karen Etheridge [Sun, 20 Jan 2019 03:58:31 +0000 (19:58 -0800)]
fix version in delta

It was also misstated in the commit message for 928a385c.

2 years agoUpdate Module::CoreList for 5.29.8
Abigail [Sun, 20 Jan 2019 03:25:23 +0000 (04:25 +0100)]
Update Module::CoreList for 5.29.8

2 years agoBump the perl version in various places for 5.29.8
Abigail [Sun, 20 Jan 2019 03:12:20 +0000 (04:12 +0100)]
Bump the perl version in various places for 5.29.8

2 years agoNew perldelta for 5.29.8
Abigail [Sun, 20 Jan 2019 02:57:56 +0000 (03:57 +0100)]
New perldelta for 5.29.8

2 years agoTick!
Abigail [Sun, 20 Jan 2019 02:46:30 +0000 (03:46 +0100)]

Ticked of the 5.29.7 release from the release schedule.

2 years agoEpigraph for 5.29.7
Abigail [Sun, 20 Jan 2019 02:44:48 +0000 (03:44 +0100)]
Epigraph for 5.29.7

2 years agoPorting/makerel: fix progress message.
Abigail [Sun, 20 Jan 2019 01:27:21 +0000 (02:27 +0100)]
Porting/makerel: fix progress message.

The message emitted just before creating the .xz file was identical
to the message emitted just before creating the .gz file. Which
didn't make much sense.

2 years agoAnd 5.29.7 release to pod/perlhist v5.29.7
Abigail [Sun, 20 Jan 2019 00:43:01 +0000 (01:43 +0100)]
And 5.29.7 release to pod/perlhist

2 years agoBump copyright to 2019 in perl.c and README.
Abigail [Sun, 20 Jan 2019 00:40:50 +0000 (01:40 +0100)]
Bump copyright to 2019 in perl.c and README.

2 years agoNew/Update Modules section for perldelta
Abigail [Sat, 19 Jan 2019 23:59:42 +0000 (00:59 +0100)]
New/Update Modules section for perldelta

2 years agoPerldelta acknowledgements for 5.29.7.
Abigail [Sat, 19 Jan 2019 23:45:10 +0000 (00:45 +0100)]
Perldelta acknowledgements for 5.29.7.

2 years agoUpdate Module::CoreList for 5.29.7
Abigail [Sat, 19 Jan 2019 23:34:53 +0000 (00:34 +0100)]
Update Module::CoreList for 5.29.7

2 years agoPerldelta: Link to each ticket.
Abigail [Sat, 19 Jan 2019 22:09:59 +0000 (23:09 +0100)]
Perldelta: Link to each ticket.

This was an automated process, turning any '[perl #NNNN]' into a
linke to the corresponding ticket on

2 years agoPerldelta: spell out '2nd'.
Abigail [Sat, 19 Jan 2019 22:04:19 +0000 (23:04 +0100)]
Perldelta: spell out '2nd'.

2 years agoPerldelta: Document changes leading up to 5.29.7.
Abigail [Sat, 19 Jan 2019 19:21:32 +0000 (20:21 +0100)]
Perldelta: Document changes leading up to 5.29.7.

2 years agoUpdate Test-Simple to CPAN version 1.302160
Chris 'BinGOs' Williams [Sat, 19 Jan 2019 10:42:35 +0000 (10:42 +0000)]
Update Test-Simple to CPAN version 1.302160


1.302160  2019-01-18 11:44:33-08:00 America/Los_Angeles

    - No Changes since last trial release

1.302159  2019-01-09 13:21:37-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Add table support to ctx->fail and ctx->fail_and_return
    - Fix Instance.t on haiku-os

1.302158  2019-01-08 15:36:24-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix TAP test on windows
    - Fix math errors in table indentation
    - Devel requires Term::Table

1.302157  2019-01-08 14:10:29-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix minor typos and missing doc sections
    - Add table support in info facet and TAP formatter

1.302156  2019-01-07 11:13:07-08:00 America/Los_Angeles

    - No changes from last trial

1.302155  2019-01-04 11:25:17-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix test not to fail in non-english locales

1.302154  2019-01-04 10:20:54-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix SHM pid checking for some platforms in Instance.t
    - Add SHM errno/msg to warning about SHM going away

1.302153  2019-01-03 08:39:42-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Improve SHM verification and state awareness

1.302152  2018-12-26 12:21:32-08:00 America/Los_Angeles (TRIAL RELEASE)

    - More Instance.t improvements
    - Add trace to SHM error when possible

1.302151  2018-12-20 11:05:47-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix another locale error in Instance.t

1.302150  2018-12-20 10:57:09-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix locale error in Instance.t
    - Windows test fixes
    - perl 5.6 test fixes

1.302149  2018-12-20 09:47:31-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Even more SHM error improvements

1.302148  2018-12-17 13:08:23-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Further Improve SHM error message

1.302147  2018-12-17 12:59:14-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Improve SHM error message

1.302146  2018-12-17 09:06:44-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix SHM test to work on machines without SHM

1.302145  2018-12-12 11:26:32-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix localization error in new test (#820)

1.302144  2018-12-12 09:51:25-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Add tests for shmwrite fix (#815)

1.302143  2018-12-11 19:10:37-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix failure to check error code on shmwrite (#815)

1.302142  2018-12-11 11:55:22-08:00 America/Los_Angeles (TRIAL RELEASE)

    - Fix #814 Windows fork+test failure
    - Fix #819 Documentation updates
    - Fix #810 Verbose TAP newline regression
    - Fix #817 local $TODO bug
    - Fix #812 Another local $TODO bug
    - Fix #815 shm read warning
    - Merge doc fix PR's from magnolia-k (thanks!)

2 years agomy_atof3() Fix uncommon bug where it wrongly fails
Karl Williamson [Fri, 18 Jan 2019 18:30:00 +0000 (11:30 -0700)]
my_atof3() Fix uncommon bug where it wrongly fails

This bug showed up only on -Dusemymalloc without Debugging, and without
various other common Configure options.

It causes my_atof3() to return failure where in fact success was
achieved.  It apparently got triggered due to slight differences in
malloc behaviors.

The bug is that it changed a string pointer to new memory and forgot to
change it back to the original value when that memory got freed.  The
test that fails is an equal/not equal of two pointers, and usually two
pointers aren't the same, meaning the bug doesn't appear.

The only case where my_atof3() is called is in parsing certain
\p{nv=...} where "..." is not a rational number.  So the scope of this
bug is limited.

Spotted by Ryan Voots.

2 years agoUpdate Math-BigInt-FastCalc to CPAN version 0.5008
Chris 'BinGOs' Williams [Fri, 18 Jan 2019 19:29:35 +0000 (19:29 +0000)]
Update Math-BigInt-FastCalc to CPAN version 0.5008


0.5008 2018-10-09


 * Sync test files with Math-BigInt.

 * Better Makefile.PL.

2 years agoUpdate Math-BigInt to CPAN version 1.999816
Chris 'BinGOs' Williams [Fri, 18 Jan 2019 19:28:07 +0000 (19:28 +0000)]
Update Math-BigInt to CPAN version 1.999816


1.999816 2018-10-26

 * bnok() for Math::BigInt and Math::BigFloat now support the full Kronenburg
   extension. The behaviour is identical to the behaviour of the Maple and
   Mathematica function for negative integers n, k. Add tests. This closes CPAN
   RT #95628.

 * Fix POD errors. This closes CPAN RT #125141.

1.999815 2018-10-19

 * Move bitwise operators signed and, signed or, and signed xor from
   lib/Math/BigInt/ into lib/Math/BigInt/ The file
   lib/Math/BigInt/ is no longer needed and thus removed.

1.999814 2018-10-01

 * Add to_base() and from_base() to Math::BigInt and corresponding library
   methods _to_base() and _from_base() to Math::BigInt::Lib. This was inspired
   by CPAN RT #122681.

 * Fix Makefile.PL to reflect that Test::More is only needed for testing, not
   for building.

 * In the documentation for each of the to_(bin|hex|oct|bytes) methods, add a
   reference to the corresponding from_(bin|hex|oct|bytes) method.

2 years agoUpdate Unicode-Collate to CPAN version 1.27
Chris 'BinGOs' Williams [Thu, 17 Jan 2019 18:39:59 +0000 (18:39 +0000)]
Update Unicode-Collate to CPAN version 1.27


1.27  Wed Jan  2 19:42:56 2019
    - DUCET is updated (for Unicode 10.0.0) as Collate/allkeys.txt.
    - The default UCA_Version is 36.
    - Locale/*.pl and CJK/ are updated.

1.26  Mon Dec 31 14:32:07 2018
    - U::C::Locale newly supports locale: cu.
    - tailoring Cyrillic YI as BYELORUSSIAN-UKRAINIAN I with DIAERESIS.
      (affected locale: kk)
    - added loc_cu.t in t.

2 years agoUpdate File-Temp to CPAN version 0.2309
Chris 'BinGOs' Williams [Thu, 17 Jan 2019 18:38:27 +0000 (18:38 +0000)]
Update File-Temp to CPAN version 0.2309


0.2309    2019-01-06 20:29:15Z
          - fix longstanding pod formatting error (issue #19, RT#109526)

2 years agoUpdate IO-Compress to CPAN version 2.084
Chris 'BinGOs' Williams [Thu, 17 Jan 2019 18:08:33 +0000 (18:08 +0000)]
Update IO-Compress to CPAN version 2.084


  2.084 5 January 2019

        Added support for IO::Uncompress::Zstd and IO::Uncompress::UnLzip

  2.083 30 December 2018

      * IO::Compress::*
      * IO::Uncompress::*
        The BinModeIn and BinModeOut options in are now no-ops.
        ALL files will be read/written in binmode.

      * IO::Uncompress::Unzip
        Fixed issue with unziping a member from a streamed zip file.
        Issue triggered by a libreoffice document.
        Test added to 105oneshot-zip-only.t
        Thanks to Fabrizio Pivari for the bug report.

      * Added U64::isZero

      * bin/zipdetails
        Added 'Data Stream Alignment' (tag 0xa11e) to extra fields.
        Field sourced from

        #125140: Tiny POD error in Compress::Zlib

2 years agoUpdate Compress-Raw-Bzip2 to CPAN version 2.084
Chris 'BinGOs' Williams [Thu, 17 Jan 2019 18:06:41 +0000 (18:06 +0000)]
Update Compress-Raw-Bzip2 to CPAN version 2.084


  2.084 5 January 2019

      * No Changes

  2.083 30 December 2018

      * No Changes

2 years agoUpdate Compress-Raw-Zlib to CPAN version 2.084
Chris 'BinGOs' Williams [Thu, 17 Jan 2019 18:05:01 +0000 (18:05 +0000)]
Update Compress-Raw-Zlib to CPAN version 2.084


  2.084 5 January 2019

      * No Changes

  2.083 30 December 2018

      * No Changes

2 years ago(perl #133755) link back to readpipe from the qx// docs
Tony Cook [Mon, 14 Jan 2019 23:59:36 +0000 (10:59 +1100)]
(perl #133755) link back to readpipe from the qx// docs

2 years agobump version numbers for PathTools
Tony Cook [Mon, 14 Jan 2019 01:06:57 +0000 (12:06 +1100)]
bump version numbers for PathTools

2 years ago(perl #123724) don't translate ... to ..\.. on Win32
Tony Cook [Thu, 1 Nov 2018 02:43:17 +0000 (13:43 +1100)]
(perl #123724) don't translate ... to ..\.. on Win32

Apparently this was a thing that Win32 doesn't support.

2 years agoPATCH: [perl #133756] Failure to match properly
Karl Williamson [Fri, 11 Jan 2019 03:59:31 +0000 (20:59 -0700)]
PATCH: [perl #133756] Failure to match properly

This was caused by a counting error.

An EXACTFish regnode has a finite length it can hold for the string
being matched.  If that length is exceeded, a 2nd node is used for the
next segment of the string, for as many regnodes as are needed.

A problem occurs if a regnode ends with one of the 22 characters in
Unicode 11 that occur in non-final positions of a multi-character fold.
The design of the pattern matching engine doesn't allow matches across
regnodes.  Consider, for example if a node ended in the letter 'f' and
the next node begins with the letter 'i'.  That sequence should match,
under /i, the ligature "fi" (U+FB01).  But it wouldn't because the
pattern splits them across nodes.  The solution I adopted was to forbid
a node to end with one of those 22 characters if there is another string
node that follows it.  This is not fool proof, for example, if the
entire node consisted of only these characters, one would have to split
it at some position (In that case, we just take as much of the string as
will fit.) But for real life applications, it is good enough.

What happens if a node ends with one of the 22, is that the node is
shortened so that those are instead placed at the beginning of the
following node.  When the code encounters this situation, it backs off
until it finds a character that isn't a non-final fold one, and closes
the node with that one.

A /i node is filled with the fold of the input, for several reasons.
The most obvious is that it saves time, you can skip folding the pattern
at runtime.  But there are reasons based on the design of the optimzer
as well, which I won't go into here, but are documented in regcomp.c.
When we back out the final characters in a node, we also have to back
out the corresponding unfolded characters in the input, so that those
can be (folded) into the following node.  Since the number of characters
in the fold may not be the same as unfolded, there is not an easily
discernable correspondence between the input and the folded output.
That means that generally, what has to be done is that the input is
reparsed from the beginning of the node, but the permitted length has
been shortened (we know precisely how much to shorten it to) so that it
will end with something other than the 22.  But, the code saves the
previous input character's position (for other reasons), so if we only
have to backup one character, we can just use that and not have to

This bug was that the code thought a two character backup was really a
one character one, and did not reparse the node, creating an off-by-one
error, and a character was simply omitted in the pattern (that should
have started the following node).  And the input had two of the 22
characters adjacent to each other in just the right positions that the
node was split.  The bisect showed that when the node size was changed
the bug went away, at least for this particular input string.  But a
different, longer, string would have triggered the bug, and this commit
fixes that.

This bug is actually very unlikely to occur in most real world
applications.  That is because other changes in the regex compiler have
caused nodes to be split so that things that don't particpate in folds
at all are separated out into EXACT nodes.  (The reason for that is it
allows the optimizer things to grab on to under /i that it wouldn't
otherwise have known about.)  That means that anything like this string
would never cause the bug to happen because blanks and commas, etc.
would be in separate nodes, and so no node would ever get large enough
to fill the 238 available byte slots in a node (235 on EBCDIC).  Only a
long string without punctuation would trigger it.  I have artificially
constructed such a string in the tests added by this commit.

One of the 22 characters is 't', so long strings of DNA "ACTG" could
trigger this bug.  I find it somewhat amusing that this is something
like a DNA transcription error, which occurs in nature at very low
rates, but selection, it is believed, will make sure the error rate is
above zero.

2 years agoregcomp.c: Fix wrong comment
Karl Williamson [Fri, 11 Jan 2019 03:58:00 +0000 (20:58 -0700)]
regcomp.c: Fix wrong comment

2 years agoDelay fatalization of deprecation of unsafe UTF-8 macros from XS
Karl Williamson [Wed, 9 Jan 2019 04:04:36 +0000 (21:04 -0700)]
Delay fatalization of deprecation of unsafe UTF-8 macros from XS

Trying to earlier make this fatal led to some issues in primarily Tk,
which I haven't had a chance to address, and it's getting to late in the
development cycle to do it now.

2 years agoShorten test descriptions
James E Keenan [Tue, 1 Jan 2019 15:27:13 +0000 (10:27 -0500)]
Shorten test descriptions

Per recommendation by Tony Cook in RT 133740.

2 years agoConduct tests of IO::Dir in temporary directory
James E Keenan [Sat, 29 Dec 2018 04:05:19 +0000 (23:05 -0500)]
Conduct tests of IO::Dir in temporary directory

For RT # 133740:  After the release of perl-5.29.5, smoke tests
intermittently began to report failures in dist/IO/t/io_dir.t.

In preceding  months, similar intermittent failures had been reported
for files testing File::Find (RT 133658) and GDBM_File (RT 133664).  In
those cases the problem was diagnosed as race conditions under parallel
testing where test files and directories were being created in or
underneath the current working directory without resort to tempdirs or

The testing in dist/IO/t/io_dir.t presumes the existence of a stable set
of files and subdirectories in dist/IO/.  If additional files or
subdirectories are created while this file is being run, that
presumption is no longer met.

The dist/IO/t/ directory was therefore inspected for test files which,
for testing purposes, would create files or directories underneath the
dist/IO/.  The following test files do so:


Of the above, only io_xs.t takes the precaution of using

Using File::Temp::tempdir in this file should mitigate the problem.

In addition, all tests in io_dir.t now have descriptions.

2 years ago(perl #133575) prevent set/longjmp clobbering locals in S_fold_constants
Tony Cook [Wed, 2 Jan 2019 23:48:05 +0000 (10:48 +1100)]
(perl #133575) prevent set/longjmp clobbering locals in S_fold_constants

My original approach moved the whole switch into the new function,
but that was a lot messier, and I don't think it's necessary.

pad_swipe() can throw, but only for panics, and in DESTROY if
refadjust is true, which isn't the case here.

CLEAR_ERRSV() might throw if the code called by CALLRUNOPS()
puts an object that dies in DESTROY in $@, but I think that
might cause an infinite loop in the original code.

2 years agoRemove one superfluous word in sysseek documentation.
James E Keenan [Sun, 6 Jan 2019 01:16:30 +0000 (20:16 -0500)]
Remove one superfluous word in sysseek documentation.

2 years agoregen/ Fix undefined C behavior
Karl Williamson [Mon, 31 Dec 2018 04:29:07 +0000 (21:29 -0700)]
regen/ Fix undefined C behavior

This fixes compiler warnings "performing pointer arithmetic on a null
pointer has undefined behavior"

There are several ways to fix this.  This one was suggested by
Tomasz Konojacki++.  Instead of trying to point to address 1 and 2, two
variables are created, and we point to them.  const is cast away.

2 years agoUse same mixture of hard-tabs and spaces for indent
James E Keenan [Sat, 5 Jan 2019 14:38:07 +0000 (09:38 -0500)]
Use same mixture of hard-tabs and spaces for indent

... as in other ifdefs within S_Internals_V(pTHX_ CV *cv).

2 years agoperlapi: Fix improper formal param name
Karl Williamson [Fri, 4 Jan 2019 20:35:01 +0000 (13:35 -0700)]
perlapi: Fix improper formal param name

2 years agoregen/ Rmv extraneous tab in output
Karl Williamson [Fri, 4 Jan 2019 20:34:08 +0000 (13:34 -0700)]
regen/ Rmv extraneous tab in output

2 years agoperldelta for 817480137a8b
Tony Cook [Thu, 3 Jan 2019 04:40:22 +0000 (15:40 +1100)]
perldelta for 817480137a8b

2 years agosimplify the error reporting from the #125351 fix
Tony Cook [Tue, 28 Aug 2018 05:02:32 +0000 (15:02 +1000)]
simplify the error reporting from the #125351 fix

2 years ago(perl #132158) abort compilation if we see an error compiling a form
Tony Cook [Tue, 28 Aug 2018 04:11:10 +0000 (14:11 +1000)]
(perl #132158) abort compilation if we see an error compiling a form

2 years agobump $lib::VERSION
Tony Cook [Thu, 3 Jan 2019 03:42:18 +0000 (14:42 +1100)]
bump $lib::VERSION

2 years agoHint about $dir/$version is checked by and deleted from @INC
Eugen Konkov [Tue, 18 Sep 2018 07:19:46 +0000 (10:19 +0300)]
Hint about $dir/$version is checked by and deleted from @INC

FIXES RT#133522

There is not clear from documentation that $dir/$version and
$dir/$version/$archname are checked and deleted from @INC when 'no lib $dir'
is used

2 years agoperldelta for b4e880f3b5c8, eb699a9c8fb7
Tony Cook [Wed, 2 Jan 2019 01:15:12 +0000 (12:15 +1100)]
perldelta for b4e880f3b5c8eb699a9c8fb7

2 years agoFirst "eof" should return true
Hauke D [Wed, 12 Dec 2018 21:26:26 +0000 (22:26 +0100)]
First "eof" should return true

When no file has previously been opened, "eof" should return true. This
behavior was broken by 32e653230c7ccc (see also [#60978]).

2 years ago[perl #133721] TODO test for eof with no ${^LAST_FH}
Tony Cook [Wed, 2 Jan 2019 00:49:47 +0000 (11:49 +1100)]
[perl #133721] TODO test for eof with no ${^LAST_FH}

2 years agoperldelta for 7122d783e33c
Tony Cook [Wed, 2 Jan 2019 00:28:23 +0000 (11:28 +1100)]
perldelta for 7122d783e33c

2 years ago[perl #133524] report line number for Prototype not terminated
Tony Cook [Wed, 2 Jan 2019 00:20:34 +0000 (11:20 +1100)]
[perl #133524] report line number for Prototype not terminated

Previously COPLINE was updated (to the end of the file) before
reporting the error, which wasn't useful.

2 years agoregcomp.c: Rmv null function calls
Karl Williamson [Tue, 1 Jan 2019 22:36:20 +0000 (15:36 -0700)]
regcomp.c: Rmv null function calls

These were relics from the removal of the sizing pass.  I did a global
substitute, and missed that these cases promptly took the inverse
function of the function I just added.  In other words, if g() is the
inverse of f(), then g(f(x)) is always x, and we can omit both g() and

2 years agoRevert "regen/ Fix bug when 2 ident tables"
Karl Williamson [Tue, 1 Jan 2019 03:19:30 +0000 (20:19 -0700)]
Revert "regen/ Fix bug when 2 ident tables"

This reverts commit 7e9b4fe4d85e9b669993bf96a7e33ffff3197e20, with
additional changes to get things to compile

It turns out I was wrong about the underlying cause that commit
addressed, and it is easier to just use the existing constants that get

2 years agoperl.h: Fix typo in comment
Karl Williamson [Tue, 1 Jan 2019 02:42:32 +0000 (19:42 -0700)]
perl.h: Fix typo in comment

2 years agoperlvars.h: A variable was being initialized unnecessarily
Karl Williamson [Mon, 31 Dec 2018 04:13:35 +0000 (21:13 -0700)]
perlvars.h: A variable was being initialized unnecessarily

2 years agoperlre: Note /i multi-char fold lookbehind assertions don't work
Karl Williamson [Sun, 30 Dec 2018 17:57:59 +0000 (10:57 -0700)]
perlre: Note /i multi-char fold lookbehind assertions don't work

2 years agoregcomp.sym: Note specialized use of 'flags' in 2 OPs
Karl Williamson [Sun, 30 Dec 2018 17:18:43 +0000 (10:18 -0700)]
regcomp.sym: Note specialized use of 'flags' in 2 OPs

2 years agoperlre: Note that lookbehind is up to 255 chars
Karl Williamson [Sun, 30 Dec 2018 17:01:38 +0000 (10:01 -0700)]
perlre: Note that lookbehind is up to 255 chars

2 years agoCorrect spelling error.
James E Keenan [Sat, 29 Dec 2018 23:34:10 +0000 (18:34 -0500)]
Correct spelling error.

2 years agoregcomp.c: Refactor \b{} parsing code
Karl Williamson [Thu, 27 Dec 2018 20:12:29 +0000 (13:12 -0700)]
regcomp.c: Refactor \b{} parsing code

This just moves things around so that the information is kept in local
variables and the regnode not created until all that info has been
completely determined.  I believe it is clearer to read, but the impetus
came from the fact that prior to this commit, use of \b{} always
restarted the parse unnecessarily because the order of things made it
appear that a real /d op had appeared, whereas it was just the one
currently being constructed

2 years agoregcomp.c: White-space only
Karl Williamson [Fri, 28 Dec 2018 02:35:01 +0000 (19:35 -0700)]
regcomp.c: White-space only

Indent the block added by the previous commit

2 years agoregcomp.c: Avoid reading out-of-bounds memory
Karl Williamson [Fri, 28 Dec 2018 02:31:18 +0000 (19:31 -0700)]
regcomp.c: Avoid reading out-of-bounds memory

Recent commit c316b824875fdd5ce52338f301fb0255d843dfec introduced an
out-of-bounds memory read.  This commit fixes it.  An ANYOFH regnode
doesn't have a bitmap, so don't try to read it.

2 years agoregen/ Rmv outdated code
Karl Williamson [Sun, 23 Dec 2018 01:36:27 +0000 (18:36 -0700)]
regen/ Rmv outdated code

Before the GCB property handling got more complicated, it was possible
to represent its vagaries with a boolean table on early Unicode
releases.  Now there are more complicated rules, and even though early
releases only use 0 or 1, the rules exist and lead to compilation
errors.  Just remove the special handling, and let the table be U8.

2 years agoregen/ Remove unused variable
Karl Williamson [Sun, 23 Dec 2018 00:22:42 +0000 (17:22 -0700)]
regen/ Remove unused variable

2 years agoChange length-1 ASCII fold pairs to ANYOFM regnodes
Karl Williamson [Sat, 8 Dec 2018 22:39:24 +0000 (15:39 -0700)]
Change length-1 ASCII fold pairs to ANYOFM regnodes

A node that matches only 'A' and 'a', for example, can be turned into an
ANYOFM node, which is faster to execute.  This is done after joining of
adjacent EXACTFish nodes, as longer nodes are better than shorter ones,
including because they lessen the number of bugs with multi-char folds
not matching because of node boundaries.

But if a length 1 node remains, ANYOFM is better.

2 years agoregcomp.c: White-space only
Karl Williamson [Sat, 8 Dec 2018 14:08:25 +0000 (07:08 -0700)]
regcomp.c: White-space only

Indent newly formed block in previous commit

2 years agoAdd new regnode: ANYOFH, without a bitmap
Karl Williamson [Fri, 7 Dec 2018 00:18:25 +0000 (17:18 -0700)]
Add new regnode: ANYOFH, without a bitmap

This commit adds a regnode for the case where nothing in the bit map has
matches.  This allows the bitmap to be omitted, saving 32 bytes of
otherwise wasted space per node.  Many non-Latin Unicode properties have
this characteristic.  Further, since this node applies only to code
points above 255, which are representable only in UTF-8, we can
trivially fail a match where the target string isn't in UTF-8.  Time
savings also accrue from skipping the bitmap look-up.  When swashes are
removed, even more time will be saved.

2 years agoRevamp qr/[...]/ optimizations
Karl Williamson [Wed, 26 Dec 2018 05:56:48 +0000 (22:56 -0700)]
Revamp qr/[...]/ optimizations

This commit extensively changes the optimizations for ANYOF regnodes
that represent bracketed character classes.

The removal of the regex compilation pass now makes these feasible and
desirable.  Compilation now tries hard to optimize an ANYOF node into
something smaller and/or faster when feasible.

Now, qr/[X]/ for any single character or POSIX class X, and any
modifiers like /d, /i, etc, should be the same as qr/X/ for the same
modifiers, unless it would require the pattern to be upgraded from
non-UTF-8 to UTF-8, unless not doing so could introduce bugs.

These changes fix some issues with multi-character /i folding.

2 years agoregcomp.c: Rename a variable
Karl Williamson [Wed, 26 Dec 2018 05:53:37 +0000 (22:53 -0700)]
regcomp.c: Rename a variable

This is to distinguish it from another similar variable being introduced
in the next commit.