David Mitchell [Sun, 11 Apr 2010 14:52:43 +0000]
RT 8857: premature free in local of tied element
[The original bug report concerned local($_) remained tied, but while
looking at it, Nicholas found some related code that popped up premature
free errors. This commit fixes the freeing issue rather than the issue of
the original bug report ]
Background:
local $a[0]
does, approximately:
svp = av_fetch(av);
SAVE(av,*svp);
sv = newSV();
*svp = sv;
This used to leak when av was tied, as the new sv only got embedded in
*svp, which for tied arrays is a temporary placeholder rather than
somewhere within AvARRAY. This leak was fixed in 2002 by adding the
following:
if (SvTIED_mg(sv, PERL_MAGIC_tiedelem))
sv_2mortal(sv);
which worked, except for the following:
sub f { local $_[0] }
f($_) for ($tied[0]);
Here, @_ is a real array not a tied one, yet its first element is a
PERL_MAGIC_tiedelem which trigged the test above. So the sv got
mortalised *and* stored in the array, so got freed twice. The fix is
to test the *array/hash* for tied-ness rather than the element.
David Mitchell [Sun, 11 Apr 2010 14:23:17 +0000]
create SV leak test infrastructure
Add an sv_count() function to XS::APItest to allow access to PL_sv_count,
then add new test file t/op/svleak.t that allows you yo run a code
fragment a few times and test whether the number of allocated SVs has
increased
David Mitchell [Thu, 8 Apr 2010 12:16:56 +0000]
fix RT 23810: eval and tied methods
Something like the following ended up corrupted:
sub FETCH { eval 'BEGIN{syntax err}' }
The croak on error popped back the context stack etc to the EVAL pushed by
entereval, but the corresponding JUMPENV_PUSH(3) unwound all the way to the
outer perl_run, losing all the mg_get() related parts of the C stack.
It turns out that the run-time parts of pp_entereval were protected with
a new JUMPENV level, but the compile-time parts weren't. Add this.
David Mitchell [Tue, 6 Apr 2010 19:53:45 +0000]
more mods to -Dl debugging output
David Mitchell [Tue, 30 Mar 2010 19:26:31 +0000]
improve -Dl debugging output
In particular, distinguish between scope and context stack push/pops,
show depth of JUMPENV stack, and show STACKINFO push/pops
David Mitchell [Tue, 30 Mar 2010 14:03:50 +0000]
PL_defoutgv isn't always a GV.
Nasty code like the following results in PL_defoutgv not pointing
to a valid GV:
my $x = *STDERR; select($x); $x = 1;
This causes all sorts of SEGVs when PL_defoutgv is subsequently accessed,
because most code assumes that it has a valid gv_gp pointer. It also
turns out that PL_defoutgv is under-tested; for example, temporarily
hacking pp_close to make an arg-less close() croak didn't cause any
minitest failures.
Add a new test file that does some basic testing of a bad PL_defoutgv,
and fix all the obvious badness in accessing it.
This also fixes #20727, which although ostensibly a tie bug, was due to
PL_defoutgv pointing to a tiedelem scalar, and fun like that described
above happening.
David Mitchell [Thu, 25 Mar 2010 10:56:35 +0000]
RT #67962: $1 treated as tainted in untainted match
Fix the issue in the following:
use re 'taint';
$tainted =~ /(...)/;
# $1 now correctly tainted
$untainted =~ s/(...)/$1/;
# $untainted now incorrectly tainted
The problem stems from when $1 is updated.
pp_substcont, which is called after the replacement expression has been
evaluated, checks the returned expression for taintedness, and if so,
taints the variable being substituted. For a substitution like
s/(...)/x$1/ this works fine: the expression "x".$1 causes $1's get magic
to be called, which sets $1 based on the recent match, and is marked as
not tainted. Thus the returned expression is untainted. In the variant
s/(...)/$1/, the returned value on the stack is $1 itself, and its get
magic hasn't been called yet. So it still has the tainted flag from the
previous pattern.
The solution is to mg_get the returned expression *before* testing for
taintedness.
David Mitchell [Tue, 23 Mar 2010 12:11:43 +0000]
Fix assorted bugs related to magic (such as pos) not "sticking" to
magical array and hash elements; e.g. the following looped infinitely:
$h{tainted_element} =~ /..../g
There are two side-effects of this fix.
First, MGf_GSKIP has been extended to work on tied array
elements as well as hash elements. This is the mechanism that skips all
but the first tied element magic gets until after the next set.
Second, rvalue hash/array element access where the element has get magic,
now directly returns the element rather than a mortal copy.
The root cause of the bug was code similar to the following in pp_alem,
pp_aelemfast, pp_helem and pp_rv2av:
if (!lval && SvGMAGICAL(sv)) /* see note in pp_helem() */
sv = sv_mortalcopy(sv);
According to the note, this was added in 1998 to make this work:
local $tied{foo} = $tied{foo}
Since it returns a copy rather than the element, this make //g fail.
My first attempt, a few years ago, to fix this, took the approach that
the LHS of the bind should be made an lvalue in the presence of //g, since
it now modifies its LHS; i.e.
expr =~ // expr is rvalue
expr =~ s/// expr is lvalue
expr =~ //g expr was rvalue, I proposed to change it to lvalue
Unfortunately this fix broke too much stuff (stuff that was arguably
already broken, but it upset people). For example, f() ~= s////
correctly gives the error
Can't modify non-lvalue subroutine call
My fix extended f() =~ //g to give the same error. Which is reasonable,
because the g isn't doing what you want. But plenty of people had code that
only needed to match once and the g had just been cargo-culted. So it
broke their working code. So lets not do this.
My new approach has been to remove the sv_mortalcopy(). It turns out
that this is no longer needed to fix the local $tied{foo} issue.
Presumably that went away as a side-effect of my container/value magic
localisation rationalisation of a few years ago, although I haven't
analysed it - just noted that the tests still pass (!). However, an issue
with removing it is that mg_get() no longer gets called. So a plain
$tied_hash{elem};
in void context no longer calls FETCH(). Which broke some tests and might
break some code. Also, there's an issue with the delayed calling of magic
in @+[n] and %+{foo}; by the time the get magic is called, the original
pattern may have gone out of scope.
The solution is to simply replace the original
sv = sv_mortalcopy(sv);
with
mg_get(sv);
This then caused problems with tied array FETCH() getting called too much.
I fixed this by extending the MGf_GSKIP mechanism to tied arrays as well
as hashes. I don't understand why tied arrays have always been treated
differently than tied hashes, but unifying them didn't seem to break
anything (except for a Storable test, whose comment indicated that the
test's author thought FETCH() was being called to often anyway).
David Mitchell [Sun, 21 Mar 2010 14:17:13 +0000]
[perl #73626] get magic wasn't called on 3rd arg of open
Change
f6c77cf1bf4d7cb2c7a64dd7608120b471f84062 introduced
open($fh,"+<",undef)
but in the process stopped calling mg_get() on the third arg,
so tied values etc weren't getting processed
David Mitchell [Sun, 21 Mar 2010 00:01:09 +0000]
[perl #45167] Taint removal by sprintf
Under some circumstances the value returned by sprintf wasn't tainted,
even though its args were. While trying to fix this, I also came across
a second bug (which made fixing the first bug very confusing!) where
the TARG of the sprintf op, after getting tainted once, permanently
retained taint magic, which depending on circumstances, wasn't always set
to untainted (mg_len =0)
The original bug basically boiled down to parts of Perl_sv_vcatpvfn()
directly manipulating the target with SvGROW() / Copy(), which failed
to taint the target. Other parts used sv_catsv(), which did. So for
example:
"%s%s" failed, (only SvGROW)
"%s %s" worked (the space char was appended using sv_catsv).
David Mitchell [Sat, 20 Mar 2010 15:41:13 +0000]
[perl #6758] tainted values become untainted in tied hashes
H.Merijn Brand [Mon, 15 Mar 2010 12:19:39 +0000]
Add Porting/corelist-diff to MANIFEST
Jesse Vincent [Sun, 14 Mar 2010 22:27:55 +0000]
Updated AUTHORS file to be current with checkAUTHORS output
Jesse Vincent [Sun, 14 Mar 2010 21:42:56 +0000]
several typos in perldelta
Jesse Vincent [Sun, 14 Mar 2010 20:30:30 +0000]
feature.pm needed to be taught about "use feature ':5.12'"
Jesse Vincent [Sun, 14 Mar 2010 19:28:26 +0000]
perldelta updated for new version of Module::CoreList
Jesse Vincent [Sun, 14 Mar 2010 19:27:28 +0000]
Module::CoreList bumped to 2.27 and updated with versions of things
we'll ship in 5.12.0
Jesse Vincent [Sun, 14 Mar 2010 19:40:32 +0000]
Added placeholder for RC0 in perlhist
Jesse Vincent [Sun, 14 Mar 2010 19:55:57 +0000]
README updates for 5.12.0
Jesse Vincent [Sun, 14 Mar 2010 19:57:38 +0000]
The "right" perldelta is now 5.12.0's
Jesse Vincent [Sun, 14 Mar 2010 19:42:35 +0000]
Update patchlevel.h to note that this is RC0 and not yet a real release
Jesse Vincent [Sun, 14 Mar 2010 19:15:59 +0000]
Bump to 5.12.0
Jesse Vincent [Sun, 14 Mar 2010 20:39:22 +0000]
perldelta typo caught by Karl
Karl Williamson [Sun, 14 Mar 2010 20:22:26 +0000]
A few small fixes to perl5120delta.pod
Jesse Vincent [Sun, 14 Mar 2010 18:06:27 +0000]
Left a debugging statement in a Porting tool. Oops!
Jesse Vincent [Sun, 14 Mar 2010 17:52:28 +0000]
Remove TODO section from perldelta
Jesse Vincent [Sun, 14 Mar 2010 17:51:55 +0000]
Further updates to perldelta:
rewrapping and module list updates
Jesse Vincent [Sun, 14 Mar 2010 16:13:39 +0000]
Add the author list for 5.12.0
Jesse Vincent [Sun, 14 Mar 2010 15:43:33 +0000]
Update Perl 5.12.0 delta. It needs a spellcheck, proofreading and a module list.
Ricardo Signes [Sun, 14 Mar 2010 16:35:23 +0000]
better perl version output in corelist-diff
Ricardo Signes [Sun, 14 Mar 2010 16:27:53 +0000]
tool to produce corelist diffs
Jesse Vincent [Sat, 13 Mar 2010 21:51:56 +0000]
pod cleanup
Jesse Vincent [Sat, 13 Mar 2010 21:45:00 +0000]
Some copyediting perldelta. Pulled in .11.5 delta
H.Merijn Brand [Sat, 13 Mar 2010 14:29:49 +0000]
Revive threaded builds for AIX
If random_r is disabled, so should srandom_r be. Changes in a distant
caused errors like:
"reentr.h", line 773.16: 1506-007 (S) "struct random_data" is undefined.
Nicholas Clark [Sat, 13 Mar 2010 10:35:13 +0000]
In Perl_sv_compile_2op(), remove a suggestion to merge code with pp_entersub.
Add a comment explaining the problems with this function.
Tom Hukins [Thu, 4 Mar 2010 17:38:41 +0000]
Use POD references to documentation when possible.
Tom Hukins [Fri, 26 Feb 2010 13:21:43 +0000]
Use simpler language.
Tom Hukins [Thu, 20 Aug 2009 09:50:52 +0000]
Use POD-style references in the "SEE ALSO" section.
Tom Hukins [Thu, 20 Aug 2009 09:42:30 +0000]
Use POD-style references
H.Merijn Brand [Fri, 12 Mar 2010 07:43:24 +0000]
Tighten the ropes on sGMTIME_min for HP-UX 11.00
The original long-running test had a tighter limit for
sGMTIME_min and sLOCALTIME_min than the 2**47-1 limit
that was now hardcoded. Take the safe route.
Jesse Vincent [Thu, 11 Mar 2010 21:52:42 +0000]
[perl# 73490] Bump Time::Piece to a devel release that's newer than what
was in Blead but is old than the current updated CPAN release. Comment
out a now deprecated 'use UNIVERSAL' line to prevent warnings from
production code. It's bad form to ship software that deprecates things
and then keeps using them and warning. Thanks to xdg++ for the spotting.
Nicholas Clark [Thu, 11 Mar 2010 17:03:28 +0000]
Clarify that patching deprecate.pm is intended to facilitate a staged transition.
Nicholas Clark [Thu, 11 Mar 2010 16:44:01 +0000]
Describe the limitations and pitfalls of @DB::args.
Nicholas Clark [Thu, 11 Mar 2010 14:08:07 +0000]
Fix stringification assumption bug in overload.t, revealed by ia64-linux-ld.
Specifically:
1: / returns and NV where possible, only returning an integer if the dividend
is an integer larger than an NV can represent accurately, and integer
division is exact (ie no fractional part/remainder).
2: The test is performing $ref/1, intending it to be an identity operation
on the numeric value of the reference.
3: The test assumes that the return result of the division will be a number
that stringifies identically to the integer value of the reference.
The fails if both:
1: The system memory map is such that addresses are very large (ia64 does)
2: NVs are large enough to hold these addresses
because then the address becomes converted to an NV which has sufficient
decimal digits that stringification defaults to scientific notation.
Itanium Linux users the world over will be cheering because they can now
compile Perl with long doubles with confidence that all tests pass.
David Mitchell [Thu, 11 Mar 2010 12:18:00 +0000]
remove gv_try_downgrade from the public API
it's a recently added function, so removing it now does no harm.
H.Merijn Brand [Thu, 11 Mar 2010 10:11:17 +0000]
Limit HP-UX 11.00 time to 48 bit in 64bit mode
Rafael Garcia-Suarez [Thu, 11 Mar 2010 09:53:43 +0000]
Re-TODO one more Deparse test
(was missing from
0fa4a26596a4646f9aae1dcd199a2f30933e6f01)
Karl Williamson [Wed, 10 Mar 2010 23:47:55 +0000]
Note that can be warned on implicit utf8 upgrade
The module encoding::warnings can be used to warn when two strings are
concatenated where one is utf8 and the other is not and contains
non-ASCII.
Note the existence of this in the pod documentation.
David Mitchell [Wed, 10 Mar 2010 21:47:34 +0000]
revert const deparsing in Deparse.pm
The code was added in 5.11.0 by
2990415a4519bc3988d7224ae15100c3e9e901ee
805b10112885d8868f21f8e860792d65e1e6c19d
but causes a big slowdown on most deparsing, due to the need
to walk the entire package tree looking for constant subs.
For more details, see
[perl #73052] Storable considerably slower at storing coderefs
Zefram [Wed, 10 Mar 2010 19:53:50 +0000]
[perl #72740]: Blead breaks LEMBARK/LinkedList-Single-0.99.1.tar.gz
f7461760003db2ce68155c97ea6c1658e96fcd27 improved the PL_check hook for
bareword subs, but broke the above module. This is Zefram's followup:
The issue is that speculative function lookups were leaving detritus
consisting of empty GVs in the stash. These didn't affect normal
functioning, but code that looks inside the stash could see them, and
code that makes unreliable assumptions about the format of the stash
can be broken. This is the same general mode of failure that we saw
with namespace::clean.
LinkedList-Single's failing test was using direct stash access poorly,
in a way that made for a poor test, quite apart from making too many
assumptions about stash structure. In the latest version of the package,
0.99.6, the test has been changed to a much better form, which actually
tests what it meant to and incidentally doesn't read the stash at all.
Although they don't affect normal functioning, the empty GVs shouldn't
be there. It's much like the upgraded constant subs, which we concluded
ought to be downgraded when the upgraded form is no longer required,
in order to save memory. The solution here is similar: delete the
empty GV when it is detected that a real GV is no longer required.
The present patch does this at the same time as checking for constant-sub
downgradability.
Nicholas Clark [Mon, 8 Mar 2010 14:05:52 +0000]
In comments, correct two instances of SVf_PADSTALE to SVs_PADSTALE.
David Golden [Fri, 5 Mar 2010 20:18:48 +0000]
add makerel option to skip tarball creation
Rafael Garcia-Suarez [Mon, 8 Mar 2010 11:21:20 +0000]
Fix comments about @INC ordering
Tony Cook [Mon, 1 Mar 2010 12:44:54 +0000]
list undocumented API and internal functions in perlapi.pod and perlintern.pod
List any functions from embed.fnc that don't have documentation in
their own section of perlapi/perlintern as a reminder to either
document them, remove them or perhaps flag them as undeserving of
documentation.
Reini Urban [Thu, 4 Mar 2010 17:09:35 +0000]
Support cygwin-1.7 mount
Reini Urban [Thu, 4 Mar 2010 11:53:51 +0000]
Add perlintern.pod documentation docatch + prescan_version
docatch - perl run-time exception handling
Karl Williamson [Sat, 6 Mar 2010 18:18:36 +0000]
Document that there are bugs with EBCDIC and regexes
Rafael Garcia-Suarez [Sun, 7 Mar 2010 21:37:52 +0000]
Bump Safe to version 2.25
Nick Cleaton [Sun, 7 Mar 2010 14:27:31 +0000]
Further improvements to the security fix in
16ac9e9a4185d3315152ade5286d4dd3d25bff32
- Destroy all stash entries at once to avoid race conditions.
- For that we save away reference to stashes entries (not
stash entries themselves like previously, to avoid trigerring
tie methods)
- Don't skip sub-packages that might be named "main::"
Jesse Vincent [Sun, 7 Mar 2010 20:31:23 +0000]
Revert "Upgrade to IPC::SysV 2.02" - We're frozen. This will be great when we unfreeze
This reverts commit
8a720e6ba3939d5db4327226c93348d5acf35145.
Jesse Vincent [Sun, 7 Mar 2010 20:30:56 +0000]
Revert "Upgrade to Devel::PPPort 3.19_02" - we're frozen. This will be great when we unfreeze
This reverts commit
bfc37ff708b737d2490a23505b932c94f1898073.
Marcus Holland-Moritz [Sun, 7 Mar 2010 15:59:12 +0000]
Merge remote branch 'origin/blead' into blead
Marcus Holland-Moritz [Sun, 7 Mar 2010 15:55:48 +0000]
Upgrade to IPC::SysV 2.02
Gisle Aas [Tue, 2 Mar 2010 19:42:39 +0000]
Only define PERL_PATCHNUM when either git or the .patch file is available
This patch also make PERL_GIT_UNCOMMITTED_CHANGES useful and thus avoids
always adding the "*" to the 'perl -v' output.
Marcus Holland-Moritz [Sun, 7 Mar 2010 12:48:24 +0000]
Upgrade to Devel::PPPort 3.19_02
Craig A. Berry [Sun, 7 Mar 2010 00:54:30 +0000]
Moduule::Build test tweaks for VMS.
More complete fix available upstream at:
http://rt.cpan.org/Public/Bug/Display.html?id=55288
Craig A. Berry [Sun, 7 Mar 2010 00:51:18 +0000]
ExtUtils-CBuilder test tweak for VMS.
Idential to upstream fix at https://rt.cpan.org/Ticket/Display.html?id=55236
Rafael Garcia-Suarez [Sat, 6 Mar 2010 21:44:12 +0000]
Merge branch 'dual/Safe' into blead
Rafael Garcia-Suarez [Sat, 6 Mar 2010 21:39:07 +0000]
Bump version to 2.24 and update Changes
Rafael Garcia-Suarez [Sat, 6 Mar 2010 21:30:47 +0000]
Clean the stashes from the Safe compartment after evaluation of code.
This way, objects created from inside the Safe compartment won't be
able to call transparently code compiled in the Safe compartment,
without the restrictions being anymore in place.
Vincent Pit [Wed, 3 Mar 2010 13:48:58 +0000]
Fix an example for LC_COLLATE in POSIX.pod that actually sets LC_ALL
Spotted by Olivier Raginel.
Jan Dubois [Wed, 3 Mar 2010 00:24:23 +0000]
Revert "Forbid labels with keyword names"
This reverts commit
f71d6157c7933c0d3df645f0411d97d7e2b66b2f.
Revert "Add new error "Can't use keyword '%s' as a label""
This reverts commit
28ccebc469d90664106fcc1cb73d7321c4b60716.
Jan Dubois [Wed, 3 Mar 2010 02:19:03 +0000]
Setup @INC at compile time because commit
ec34a119 needs to load utf8.pm
'.' needs to remain in @INC because the test also loads comp/hints.aux
at compile time too.
David Mitchell [Tue, 2 Mar 2010 20:39:28 +0000]
[perl #73174] swash_init() wasn't saving %^H
David Mitchell [Tue, 2 Mar 2010 16:26:36 +0000]
fetching from e.g. github requires a repo name
Craig A. Berry [Tue, 2 Mar 2010 04:01:48 +0000]
Skip Pod::Parser's find.t on VMS for now.
Pending integration of https://rt.cpan.org/Ticket/Display.html?id=55121
Craig A. Berry [Tue, 2 Mar 2010 01:55:08 +0000]
Don't scrub DCL$PATH unless it's there.
It's optional and this was causing test failures when it didn't exist.
Craig A. Berry [Tue, 2 Mar 2010 00:56:45 +0000]
Cannot portably split on $Config{path_sep} -- use quotemeta($Config{path_sep}).
Broken in
fc5e5837c991d3d3224259ff5c1d728d4e0636e2.
On VMS we were getting:
$ perl -"MConfig" -e "print join('+',split $Config{path_sep}, 'foo|bar|baz');"
f+o+o+|+b+a+r+|+b+a+z
which is a *lot* more pieces than we want. What was intended was:
$ perl -"MConfig" -e "print join('+',split quotemeta($Config{path_sep}), 'foo|bar|baz');"
foo+bar+baz
No version bump as this is test infrastructure and 1.55 has not been
released outside of development releases of blead.
Rafael Garcia-Suarez [Sun, 28 Feb 2010 22:47:19 +0000]
Un-TODO warning test
Karl Williamson [Sun, 28 Feb 2010 15:48:33 +0000]
Note this doesn't work: $re = "\\N{...}"; /$re/
Karl Williamson [Fri, 26 Feb 2010 03:45:11 +0000]
Document some re bugs in perlre.pod
Karl Williamson [Fri, 26 Feb 2010 03:44:04 +0000]
Document 5.8 regression #72998 in delta
Karl Williamson [Fri, 26 Feb 2010 02:38:15 +0000]
Document parsing changes for [perl #56444] patch
Karl Williamson [Fri, 26 Feb 2010 02:17:57 +0000]
Revise wording about /x caveats
Karl Williamson [Fri, 26 Feb 2010 02:16:56 +0000]
Mention \N{U+...} documentation in delta
Karl Williamson [Fri, 26 Feb 2010 02:14:30 +0000]
Add statement about UTF-8 and \N{} to delta
Karl Williamson [Fri, 26 Feb 2010 01:48:50 +0000]
Document Unicode case-insensitive [] range bug
Karl Williamson [Fri, 26 Feb 2010 01:39:29 +0000]
Quote a code example
Karl Williamson [Thu, 25 Feb 2010 23:28:50 +0000]
Add deprecation of non-name \N{foo} to delta pod
Karl Williamson [Thu, 25 Feb 2010 22:03:47 +0000]
Revise notes on /x modifier
Karl Williamson [Thu, 25 Feb 2010 21:43:48 +0000]
Mark \N meaning [^\n] as experimental
Karl Williamson [Thu, 25 Feb 2010 20:41:10 +0000]
Mention there are places /x modifier is ineffective
Karl Williamson [Thu, 25 Feb 2010 19:49:31 +0000]
Clarify perlrebackslash.pod
Karl Williamson [Thu, 25 Feb 2010 19:48:12 +0000]
Note existence (and warn against using) \N{U+c1.c2...}
Karl Williamson [Thu, 25 Feb 2010 19:36:53 +0000]
Note that \N{U+...} forces character semantics
Karl Williamson [Thu, 25 Feb 2010 19:35:14 +0000]
Document \N{U+...}
Karl Williamson [Thu, 25 Feb 2010 19:31:12 +0000]
Mention \N{U+...} in perlunicode.pod
Karl Williamson [Thu, 25 Feb 2010 19:25:04 +0000]
Update documentation
List known bugs, mention new meaning of \N
Karl Williamson [Wed, 24 Feb 2010 00:33:35 +0000]
Update pods for \N changes
Karl Williamson [Wed, 24 Feb 2010 00:31:48 +0000]
Update charnames documentations for \N changes, bugs
\N has a possible new meaning, and mention bug reports filed against
charnames