diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-04-01 13:52:03 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-04-01 13:52:03 +0100 |
commit | 39c9ec16ea7ef13c5d783481542ee9aa6c05282c (patch) | |
tree | fff76b9c362d6c7136ab37d72072468334a8dac4 | |
parent | 869113f3765d51fc822a61b2ba53d339797c1231 (diff) |
patch 9.0.1434: crash when adding package already in 'runtimepath'v9.0.1434
Problem: Crash when adding package already in 'runtimepath'.
Solution: Change order for using 'runtimepath' entries. (closes #12215)
-rw-r--r-- | src/scriptfile.c | 25 | ||||
-rw-r--r-- | src/testdir/test_packadd.vim | 7 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 22 insertions, 12 deletions
diff --git a/src/scriptfile.c b/src/scriptfile.c index dd4a35236e..0afe20110b 100644 --- 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) diff --git a/src/testdir/test_packadd.vim b/src/testdir/test_packadd.vim index 89b7817682..b44494acf9 100644 --- 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 diff --git a/src/version.c b/src/version.c index 76f5f09e7a..f87bc34e79 100644 --- 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, |