vim-patch:9.0.0090: no error when assigning bool to a string option (#19539)

Problem:    No error when assigning bool to a string option with setwinvar().
Solution:   Give an error (closes vim/vim#10766)
28f84e17b0
This commit is contained in:
zeertzjq 2022-07-27 20:59:43 +08:00 committed by GitHub
parent e0f32abb1c
commit f57432af4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 0 deletions

View File

@ -1617,6 +1617,10 @@ static void set_option_from_tv(const char *varname, typval_T *varp)
char nbuf[NUMBUFLEN];
if (varp->v_type == VAR_BOOL) {
if (is_string_option(varname)) {
emsg(_(e_stringreq));
return;
}
numval = (long)varp->vval.v_number;
strval = "0"; // avoid using "false"
} else {

View File

@ -5301,6 +5301,14 @@ char *set_option_value(const char *const name, const long number, const char *co
return NULL;
}
/// Return true if "name" is a string option.
/// Returns false if option "name" does not exist.
bool is_string_option(const char *name)
{
int idx = findoption(name);
return idx >= 0 && (options[idx].flags & P_STRING);
}
// Translate a string like "t_xx", "<t_xx>" or "<S-Tab>" to a key number.
// When "has_lt" is true there is a '<' before "*arg_arg".
// Returns 0 when the key is not recognized.

View File

@ -303,4 +303,8 @@ describe('setbufvar() function', function()
pcall_err(funcs.setbufvar, 1, 'changedtick', true))
eq(2, funcs.getbufvar(1, 'changedtick'))
end)
it('throws error when setting a string option to a boolean value vim-patch:9.0.0090', function()
eq('Vim:E928: String required',
pcall_err(funcs.setbufvar, '', '&errorformat', true))
end)
end)