changeset 10831:e926c5a7f9bf v8.0.0305

patch 8.0.0305: invalid memory access when option has duplicate flag commit https://github.com/vim/vim/commit/aaaf57d8a936efe420190c077e4a74041cc6c72e Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 5 14:13:20 2017 +0100 patch 8.0.0305: invalid memory access when option has duplicate flag Problem: Invalid memory access when option has duplicate flag. Solution: Correct pointer computation. (Dominique Pelle, closes https://github.com/vim/vim/issues/1442)
author Christian Brabandt <cb@256bit.org>
date Sun, 05 Feb 2017 14:15:04 +0100
parents fe0e00dab982
children 2ba168ecddac
files src/option.c src/testdir/test_options.vim src/version.c
diffstat 3 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/option.c
+++ b/src/option.c
@@ -4954,7 +4954,7 @@ do_set(
 			    if (flags & P_FLAGLIST)
 			    {
 				/* Remove flags that appear twice. */
-				for (s = newval; *s; ++s)
+				for (s = newval; *s;)
 				{
 				    /* if options have P_FLAGLIST and
 				     * P_ONECOMMA such as 'whichwrap' */
@@ -4966,7 +4966,7 @@ do_set(
 					    /* Remove the duplicated value and
 					     * the next comma. */
 					    STRMOVE(s, s + 2);
-					    s -= 2;
+					    continue;
 					}
 				    }
 				    else
@@ -4975,9 +4975,10 @@ do_set(
 					      && vim_strchr(s + 1, *s) != NULL)
 					{
 					    STRMOVE(s, s + 1);
-					    --s;
+					    continue;
 					}
 				    }
+				    ++s;
 				}
 			    }
 
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -13,6 +13,12 @@ function! Test_whichwrap()
   set whichwrap+=h,l
   call assert_equal('b,s,h,l', &whichwrap)
 
+  set whichwrap=h,h
+  call assert_equal('h', &whichwrap)
+
+  set whichwrap=h,h,h
+  call assert_equal('h', &whichwrap)
+
   set whichwrap&
 endfunction
 
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    305,
+/**/
     304,
 /**/
     303,