This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix refcounting in rv2gv when it calls newGVgen
authorFather Chrysostomos <sprout@cpan.org>
Wed, 3 Sep 2014 05:11:08 +0000 (22:11 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Wed, 3 Sep 2014 05:11:08 +0000 (22:11 -0700)
commit7bdb4ff0943cf93297712faf504cdd425426e57f
tree30a7ce148fec4c86413697ab0d4ae63ab58e7c8b
parent3ee45b3fd72ecaa02e3aa6aa1fe48554cc8acd4c
Fix refcounting in rv2gv when it calls newGVgen

When the compiler (op.c) can’t figure out the name of a vivified file-
handle based on the variable name, then pp.c:S_rv2gv (which vivifies
the handle at run time) calls newGVgen, which generates something
named _GEN_0 or suchlike.

When it does that, the reference counting is wrong, because the stash
gets a *_GEN_0 typeglob and the reference stored in open’s argument
points to it, too; but the reference count is nevertheless 1.  So
if both sources shed their pointers to the GV, then you get a
double free.

Because usually the typeglob sits in the stash until program exit,
this bug has gone unnoticed for a long time.

This bug appears to have been present ever since rv2gv started call-
ing newGVgen, in 2c8ac474a0.
pp.c
t/op/gv.t