changeset 18249:902845716069 v8.1.2119

patch 8.1.2119: memory access error for empty string Commit: https://github.com/vim/vim/commit/524f3b19ae16e08350010b5effe38d0637349285 Author: Bram Moolenaar <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Sun, 06 Oct 2019 20:15:03 +0200
parents 4d15bd9b6829
children f1d9d3f76c98
files src/macros.h src/version.c
diffstat 2 files changed, 5 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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 */
--- 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,