# HG changeset patch # User Bram Moolenaar # Date 1570385703 -7200 # Node ID 90284571606968ba1bd028d1e9dba33d87368db3 # Parent 4d15bd9b6829e14e6a1c4ab13aaa905c14df47eb patch 8.1.2119: memory access error for empty string Commit: https://github.com/vim/vim/commit/524f3b19ae16e08350010b5effe38d0637349285 Author: Bram Moolenaar Date: Sun Oct 6 20:08:38 2019 +0200 patch 8.1.2119: memory access error for empty string Problem: memory access error for empty string when 'encoding' is a single byte encoding. Solution: Check for empty string when getting the length. (Dominique Pelle, closes #5021, closes #5007) diff --git a/src/macros.h b/src/macros.h --- a/src/macros.h +++ b/src/macros.h @@ -230,11 +230,11 @@ * PTR2CHAR(): get character from pointer. */ /* Get the length of the character p points to, including composing chars */ -#define MB_PTR2LEN(p) (has_mbyte ? (*mb_ptr2len)(p) : 1) +#define MB_PTR2LEN(p) (has_mbyte ? (*mb_ptr2len)(p) : (*p == NUL ? 0 : 1)) /* Advance multi-byte pointer, skip over composing chars. */ -#define MB_PTR_ADV(p) p += has_mbyte ? (*mb_ptr2len)(p) : 1 +#define MB_PTR_ADV(p) p += has_mbyte ? (*mb_ptr2len)(p) : (*p == NUL ? 0 : 1) /* Advance multi-byte pointer, do not skip over composing chars. */ -#define MB_CPTR_ADV(p) p += enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : 1 +#define MB_CPTR_ADV(p) p += enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : (*p == NUL ? 0 : 1) /* Backup multi-byte pointer. Only use with "p" > "s" ! */ #define MB_PTR_BACK(s, p) p -= has_mbyte ? ((*mb_head_off)(s, p - 1) + 1) : 1 /* get length of multi-byte char, not including composing chars */ diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2119, +/**/ 2118, /**/ 2117,