This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Avoid use after free
authorKarl Williamson <khw@cpan.org>
Tue, 21 Apr 2020 23:30:42 +0000 (17:30 -0600)
committerKarl Williamson <khw@cpan.org>
Wed, 29 Apr 2020 19:10:11 +0000 (13:10 -0600)
commit07b2324000451f5ce36e176cb75d49997ca895bf
tree3450208b5e7d28828c554dedb66d03c0a2b79890
parent28601d809e9116df25d4e9a091f21ecf73a1c87a
regcomp.c: Avoid use after free

It turns out that the SV returned by re_intuit_string() may be freed by
future calls to re_intuit_start().  Thus, the caller doesn't get clear
title to the returned SV.  (This wasn't documented until the
commit immediately prior to this one.)

Cope with this situation by making a mortalized copy.  This commit also
changes to use the copy's PV directly, simplifying some 'if' statements.

re_intuit_string() is effectively in the API, as it is an element in the
regex engine structure, callable by anyone.  It should not be returning
a tenuous SV.  That returned scalar should not freed before the pattern
it is for is freed.  It is too late in the development cycle to change
this, so this workaround is presented instead for 5.32.

This fixes #17734.
regcomp.c
t/re/pat_advanced.t