changeset 32206:5372bf23bf72 v9.0.1434

patch 9.0.1434: crash when adding package already in 'runtimepath' Commit: https://github.com/vim/vim/commit/39c9ec16ea7ef13c5d783481542ee9aa6c05282c Author: zeertzjq <zeertzjq@outlook.com> Date: Sat Apr 1 13:52:03 2023 +0100 patch 9.0.1434: crash when adding package already in 'runtimepath' Problem: Crash when adding package already in 'runtimepath'. Solution: Change order for using 'runtimepath' entries. (closes https://github.com/vim/vim/issues/12215)
author Bram Moolenaar <Bram@vim.org>
date Sat, 01 Apr 2023 15:00:06 +0200
parents 4629e7ede81c
children d0e05f0e20b1
files src/scriptfile.c src/testdir/test_packadd.vim src/version.c
diffstat 3 files changed, 22 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -718,18 +718,6 @@ add_pack_dir_to_rtp(char_u *fname)
 	char_u *cur_entry = entry;
 
 	copy_option_part(&entry, buf, MAXPATHL, ",");
-	if (insp == NULL)
-	{
-	    add_pathsep(buf);
-	    rtp_ffname = fix_fname(buf);
-	    if (rtp_ffname == NULL)
-		goto theend;
-	    match = vim_fnamencmp(rtp_ffname, ffname, fname_len) == 0;
-	    vim_free(rtp_ffname);
-	    if (match)
-		// Insert "ffname" after this entry (and comma).
-		insp = entry;
-	}
 
 	if ((p = (char_u *)strstr((char *)buf, "after")) != NULL
 		&& p > buf
@@ -743,6 +731,19 @@ add_pack_dir_to_rtp(char_u *fname)
 	    after_insp = cur_entry;
 	    break;
 	}
+
+	if (insp == NULL)
+	{
+	    add_pathsep(buf);
+	    rtp_ffname = fix_fname(buf);
+	    if (rtp_ffname == NULL)
+		goto theend;
+	    match = vim_fnamencmp(rtp_ffname, ffname, fname_len) == 0;
+	    vim_free(rtp_ffname);
+	    if (match)
+		// Insert "ffname" after this entry (and comma).
+		insp = entry;
+	}
     }
 
     if (insp == NULL)
--- a/src/testdir/test_packadd.vim
+++ b/src/testdir/test_packadd.vim
@@ -21,6 +21,13 @@ func Test_packadd()
   call mkdir(s:plugdir . '/plugin/also', 'p')
   call mkdir(s:plugdir . '/ftdetect', 'p')
   call mkdir(s:plugdir . '/after', 'p')
+
+  " This used to crash Vim
+  let &rtp = 'nosuchdir,' . s:plugdir . '/after'
+  packadd mytest
+  " plugdir should be inserted before plugdir/after
+  call assert_match('^nosuchdir,' . s:plugdir . ',', &rtp)
+
   set rtp&
   let rtp = &rtp
   filetype on
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1434,
+/**/
     1433,
 /**/
     1432,