summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2017-08-25 11:33:58 -0600
committerSteve Hay <steve.m.hay@googlemail.com>2017-09-10 14:12:56 +0100
commit40b3cdad3649334585cee8f4630ec9a025e62be6 (patch)
tree73570ab8ac5f881651f0a38a4b599bd0d1a8d34f
parentf7e5417e7bffba03947b66e4d8622d7c220f2876 (diff)
downloadperl-40b3cdad3649334585cee8f4630ec9a025e62be6.tar.gz
PATCH: [perl #131598]
The cause of this is that the vFAIL macro uses RExC_parse, and that variable has just been changed in preparation for code after the vFAIL. The solution is to not change RExC_parse until after the vFAIL. This is a case where the macro hides stuff that can bite you. (cherry picked from commit 2be4edede4ae226e2eebd4eff28cedd2041f300f)
-rw-r--r--regcomp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/regcomp.c b/regcomp.c
index 2123811420..c6c7cb4925 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -11922,14 +11922,16 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
}
sv_catpv(substitute_parse, ")");
- RExC_parse = RExC_start = RExC_adjusted_start = SvPV(substitute_parse,
- len);
+ len = SvCUR(substitute_parse);
/* Don't allow empty number */
if (len < (STRLEN) 8) {
RExC_parse = endbrace;
vFAIL("Invalid hexadecimal number in \\N{U+...}");
}
+
+ RExC_parse = RExC_start = RExC_adjusted_start
+ = SvPV_nolen(substitute_parse);
RExC_end = RExC_parse + len;
/* The values are Unicode, and therefore not subject to recoding, but