This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add more checking for regnode offset overflowing
authorKarl Williamson <khw@cpan.org>
Thu, 14 Mar 2019 22:46:50 +0000 (16:46 -0600)
committerKarl Williamson <khw@cpan.org>
Thu, 14 Mar 2019 23:12:26 +0000 (17:12 -0600)
commitbf848a12528ab1e63a2f20da532eda498adbdca6
tree500a9cfd5cf0b44d67180f05efc1df9be3460207
parent912b808cb4fcd596e07f77898c626f5567fbe994
Add more checking for regnode offset overflowing

This is part of the ongoing failures in [perl #133921].

The bottom line cause is that there are generally 16 bits available for
the address of the next regnode.  On very large patterns, this may not
be enough.  When that happens, a long jump is used instead.

What previous commits have done is to insert tests in a loop to detect
that overflow isn't going to occur.  But it turns out that there are
other places where such overflow could occur.  The real solution should
be to detect overflow in the base level routine that would otherwise get
things wrong.  This entails making that routine be able to return
failure.  It turns out that another function is used under DEBUGGING, so
that one must be changed as well.  And the calls where it is possible
for this to overflow are changed to look for failure return and proceed
appropriately, which is to set a flag that we need to use long jumps,
and restart the parse.
embed.fnc
proto.h
regcomp.c
t/re/pat.t