# HG changeset patch # User Bram Moolenaar # Date 1658774702 -7200 # Node ID 53d8ef8442d80ada1088f85130bcb124b49b1482 # Parent 7242f365caad8f880005f11e4750500e2d4f445f patch 9.0.0070: using utfc_ptr2char_len() when length is negative Commit: https://github.com/vim/vim/commit/4dc513a22c017b3061287deac74fa55f70a3214c Author: zeertzjq Date: Mon Jul 25 19:42:02 2022 +0100 patch 9.0.0070: using utfc_ptr2char_len() when length is negative Problem: Using utfc_ptr2char_len() when length is negative. Solution: Check value of length. (closes https://github.com/vim/vim/issues/10760) diff --git a/src/screen.c b/src/screen.c --- a/src/screen.c +++ b/src/screen.c @@ -1571,21 +1571,18 @@ screen_puts_len( // check if this is the first byte of a multibyte if (has_mbyte) { - if (enc_utf8 && len > 0) - mbyte_blen = utfc_ptr2len_len(ptr, (int)((text + len) - ptr)); - else - mbyte_blen = (*mb_ptr2len)(ptr); + mbyte_blen = enc_utf8 && len > 0 + ? utfc_ptr2len_len(ptr, (int)((text + len) - ptr)) + : (*mb_ptr2len)(ptr); if (enc_dbcs == DBCS_JPNU && c == 0x8e) mbyte_cells = 1; else if (enc_dbcs != 0) mbyte_cells = mbyte_blen; else // enc_utf8 { - if (len >= 0) - u8c = utfc_ptr2char_len(ptr, u8cc, - (int)((text + len) - ptr)); - else - u8c = utfc_ptr2char(ptr, u8cc); + u8c = len >= 0 + ? utfc_ptr2char_len(ptr, u8cc, (int)((text + len) - ptr)) + : utfc_ptr2char(ptr, u8cc); mbyte_cells = utf_char2cells(u8c); #ifdef FEAT_ARABIC if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c)) @@ -1599,8 +1596,10 @@ screen_puts_len( } else { - nc = utfc_ptr2char_len(ptr + mbyte_blen, pcc, - (int)((text + len) - ptr - mbyte_blen)); + nc = len >= 0 + ? utfc_ptr2char_len(ptr + mbyte_blen, pcc, + (int)((text + len) - ptr - mbyte_blen)) + : utfc_ptr2char(ptr + mbyte_blen, pcc); nc1 = pcc[0]; } pc = prev_c; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -736,6 +736,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 70, +/**/ 69, /**/ 68,