# HG changeset patch # User Bram Moolenaar # Date 1288179464 -7200 # Node ID fb60c9f35517660092b161abc1e4aa17a7d0ac05 # Parent f2927225367a3ac3fbe86d6d03ebb7a526072ed9 updated for version 7.3.040 Problem: Comparing strings while ignoring case goes beyond end of the string when there are illegal bytes. (Dominique Pelle) Solution: Explicitly check for illegal bytes. diff --git a/src/mbyte.c b/src/mbyte.c --- a/src/mbyte.c +++ b/src/mbyte.c @@ -3124,6 +3124,9 @@ mb_strnicmp(s1, s2, nn) /* If one of the two characters is incomplete return -1. */ if (incomplete || i + utf_byte2len(s2[i]) > n) return -1; + /* Don't case-fold illegal bytes or truncated characters. */ + if (utf_ptr2len(s1 + i) < l || utf_ptr2len(s2 + i) < l) + return -1; cdiff = utf_fold(utf_ptr2char(s1 + i)) - utf_fold(utf_ptr2char(s2 + i)); if (cdiff != 0) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 40, +/**/ 39, /**/ 38,