]> granicus.if.org Git - vim/commitdiff
patch 9.0.0070: using utfc_ptr2char_len() when length is negative v9.0.0070
authorzeertzjq <zeertzjq@outlook.com>
Mon, 25 Jul 2022 18:42:02 +0000 (19:42 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 25 Jul 2022 18:42:02 +0000 (19:42 +0100)
Problem:    Using utfc_ptr2char_len() when length is negative.
Solution:   Check value of length. (closes #10760)

src/screen.c
src/version.c

index 694424745c3087ca43c2a237f00d7f524845f6b6..1093b7c6154af54aa239c4c255b5dd73010bd306 100644 (file)
@@ -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;
index a07ccb748e589bfca18a6c1739042ba9f9a4f405..83d135db2cb0df46e760ccbd808d66d7d1baac78 100644 (file)
@@ -735,6 +735,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    70,
 /**/
     69,
 /**/