Commit 760e9f44 authored by Abdelhakeem's avatar Abdelhakeem Committed by James McCoy

vim-patch:8.1.0540: may evaluate insecure value when appending to option

Problem:    May evaluate insecure value when appending to option.
Solution:   Set the secure flag when changing an option that was previously
            set insecurely.  Also allow numbers for the characters from
            'spelllang' that are used for LANG.vim.
https://github.com/vim/vim/commit/247bb7e43b47eb8407a1111bed60b61aceda52ad

(cherry picked from commit 7ddb1022)
Signed-off-by: James McCoy's avatarJames McCoy <jamessan@debian.org>
parent 33cddcdf
......@@ -1355,6 +1355,8 @@ do_set (
&& nextchar != NUL && !ascii_iswhite(afterchar))
errmsg = e_trailing;
} else {
int value_is_replaced = !prepending && !adding && !removing;
if (flags & P_BOOL) { /* boolean */
if (nextchar == '=' || nextchar == ':') {
errmsg = e_invarg;
......@@ -1774,12 +1776,37 @@ do_set (
// buffer is closed by autocommands.
saved_newval = (newval != NULL) ? xstrdup((char *)newval) : 0;
// Handle side effects, and set the global value for
// ":set" on local options. Note: when setting 'syntax'
// or 'filetype' autocommands may be triggered that can
// cause havoc.
errmsg = did_set_string_option(opt_idx, (char_u **)varp,
new_value_alloced, oldval, errbuf, opt_flags);
{
unsigned int *p = insecure_flag(opt_idx, opt_flags);
int did_inc_secure = FALSE;
// When an option is set in the sandbox, from a
// modeline or in secure mode, then deal with side
// effects in secure mode. Also when the value was
// set with the P_INSECURE flag and is not
// completely replaced.
if (secure
#ifdef HAVE_SANDBOX
|| sandbox != 0
#endif
|| (opt_flags & OPT_MODELINE)
|| (!value_is_replaced && (*p & P_INSECURE)))
{
did_inc_secure = TRUE;
++secure;
}
// Handle side effects, and set the global value for
// ":set" on local options. Note: when setting 'syntax'
// or 'filetype' autocommands may be triggered that can
// cause havoc.
errmsg = did_set_string_option(opt_idx, (char_u **)varp,
new_value_alloced, oldval, errbuf, opt_flags);
if (did_inc_secure) {
--secure;
}
}
if (errmsg == NULL) {
if (!starting) {
......@@ -1806,8 +1833,7 @@ do_set (
}
if (opt_idx >= 0)
did_set_option(opt_idx, opt_flags,
!prepending && !adding && !removing);
did_set_option(opt_idx, opt_flags, value_is_replaced);
}
skip:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment