perl -Dr: avoid coredump in \1
authorDavid Mitchell <davem@iabyn.com>
Thu, 18 Jan 2018 15:27:25 +0000 (15:27 +0000)
committerDavid Mitchell <davem@iabyn.com>
Thu, 18 Jan 2018 18:19:56 +0000 (18:19 +0000)
commit847fe5626cf3eeafbd2b7b31f7b89607d29451c2
tree24e3fb4e7ceefa89fadf894e9a31925556d47c73
parent523d71b314dc75bd212794cc8392eab8267ea744
perl -Dr: avoid coredump in \1

When displaying each reg node being executed, the code that dumps a REF
node assumed that a capture was valid if progs->offs[n].start != -1.
In fact during backtracking after a failure, a capture is "undone" by
merely setting progs->offs[n].end = -1.

So make the dump code account for that too.

This was causing a test in t/re/pat.t to coredump:

    use re qw(Debug EXECUTE);
    "x" =~ m{ () y | () \1 }x;

Although given that neither the test nor the REF code in regprop() have
changed recently, I'm not sure why this has only recently started crashing.
regcomp.c