This is a live mirror of the Perl 5 development currently hosted at
5 years agoperldelta for adf9095d629bebb27169b0f3b03f75ee974da100
James E Keenan [Sun, 1 Jan 2017 15:12:56 +0000 (10:12 -0500)]
perldelta for adf9095d629bebb27169b0f3b03f75ee974da100

5 years agoFix a null pointer dereference segfault in Storable.
John Lightsey [Sun, 25 Dec 2016 02:41:40 +0000 (21:41 -0500)]
Fix a null pointer dereference segfault in Storable.

At point where the retrieve_code logic was unable to read the string that
contained the code.

Also fix several locations where retrieve_other was called with a null context
pointer. This also resulted in a null pointer dereference.

Committer:  Add tests adapted from submitter's test program.

For: RT #130098

5 years agoUpgrade to threads 2.12
jdhedden [Sat, 31 Dec 2016 17:51:35 +0000 (12:51 -0500)]
Upgrade to threads 2.12

For: RT # 130469

5 years agoUpgrade to threads::shared 1.54
jdhedden [Sat, 31 Dec 2016 17:33:47 +0000 (12:33 -0500)]
Upgrade to threads::shared 1.54

5 years agoClarify that 'installhtml' is intended only for use in the Perl 5 core distribution.
jkeenan [Mon, 13 Aug 2012 01:55:42 +0000 (21:55 -0400)]
Clarify that 'installhtml' is intended only for use in the Perl 5 core distribution.

For: RT # 114466

5 years agoUpgrade to threads::shared 1.53
jdhedden [Fri, 30 Dec 2016 17:37:21 +0000 (12:37 -0500)]
Upgrade to threads::shared 1.53

For: RT #130457

5 years agoPrevent tests from getting hung up on 'NonStop' option.
James E Keenan [Fri, 30 Dec 2016 17:30:17 +0000 (12:30 -0500)]
Prevent tests from getting hung up on 'NonStop' option.


Thanks to Håkon Hægland for report and suggestion.  Simplify revisions, per
feedback from Aaron Crane.

5 years agoDiscuss Porting/sync-with-cpan -- the simpler usage -- first.
James E Keenan [Fri, 30 Dec 2016 14:58:17 +0000 (09:58 -0500)]
Discuss Porting/sync-with-cpan -- the simpler usage -- first.

Incorporate feedback from Aaron Crane.

5 years ago[MERGE] Further improvements to Porting/sync-with-cpan
Aaron Crane [Fri, 30 Dec 2016 18:48:36 +0000 (18:48 +0000)]
[MERGE] Further improvements to Porting/sync-with-cpan

With these changes, all the recent module imports could have been handled
automatically; and applying it to a tricky case that hasn't yet been
imported does now at least yield better advice on how to proceed.

5 years agoPorting/sync-with-cpan: another preflight check
Aaron Crane [Fri, 30 Dec 2016 18:27:14 +0000 (18:27 +0000)]
Porting/sync-with-cpan: another preflight check

5 years agoRevert "Porting/sync-with-cpan: apply --jobs=N when running module tests"
Aaron Crane [Fri, 30 Dec 2016 18:00:45 +0000 (18:00 +0000)]
Revert "Porting/sync-with-cpan: apply --jobs=N when running module tests"

This reverts commit 06998c55f9d56cbee761af0d6dc5ec06fcee3c62.

It turns out that some CPAN modules' test suites fail when run in parallel.
For example, DB_File has three test files, all of which create database files
of the same names. (I'm slightly puzzled as to why I don't see failures from
that module whenever running Perl's test suite in parallel; my guess is that,
when only a few test files are being run, it's much more likely that the
tests will be run simultaneously.)

We can submit patches for modules with serial-only test suites, but for now
at least, the best course of action seems to be for sync-with-cpan to run
modules' test suites serially.

5 years agoPorting/sync-with-cpan: handle unwritable files in tarballs
Aaron Crane [Fri, 30 Dec 2016 16:07:05 +0000 (16:07 +0000)]
Porting/sync-with-cpan: handle unwritable files in tarballs

If the tarball contains an unwritable file, we were throwing an exception
when trying to open the file for appending. Opening the file isn't actually
necessary for bumping the file's timestamp, which was the intention of that
code. However, it's a good idea to make the file locally-writable anyway, so
that if the user later needs to edit it, they can do so easily.

5 years agoPorting/sync-with-cpan: remove needless loop
Aaron Crane [Fri, 30 Dec 2016 16:04:35 +0000 (16:04 +0000)]
Porting/sync-with-cpan: remove needless loop

The de_exec() routine is only ever called with one argument at a time, so
simplify it.

5 years agoPorting/sync-with-cpan: fix bug in updating
Aaron Crane [Fri, 30 Dec 2016 15:40:16 +0000 (15:40 +0000)]
Porting/sync-with-cpan: fix bug in updating

We must look for $module, not $cpan_mod, because the former is specifically
the key in %Modules under which we found the details for this dist.

5 years agoPorting/sync-with-cpan: try to change "::" to "-" in module name
Aaron Crane [Fri, 30 Dec 2016 15:26:37 +0000 (15:26 +0000)]
Porting/sync-with-cpan: try to change "::" to "-" in module name

This is needed for cases like IO-Compress when the user asks for

In addition, if we still can't find the module, be more explicit about what
the problem is.

5 years agoPorting/sync-with-cpan: offer advice in the face of CUSTOMIZED
Aaron Crane [Fri, 30 Dec 2016 15:05:42 +0000 (15:05 +0000)]
Porting/sync-with-cpan: offer advice in the face of CUSTOMIZED

5 years ago[MERGE] Improve Porting/sync-with-cpan
Aaron Crane [Fri, 30 Dec 2016 14:01:57 +0000 (14:01 +0000)]
[MERGE] Improve Porting/sync-with-cpan

The original goal of this sequence of patches was to address RT#130375. That
ticket proposes extending the release manager's guide with discussion of
what regen/ does, and why it might sometimes be needed, and
thus why Porting/sync-with-cpan might yield a porting-test failure when
t/porting/regen.t detects that it needs to be run.

However, I find the RMG is already relatively bulky, and therefore hard to
navigate; so adding more text to it would exacerbate that problem. In
addition, it seems much better to merely fix this problem: we can always run
regen/, and if it makes any changes, those changes can be
committed along with the updated CPAN module being imported.

This merge also contains a few other improvements to Porting/sync-with-cpan:

- The log file it generates is now listed in .gitignore

- It allows specifying the module name with "-" rather than "::" as a name

- A bug that prevented the new module's tests from being run is now fixed

- The MANIFEST is now rewritten to accommodate any file deletions introduced
  by the updated CPAN module

- The messages emitted have been reworked slightly for clarity; in
  particular, "Fixing MANIFEST" will no longer be followed by a confusing
  and scary "'MANIFEST' is NOT sorted properly" message

- It now takes a --jobs option, which if supplied is used both for executing
  make and running the module's tests

- The --tarball option now works when the tarball isn't in the current

- It runs a few additional preflight checks that detect mistakes I found
  myself making

These changes have been tested by using Porting/sync-with-cpan to import
Test::Simple into blead as of 54f6f377a29af7d60918c003fc2c462439c340bd,
since that was the triggering case for RT#130375.

5 years agoPorting/sync-with-cpan: allow out-of-tree --tarball file
Aaron Crane [Fri, 30 Dec 2016 13:51:04 +0000 (13:51 +0000)]
Porting/sync-with-cpan: allow out-of-tree --tarball file

Previously, in this situation, we correctly used Archive::Tar to extract the
contents of the tarball under cpan/, but then tried to look for the files in
a nonexistent directory alongside the original tarball.

5 years agoPorting/sync-with-cpan: more preflight checks for --tarball
Aaron Crane [Fri, 30 Dec 2016 13:46:11 +0000 (13:46 +0000)]
Porting/sync-with-cpan: more preflight checks for --tarball

If the file supplied doesn't exist (or names a directory), we'll get a
failure from Archive::Tar after having already made some changes.

5 years agoPorting/sync-with-cpan: avoid unless/else
Aaron Crane [Fri, 30 Dec 2016 13:42:51 +0000 (13:42 +0000)]
Porting/sync-with-cpan: avoid unless/else

5 years agoPorting/sync-with-cpan: bail out early if Configure hasn't been run
Aaron Crane [Fri, 30 Dec 2016 11:33:37 +0000 (11:33 +0000)]
Porting/sync-with-cpan: bail out early if Configure hasn't been run

5 years agoPorting/sync-with-cpan: factor out internal WIN32 constant
Aaron Crane [Fri, 30 Dec 2016 11:32:39 +0000 (11:32 +0000)]
Porting/sync-with-cpan: factor out internal WIN32 constant

5 years agoPorting/sync-with-cpan: apply --jobs=N when running module tests
Aaron Crane [Fri, 30 Dec 2016 11:51:38 +0000 (11:51 +0000)]
Porting/sync-with-cpan: apply --jobs=N when running module tests

This requires switching from t/TEST to t/harness.

5 years agoPorting/sync-with-cpan: add --jobs option
Aaron Crane [Thu, 29 Dec 2016 19:01:51 +0000 (19:01 +0000)]
Porting/sync-with-cpan: add --jobs option

5 years agoPorting/sync-with-cpan: avoid "Attempting to …" message
Aaron Crane [Thu, 29 Dec 2016 18:54:56 +0000 (18:54 +0000)]
Porting/sync-with-cpan: avoid "Attempting to …" message

That message doesn't have a follow-up along the lines of "and it worked", so
the user might be left wondering what happened.

5 years agoPorting/sync-with-cpan: improve advice emitted at end
Aaron Crane [Thu, 29 Dec 2016 18:40:54 +0000 (18:40 +0000)]
Porting/sync-with-cpan: improve advice emitted at end

5 years agoPorting/sync-with-cpan: run regen/ if possibly needed
Aaron Crane [Thu, 29 Dec 2016 18:17:45 +0000 (18:17 +0000)]
Porting/sync-with-cpan: run regen/ if possibly needed

5 years agoPorting/sync-with-cpan: delete entries from MANIFEST if needed
Aaron Crane [Thu, 29 Dec 2016 16:51:09 +0000 (16:51 +0000)]
Porting/sync-with-cpan: delete entries from MANIFEST if needed

5 years agoPorting/sync-with-cpan: run manisort with --quiet
Aaron Crane [Thu, 29 Dec 2016 16:37:52 +0000 (16:37 +0000)]
Porting/sync-with-cpan: run manisort with --quiet

Without this, the user is likely to see consecutive lines saying "Fixing
MANIFEST" and "'MANIFEST' is NOT sorted properly", which looks pretty scary.

5 years agoPorting/sync-with-cpan: run manisort under the current perl
Aaron Crane [Thu, 29 Dec 2016 16:35:10 +0000 (16:35 +0000)]
Porting/sync-with-cpan: run manisort under the current perl

5 years agoPorting/sync-with-cpan: do in fact run the new dist's tests
Aaron Crane [Thu, 29 Dec 2016 13:07:35 +0000 (13:07 +0000)]
Porting/sync-with-cpan: do in fact run the new dist's tests

At the point we look for the dist's test files, we've just chdir-ed into
Perl's t/ directory (since we need to be able to run the ./perl binary in
that directory), so the tests are therefore under ../cpan/$dist.

5 years agoPorting/sync-with-cpan: accept dist name instead of package name
Aaron Crane [Thu, 29 Dec 2016 13:04:36 +0000 (13:04 +0000)]
Porting/sync-with-cpan: accept dist name instead of package name

Since the directories in cpan/ are named for the dist, this is perhaps more
obvious, at least in some situations.

5 years agoPorting/sync-with-cpan: mention generation of make.log
Aaron Crane [Thu, 29 Dec 2016 13:01:28 +0000 (13:01 +0000)]
Porting/sync-with-cpan: mention generation of make.log

And factor that filename out into a variable.

5 years agoPorting/sync-with-cpan: don't reimplement tmpdir()
Aaron Crane [Fri, 30 Dec 2016 10:18:05 +0000 (10:18 +0000)]
Porting/sync-with-cpan: don't reimplement tmpdir()

5 years agogitignore build product from Porting/sync-with-cpan
Aaron Crane [Thu, 29 Dec 2016 12:57:17 +0000 (12:57 +0000)]
gitignore build product from Porting/sync-with-cpan

5 years agoperldelta for commit 3e736f1def24bdc1982c2d308a5d3ca4a6f47313
James E Keenan [Fri, 30 Dec 2016 02:25:22 +0000 (21:25 -0500)]
perldelta for commit 3e736f1def24bdc1982c2d308a5d3ca4a6f47313

5 years agoUpgrade Compress-Raw-Bzip2 to CPAN version 2.070.
Paul Marquess [Fri, 30 Dec 2016 02:23:32 +0000 (21:23 -0500)]
Upgrade Compress-Raw-Bzip2 to CPAN version 2.070.

5 years agoperldelta for commit 182b56428366fc161308e7f68a46142f1e566eaf
James E Keenan [Thu, 29 Dec 2016 21:56:32 +0000 (16:56 -0500)]
perldelta for commit 182b56428366fc161308e7f68a46142f1e566eaf

5 years agoUpgrade Compress-Raw-Zlib to CPAN version 2.070.
Paul Marquess [Thu, 29 Dec 2016 21:53:43 +0000 (16:53 -0500)]
Upgrade Compress-Raw-Zlib to CPAN version 2.070.

5 years agoDon't define Perl_isFOO_lc in the regex extension.
Craig A. Berry [Thu, 29 Dec 2016 20:03:43 +0000 (14:03 -0600)]
Don't define Perl_isFOO_lc in the regex extension.

Otherwise it ends up multiply defined, which annoys the VMS linker
(and probably the AIX linker too).

5 years agoperldelta for commit 74f485aaef93391aca61d5b59d7992900277fb7c
James E Keenan [Thu, 29 Dec 2016 17:46:50 +0000 (12:46 -0500)]
perldelta for commit 74f485aaef93391aca61d5b59d7992900277fb7c

5 years agoUpdate DB_File from CPAN version 1.838 to 1.840.
James E Keenan [Thu, 29 Dec 2016 17:39:12 +0000 (12:39 -0500)]
Update DB_File from CPAN version 1.838 to 1.840.

From Changes:

    1.840 29 Dec 2016

       * #119569: Failed to install DB_File-1.839 into Linux

    1.839 29 Dec 2016

       * #119557: DB_File.xs: unused-parameter warnings
       * #107642: unused arg

5 years agoSilence one warnings generated during 'make' by clang.
Jerry D. Hedden [Wed, 28 Dec 2016 16:37:45 +0000 (11:37 -0500)]
Silence one warnings generated during 'make' by clang.


Committer:  Update version number in module's POD.  Add perldelta entry.

5 years agohandy.h: Add missing right paren in macro
Karl Williamson [Thu, 29 Dec 2016 15:19:06 +0000 (08:19 -0700)]
handy.h: Add missing right paren in macro

This only affected EBCDIC builds, causing syntax errors.

5 years agoAPItest.xs: Silence compiler warnings
Karl Williamson [Thu, 29 Dec 2016 04:49:06 +0000 (21:49 -0700)]
APItest.xs: Silence compiler warnings


5 years agoFix tiny POD typo
Aaron Crane [Thu, 29 Dec 2016 12:48:38 +0000 (12:48 +0000)]
Fix tiny POD typo

5 years agoAllow sv = &PL_sv_undef; sv_set_undef(sv) to work
David Mitchell [Wed, 28 Dec 2016 14:05:43 +0000 (14:05 +0000)]
Allow sv = &PL_sv_undef; sv_set_undef(sv) to work

RT #130385


    sv = &PL_sv_undef;

is modifying a read-only variable and so should croak, but some XS code
relies on the behaviour previous to the introduction of sv_set_undef(),

    sv = &PL_sv_undef;
    sv_setsv(sv, &PL_undef)

silently succeeds (sv_setsv() returns immediately if src and dst
addresses are the same).

5 years agoModule::CoreList: clarify _undelta logic
Aristotle Pagaltzis [Tue, 27 Dec 2016 04:47:37 +0000 (05:47 +0100)]
Module::CoreList: clarify _undelta logic

5 years agoperlre, perlrequick: Note other pods
Karl Williamson [Mon, 26 Dec 2016 17:43:13 +0000 (10:43 -0700)]
perlre, perlrequick: Note other pods

This revises the introductory text to link appropriately to other pods
that overlap their content.

5 years agoperlretut: Add some introductory remarks
Karl Williamson [Mon, 26 Dec 2016 17:36:39 +0000 (10:36 -0700)]
perlretut: Add some introductory remarks

In re-reading this, I realized that it assumed some basic knowledge, so
this commit adds text to explain what formerly was assumed.

5 years agosplit ' ', $foo: don't check end byte
David Mitchell [Mon, 26 Dec 2016 12:49:24 +0000 (12:49 +0000)]
split ' ', $foo: don't check end byte

The special-cased code to skip spaces at the start of the string
didn't check that s < strend, so relied on the string being \0-terminated
to work correctly. The introduction of the isSPACE_utf8_safe() macro
showed up this dodgy assumption by causing assert failures in regen.t

5 years add a missing 'exists'
Dan Collins [Tue, 11 Oct 2016 18:54:16 +0000 (14:54 -0400)] add a missing 'exists'

607ee4356 changed the hash of permitted ops from having '1' as a value
to having undef as a value. This also changed one of the warning points
from checking for truthiness to existence. However, a second warning
was accidentally left checking for truthiness. This commit fixes that
oversight, and adds a regression test for warnings in this case.

5 years agomore issues with /(?{ ... <<EOF })/
David Mitchell [Sun, 25 Dec 2016 20:14:41 +0000 (20:14 +0000)]
more issues with /(?{ ... <<EOF })/

RT #130398

My recent fix for issues with  and /(?{...})/, v5.25.7-97-g98d5e3e,
broke Method-Signatures and possibly TryCatch.

This commit seems to fix them, but is based on observation rather
than any deep understanding of what's going on.

5 years agofix (*glob) = ()
David Mitchell [Sun, 25 Dec 2016 12:14:10 +0000 (12:14 +0000)]
fix (*glob) = ()

RT #130385

The new sv_set_undef() function added by me with v5.25.7-12-ge03e82a
didn't handle undeffing a glob correctly, and gave an assertion failure.

Fix it to behave more exactly like (sv_setsv(sv, &PL_sv_undef),
which it is documented as being identical to.

5 years agoFix two broken links in perldelta.
James E Keenan [Sun, 25 Dec 2016 13:52:37 +0000 (08:52 -0500)]
Fix two broken links in perldelta.

Regenerate known_pod_issues.dat to reflect that fix.

5 years agoutf8.c: Avoid reinitializing
Karl Williamson [Sat, 24 Dec 2016 22:12:37 +0000 (15:12 -0700)]
utf8.c: Avoid reinitializing

This code, recently added,  initializes 2 inversion lists, but forgets
to save the results properly, so it gets reinitialized every time its

5 years agoPATCH: [perl #130397] Rmv useless code
Karl Williamson [Sat, 24 Dec 2016 21:54:54 +0000 (14:54 -0700)]
PATCH: [perl #130397] Rmv useless code

This code doesn't accomplish anything.

Spotted by Andy Lester.

5 years agoperldelta for ec68f98dba5f7d0d670f07a18c60d47b90982b58
James E Keenan [Sat, 24 Dec 2016 19:09:19 +0000 (14:09 -0500)]
perldelta for ec68f98dba5f7d0d670f07a18c60d47b90982b58

5 years agoFix win32 test failures
Karl Williamson [Sat, 24 Dec 2016 17:31:10 +0000 (10:31 -0700)]
Fix win32 test failures

Commit 607313a19740cb756ab98d5e58e6040ea8c125d4 introduced a bug in that
it is looking for the string "mathoms.c" in __FILE__.  But __FILE__ can
be a path with mathoms.c merely a component of it.  The easiest thing to
do is to use instr() instead of strEQ.

5 years agoperldiag: Reinistate use of Z<>
Karl Williamson [Sat, 24 Dec 2016 17:51:38 +0000 (10:51 -0700)]
perldiag: Reinistate use of Z<>

Commit 3d6c5fec8cb3579a30be60177e31058bc31285d7 removed this pod
directive because of bugs in the pod handling code.  This has been fixed
now, so this reinstates it.  Also, real links have been created to this

5 years agoDeprecate non-grapheme string delimiter
Karl Williamson [Tue, 20 Dec 2016 20:41:58 +0000 (13:41 -0700)]
Deprecate non-grapheme string delimiter

In order for Perl to eventually allow string delimiters to be Unicode
grapheme clusters (which look like a single character, but may be
multiple ones), we have to stop allowing a single char delimiter that
isn't a grapheme by itself.  These are unlikely to exist in actual code,
as they would typically display as attached to the character in front of
them, but we should be sure.

5 years agoCreate inversion list for Assigned code points
Karl Williamson [Tue, 20 Dec 2016 18:58:38 +0000 (11:58 -0700)]
Create inversion list for Assigned code points

This will be used in a future commit.

5 years agoregen/ Create list of Assigned code points
Karl Williamson [Mon, 19 Dec 2016 20:20:44 +0000 (13:20 -0700)]
regen/ Create list of Assigned code points

This creates a read-only C array to be compiled into the perl source
text segment of an inversion list of the characters that are assigned in
the current Unicode version.  This will be used in a future commit.

The difference listing is large because of defects in the diff algorithm

5 years agoDon't assume input UTF-8 is well-formed in to_utf8_case()
Karl Williamson [Mon, 19 Dec 2016 18:46:10 +0000 (11:46 -0700)]
Don't assume input UTF-8 is well-formed in to_utf8_case()

This is a deprecated function, but it still should check input validity
as best it can.

This also adds to the pod that it will be removed in 5.28.

5 years agoDeprecate toFOO_utf8()
Karl Williamson [Mon, 19 Dec 2016 18:23:22 +0000 (11:23 -0700)]
Deprecate toFOO_utf8()

Now that there are _safe versions, deprecate the unsafe ones.

5 years agoConvert core to use toFOO_utf8_safe()
Karl Williamson [Mon, 19 Dec 2016 18:12:48 +0000 (11:12 -0700)]
Convert core to use toFOO_utf8_safe()

5 years agoAdd toFOO_utf8_safe() macros
Karl Williamson [Mon, 19 Dec 2016 01:05:46 +0000 (18:05 -0700)]
Add toFOO_utf8_safe() macros

5 years agoConvert some calls to test for malformations
Karl Williamson [Fri, 16 Dec 2016 03:11:00 +0000 (20:11 -0700)]
Convert some calls to test for malformations

Code review showed several places in core where a UTF-8 sequence that
was for a code point below 256 could be malformed, and be blindly
accepted.  Convert these to use the similar macro that does the check.

One place in regexec.c was not converted because it is working on the
pattern, which perl should have generated itself, so very unlikely to be

I didn't add tests for these, as it would be a pain to figure out
somehow to trigger them, and this is precautionary, based on code
reading rather than any known field experience.

5 years agoDon't assume input to case change macros is valid
Karl Williamson [Sun, 18 Dec 2016 23:33:08 +0000 (16:33 -0700)]
Don't assume input to case change macros is valid

Experience has shown that they can be invalid, and this commit now checks
for that.  Further checking will be done in the next commit

5 years agoFor character case changing, create macros and use
Karl Williamson [Wed, 14 Dec 2016 20:02:06 +0000 (13:02 -0700)]
For character case changing, create macros and use

This creates several macros that future commits will use to provide a
layer between the caller and the function.

5 years agoregcomp.c, mathoms.c: Convert to use preferred macro
Karl Williamson [Wed, 14 Dec 2016 20:00:45 +0000 (13:00 -0700)]
regcomp.c, mathoms.c: Convert to use preferred macro

Better to use the macro than to directly call the function it wraps

5 years agoScalar::List-Utils/t/tainted.t: Skip failing tests
Karl Williamson [Sat, 24 Dec 2016 04:29:15 +0000 (21:29 -0700)]
Scalar::List-Utils/t/tainted.t: Skip failing tests

These randomly fail, often enough to cause most smokes to not show
pass, hence there is continual work involved in looking at smoke
summaries and seeing everything failing, and having to do further
investigation on each one to know if the failure is because of this bug,
or something else.  The fix for this has been delayed, so I'm creating a
temporary skip.  This will start failing again, unless fixed, at the
next 5.25 dot release.

I'm not getting any failures about having customized this cpan module,
though I've tried several different configurations to do so.  I fear
that when pushed, these will start appearing, but then it can be easily

5 years agoperlapi: Italicize some C<text> that isn't as-is
Karl Williamson [Mon, 12 Dec 2016 04:07:27 +0000 (21:07 -0700)]
perlapi: Italicize some C<text> that isn't as-is

This text appears in the middle of C<>, but is meant to be substituted
for, instead of being typed in as-is.

5 years agohandy.h: White-space, comment only
Karl Williamson [Mon, 12 Dec 2016 04:01:21 +0000 (21:01 -0700)]
handy.h: White-space, comment only

5 years agoutf8.c: Add flag to indicate unsure as to end of string to print
Karl Williamson [Mon, 12 Dec 2016 03:53:54 +0000 (20:53 -0700)]
utf8.c: Add flag to indicate unsure as to end of string to print

When decoding a UTF-8 encoded string, we may have guessed as to how long
it is.  This adds a flag so that the base level decode routine knows
that it is a guess, and it minimizes what gets printed, rather than the
normal full information, so as to minimize reading past the end of the

5 years agoDeprecate isFOO_utf8() macros
Karl Williamson [Fri, 16 Dec 2016 02:51:26 +0000 (19:51 -0700)]
Deprecate isFOO_utf8() macros

These macros are being replaced by a safe version; they now generate a
deprecation message at each call site upon the first use there in each
program run.

5 years agoregexec.c: Make isFOO_lc() non-static
Karl Williamson [Mon, 12 Dec 2016 03:35:09 +0000 (20:35 -0700)]
regexec.c: Make isFOO_lc() non-static

This is in preparation for it to be called from outside this file.

5 years agoutf8.c: White space, comments only
Karl Williamson [Fri, 9 Dec 2016 05:01:58 +0000 (22:01 -0700)]
utf8.c: White space, comments only

This indents code because a new block was formed around it.  It also
does a few other white-space changes to fit in 79 columns, and removes
an unbalanced '{' in a comment so editors that find matching pairs
aren't fooled, and adds text to another comment

5 years agoAllow allowing UTF-8 overflow malformation
Karl Williamson [Sun, 11 Dec 2016 01:01:39 +0000 (18:01 -0700)]
Allow allowing UTF-8 overflow malformation

perl has never allowed the UTF-8 overflow malformation, for some reason.
But as long as overflows are turned into the REPLACEMENT CHARACTER,
there is no real reason not to.  And making it allowable allows code
that wants to carry on in the face of malformed input to do so, without
risk of contaminating things, as the REPLACEMENT is the Unicode
prescribed way of handling malformations.

5 years agoReturn REPLACEMENT for UTF-8 overlong malformation
Karl Williamson [Sat, 10 Dec 2016 22:26:24 +0000 (15:26 -0700)]
Return REPLACEMENT for UTF-8 overlong malformation

When perl decodes UTF-8 into a code point, it must decide what to do if
the input is malformed in some way.  When the flags passed to the decode
function indicate that a given malformation type is not acceptable, the
function returns 0 to indicate failure; on success it returns the decoded
code point (unfortunately that may require disambiguation if the
input is validly a NUL).  As perl evolved, what happened when various
allowed malformations were encountered got stricter and stricter.  This
is the final malformation that was not turned into a REPLACEMENT
CHARACTER when the malformation was allowed, and this commit changes to
return that.  Unlike most other malformations, the code point value of
an overlong is well-defined, and that is why it hadn't been changed
here-to-fore.  But it is safer to use the Unicode prescribed behavior on
all malformations, which is to replace them with the REPLACEMENT
CHARACTER.  Just in case there is code that requires the old behavior,
it is retained, but you have to search the source for the undocumented
flag that enables it.

5 years agoReturn REPLACEMENT for UTF-8 empty malformation
Karl Williamson [Wed, 14 Dec 2016 18:38:42 +0000 (11:38 -0700)]
Return REPLACEMENT for UTF-8 empty malformation

The previous commit no longer allows this so-called malformation under
DEBUGGING builds, except if code explicitly changes to request it (or
already explicitly does, but there are no instances of this in CPAN).

If it is explicitly allowed, prior to this commit it returned NUL.  If
it wasn't allowed, it returned 0.  Most code won't treat these as
different.  When returning NUL, it basically is making nothing into
something, which might be exploitable some way by an attacker.  The
Unicode accepted way of dealing with malformations is to replace them
with the REPLACEMENT CHARACTER, and so this commit changes things to
conform to this.

5 years agoutf8.c: Forbid zero-length malformation under DEBUGGING
Karl Williamson [Mon, 19 Dec 2016 20:25:06 +0000 (13:25 -0700)]
utf8.c: Forbid zero-length malformation under DEBUGGING

5 years agoutf8.h: Don't allow zero length malformation unless requested
Karl Williamson [Sat, 10 Dec 2016 19:51:59 +0000 (12:51 -0700)]
utf8.h: Don't allow zero length malformation unless requested

The bottom level Perl routine that decodes UTF-8 into a code point has
long accepted inputs where the length is specified to be 0, returning a
NUL.  It considers this a malformation, which is accepted in some
scenarios, but not others.  In consultation with Tony Cook, we decided
this really isn't a malformation, but is a bug in the calling program.
Rather than call the decode routine when it has nothing to decode, it
should just not call it.

This commit removes the acceptance of a zero length string from any of
the canned flag combinations passed to the decode function.  One can
convert to specify this flag explicitly, if necessary.  However the next
commit will cause this to fail under DEBUGGING builds, as a step towards
removing the capability altogether.

5 years agoutf8.h: Renumber flag bits
Karl Williamson [Sat, 10 Dec 2016 19:27:19 +0000 (12:27 -0700)]
utf8.h: Renumber flag bits

This creates a gap that will be filled by future commits

5 years agotoke.c: Replace infinite loop reading input by bounded
Karl Williamson [Tue, 13 Dec 2016 02:42:23 +0000 (19:42 -0700)]
toke.c: Replace infinite loop reading input by bounded

It's safer to have an upper limit on how far you look in your input.

5 years agotoke.c: Use fewer branches
Karl Williamson [Tue, 13 Dec 2016 02:36:36 +0000 (19:36 -0700)]
toke.c: Use fewer branches

This code is true for all ASCII space characters except \n.  Rather
than enumerating them with a branch each, use a single lookup, and then
exclude \n

5 years agotoke.c: Use macro instead of repeating code
Karl Williamson [Tue, 6 Dec 2016 17:15:07 +0000 (10:15 -0700)]
toke.c: Use macro instead of repeating code

toke.c has a macro that does this task.  Use it.

5 years agotoke.c: White-space only
Karl Williamson [Tue, 6 Dec 2016 04:50:08 +0000 (21:50 -0700)]
toke.c: White-space only

5 years agotoke.c: Convert to use isFOO_utf8_safe() macros
Karl Williamson [Wed, 14 Dec 2016 01:34:12 +0000 (18:34 -0700)]
toke.c: Convert to use isFOO_utf8_safe() macros

5 years agoConvert core (except toke.c) to use isFOO_utf8_safe()
Karl Williamson [Wed, 30 Nov 2016 16:53:17 +0000 (09:53 -0700)]
Convert core (except toke.c) to use isFOO_utf8_safe()

The previous commit added this feature; now this commit uses it in core.
toke.c is deferred to the next commit to aid in possible future
bisecting, because some of the changes there seem somewhat more likely
to expose bugs.

5 years agoAdd isFOO_utf8_safe() macros
Karl Williamson [Thu, 15 Dec 2016 23:30:27 +0000 (16:30 -0700)]
Add isFOO_utf8_safe() macros

The original API does not check that we aren't reading beyond the end of
a buffer, apparently assuming that we could keep malformed UTF-8 out by
use of gatekeepers, but that is currently impossible.  This commit adds
"safe" macros for determining if a UTF-8 sequence represents
an alphabetic, a digit, etc.  Each new macro has an extra parameter
pointing to the end of the sequence, so that looking beyond the input
string can be avoided.

The macros aren't currently completely safe, as they don't test that
there is at least a single valid byte in the input, except by an
assertion in DEBUGGING builds.  This is because typically they are
called in code that makes that assumption, and frequently tests the
current byte for one thing or another.

5 years agotoke.c: Avoid a conversion to/from UTF-8
Karl Williamson [Sat, 3 Dec 2016 19:14:33 +0000 (12:14 -0700)]
toke.c: Avoid a conversion to/from UTF-8

If the source file is encoded as UTF-8, we don't have to find its code
point equivalent when parsing--we can just copy it unchanged.  This
wasn't done before because of the fear the input would be malformed, and
finding the code point had the side effect of checking for
well-formedness.  The previous commit added wellformedness checking,
so doing it again here would be redundant.

5 years agoPATCH: [perl #126310] single quote UTF-8 malformation detection
Karl Williamson [Fri, 2 Dec 2016 16:35:53 +0000 (09:35 -0700)]
PATCH: [perl #126310] single quote UTF-8 malformation detection

This adds UTF-8 wellformedness checking in Perl_lex_next_chunk, which
should get called for all program text, so this makes sure the entire
program is well-formed, not just single- or double-quoted strings.

5 years agoDie on malformed isFOO_utf8() input
Karl Williamson [Thu, 8 Dec 2016 04:08:38 +0000 (21:08 -0700)]
Die on malformed isFOO_utf8() input

At the p5p core hackathon in November 2016, it was decided to make the
previous deprecation message fatal for malformed input passed to the
isFOO_utf8() macros and friends.

5 years agoUse fnc to force out malformed warnings
Karl Williamson [Fri, 9 Dec 2016 15:45:18 +0000 (08:45 -0700)]
Use fnc to force out malformed warnings

The previous commit added a function to do this task.  This current
commit changes the several places in the core that have here-to-fore
done this in an ad-hoc (and not as reliable) manner to use the new

A couple of messages in toke.c are left in so as to avoid changing
diagnostics unnecessarily.  If those messages had been created in the
project after the enhanced malformation warnings were created, they
would have been phrased differently.

The reason some of the methods weren't so reliable, is they relied on
fatalizing the warnng message.  However if warnings are turned off, it
never gets to the point of outputting, hence doesn't necessarily die.

5 years agoAdd fnc to force out UTF-8 malform warnings at death
Karl Williamson [Thu, 8 Dec 2016 03:48:40 +0000 (20:48 -0700)]
Add fnc to force out UTF-8 malform warnings at death

The bottom level UTF-8 decode routine now generates detailed messages
when it encounters malformations.  In some instances these should be
treated as croak reasons and output even if warnings are off, just
before dying.  This commit adds a function to do this.

5 years agoSwitch most open() calls to three-argument form.
John Lightsey [Fri, 23 Dec 2016 17:35:45 +0000 (12:35 -0500)]
Switch most open() calls to three-argument form.

Switch from two-argument form.  Filehandle cloning is still done with the two
argument form for backward compatibility.

Committer:  Get all porting tests to pass.  Increment some $VERSIONs.
Run: ./perl -Ilib regen/; ./perl -Ilib regen/

For: RT #130122

5 years agoSilence win32 compiler warning
Karl Williamson [Fri, 23 Dec 2016 01:36:33 +0000 (18:36 -0700)]
Silence win32 compiler warning

The function's parameter was not declared const in embed.fnc, but was in
the function itself.

5 years agotoke.c: Silence win32 compiler warning.
Karl Williamson [Fri, 23 Dec 2016 01:24:26 +0000 (18:24 -0700)]
toke.c: Silence win32 compiler warning.

5 years agoutf8.c Extract common code into macros
Karl Williamson [Sun, 18 Dec 2016 00:25:29 +0000 (17:25 -0700)]
utf8.c Extract common code into macros

The 3 case changing functions: to upper, lower, and title case are
essentially identical except for what they call to actually do the
change; those being different macros or functions.

The fourth function, to fold, is identical to the other three for the
first part of its code, but diverges at the end in order to handle some
special cases.

This commit replaces the first part of the bodies of these 4 functions
by a common macro.  And it replaces the remainder of the first 3
functions by another common macro.

I'm not a fan of this kind of macro to use in generating code, but it
seems the best way to keep these definitions in sync.  (It has to be a
macro instead of a function because one of the parameters is a macro,
which you can't pass to a function.  I suppose one could create
functions that just calls their macro, and get around it that way, but
it doesn't seem worth it.)

This commit just moved the code to the macro, and I manually verified
that there were no logic changes.

1 of the passed-in functions requires one less argument (the final one)
than the other 3.  I originally tried to do something with the C
preprocessor to get around that, but it didn't work with the Win32
version of the preprocessor, so I gave up and added a dummy parameter to
the fourth function, which is static so that's ok to do.  Below, for the
record is my original attempt:

    /* These two macros are used to make optional a parameter to the
     * passed-in function to the macros just above.  If the passed-in
     * function doesn't take the parameter, use PLACEHOLDER in the macro
     * call; otherwise surround the parameter by a PARAM() call */
    #define PARAM(parameter) ,parameter
    #define PLACEHOLDER    /* Something for the preprocessor to grab onto */

And within the macro, it called the function like this:

    L1_func(*p, ustrp, lenp/*,*/ L1_func_extra_param)