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

Reply via email to