mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 05:05:00 -07:00
vim-patch:9.0.1079: leaking memory when defining a user command fails
Problem: Leaking memory when defining a user command fails.
Solution: Free "compl_arg" when needed. (closes vim/vim#11726)
33e543038b
This commit is contained in:
parent
b201cbfc61
commit
ff62d76193
@ -323,6 +323,11 @@ func Test_CmdErrors()
|
||||
call assert_fails('com DoCmd :', 'E174:')
|
||||
comclear
|
||||
call assert_fails('delcom DoCmd', 'E184:')
|
||||
|
||||
" These used to leak memory
|
||||
call assert_fails('com! -complete=custom,CustomComplete _ :', 'E182:')
|
||||
call assert_fails('com! -complete=custom,CustomComplete docmd :', 'E183:')
|
||||
call assert_fails('com! -complete=custom,CustomComplete -xxx DoCmd :', 'E181:')
|
||||
endfunc
|
||||
|
||||
func CustomComplete(A, L, P)
|
||||
|
@ -943,7 +943,7 @@ void ex_command(exarg_T *eap)
|
||||
end = skiptowhite(p);
|
||||
if (uc_scan_attr(p, (size_t)(end - p), &argt, &def, &flags, &compl, (char_u **)&compl_arg,
|
||||
&addr_type_arg) == FAIL) {
|
||||
return;
|
||||
goto theend;
|
||||
}
|
||||
p = skipwhite(end);
|
||||
}
|
||||
@ -953,7 +953,7 @@ void ex_command(exarg_T *eap)
|
||||
end = uc_validate_name(name);
|
||||
if (!end) {
|
||||
emsg(_("E182: Invalid command name"));
|
||||
return;
|
||||
goto theend;
|
||||
}
|
||||
name_len = (size_t)(end - name);
|
||||
|
||||
@ -971,7 +971,12 @@ void ex_command(exarg_T *eap)
|
||||
} else {
|
||||
uc_add_command(name, name_len, p, argt, def, flags, compl, compl_arg, LUA_NOREF, LUA_NOREF,
|
||||
addr_type_arg, LUA_NOREF, eap->forceit);
|
||||
|
||||
return; // success
|
||||
}
|
||||
|
||||
theend:
|
||||
xfree(compl_arg);
|
||||
}
|
||||
|
||||
/// ":comclear"
|
||||
|
Loading…
Reference in New Issue
Block a user