Merge remote-tracking branch 'vim/master'

This commit is contained in:
ichizok
2022-06-03 13:13:55 +09:00
9 changed files with 81 additions and 39 deletions
+1 -1
View File
@@ -36,7 +36,7 @@ jobs:
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
steps:
- name: Checkout repository
- name: Checkout repository from github
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
+2 -1
View File
@@ -13,7 +13,8 @@ jobs:
DEBIAN_FRONTEND: noninteractive
steps:
- uses: actions/checkout@v3
- name: Checkout repository from github
uses: actions/checkout@v3
- name: Download Coverity
run: |
+21 -33
View File
@@ -2952,26 +2952,24 @@ autocmd_add_or_delete(typval_T *argvars, typval_T *rettv, int delete)
if (eli == NULL)
break;
if (eli->li_tv.v_type != VAR_STRING
|| eli->li_tv.vval.v_string == NULL)
|| (p = eli->li_tv.vval.v_string) == NULL)
{
emsg(_(e_string_required));
continue;
break;
}
p = eli->li_tv.vval.v_string;
}
else
{
if (end == NULL)
p = end = event_name;
if (end == NULL || *end == NUL)
if (p == NULL)
p = event_name;
if (p == NULL || *p == NUL)
break;
}
if (p == NULL)
continue;
event = event_name2nr(p, &end);
if (event == NUM_EVENTS || *end != NUL)
{
// this also catches something following a valid event name
semsg(_(e_no_such_event_str), p);
retval = VVAL_FALSE;
break;
@@ -3162,33 +3160,23 @@ f_autocmd_get(typval_T *argvars, typval_T *rettv)
for (ac = ap->cmds; ac != NULL; ac = ac->next)
{
event_dict = dict_alloc();
if (event_dict == NULL)
if (event_dict == NULL
|| list_append_dict(event_list, event_dict) == FAIL)
return;
if (list_append_dict(event_list, event_dict) == FAIL)
return;
if (dict_add_string(event_dict, "event", event_name) == FAIL)
return;
if (dict_add_string(event_dict, "group", group_name == NULL
? (char_u *)"" : group_name) == FAIL)
return;
if (ap->buflocal_nr != 0)
if (dict_add_number(event_dict, "bufnr", ap->buflocal_nr)
== FAIL)
return;
if (dict_add_string(event_dict, "pattern", ap->pat) == FAIL)
return;
if (dict_add_string(event_dict, "cmd", ac->cmd) == FAIL)
return;
if (dict_add_bool(event_dict, "once", ac->once) == FAIL)
return;
if (dict_add_bool(event_dict, "nested", ac->nested) == FAIL)
if (dict_add_string(event_dict, "event", event_name) == FAIL
|| dict_add_string(event_dict, "group",
group_name == NULL ? (char_u *)""
: group_name) == FAIL
|| (ap->buflocal_nr != 0
&& (dict_add_number(event_dict, "bufnr",
ap->buflocal_nr) == FAIL))
|| dict_add_string(event_dict, "pattern",
ap->pat) == FAIL
|| dict_add_string(event_dict, "cmd", ac->cmd) == FAIL
|| dict_add_bool(event_dict, "once", ac->once) == FAIL
|| dict_add_bool(event_dict, "nested",
ac->nested) == FAIL)
return;
}
}
+18 -3
View File
@@ -3314,6 +3314,21 @@ update_search_stat(
}
#if defined(FEAT_FIND_ID) || defined(PROTO)
/*
* Get line "lnum" and copy it into "buf[LSIZE]".
* The copy is made because the regexp may make the line invalid when using a
* mark.
*/
static char_u *
get_line_and_copy(linenr_T lnum, char_u *buf)
{
char_u *line = ml_get(lnum);
vim_strncpy(buf, line, LSIZE - 1);
return buf;
}
/*
* Find identifiers or defines in included files.
* If p_ic && compl_status_sol() then ptr must be in lowercase.
@@ -3418,7 +3433,7 @@ find_pattern_in_path(
end_lnum = curbuf->b_ml.ml_line_count;
if (lnum > end_lnum) // do at least one line
lnum = end_lnum;
line = ml_get(lnum);
line = get_line_and_copy(lnum, file_line);
for (;;)
{
@@ -3747,7 +3762,7 @@ search_line:
{
if (lnum >= end_lnum)
goto exit_matched;
line = ml_get(++lnum);
line = get_line_and_copy(++lnum, file_line);
}
else if (vim_fgets(line = file_line,
LSIZE, files[depth].fp))
@@ -3965,7 +3980,7 @@ exit_matched:
{
if (++lnum > end_lnum)
break;
line = ml_get(lnum);
line = get_line_and_copy(lnum, file_line);
}
already = NULL;
}
+1 -1
View File
@@ -90,7 +90,7 @@ let test_values = {
\ 'display': [['', 'lastline', 'lastline,uhex'], ['xxx']],
\ 'eadirection': [['', 'both', 'ver'], ['xxx', 'ver,hor']],
\ 'encoding': [['latin1'], ['xxx', '']],
\ 'eventignore': [['', 'WinEnter', 'WinLeave,winenter'], ['xxx']],
\ 'eventignore': [['', 'WinEnter', 'WinLeave,winenter', 'all,WinEnter'], ['xxx']],
\ 'fileencoding': [['', 'latin1', 'xxx'], []],
\ 'fileformat': [['', 'dos', 'unix'], ['xxx']],
\ 'fileformats': [['', 'dos', 'dos,unix'], ['xxx']],
+10
View File
@@ -3384,6 +3384,12 @@ func Test_autocmd_add()
let l = [#{group: 'TestAcSet', event: 'BufAdd', bufnr: 9999,
\ cmd: 'echo "bufadd"'}]
call assert_fails("echo autocmd_add(l)", 'E680:')
let l = [#{group: 'TestAcSet', event: 'BufAdd', bufnr: 9999,
\ pattern: '*.py', cmd: 'echo "bufadd"'}]
call assert_fails("echo autocmd_add(l)", 'E680:')
let l = [#{group: 'TestAcSet', event: 'BufAdd', bufnr: 9999,
\ pattern: ['*.py', '*.c'], cmd: 'echo "bufadd"'}]
call assert_fails("echo autocmd_add(l)", 'E680:')
let l = [#{group: 'TestAcSet', event: 'BufRead', bufnr: [],
\ cmd: 'echo "bufread"'}]
call assert_fails("echo autocmd_add(l)", 'E745:')
@@ -3479,6 +3485,7 @@ func Test_autocmd_add()
" Test for invalid values for 'pattern' item
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: test_null_string(), cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E928:')
let l = [#{group: 'TestAcSet', event: "BufEnter",
\ pattern: test_null_list(), cmd: 'echo "bufcmds"'}]
call assert_fails('call autocmd_add(l)', 'E714:')
@@ -3555,6 +3562,9 @@ func Test_autocmd_delete()
" Delete a non-existing autocmd pattern
let l = [#{group: 'TestAcSet', event: 'BufAdd', pat: 'abc'}]
call assert_true(autocmd_delete(l))
" Delete an autocmd for a non-existing buffer
let l = [#{event: '*', bufnr: 9999, cmd: 'echo "x"'}]
call assert_fails('call autocmd_delete(l)', 'E680:')
" Delete an autocmd group
augroup TestAcSet
+9
View File
@@ -1063,10 +1063,19 @@ func Test_cmdline_complete_various()
augroup END
call feedkeys(":augroup X\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"augroup XTest.test", @:)
" group name completion in :autocmd
call feedkeys(":au X\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"au XTest.test", @:)
call feedkeys(":au XTest.test\<Tab>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"au XTest.test", @:)
augroup! XTest.test
" autocmd pattern completion
call feedkeys(":au BufEnter *.py\<Tab>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"au BufEnter *.py\t", @:)
" completion for the :unlet command
call feedkeys(":unlet one two\<C-A>\<C-B>\"\<CR>", 'xt')
call assert_equal("\"unlet one two", @:)
+11
View File
@@ -1290,6 +1290,17 @@ func Test_inc_search()
close!
endfunc
" this was using a line from ml_get() freed by the regexp
func Test_isearch_copy_line()
new
norm o
norm 0
0norm o
sil! norm bc0
sil! isearch \%')
bwipe!
endfunc
" Test for :dsearch, :dlist, :djump and :dsplit commands
" Test for [d, ]d, [D, ]D, [ CTRL-D, ] CTRL-D and CTRL-W d commands
func Test_macro_search()
+8
View File
@@ -749,6 +749,14 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
5052,
/**/
5051,
/**/
5050,
/**/
5049,
/**/
5048,
/**/