In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/90b58c702e376ab45f13a7f10e14d8c786d05d8a?hp=7f974d7e9e13f5929bc0cfa52101160692c2d394>
- Log ----------------------------------------------------------------- commit 90b58c702e376ab45f13a7f10e14d8c786d05d8a Author: Karl Williamson <[email protected]> Date: Wed Jan 25 22:34:48 2017 -0700 PATCH: [perl #130567] Assertion failure in scan_const It turns out that eval text isn't necessarily parsed by lex_next_chunk(), but is by lex_start(). So, add a test to there to look for malformed UTF-8. ----------------------------------------------------------------------- Summary of changes: toke.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/toke.c b/toke.c index 3a603e1da2..61ea45da9b 100644 --- a/toke.c +++ b/toke.c @@ -701,6 +701,8 @@ Perl_lex_start(pTHX_ SV *line, PerlIO *rsfp, U32 flags) { const char *s = NULL; yy_parser *parser, *oparser; + const U8* first_bad_char_loc; + if (flags && flags & ~LEX_START_FLAGS) Perl_croak(aTHX_ "Lexing code internal error (%s)", "lex_start"); @@ -743,6 +745,18 @@ Perl_lex_start(pTHX_ SV *line, PerlIO *rsfp, U32 flags) if (line) { STRLEN len; s = SvPV_const(line, len); + + if (SvUTF8(line) && ! is_utf8_string_loc((U8 *) s, + SvCUR(line), + &first_bad_char_loc)) + { + _force_out_malformed_utf8_message(first_bad_char_loc, + (U8 *) s + SvCUR(line), + 0, + 1 /* 1 means die */ ); + NOT_REACHED; /* NOTREACHED */ + } + parser->linestr = flags & LEX_START_COPIED ? SvREFCNT_inc_simple_NN(line) : newSVpvn_flags(s, len, SvUTF8(line)); -- Perl5 Master Repository
