Blame SOURCES/0001-patch-8.2.4397-crash-when-using-many-composing-chara.patch

da4393
From 34f8117dec685ace52cd9e578e2729db278163fc Mon Sep 17 00:00:00 2001
da4393
From: Bram Moolenaar <Bram@vim.org>
da4393
Date: Wed, 16 Feb 2022 12:16:19 +0000
da4393
Subject: [PATCH] patch 8.2.4397: crash when using many composing characters in
da4393
 error message
da4393
da4393
Problem:    Crash when using many composing characters in error message.
da4393
Solution:   Use mb_cptr2char_adv() instead of mb_ptr2char_adv().
da4393
---
da4393
 src/testdir/test_assert.vim | 8 ++++++++
da4393
 src/testing.c               | 2 +-
da4393
 src/version.c               | 2 ++
da4393
 3 files changed, 11 insertions(+), 1 deletion(-)
da4393
da4393
diff --git a/src/testdir/test_assert.vim b/src/testdir/test_assert.vim
da4393
index 8987f3f8d..27b2d73fb 100644
da4393
--- a/src/testdir/test_assert.vim
da4393
+++ b/src/testdir/test_assert.vim
da4393
@@ -53,6 +53,14 @@ func Test_assert_equal()
da4393
   call assert_equal("\b\e\f\n\t\r\\\x01\x7f", 'x')
da4393
   call assert_match('Expected ''\\b\\e\\f\\n\\t\\r\\\\\\x01\\x7f'' but got ''x''', v:errors[0])
da4393
   call remove(v:errors, 0)
da4393
+
da4393
+  " many composing characters are handled properly
da4393
+  call setline(1, ' ')
da4393
+  norm 100grƯ€
da4393
+  call assert_equal(1, getline(1))
da4393
+  call assert_match("Expected 1 but got '.* occurs 100 times]'", v:errors[0])
da4393
+  call remove(v:errors, 0)
da4393
+  bwipe!
da4393
 endfunc
da4393
 
da4393
 func Test_assert_equal_dict()
da4393
diff --git a/src/testing.c b/src/testing.c
da4393
index 448c01c1e..48ba14d2c 100644
da4393
--- a/src/testing.c
da4393
+++ b/src/testing.c
da4393
@@ -101,7 +101,7 @@ ga_concat_shorten_esc(garray_T *gap, char_u *str)
da4393
     {
da4393
 	same_len = 1;
da4393
 	s = p;
da4393
-	c = mb_ptr2char_adv(&s);
da4393
+	c = mb_cptr2char_adv(&s);
da4393
 	clen = s - p;
da4393
 	while (*s != NUL && c == mb_ptr2char(s))
da4393
 	{
da4393
-- 
da4393
2.35.1
da4393