changeset 23946:0b1f5717dc4d v8.2.2515

patch 8.2.2515: memory access error when truncating an empty message Commit: https://github.com/vim/vim/commit/6281815eccc3ded54960f7798833ceb39561b9a0 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 14 15:37:30 2021 +0100 patch 8.2.2515: memory access error when truncating an empty message Problem: Memory access error when truncating an empty message. Solution: Check for an empty string. (Dominique Pell?, closes https://github.com/vim/vim/issues/7841)
author Bram Moolenaar <Bram@vim.org>
date Sun, 14 Feb 2021 15:45:03 +0100
parents ae156af6f28a
children e99448a2d0a9
files src/message.c src/message_test.c src/version.c
diffstat 3 files changed, 18 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/message.c
+++ b/src/message.c
@@ -248,6 +248,13 @@ trunc_string(
     int		i;
     int		n;
 
+    if (*s == NUL)
+    {
+	if (buflen > 0)
+	    *buf = NUL;
+	return;
+    }
+
     if (room_in < 3)
 	room = 0;
     half = room / 2;
--- a/src/message_test.c
+++ b/src/message_test.c
@@ -49,6 +49,15 @@ test_trunc_string(void)
     char_u  *buf; /*allocated every time to find uninit errors */
     char_u  *s;
 
+    // Should not write anything to destination if buflen is 0.
+    trunc_string((char_u *)"", NULL, 1, 0);
+
+    // Truncating an empty string does nothing.
+    buf = alloc(1);
+    trunc_string((char_u *)"", buf, 1, 1);
+    assert(buf[0] == NUL);
+    vim_free(buf);
+
     // in place
     buf = alloc(40);
     STRCPY(buf, "text");
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2515,
+/**/
     2514,
 /**/
     2513,