Chris 'BinGOs' Williams [Mon, 4 Nov 2013 15:46:12 +0000 (15:46 +0000)]
Update IPC-Cmd to CPAN release 0.86
[DELTA]
0.86 Mon Nov 4 14:09:42 GMT 2013
======================================
Bug fixes:
* run_forked: workaround absent CLOCK_MONOTONIC on OSX (Petya Kohts)
* RT#89770 Patch to fix error reporting if command killed by signal
(Ed Avis)
* Make the false test more forgiving, for Solaris and other SVR*
(bingos)
0.85_02 Thu Oct 10 13:59:34 BST 2013
======================================
Bug Fixes:
* run_forked: incomplete output more than buffer size
0.85_01 Thu Sep 5 20:30:51 BST 2013
======================================
Enhancements:
* run_forked() now uses Time::HiRes and Carp
Father Chrysostomos [Mon, 4 Nov 2013 05:51:29 +0000 (21:51 -0800)]
op.c: Avoid vivifying CORE::GLOBAL:: globs unnecessarily
If we know the upgraded glob is not going to have the IMPORTED_CV
flag, we can avoid upgrading it.
Father Chrysostomos [Mon, 4 Nov 2013 05:48:09 +0000 (21:48 -0800)]
op.c: Abstract common override code
Father Chrysostomos [Mon, 4 Nov 2013 01:32:37 +0000 (17:32 -0800)]
Stop CORE::GLOBAL::require lookup from crashing on stub
‘sub CORE::GLOBAL::require;’ doesn’t create a full glob, but cheats
for efficiency. Compilation of require ops was not taking this
into account.
Father Chrysostomos [Mon, 4 Nov 2013 01:27:07 +0000 (17:27 -0800)]
Stop CORE::GLOBAL::glob lookup from crashing on stub
‘sub CORE::GLOBAL::glob;’ doesn’t create a full glob, but cheats for
efficiency. Compilation of glob ops was not taking this into account.
Father Chrysostomos [Mon, 4 Nov 2013 01:24:50 +0000 (17:24 -0800)]
Stop CORE::GLOBAL::do lookup from crashing on stub
‘sub CORE::GLOBAL::do;’ doesn’t create a full glob, but cheats
for efficiency. Compilation of do-file ops was not taking this
into account.
Father Chrysostomos [Sun, 3 Nov 2013 14:16:40 +0000 (06:16 -0800)]
Make mro code pass precomputed hash values
where possible
This involved adding hv_fetchhek and hv_storehek macros and changing
S_mro_clean_isarev to accept a hash parameter and expect HVhek_UTF8
instead of SVf_UTF8.
Father Chrysostomos [Sun, 3 Nov 2013 13:49:48 +0000 (05:49 -0800)]
Check that stash entries are GVs when aliasing pkgs
$ perl5.18.1 -e '$Foo::{"Bar::"} = 0; $Bar::Bar::; *Bar:: = *Foo::'
Segmentation fault: 11
That $Foo::{"Bar::"} = 0; assignment is documented as having unde-
fined behaviour, but it shouldn’t crash.
Father Chrysostomos [Sun, 3 Nov 2013 13:42:55 +0000 (05:42 -0800)]
gv.c: Tweak API docs
Consistent spaces after dots
Some grammar corrections (by no means sufficient, though)
Remove a sentence about ‘name’ being writable. It has been a const
char * since these docs were added in
954c1994.
Father Chrysostomos [Sun, 3 Nov 2013 13:24:10 +0000 (05:24 -0800)]
hv.h: missing macro parentheses
Let’s defuse this time bomb before it causes problems.
Father Chrysostomos [Sun, 3 Nov 2013 12:47:17 +0000 (04:47 -0800)]
sub NEGATIVE_INDICES; + $tied[-1] = crash
This code in av.c, when trying to find $NEGATIVE_INDICES, was doing a
direct stash element lookup--instead of going through the normal GV
functions--and then expecting the returned value to be a GV.
‘sub NEGATIVE_INDICES’ creates a stash element that is a PV, not a GV,
so it’s easy to make things crash.
Father Chrysostomos [Sun, 3 Nov 2013 12:23:43 +0000 (04:23 -0800)]
mg.c: Fix misuse of AvARRAY in defelem_target
defelem magic does not usually apply to tied arrays, but an array can
be tied after a defelem has been created and points to it. The code
for handling deferred elements was never updated for tied arrays when
those were added, so it still does AvFILL and AvARRAY.
AvFILL works on tied arrays, and calls FETCHSIZE. But AvARRAY
accesses the AV’s internal structure. So AvFILL might suggest that
the index is within the array, whereas it is actually past the end
of AvARRAY.
By tying the array after a deferred element with a high index has been
created and then extending the tied array (so AvFILL returns a big
number), we can make AvARRAY[big number] crash.
This script:
use Tie::Array;
sub {
tie @a, "Tie::StdArray";
$#a = 20000;
warn pre;
"$_[0]";
warn post
}->($a[10000]);
gives this output:
pre at -e line 5.
Segmentation fault: 11
For tied arrays, we need to use av_fetch, rather than AvARRAY.
Father Chrysostomos [Sat, 2 Nov 2013 19:38:41 +0000 (12:38 -0700)]
pp_sort.c: Remove useless assignments; reduce var scope
6cda7db16df9 stopped the value of the stash variable from being used,
so there is no longer any need to assign to it. sv_2cv, however,
requires an HV ** argument, so we cannot eliminate it completely.
Father Chrysostomos [Sat, 2 Nov 2013 13:48:13 +0000 (06:48 -0700)]
op.c:ck_open: Make hint lookup conditional on HINT_LOCALIZE_HH
This makes this just a teeny tiny bit faster.
HINT_LOCALIZE_HH will have been set in PL_hints if %^H has anything
in it. So bypass the hash lookup altogether if that flag is not set.
Father Chrysostomos [Mon, 4 Nov 2013 00:41:52 +0000 (16:41 -0800)]
op.c: Combine common code for hash keys and slices
Father Chrysostomos [Sun, 3 Nov 2013 22:48:58 +0000 (14:48 -0800)]
Make ‘No such class’ apply to ${$ref}{key}, too
$ perl -le 'use fields "foo"; my main $r; $r->{bar}'
No such class field "bar" in variable $r of type main at -e line 1.
$ perl -le 'use fields "foo"; my main $r; $$r{bar}'
No such class field "bar" in variable $r of type main at -e line 1.
$ perl -le 'use fields "foo"; my main $r; ${$r}{bar}'
$
Notice how the last one is silent. There is already code to handle
the block for hash slices, so we can copy that.
Father Chrysostomos [Sun, 3 Nov 2013 22:29:06 +0000 (14:29 -0800)]
perlhacktips: Fix verbatim line
Shorten this long verbatim line by removing the pod markup (which would
be rendered literally), changing the indent to 4 (to match the ‘make
foo.i’ further down) and removing the trailing space
Father Chrysostomos [Sun, 3 Nov 2013 22:24:16 +0000 (14:24 -0800)]
op.c: Apply shared hash key optimisation to slices
Father Chrysostomos [Sun, 3 Nov 2013 22:02:32 +0000 (14:02 -0800)]
Make ‘No such field’ error apply to 1-elem slices
e75d1f10 added ‘No such class field’. It has never worked for single-
element slices.
Father Chrysostomos [Sun, 3 Nov 2013 21:07:44 +0000 (13:07 -0800)]
Stop my Class + sub FIELDS + hash lookup from crashing
‘sub FIELDS’ cheats by not vivifying the *FIELDS glob. The code that
checks whether hash keys are valid assumes that the FIELDS entry in a
stash is a GV, which it is not in this case, so it crashes.
Chris 'BinGOs' Williams [Sat, 2 Nov 2013 23:03:56 +0000 (23:03 +0000)]
Update IO-Compress to CPAN version 2.063
[DELTA]
2.063 20 October 2013
* RT#89305: Typo in Compress::Zlib _combine function documentation
Chris 'BinGOs' Williams [Sat, 2 Nov 2013 23:01:02 +0000 (23:01 +0000)]
Update Compress-Raw-Zlib to CPAN version 2.063
[DELTA]
2.063 23 October 2013
* gcc -g3: final link failed: Memory exhausted
[#88936]
* Compress::Raw::Zlib uses AutoLoader for no reason
[#88260]
* Typo in Compress::Zlib _combine function documentation
[#89305]
Chris 'BinGOs' Williams [Sat, 2 Nov 2013 22:53:41 +0000 (22:53 +0000)]
Update Compress-Raw-Bzip2 to CPAN version 2.063
[DELTA]
2.063 20 October 2013
* Compress::Raw::Bzip2 uses AutoLoader for no reason
[#88259]
Chris 'BinGOs' Williams [Sat, 2 Nov 2013 22:43:50 +0000 (22:43 +0000)]
Update Unicode-Collate to CPAN version 1.01
[DELTA]
1.01 Sat Nov 2 19:00:38 2013
- DUCET is updated (for Unicode 6.3.0) as Collate/allkeys.txt.
! Please notice that allkeys.txt will be overwritten if you have had
other allkeys.txt already.
- The default UCA_Version is 28.
- Locale/*.pl (except fr.pl) and CJK/Korean.pm are updated.
- modified tests: loc_es.t, loc_estr.t, rewrite.t, version.t in t.
Chris 'BinGOs' Williams [Sat, 2 Nov 2013 22:37:55 +0000 (22:37 +0000)]
Update DB_File to CPAN version 1.830
[DELTA]
1.830 2 November 2013
* Memory leaks when failed to open db
RT #89589
* DB_File uses AutoLoader for no reason
RT #88258
Daniel Dragan [Sat, 2 Nov 2013 03:04:35 +0000 (23:04 -0400)]
win32/win32sck.c: dont close() a freed socket os handle
This patch is in RT as [perl #120091] but also fixes [perl #118059].
Because the MS C lib, doesn't support sockets natively, Perl uses
open_osfhandle, to wrap a socket into CRT fd. Sockets handles must be
closed with closesocket, not CloseHandle (which CRT close calls).
Undefined behavior will happen otherwise according to MS. Swap the now
closed socket handle in the CRT to INVALID_HANDLE_VALUE. The CRT will
not call CloseHandle on INVALID_HANDLE_VALUE and returns success if it
sees INVALID_HANDLE_VALUE. CloseHandle will never be called on a socket
handle with this patch.
In #118059, a race condition was reported, where accept() failed with
ENOTSOCK, when a psuedofork was done, and connection from the child fake
perl process to parent fake perl process was done. The race condition's
effects occur inside the user mode code in mswsock.dll!_WSPAccept in the
parent perl, which winds up having a kernel handle of an unknown type
in it that is invalid. The invalid handle is passed to kernel calls, which
fail, because the handle is invalid, and the error is translated to
ENOTSOCK. The exact mechanism of the bug and 100% reproducabilty of the
race were never established, since mswsock.dll is closed source.
Another benefit of this patch is making it easier to use C debuggers on
a Win32 Perl because of less debugger-only bad handle exceptions
(NtGlobalFlag FLG_ENABLE_HANDLE_EXCEPTIONS/0xC0000008 STATUS_INVALID_HANDLE).
This commit reverts parts of commit
9b1f18150a
"Get rid of PERL_MSVCRT_READFIX" and parts of commit
46e77f1118
"Don't use the PERL_MSVCRT_READFIX when using VC++ 7.x onwards." and
contains additional changes not found in those 2 commits. The method for
selecting the definition of struct ioinfo isn't perfect. It will break if
VC > 6 is changed to use the older msvcrt.dll. For some versions of the
CRT, like 2005/8.0, it is impossible to know the definition of ioinfo
struct at C compile time, since the struct increased in size a number of
times with higher build numbers of v8.0 CRT. SxS and security updates make
that same perl binary will run with different v8.0 CRTs at different times.
For the case when ioinfo can not be hard coded, introduce
WIN32_DYN_IOINFO_SIZE. With WIN32_DYN_IOINFO_SIZE, the size of the ioinfo
struct is determined on Perl process startup using _mize. Since VC 2013
is a brand new product at the time of this patch, even though its struct
is known, and 2008 through 2012 have been stable so far, don't assume at
this time 2013's ioinfo will be stable. Therefore, VC 2003 and older
(including Mingw's v6.0), 2008 to 2012, are hard coded. 2013 is a candidate
one day to be hard coded. VC 2005 can never be hard coded.
All non-WIN32_DYN_IOINFO_SIZE compilers will work with
WIN32_DYN_IOINFO_SIZE. Non-WIN32_DYN_IOINFO_SIZE mode is simply more
efficient.
For future compatibility concerns, 3 forms of protection are offered.
If __pioinfo isn't exported anymore, the Perl build will break. In
WIN32_DYN_IOINFO_SIZE mode, if __pioinfo isn't heap memory anymore or the
start of a memory block, the runtime panic will happen. In with and without
WIN32_DYN_IOINFO_SIZE, only on a DEBUGGING build, the handle returned by
CRT's _get_osfhandle, which is the authentic handle in the CRT, is compared
to the handle found by accessing the ioinfo struct directly. If they don't
match, the handle swapping code is broken and the assert fails.
Craig A. Berry [Sat, 2 Nov 2013 18:51:42 +0000 (13:51 -0500)]
Revise fake bool build advice from
f789f6a4bdb.
The suggestions from that Craig Berry fellow were only half-baked.
Father Chrysostomos [Sat, 2 Nov 2013 13:17:23 +0000 (06:17 -0700)]
Undefined lex sub used as inherited method crashes
Thanks to misuse of CvGV.
$ perl5.19.5 -XMfeature=:all -e 'my sub foo {} undef &foo; *UNIVERSAL::bar = \&foo; main->bar()'
Segmentation fault: 11
When deciding under which name to autoload the sub, we can’t assume
CvGV(that_sub) is a GV, as it may be null.
Daniel Dragan [Fri, 1 Nov 2013 21:50:39 +0000 (17:50 -0400)]
remove redundant Zero() from JMPENV_BOOTSTRAP
In commit
14dd3ad8c9 , a 3 NULL assigns were converted to a Zero() for what
I guess was an optimization. This also caused the large je_buf to be
zeroed even though je_buf was uninit before. At that time, JMPENV had
2 extra members that don't exist anymore. The 2 extra members in JMPENV
were removed in commit
766f891612 . The comment about je_throw was made
obsolete in commit
766f891612 so rework it.
One function call free NULL assign is faster than a memset() call.
je_buf is 0x40 bytes long on 32 bit VC2003 Win32 Perl. No need to zero it
since je_buf is never read unless je_prev is not NULL. Also there is no
need to zero the last 2 members je_ret and je_mustcatch since they are
immediatley assigned to. Move PL_top_env assignment to near je_prev so
compiler tries to optimize better since je_prev is the start of the struct
and hopefully will calculate the pointer once.
Also put some poisoning in case JMPENV gets new members in the future.
To conditionally poison in a macro, PERL_POISON_EXPR is being introduced
instead of 2 different definitions of JMPENV_BOOTSTRAP.
Karen Etheridge [Wed, 30 Oct 2013 23:27:33 +0000 (16:27 -0700)]
remove unneeded dependency on Test::More 0.98 (RT#88531)
Father Chrysostomos [Fri, 1 Nov 2013 19:59:53 +0000 (12:59 -0700)]
shared.pm: Consistent spaces after dots
Father Chrysostomos [Fri, 1 Nov 2013 19:49:25 +0000 (12:49 -0700)]
threads::shared: Remove redundant description just added
In commit
fd013656aac I moved the documentation for the two warnings
that threads::shared produces from perldiag.pod to shared.pm, without
rewording anything.
These two warnings had almost identical descriptions, and--I found
later--basically repeat some of the documentation of the cond_signal
function, so point to that description in the warnings section and
avoid repeating things.
Father Chrysostomos [Fri, 1 Nov 2013 13:21:41 +0000 (06:21 -0700)]
Increase $threads::shared::VERSION to 1.45
Father Chrysostomos [Fri, 1 Nov 2013 13:18:16 +0000 (06:18 -0700)]
Move threads::shared warnings from perldiag to shared.pm
following the precedent set by threads.pm.
Father Chrysostomos [Fri, 1 Nov 2013 12:48:41 +0000 (05:48 -0700)]
toke.c:S_tokeq: add comment
Father Chrysostomos [Fri, 1 Nov 2013 12:47:40 +0000 (05:47 -0700)]
toke.c:S_tokeq: remove dead code
The argument passed to tokeq is always a plain string owning its own
buffer. I checked all the callers.
This code has been like this since perl 5.000.
Father Chrysostomos [Fri, 1 Nov 2013 12:44:20 +0000 (05:44 -0700)]
Remove ancient threads diagnostics from perldiag
for several reasons:
• The wording has changed, so nobody is using these entries anyway.
• The perldiag entries are clearly not being maintained.
• The threads module has its own list of diagnostics.
• The actual wording depends on the version of the threads module
installed, not the version of perl.
Father Chrysostomos [Fri, 1 Nov 2013 13:24:28 +0000 (06:24 -0700)]
perlhack.pod: consistent spaces after dots
Father Chrysostomos [Thu, 31 Oct 2013 12:52:24 +0000 (05:52 -0700)]
perllexwarn: consistent spaces after dots
Father Chrysostomos [Thu, 31 Oct 2013 13:03:53 +0000 (06:03 -0700)]
‘Attempt to bless into a ref’ with stale method caches
As of v5.16.0-81-g234df27, SvAMAGIC has only meant potentially over-
loaded. When method changes occur, the flag is turned on. When over-
loading tables are calculated (the first time overloading is used),
the flag is turned off if it turns out there is no overloading.
At the time I did that, I assumed that all uses of SvAMAGIC were to
avoid the inefficient code path for non-overloaded objects. What I
did not notice at the time was that SvAMAGIC is used in pp_bless to
determine whether an object used as a class name should be exempt from
‘Attempt to bless into a reference’.
Hence, the bizarre result:
$ ./perl -Ilib -e 'sub foo{} bless [], bless []'
$ ./perl -Ilib -e 'bless [], bless []'
Attempt to bless into a reference at -e line 1.
This commit makes both die consistently, as they did in 5.16.
Father Chrysostomos [Thu, 31 Oct 2013 12:13:25 +0000 (05:13 -0700)]
[perl #119809] Disallow bless($ref, $tied_ref)
There is no reason tied (or otherwise magical variables like $/)
should be exempt from the ‘Attempt to bless into a reference’ error.
Father Chrysostomos [Thu, 31 Oct 2013 01:05:41 +0000 (18:05 -0700)]
bless.t: More explicit test
Not only does this prevent us from accidentally producing the wrong
error, it also makes it easy to grep and see that this error is
tested.
Father Chrysostomos [Thu, 31 Oct 2013 00:57:28 +0000 (17:57 -0700)]
Use tabs consistently in AUTHORS
Tom Hukins [Tue, 29 Oct 2013 10:25:21 +0000 (03:25 -0700)]
Documentation Patches from Tom Hukins
Reported as [perl #120406].
tr is documented in perlop's "Quote-Like Operators" section, not its
"Quote and Quote-like Operators" section.
Don't describe PerlIO as "new".
Father Chrysostomos [Thu, 31 Oct 2013 12:46:39 +0000 (05:46 -0700)]
perllexwarn: typo, pod syntax
Yves Orton [Thu, 31 Oct 2013 12:38:43 +0000 (13:38 +0100)]
Add a note that users of FATAL warnings are at risk during upgrades
Apparently it isn't obvious to all of our users that use of FATAL
warnings means that peoples code may break when they upgrade due
to the introduction of new warnings. Accordingly we document that
the use of FATAL warnings is entirely at the users risk, and that
we do not and will not consider the introduction of a warning as
an incompatible change, and that in particular the use of features
which are discouraged, unspecified, or whatnot may in the future
trigger new warnings, and thus under FATAL warnings break their code.
Father Chrysostomos [Wed, 30 Oct 2013 12:37:43 +0000 (05:37 -0700)]
Introduce PERL_BOOL_AS_CHAR define
This allows compilers that do support real booleans (C++ or anything
with stdbool.h) to emulate those that don’t.
See ticket #120314.
This patch incorporates suggestions from Craig Berry.
Karl Williamson [Thu, 31 Oct 2013 00:30:26 +0000 (18:30 -0600)]
perlre: Expand and clarify /x and (?# comment)
This pod omitted some of the details about how comments in regexes work.
I had to do some experimentation to find some of the answers.
I believe this clarifies things as well.
Karl Williamson [Thu, 31 Oct 2013 00:22:04 +0000 (18:22 -0600)]
Fix broken qr/ \N* /x
Under /x, the parsing was skipping the character following a \N (when
meaning [^\n]). In fact the parse pointer was already pointing to the
first non-white-space character, so advancing skipped the character.
That character could be the beginning of a (?#...) comment, all of which
should be skipped.
Karl Williamson [Wed, 30 Oct 2013 04:41:26 +0000 (22:41 -0600)]
regcomp.c: Clarify some comments
Father Chrysostomos [Wed, 30 Oct 2013 23:54:06 +0000 (16:54 -0700)]
pad.h: Correct PadlistMAX docs
They have been wrong since I added them.
Father Chrysostomos [Wed, 30 Oct 2013 21:01:45 +0000 (14:01 -0700)]
Increase $B::Deparse::VERSION to 1.24
Father Chrysostomos [Wed, 30 Oct 2013 21:01:15 +0000 (14:01 -0700)]
[perl #119807] Deparse s//\(3)/e in a way that does not warn
Code that does not warn should not be deparsed in a way that warns.
s//\3/e produces a warning about misuse of \3 where $3 is meant.
s//\(3)/e compiles to the same thing and produces no such warning.
So B::Deparse should parenthesize references to numbers in the rhs
of a substitution.
Father Chrysostomos [Wed, 30 Oct 2013 13:18:20 +0000 (06:18 -0700)]
Eliminate ‘Can't use \1 to mean $1’ false positives
We need to check that the quote-like operator we are parsing is a sub-
stitution (not just any quote-like operator) and that we are parsing
the right-hand side.
Daniel Dragan [Mon, 28 Oct 2013 05:28:41 +0000 (01:28 -0400)]
enable LTO/LTCG/WPO for most Visual Cs
All Win32 Visual C compilers except for VC 6/_MSC_VER == 1200 support LTCG.
LTCG generates slightly smaller and slightly faster binaries.
François Perrad [Tue, 29 Oct 2013 13:04:01 +0000 (06:04 -0700)]
[perl #120408] fix dist/ExtUtils-ParseXS/t/002-more.t
the plan is fragile 29 = 2 + 2 + 25
Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
David Mitchell [Mon, 28 Oct 2013 16:39:35 +0000 (16:39 +0000)]
'$! = EACCESS; require ...' could fail
When require is checking against a particular entry in @INC, it stats the
potential pathname, and does various checks like skipping if it's a
directory. In this case the stat succeeds, so $! is left unchanged.
Later however, pp_require() checks for $! being EACCES. So if $! was
already set before the require, this could influence require's behaviour.
Father Chrysostomos [Tue, 29 Oct 2013 04:22:14 +0000 (21:22 -0700)]
Don’t record cop address for unbreakable lines
The cop (control op) address for each statement is recorded in
${"_<$file"}[$line] so that breakpoints set on that line will flag the
op for that statement.
Then, at run time, pp_dbstate checks to see whether the op is flagged
as having a breakpoint, and calls the debugger if so.
Statements that are not breakable are nextstate, rather than dbstate
ops, and pp_nextstate ignores the flag on the op.
In some instances, the cop address was being recorded for nextstate
ops. This would happen in preamble code (e.g., the PERL5DB envi-
ronment variable or the -M switch) and when $^P contained 0x400
but not 0x02.
Recording the cop address for a nextstate op serves no purpose and is
a waste of CPU cycles.
Father Chrysostomos [Mon, 28 Oct 2013 23:14:35 +0000 (16:14 -0700)]
[perl #119799] Set breakpoints without *DB::dbline
The elements of the %{"_<..."} hashes (where ‘...’ is the filename),
whose keys are line numbers, are used to set breakpoints on the given
lines. The corresponding @{"_<..."} array contains the actual lines
of source code.
%{"_<..."} actually acts on the array of lines that @DB::dbline is
aliased to. The assumption is that *DB::dbline = *{"_<..."} will have
taken place first. Hence, all %{"_<..."} hashes are the same, when it
comes to writing to keys.
It is more useful for each %{"_<..."} hash to set breakpoints on its
corresponding file’s lines regardless of whether @DB::dbline has been
aliased, so that is what this commit does.
Each hash’s mg_obj pointer in its dbfile magic now points to the
array, and magic_setdbline uses it instead of PL_DBline.
Father Chrysostomos [Mon, 28 Oct 2013 19:38:46 +0000 (12:38 -0700)]
pp.c:pp_undef: Don’t vivify the scalar slot
When PERL_DONT_CREATE_GVSV is defined, perl generally does not vivify
the scalar slot in every GV. But it hides that implementation detail
by vivifying it when *foo{SCALAR} is accessed.
undef(*foo) was one exception to this. It vivified the scalar in
the scalar slot regardless of whether PERL_DONT_CREATE_GVSV was
defined.
Until recently, it was not safe to remove this exception, because a
typeglob with no scalar could be a candidate for downgrading (see
gv.c:gv_try_downgrade), causing global pointers like PL_DBgv to point
to freed SVs. Recent commits have fixed all those cases, so this
is now safe.
Father Chrysostomos [Mon, 28 Oct 2013 19:31:22 +0000 (12:31 -0700)]
Make PL_incgv fully refcounted
It was only reference-counted in the main thread:
$ ./perl -Ilib -e 'delete $::{INC}; eval q"my $foo : bar"'
$ ./perl -Ilib -e 'use threads; async {delete $::{INC}; eval q"my $foo : bar"}->join'
Assertion failed: (SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV), function S_apply_attrs_my, file op.c, line 2600.
Abort trap: 6
Father Chrysostomos [Mon, 28 Oct 2013 19:26:17 +0000 (12:26 -0700)]
pat.t: suppress warning
Father Chrysostomos [Mon, 28 Oct 2013 12:48:44 +0000 (05:48 -0700)]
perl.h: Remove ERRHV
It has been unused by the core since 5.6.0 (
98eae8f58) and is
unused on CPAN.
Father Chrysostomos [Mon, 28 Oct 2013 00:09:17 +0000 (17:09 -0700)]
Don’t assume *^R has a scalar
$ perl -e '*^R = *foo; /(?{})/'
Segmentation fault: 11
Father Chrysostomos [Sun, 27 Oct 2013 23:44:50 +0000 (16:44 -0700)]
[perl #54044] Make PL_replgv refcounted
Otherwise one can free it and make perl crash:
$ perl -e 'delete $::{"\cR"}; //'
Segmentation fault: 11
It crashes because PL_replgv now points to a freed SV which has no GV
slots, so GvSV on it fails.
Father Chrysostomos [Sun, 27 Oct 2013 23:02:44 +0000 (16:02 -0700)]
gv:gv_try_downgrade: Leave PL_last_in_gv alone
gv_try_downgrade exists to remove globs and subs that were (possibly
temporarily) vivified by bareword lookup. It is called whenever a
gvop is freed and its gv looks like a candidate for downgrading. That
means it applies, not only to potential sub calls, but also to *foo
and *bar. gv_try_downgrade may delete a glob from the stash alto-
gether if it is empty. So eval "*foo if 0" may delete the *foo glob.
PL_last_in_gv is the internal variable underlying ${^LAST_FH}. If
gv_try_downgrade deletes the last-read handle, then ${^LAST_FH}
will become undefined, whereas eval "*foo if 0" is not supposed to
do anything:
$ ./miniperl -le 'readline *{"foo"}; warn ${^LAST_FH}; eval "*foo if 0"; warn ${^LAST_FH}'
GLOB(0x7f8f5a0052a0) at -e line 1.
Warning: something's wrong at -e line 1.
Father Chrysostomos [Sun, 27 Oct 2013 21:37:10 +0000 (14:37 -0700)]
Make PL_argvgv refcounted
Otherwise one can free it and cause assertion failures when other
things do SvREFCNT_inc on a freed scalar:
$ ./miniperl -le 'undef *x; delete $::{ARGV}; $x++; eval "BEGIN{undef *x} readline"'
Assertion failed: (SvTYPE(sv) != (svtype)SVTYPEMASK), function Perl_sv_clear, file sv.c, line 6215.
Abort trap: 6
Father Chrysostomos [Sun, 27 Oct 2013 18:24:52 +0000 (11:24 -0700)]
gv:gv_try_downgrade: Leave PL_stderrgv alone
gv_try_downgrade exists to remove globs and subs that were (possibly
temporarily) vivified by bareword lookup. It is called whenever a
gvop is freed and its gv looks like a candidate for downgrading. That
means it applies, not only to potential sub calls, but also to *foo
and *bar. gv_try_downgrade may delete a glob from the stash alto-
gether if it is empty. So eval "*foo if 0" may delete the *foo glob.
PL_stderrgv is a shortcut variable that points to *STDERR. When
PL_stderrgv is null, the real stderr is used as a fallback.
If gv_try_downgrade deletes *STDERR (which causes PL_stderrgv to be
cleared), it can could the behaviour, which is not supposed to happen.
It doesn’t actually delete *STDERR right now, because undef() vivifies
the scalar slot, disqualifying the glob from downgrading.
If we change undef not to vivify the scalar slot (I plan to soon, and
this commit prepares for it), then this is what would happen without
this commit:
$ perl -le 'close *{"STDERR"}; undef *{"STDERR"}; eval "*STDERR if 0"; *{"STDERR"} = *STDOUT{IO}; warn'
$ perl -le 'close *{"STDERR"}; undef *{"STDERR"}; *{"STDERR"} = *STDOUT{IO}; warn'
Warning: something's wrong at -e line 1.
Notice how the first one-liner (with the eval) produces no output.
Father Chrysostomos [Sun, 27 Oct 2013 13:35:35 +0000 (06:35 -0700)]
When deleting via hek, pass the computed hash value
In those cases where the hash key comes from a hek, we already have a
computed hash value, so pass that to hv_common.
The easiest way to accomplish this is to add a new macro.
Father Chrysostomos [Sun, 27 Oct 2013 12:52:09 +0000 (05:52 -0700)]
Make PL_hintgv refcounted
Otherwise one can free it (by deleting the *^H glob) and
cause a crash:
$ perl -e 'delete $::{"\cH"}; ${^OPEN}=foo'
Segmentation fault: 11
That happens because PL_hintgv points to a freed scalar, and
GvHV(PL_hintgv) ends up trying to access nonexistent fields.
Father Chrysostomos [Sun, 27 Oct 2013 00:23:18 +0000 (17:23 -0700)]
Don’t create %@ on startup
This hash has been unused since perl-5.005_02-2093-g98eae8f:
commit
98eae8f585b9800849b5e5482e2d405f21bab67e
Author: Gurusamy Sarathy <gsar@cpan.org>
Date: Fri Oct 8 10:26:15 1999 +0000
remove kludgey duplicate background error avoidance (caused
"leaks"; %@ wasn't even user-visible under -Dusethreads);
only repeats of most recent error are now avoided
p4raw-id: //depot/perl@4316
Father Chrysostomos [Sun, 27 Oct 2013 00:08:28 +0000 (17:08 -0700)]
[perl #119811] Remove %DB::lsub
Under the debugger (the -d switch), if there is a DB::sub subroutine,
then %DB::lsub gets autovivified during a call to an lvalue sub. That
hash is never used. The code for vivifying the *DB::lsub glob was
copied from *DB::sub when lsub was added, and *DB::sub does have a
hash (%DB::sub), but *DB::lsub doesn’t need one.
Father Chrysostomos [Sat, 26 Oct 2013 23:51:23 +0000 (16:51 -0700)]
Make PL_envgv refcounted
Otherwise deleting $::{ENV} will make chdir crash:
$ perl -e 'delete $::{ENV}; chdir'
Segmentation fault: 11
This happens because PL_envgv points to a freed SV and GvHV(PL_envgv)
tries to access nonexistent fields.
Father Chrysostomos [Sat, 26 Oct 2013 20:49:40 +0000 (13:49 -0700)]
Make PL_firstgv and PL_secondgv refcounted
Otherwise freeing *a or *b in a sort block will result in a crash:
$ perl -e '@_=sort { delete $::{a}; 3 } 1..3'
Segmentation fault: 11
Chris 'BinGOs' Williams [Mon, 28 Oct 2013 22:38:11 +0000 (22:38 +0000)]
Update Socket to CPAN version 2.013
[DELTA]
2.013 2031/10/28 00:49:43
[BUGFIXES]
* Unit-test bugfixes for VMS (RT89766):
+ Need to pass protocol => IPPROTO_TCP to avoid SCTP as well
+ Perform AI_NUMERICHOST test against non-"localhost"
+ May have to set NI_NUMERICSERV flag if it fails without
Chris 'BinGOs' Williams [Mon, 28 Oct 2013 22:36:42 +0000 (22:36 +0000)]
Update HTTP-Tiny to CPAN version 0.037
[DELTA]
0.037 2013-10-28 13:26:21 America/New_York
[FIXED]
- Basic authentication in the URL is now unescaped before being encoded
into the authentication header
[DOCUMENTED]
- Added HTTP::Tiny::UA to SEE ALSO and suggested it as the appropriate
place for new features
François Perrad [Mon, 28 Oct 2013 19:29:29 +0000 (12:29 -0700)]
[perl #120398] skip t/porting/extrefs.t when cross-compiling
The toolchain is not installed on the target when cross-compiling.
So, this test must be skipped.
(same problem as RT#119769)
Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
David Mitchell [Mon, 28 Oct 2013 10:28:07 +0000 (10:28 +0000)]
perlfunc: clarify hash "modify while iterating"
[perl #120308]
5.18.0 introduced a new warning:
Use of each() on hash after insertion without resetting hash iterator
results in undefined behavior
which resulted in a debate as to whether the behaviour should also be
*documented* as as "undefined". This commit updates the documentation to
say that it is "unspecified".
Craig A. Berry [Mon, 28 Oct 2013 02:43:55 +0000 (21:43 -0500)]
getnameinfo, getaddrinfo, and inet_xxx fix-ups for configure.com.
This is mostly a very belated follow-up to
d7fba2bf7c68c, but in
the case of inet_aton, is a stupendously belated follow-up to
570bb66edbdc8.
Craig A. Berry [Mon, 28 Oct 2013 02:31:13 +0000 (21:31 -0500)]
Don't make bool an int on VMS.
The special case has been there since
61bb59065bf1b12edab3, most
likely because the VMS C++ compiler, like a lot of other C++
compilers in the 1990s implemented a bool as an int, and making
the type in C compatible seemed like a good idea. But no C++
compiler that's likely to build Perl on VMS has a bool type that
occupies more than one byte now, so remove the special case. We're
unlikely to even see this code since we've had stdbool.h since
DEC C 6.4, released in 2001.
Chris 'BinGOs' Williams [Sun, 27 Oct 2013 22:06:43 +0000 (22:06 +0000)]
Update Unicode-Collate to CPAN version 1.00
[DELTA]
1.00 Sun Oct 27 13:22:17 2013
- When a subroutine by 'overrideOut' taking a out-of-range value and
returning undef, now the value is treated as if it were U+FFFD.
* 0.99 wrongly calculates implicit weights based on out-of-range values.
- Assertion using unpack 'U' is added. If not only pack('U') but also
unpack('U') of CORE:: don't work as expected, this module will die.
Chris 'BinGOs' Williams [Sat, 26 Oct 2013 20:44:25 +0000 (21:44 +0100)]
Update Term-Cap to CPAN version 1.15
[DELTA]
1.15 Sat Oct 26 21:28:29 BST 2013
- meta data patch from David Steinbrunner
- Change email in metadata
1.14 Sat Oct 26 19:20:03 BST 2013
- Update versions everywhere
- Change email address and add the github location
1.13 Sat Oct 26 19:08:27 BST 2013
- Bring everything up to date with all patches from RT
- Sync version with core
Father Chrysostomos [Sat, 26 Oct 2013 19:28:11 +0000 (12:28 -0700)]
Don’t let gv.c:gv_try_downgrade touch PL_statgv
PL_statgv remembers the handle last used by stat, for the sake of -T _
and -B _. If a glob is freed when PL_statgv points to it, PL_statgv
is set to null.
gv_try_downgrade exists to remove globs and subs that were (possibly
temporarily) vivified by bareword lookup. It is called whenever a
gvop is freed and its gv looks like a candidate for downgrading. That
means it applies, not only to potential sub calls, but also to *foo
and *bar. gv_try_downgrade may delete a glob from the stash alto-
gether if it is empty. So eval "*foo if 0" may delete the *foo glob.
If PL_statgv is pointing to *foo, then eval "*foo if 0" may change the
behaviour, which is not supposed to happen:
$ ./perl -Ilib -le 'stat *{"foo"}; -T _; print $!; -T _; print $!'
Bad file descriptor
Bad file descriptor
$ ./perl -Ilib -le 'stat *{"foo"}; -T _; print $!; eval "*foo if 0"; -T _; print $!'
Bad file descriptor
No such file or directory
Father Chrysostomos [Sat, 26 Oct 2013 13:00:59 +0000 (06:00 -0700)]
Make PL_DBgv and other db interp vars refcounted
$ PERL5DB=1 perl -de '*DB::DB = sub {} if 0; sub DB::DB{}'
No DB::DB routine defined at -e line 1.
When the ‘if’ gets folded and *DB::DB is freed, it triggers
gv_try_downgrade, causing $DB::{DB} to be deleted and PL_DBgv to point
to a freed SV. A higher refcount would prevent gv_try_downgrade from
touching it.
Father Chrysostomos [Sat, 26 Oct 2013 12:42:08 +0000 (05:42 -0700)]
perl.c: Avoid redundant gv_AVadd and GvAVn
We don’t need to call gv_AVadd if follewed by GvAVn, which itself
calls gv_AVadd when the AV is null.
Also, we don’t need to keep checking whether GvAV(PL_argvgv) is still
defined (via GvAVn with the final n) when pushing on to it.
This code goes back at least to perl 5 alpha 2.
Father Chrysostomos [Sat, 26 Oct 2013 12:40:10 +0000 (05:40 -0700)]
gv:gv_add_by_type: Don’t check @ISA when not vivifying
I added the code (in
986d39eeb4) to magicalise @ISA when vivifying it
via @{*ISA}. But we don’t need to do that every time gv_add_by_type
is called, just when it is autovivifying.
Matthew Horsfall [Thu, 3 Oct 2013 14:09:22 +0000 (10:09 -0400)]
Add op_other to B::Concise -debug output for LOGOPs
Father Chrysostomos [Fri, 25 Oct 2013 21:40:11 +0000 (14:40 -0700)]
Regen META.{yml,json}
(If t/porting/regen.t fails without this regeneration, why doesn’t
‘make regen’ do this?)
Father Chrysostomos [Fri, 25 Oct 2013 21:36:31 +0000 (14:36 -0700)]
Add Kevin Falcone to AUTHORS
Kevin Falcone [Tue, 22 Oct 2013 18:42:49 +0000 (14:42 -0400)]
No longer point to rt.perl.org/perlbug/ as a landing page
We'll use the homepage of rt.perl.org instead, as it's much more likely
to get text updates.
Kevin Falcone [Tue, 22 Oct 2013 18:39:16 +0000 (14:39 -0400)]
update RTSERVER
This didn't work properly as is (because of the redirect from
http://rt.perl.org/rt3/ to https://rt.perl.org/rt3/) but at least it'll
work if someone tries it going forward.
Kevin Falcone [Tue, 22 Oct 2013 18:38:53 +0000 (14:38 -0400)]
Allow newer bug URLs on rt.perl.org
Kevin Falcone [Tue, 22 Oct 2013 18:38:22 +0000 (14:38 -0400)]
Fixup rt.perl.org/rt3 => rt.perl.org
These links all would redirect properly, but give out the top URL.
Chris 'BinGOs' Williams [Fri, 25 Oct 2013 18:49:52 +0000 (19:49 +0100)]
Update AutoLoader to CPAN version 5.74
[DELTA]
5.74 Fri Oct 25 19:08 2013
- Makefile.PL: Set installdirs to "site" on Perl >= 5.12
Father Chrysostomos [Fri, 25 Oct 2013 13:26:16 +0000 (06:26 -0700)]
Make sure truncated in-memory files have trailing null
Just spotted this....
If the target scalar contains something already, then setting SvCUR to
0 is not sufficient.
Father Chrysostomos [Fri, 25 Oct 2013 13:18:55 +0000 (06:18 -0700)]
t/porting/dual-life.t: Another exception
In parallel testing, it might fail on files like
cpan/Module-Metadata/MB-9dzadSLU/Simple/bin/simple.plx.
Father Chrysostomos [Fri, 25 Oct 2013 13:16:02 +0000 (06:16 -0700)]
Increase PerlIO::scalar::VERSION to 0.18
Father Chrysostomos [Fri, 25 Oct 2013 13:15:30 +0000 (06:15 -0700)]
Better fix for #119529
<$fh> used to loop if $fh was opened to an in-memory handle containing
a reference.
Commit
552908b174 fixed the loop by forcing a reference to a string
when the handle was created. It did not take into account that the
reference might be read-only. It was also insufficient, in that
the target scalar could be set to a reference after the handle
was created.
The real reason it was looping was that the code for returning and
setting the size of the buffer was not handling non-PVs properly
(unless they were globs, which were special-cased). It might return
0, and it might not, depending on what the internal SV field hap-
pened to hold.
This caused looping under 5.12 and onwards, but even in 5.10 <$fh>
returned nothing.
In this case, deleting code makes things just work.
Reverting the hunk from
552908b174 stops appending to refs from work-
ing, so I tweaked PerlIOScalar_pushed to fix that (which also reduced
the amount of code).
Steve Hay [Wed, 23 Oct 2013 09:32:25 +0000 (10:32 +0100)]
Remove some unnecessary Makefile.PLs from cpan/ and ext/
These modules all work with the default Makefile.PL written by make_ext.pl.
(There are more Makefile.PLs in dist/ that could be removed too, but the
general policy with dist/ is to leave such files in place to make it easier
to roll CPAN releases from the blead source, which is canonical.)
Karl Williamson [Fri, 25 Oct 2013 04:35:51 +0000 (22:35 -0600)]
Silence some Win32 compiler warnings
These get rid of some "possible loss of data" warnings