]> granicus.if.org Git - vim/commitdiff
patch 8.2.3409: reading beyond end of line with invalid utf-8 character v8.2.3409
authorBram Moolenaar <Bram@vim.org>
Tue, 7 Sep 2021 17:26:53 +0000 (19:26 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 7 Sep 2021 17:26:53 +0000 (19:26 +0200)
Problem:    Reading beyond end of line with invalid utf-8 character.
Solution:   Check for NUL when advancing.

src/regexp_nfa.c
src/testdir/test_regexp_utf8.vim
src/version.c

index 9757d7c4755234524fda5e7c2c6e95c12f39f4f7..c7db9818786714e49492ffe3bdd7fa37de7f40d6 100644 (file)
@@ -5664,7 +5664,8 @@ find_match_text(colnr_T startcol, int regstart, char_u *match_text)
                match = FALSE;
                break;
            }
-           len2 += MB_CHAR2LEN(c2);
+           len2 += enc_utf8 ? utf_ptr2len(rex.line + col + len2)
+                                                            : MB_CHAR2LEN(c2);
        }
        if (match
                // check that no composing char follows
index 9f0ffb9aafc60e8c68c6f54fba1b75cc35299d86..044aeffb63922066502d0e8cd467c10d43d29a72 100644 (file)
@@ -558,4 +558,12 @@ func Test_match_char_class_upper()
   bwipe!
 endfunc
 
+func Test_match_invalid_byte()
+  call writefile(0z630a.765d30aa0a.2e0a.790a.4030, 'Xinvalid')
+  new
+  source Xinvalid
+  bwipe!
+  call delete('Xinvalid')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 54533dc91e633000779c0c923bc5121ba5f4d15b..0eb6899ed69a76d7fefc8a3da4aa2e357bcc3293 100644 (file)
@@ -755,6 +755,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3409,
 /**/
     3408,
 /**/