This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix leak when compiling typed hash deref
authorDavid Mitchell <davem@iabyn.com>
Fri, 8 Mar 2019 08:40:29 +0000 (08:40 +0000)
committerDavid Mitchell <davem@iabyn.com>
Mon, 11 Mar 2019 16:33:34 +0000 (16:33 +0000)
commit02a9632ac4bf515585a2f25b05b2939de1743ded
treebbd921a89716f06f7b06d09f9fd7bd2f9ed43a49
parentebf06983127fdec6e5f31c7ecc2d3a3ac991cfa2
fix leak when compiling typed hash deref

In something like

    my Foo $h;
    $h->{bad_key}

perl will croak if package Foo defines valid %FIELDS and  bad_key isn't
one of them. This croak happens during the second pass in
S_maybe_multideref(), which is trying to convert $h->{bad_key} into a
single multideref op. Since the aux buffer is allocated at the end of
the first pass, the buffer leaks.

The fix is to do the check in the first pass, which has been done by
adding an extra boolean flag to S_check_hash_fields_and_hekify(),
indicating whether to just check or actually do it.
op.c
t/op/multideref.t