Compare commits
No commits in common. 'c9' and 'c8' have entirely different histories.
@ -1,2 +1,3 @@
|
|||||||
|
SOURCES/Changelog.rpm
|
||||||
SOURCES/gvim64.png
|
SOURCES/gvim64.png
|
||||||
SOURCES/vim-8.2-2637.tar.bz2
|
SOURCES/vim-8.0-1763.tar.bz2
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
|
5ea81545fc28b57c490d25bda67a63a2838dd25b SOURCES/Changelog.rpm
|
||||||
c32bd520a1498b71ee9bbcddc7ad05df1565d085 SOURCES/gvim64.png
|
c32bd520a1498b71ee9bbcddc7ad05df1565d085 SOURCES/gvim64.png
|
||||||
8405efdee1d83465651f90edc1173ff69f390aea SOURCES/vim-8.2-2637.tar.bz2
|
6716ebb416c9da91d16a2b17dc6bc2cecf65b4eb SOURCES/vim-8.0-1763.tar.bz2
|
||||||
|
@ -0,0 +1,461 @@
|
|||||||
|
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
|
||||||
|
index 8256152..8320039 100644
|
||||||
|
--- a/runtime/doc/starting.txt
|
||||||
|
+++ b/runtime/doc/starting.txt
|
||||||
|
@@ -247,12 +247,18 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
|
||||||
|
changes and writing.
|
||||||
|
{not in Vi}
|
||||||
|
|
||||||
|
- *-Z* *restricted-mode* *E145*
|
||||||
|
+ *-Z* *restricted-mode* *E145* *E981*
|
||||||
|
-Z Restricted mode. All commands that make use of an external
|
||||||
|
shell are disabled. This includes suspending with CTRL-Z,
|
||||||
|
- ":sh", filtering, the system() function, backtick expansion,
|
||||||
|
- delete(), rename(), mkdir(), writefile(), libcall(),
|
||||||
|
- job_start(), etc.
|
||||||
|
+ ":sh", filtering, the system() function, backtick expansion
|
||||||
|
+ and libcall().
|
||||||
|
+ Also disallowed are delete(), rename(), mkdir(), job_start(),
|
||||||
|
+ etc.
|
||||||
|
+ Interfaces, such as Python, Ruby and Lua, are also disabled,
|
||||||
|
+ since they could be used to execute shell commands. Perl uses
|
||||||
|
+ the Safe module.
|
||||||
|
+ Note that the user may still find a loophole to execute a
|
||||||
|
+ shell command, it has only been made difficult.
|
||||||
|
{not in Vi}
|
||||||
|
|
||||||
|
*-g*
|
||||||
|
diff --git a/src/evalfunc.c b/src/evalfunc.c
|
||||||
|
index dd4462d..3cc305a 100644
|
||||||
|
--- a/src/evalfunc.c
|
||||||
|
+++ b/src/evalfunc.c
|
||||||
|
@@ -6446,7 +6446,7 @@ f_histadd(typval_T *argvars UNUSED, typval_T *rettv)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
rettv->vval.v_number = FALSE;
|
||||||
|
- if (check_restricted() || check_secure())
|
||||||
|
+ if (check_secure())
|
||||||
|
return;
|
||||||
|
#ifdef FEAT_CMDHIST
|
||||||
|
str = get_tv_string_chk(&argvars[0]); /* NULL on type error */
|
||||||
|
@@ -7456,6 +7456,9 @@ f_luaeval(typval_T *argvars, typval_T *rettv)
|
||||||
|
char_u *str;
|
||||||
|
char_u buf[NUMBUFLEN];
|
||||||
|
|
||||||
|
+ if (check_restricted() || check_secure())
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
str = get_tv_string_buf(&argvars[0], buf);
|
||||||
|
do_luaeval(str, argvars + 1, rettv);
|
||||||
|
}
|
||||||
|
@@ -8188,6 +8191,8 @@ f_mzeval(typval_T *argvars, typval_T *rettv)
|
||||||
|
char_u *str;
|
||||||
|
char_u buf[NUMBUFLEN];
|
||||||
|
|
||||||
|
+ if (check_restricted() || check_secure())
|
||||||
|
+ return;
|
||||||
|
str = get_tv_string_buf(&argvars[0], buf);
|
||||||
|
do_mzeval(str, rettv);
|
||||||
|
}
|
||||||
|
@@ -8398,6 +8403,9 @@ f_py3eval(typval_T *argvars, typval_T *rettv)
|
||||||
|
char_u *str;
|
||||||
|
char_u buf[NUMBUFLEN];
|
||||||
|
|
||||||
|
+ if (check_restricted() || check_secure())
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 3;
|
||||||
|
|
||||||
|
@@ -8416,6 +8424,9 @@ f_pyeval(typval_T *argvars, typval_T *rettv)
|
||||||
|
char_u *str;
|
||||||
|
char_u buf[NUMBUFLEN];
|
||||||
|
|
||||||
|
+ if (check_restricted() || check_secure())
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
if (p_pyx == 0)
|
||||||
|
p_pyx = 2;
|
||||||
|
|
||||||
|
@@ -8431,6 +8442,9 @@ f_pyeval(typval_T *argvars, typval_T *rettv)
|
||||||
|
static void
|
||||||
|
f_pyxeval(typval_T *argvars, typval_T *rettv)
|
||||||
|
{
|
||||||
|
+ if (check_restricted() || check_secure())
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
# if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3)
|
||||||
|
init_pyxversion();
|
||||||
|
if (p_pyx == 2)
|
||||||
|
@@ -10272,7 +10286,7 @@ f_setbufvar(typval_T *argvars, typval_T *rettv UNUSED)
|
||||||
|
typval_T *varp;
|
||||||
|
char_u nbuf[NUMBUFLEN];
|
||||||
|
|
||||||
|
- if (check_restricted() || check_secure())
|
||||||
|
+ if (check_secure())
|
||||||
|
return;
|
||||||
|
(void)get_tv_number(&argvars[0]); /* issue errmsg if type error */
|
||||||
|
varname = get_tv_string_chk(&argvars[1]);
|
||||||
|
@@ -10792,7 +10806,7 @@ f_settabvar(typval_T *argvars, typval_T *rettv)
|
||||||
|
|
||||||
|
rettv->vval.v_number = 0;
|
||||||
|
|
||||||
|
- if (check_restricted() || check_secure())
|
||||||
|
+ if (check_secure())
|
||||||
|
return;
|
||||||
|
|
||||||
|
tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
|
||||||
|
@@ -13674,7 +13688,7 @@ f_writefile(typval_T *argvars, typval_T *rettv)
|
||||||
|
list_T *list;
|
||||||
|
|
||||||
|
rettv->vval.v_number = -1;
|
||||||
|
- if (check_restricted() || check_secure())
|
||||||
|
+ if (check_secure())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (argvars[0].v_type != VAR_LIST)
|
||||||
|
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
|
||||||
|
index 111fe01..1827fec 100644
|
||||||
|
--- a/src/ex_cmds.c
|
||||||
|
+++ b/src/ex_cmds.c
|
||||||
|
@@ -4693,7 +4693,7 @@ check_restricted(void)
|
||||||
|
{
|
||||||
|
if (restricted)
|
||||||
|
{
|
||||||
|
- EMSG(_("E145: Shell commands not allowed in rvim"));
|
||||||
|
+ EMSG(_("E145: Shell commands and some functionality not allowed in rvim"));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
|
||||||
|
index 48b0253..82d6e29 100644
|
||||||
|
--- a/src/ex_cmds.h
|
||||||
|
+++ b/src/ex_cmds.h
|
||||||
|
@@ -56,6 +56,7 @@
|
||||||
|
* curbuf_lock is set */
|
||||||
|
#define MODIFY 0x200000L /* forbidden in non-'modifiable' buffer */
|
||||||
|
#define EXFLAGS 0x400000L /* allow flags after count in argument */
|
||||||
|
+#define RESTRICT 0x800000L /* forbidden in restricted mode */
|
||||||
|
#define FILES (XFILE | EXTRA) /* multiple extra files allowed */
|
||||||
|
#define WORD1 (EXTRA | NOSPC) /* one extra word allowed */
|
||||||
|
#define FILE1 (FILES | NOSPC) /* 1 file allowed, defaults to current file */
|
||||||
|
@@ -860,13 +861,13 @@ EX(CMD_lunmap, "lunmap", ex_unmap,
|
||||||
|
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_lua, "lua", ex_lua,
|
||||||
|
- RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_luado, "luado", ex_luado,
|
||||||
|
- RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_luafile, "luafile", ex_luafile,
|
||||||
|
- RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_lvimgrep, "lvimgrep", ex_vimgrep,
|
||||||
|
RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
|
||||||
|
@@ -929,10 +930,10 @@ EX(CMD_mode, "mode", ex_mode,
|
||||||
|
WORD1|TRLBAR|CMDWIN,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_mzscheme, "mzscheme", ex_mzscheme,
|
||||||
|
- RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN|SBOXOK,
|
||||||
|
+ RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN|SBOXOK|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_mzfile, "mzfile", ex_mzfile,
|
||||||
|
- RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_next, "next", ex_next,
|
||||||
|
RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
|
||||||
|
@@ -1115,37 +1116,37 @@ EX(CMD_pwd, "pwd", ex_pwd,
|
||||||
|
TRLBAR|CMDWIN,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_python, "python", ex_python,
|
||||||
|
- RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pydo, "pydo", ex_pydo,
|
||||||
|
- RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pyfile, "pyfile", ex_pyfile,
|
||||||
|
- RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_py3, "py3", ex_py3,
|
||||||
|
- RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_py3do, "py3do", ex_py3do,
|
||||||
|
- RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_python3, "python3", ex_py3,
|
||||||
|
- RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_py3file, "py3file", ex_py3file,
|
||||||
|
- RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pyx, "pyx", ex_pyx,
|
||||||
|
- RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pyxdo, "pyxdo", ex_pyxdo,
|
||||||
|
- RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pythonx, "pythonx", ex_pyx,
|
||||||
|
- RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_pyxfile, "pyxfile", ex_pyxfile,
|
||||||
|
- RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_quit, "quit", ex_quit,
|
||||||
|
BANG|RANGE|COUNT|NOTADR|TRLBAR|CMDWIN,
|
||||||
|
@@ -1199,13 +1200,13 @@ EX(CMD_runtime, "runtime", ex_runtime,
|
||||||
|
BANG|NEEDARG|FILES|TRLBAR|SBOXOK|CMDWIN,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_ruby, "ruby", ex_ruby,
|
||||||
|
- RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_rubydo, "rubydo", ex_rubydo,
|
||||||
|
- RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_rubyfile, "rubyfile", ex_rubyfile,
|
||||||
|
- RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_rundo, "rundo", ex_rundo,
|
||||||
|
NEEDARG|FILE1,
|
||||||
|
@@ -1472,13 +1473,13 @@ EX(CMD_tabs, "tabs", ex_tabs,
|
||||||
|
TRLBAR|CMDWIN,
|
||||||
|
ADDR_TABS),
|
||||||
|
EX(CMD_tcl, "tcl", ex_tcl,
|
||||||
|
- RANGE|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_tcldo, "tcldo", ex_tcldo,
|
||||||
|
- RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_tclfile, "tclfile", ex_tclfile,
|
||||||
|
- RANGE|FILE1|NEEDARG|CMDWIN,
|
||||||
|
+ RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
|
||||||
|
ADDR_LINES),
|
||||||
|
EX(CMD_tearoff, "tearoff", ex_tearoff,
|
||||||
|
NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN,
|
||||||
|
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
|
||||||
|
index ef86fc8..aaf2f9d 100644
|
||||||
|
--- a/src/ex_docmd.c
|
||||||
|
+++ b/src/ex_docmd.c
|
||||||
|
@@ -2372,11 +2372,16 @@ do_one_cmd(
|
||||||
|
#ifdef HAVE_SANDBOX
|
||||||
|
if (sandbox != 0 && !(ea.argt & SBOXOK))
|
||||||
|
{
|
||||||
|
- /* Command not allowed in sandbox. */
|
||||||
|
+ // Command not allowed in sandbox.
|
||||||
|
errormsg = (char_u *)_(e_sandbox);
|
||||||
|
goto doend;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
+ if (restricted != 0 && (ea.argt & RESTRICT))
|
||||||
|
+ {
|
||||||
|
+ errormsg = (char_u *)_("E981: Command not allowed in rvim");
|
||||||
|
+ goto doend;
|
||||||
|
+ }
|
||||||
|
if (!curbuf->b_p_ma && (ea.argt & MODIFY))
|
||||||
|
{
|
||||||
|
/* Command not allowed in non-'modifiable' buffer */
|
||||||
|
diff --git a/src/if_perl.xs b/src/if_perl.xs
|
||||||
|
index 7b45033..fc8d613 100644
|
||||||
|
--- a/src/if_perl.xs
|
||||||
|
+++ b/src/if_perl.xs
|
||||||
|
@@ -930,6 +930,7 @@ VIM_init(void)
|
||||||
|
#ifdef DYNAMIC_PERL
|
||||||
|
static char *e_noperl = N_("Sorry, this command is disabled: the Perl library could not be loaded.");
|
||||||
|
#endif
|
||||||
|
+static char *e_perlsandbox = N_("E299: Perl evaluation forbidden in sandbox without the Safe module");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ":perl"
|
||||||
|
@@ -978,13 +979,12 @@ ex_perl(exarg_T *eap)
|
||||||
|
vim_free(script);
|
||||||
|
}
|
||||||
|
|
||||||
|
-#ifdef HAVE_SANDBOX
|
||||||
|
- if (sandbox)
|
||||||
|
+ if (sandbox || secure)
|
||||||
|
{
|
||||||
|
safe = perl_get_sv("VIM::safe", FALSE);
|
||||||
|
# ifndef MAKE_TEST /* avoid a warning for unreachable code */
|
||||||
|
if (safe == NULL || !SvTRUE(safe))
|
||||||
|
- EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
|
||||||
|
+ EMSG(_(e_perlsandbox));
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
{
|
||||||
|
@@ -996,7 +996,6 @@ ex_perl(exarg_T *eap)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
-#endif
|
||||||
|
perl_eval_sv(sv, G_DISCARD | G_NOARGS);
|
||||||
|
|
||||||
|
SvREFCNT_dec(sv);
|
||||||
|
@@ -1259,13 +1258,12 @@ do_perleval(char_u *str, typval_T *rettv)
|
||||||
|
ENTER;
|
||||||
|
SAVETMPS;
|
||||||
|
|
||||||
|
-#ifdef HAVE_SANDBOX
|
||||||
|
- if (sandbox)
|
||||||
|
+ if (sandbox || secure)
|
||||||
|
{
|
||||||
|
safe = get_sv("VIM::safe", FALSE);
|
||||||
|
# ifndef MAKE_TEST /* avoid a warning for unreachable code */
|
||||||
|
if (safe == NULL || !SvTRUE(safe))
|
||||||
|
- EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
|
||||||
|
+ EMSG(_(e_perlsandbox));
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
{
|
||||||
|
@@ -1281,7 +1279,6 @@ do_perleval(char_u *str, typval_T *rettv)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
-#endif /* HAVE_SANDBOX */
|
||||||
|
sv = eval_pv((char *)str, 0);
|
||||||
|
|
||||||
|
if (sv) {
|
||||||
|
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
|
||||||
|
index e36089a..5f1c38c 100644
|
||||||
|
--- a/src/testdir/Make_all.mak
|
||||||
|
+++ b/src/testdir/Make_all.mak
|
||||||
|
@@ -156,6 +156,7 @@ NEW_TESTS = test_arabic.res \
|
||||||
|
test_quotestar.res \
|
||||||
|
test_regex_char_classes.res \
|
||||||
|
test_registers.res \
|
||||||
|
+ test_restricted.res \
|
||||||
|
test_retab.res \
|
||||||
|
test_ruby.res \
|
||||||
|
test_scrollbind.res \
|
||||||
|
diff --git a/src/testdir/test_restricted.vim b/src/testdir/test_restricted.vim
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..9dd937c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/testdir/test_restricted.vim
|
||||||
|
@@ -0,0 +1,107 @@
|
||||||
|
+" Test for "rvim" or "vim -Z"
|
||||||
|
+
|
||||||
|
+source shared.vim
|
||||||
|
+
|
||||||
|
+func Test_restricted()
|
||||||
|
+ let cmd = GetVimCommand('Xrestricted')
|
||||||
|
+ if cmd == ''
|
||||||
|
+ return
|
||||||
|
+ endif
|
||||||
|
+
|
||||||
|
+ call writefile([
|
||||||
|
+ \ "silent !ls",
|
||||||
|
+ \ "call writefile([v:errmsg], 'Xrestrout')",
|
||||||
|
+ \ "qa!",
|
||||||
|
+ \ ], 'Xrestricted')
|
||||||
|
+ call system(cmd . ' -Z')
|
||||||
|
+ call assert_match('E145:', join(readfile('Xrestrout')))
|
||||||
|
+
|
||||||
|
+ call delete('Xrestricted')
|
||||||
|
+ call delete('Xrestrout')
|
||||||
|
+endfunc
|
||||||
|
+
|
||||||
|
+func Run_restricted_test(ex_cmd, error)
|
||||||
|
+ let cmd = GetVimCommand('Xrestricted')
|
||||||
|
+ if cmd == ''
|
||||||
|
+ return
|
||||||
|
+ endif
|
||||||
|
+
|
||||||
|
+ call writefile([
|
||||||
|
+ \ a:ex_cmd,
|
||||||
|
+ \ "call writefile([v:errmsg], 'Xrestrout')",
|
||||||
|
+ \ "qa!",
|
||||||
|
+ \ ], 'Xrestricted')
|
||||||
|
+ call system(cmd . ' -Z')
|
||||||
|
+ call assert_match(a:error, join(readfile('Xrestrout')))
|
||||||
|
+
|
||||||
|
+ call delete('Xrestricted')
|
||||||
|
+ call delete('Xrestrout')
|
||||||
|
+endfunc
|
||||||
|
+
|
||||||
|
+func Test_restricted_lua()
|
||||||
|
+ if !has('lua')
|
||||||
|
+ throw 'Skipped: Lua is not supported'
|
||||||
|
+ endif
|
||||||
|
+ call Run_restricted_test('lua print("Hello, Vim!")', 'E981:')
|
||||||
|
+ call Run_restricted_test('luado return "hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('luafile somefile', 'E981:')
|
||||||
|
+ call Run_restricted_test('call luaeval("expression")', 'E145:')
|
||||||
|
+endfunc
|
||||||
|
+
|
||||||
|
+func Test_restricted_mzscheme()
|
||||||
|
+ if !has('mzscheme')
|
||||||
|
+ throw 'Skipped: MzScheme is not supported'
|
||||||
|
+ endif
|
||||||
|
+ call Run_restricted_test('mzscheme statement', 'E981:')
|
||||||
|
+ call Run_restricted_test('mzfile somefile', 'E981:')
|
||||||
|
+ call Run_restricted_test('call mzeval("expression")', 'E145:')
|
||||||
|
+endfunc
|
||||||
|
+
|
||||||
|
+func Test_restricted_perl()
|
||||||
|
+ if !has('perl')
|
||||||
|
+ throw 'Skipped: Perl is not supported'
|
||||||
|
+ endif
|
||||||
|
+ " TODO: how to make Safe mode fail?
|
||||||
|
+ " call Run_restricted_test('perl system("ls")', 'E981:')
|
||||||
|
+ " call Run_restricted_test('perldo system("hello")', 'E981:')
|
||||||
|
+ " call Run_restricted_test('perlfile somefile', 'E981:')
|
||||||
|
+ " call Run_restricted_test('call perleval("system(\"ls\")")', 'E145:')
|
||||||
|
+endfunc
|
||||||
|
+
|
||||||
|
+func Test_restricted_python()
|
||||||
|
+ if !has('python')
|
||||||
|
+ throw 'Skipped: Python is not supported'
|
||||||
|
+ endif
|
||||||
|
+ call Run_restricted_test('python print "hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('pydo return "hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('pyfile somefile', 'E981:')
|
||||||
|
+ call Run_restricted_test('call pyeval("expression")', 'E145:')
|
||||||
|
+endfunc
|
||||||
|
+
|
||||||
|
+func Test_restricted_python3()
|
||||||
|
+ if !has('python3')
|
||||||
|
+ throw 'Skipped: Python3 is not supported'
|
||||||
|
+ endif
|
||||||
|
+ call Run_restricted_test('py3 print "hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('py3do return "hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('py3file somefile', 'E981:')
|
||||||
|
+ call Run_restricted_test('call py3eval("expression")', 'E145:')
|
||||||
|
+endfunc
|
||||||
|
+
|
||||||
|
+func Test_restricted_ruby()
|
||||||
|
+ if !has('ruby')
|
||||||
|
+ throw 'Skipped: Ruby is not supported'
|
||||||
|
+ endif
|
||||||
|
+ call Run_restricted_test('ruby print "Hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('rubydo print "Hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('rubyfile somefile', 'E981:')
|
||||||
|
+endfunc
|
||||||
|
+
|
||||||
|
+func Test_restricted_tcl()
|
||||||
|
+ if !has('tcl')
|
||||||
|
+ throw 'Skipped: Tcl is not supported'
|
||||||
|
+ endif
|
||||||
|
+ call Run_restricted_test('tcl puts "Hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('tcldo puts "Hello"', 'E981:')
|
||||||
|
+ call Run_restricted_test('tclfile somefile', 'E981:')
|
||||||
|
+endfunc
|
@ -0,0 +1,16 @@
|
|||||||
|
diff -up vim80/src/getchar.c.cve vim80/src/getchar.c
|
||||||
|
--- vim80/src/getchar.c.cve 2019-06-14 13:46:17.269523985 +0200
|
||||||
|
+++ vim80/src/getchar.c 2019-06-14 13:46:58.427169288 +0200
|
||||||
|
@@ -1418,6 +1418,12 @@ openscript(
|
||||||
|
EMSG(_(e_nesting));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ // Disallow sourcing a file in the sandbox, the commands would be executed
|
||||||
|
+ // later, possibly outside of the sandbox.
|
||||||
|
+ if (check_secure())
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
if (ignore_script)
|
||||||
|
/* Not reading from script, also don't open one. Warning message? */
|
@ -1,30 +0,0 @@
|
|||||||
From b5098060f4acae4dac3203130278c948d670a3d5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bram Moolenaar <Bram@vim.org>
|
|
||||||
Date: Wed, 7 Jul 2021 19:26:19 +0200
|
|
||||||
Subject: [PATCH] patch 8.2.3115: Coverity complains about free_wininfo() use
|
|
||||||
|
|
||||||
Problem: Coverity complains about free_wininfo() use.
|
|
||||||
Solution: Add a condition that "wip2" is not equal to "wip". (Neovim #14996)
|
|
||||||
---
|
|
||||||
src/version.c | 2 ++
|
|
||||||
src/window.c | 3 ++-
|
|
||||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/window.c b/src/window.c
|
|
||||||
index 09067b081..cc9c217b4 100644
|
|
||||||
--- a/src/window.c
|
|
||||||
+++ b/src/window.c
|
|
||||||
@@ -5057,8 +5057,9 @@ win_free(
|
|
||||||
|
|
||||||
// If there already is an entry with "wi_win" set to NULL it
|
|
||||||
// must be removed, it would never be used.
|
|
||||||
+ // Skip "wip" itself, otherwise Coverity complains.
|
|
||||||
for (wip2 = buf->b_wininfo; wip2 != NULL; wip2 = wip2->wi_next)
|
|
||||||
- if (wip2->wi_win == NULL)
|
|
||||||
+ if (wip2 != wip && wip2->wi_win == NULL)
|
|
||||||
{
|
|
||||||
if (wip2->wi_next != NULL)
|
|
||||||
wip2->wi_next->wi_prev = wip2->wi_prev;
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,102 +0,0 @@
|
|||||||
diff --git a/src/vim9compile.c b/src/vim9compile.c
|
|
||||||
index 535de05..ae7b253 100644
|
|
||||||
--- a/src/vim9compile.c
|
|
||||||
+++ b/src/vim9compile.c
|
|
||||||
@@ -1073,21 +1073,26 @@ generate_PUSHF(cctx_T *cctx, float_T fnumber)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Generate an ISN_PUSHS instruction.
|
|
||||||
- * Consumes "str".
|
|
||||||
+ * Consumes "*str". When freed *str is set to NULL, unless "str" is NULL.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
-generate_PUSHS(cctx_T *cctx, char_u *str)
|
|
||||||
+generate_PUSHS(cctx_T *cctx, char_u **str)
|
|
||||||
{
|
|
||||||
isn_T *isn;
|
|
||||||
|
|
||||||
if (cctx->ctx_skip == SKIP_YES)
|
|
||||||
{
|
|
||||||
- vim_free(str);
|
|
||||||
+ if (str != NULL)
|
|
||||||
+ VIM_CLEAR(*str);
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
if ((isn = generate_instr_type(cctx, ISN_PUSHS, &t_string)) == NULL)
|
|
||||||
+ {
|
|
||||||
+ if (str != NULL)
|
|
||||||
+ VIM_CLEAR(*str);
|
|
||||||
return FAIL;
|
|
||||||
- isn->isn_arg.string = str;
|
|
||||||
+ }
|
|
||||||
+ isn->isn_arg.string = str == NULL ? NULL : *str;
|
|
||||||
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
@@ -2547,7 +2552,7 @@ generate_tv_PUSH(cctx_T *cctx, typval_T *tv)
|
|
||||||
tv->vval.v_blob = NULL;
|
|
||||||
break;
|
|
||||||
case VAR_STRING:
|
|
||||||
- generate_PUSHS(cctx, tv->vval.v_string);
|
|
||||||
+ generate_PUSHS(cctx, &tv->vval.v_string);
|
|
||||||
tv->vval.v_string = NULL;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
@@ -3301,7 +3306,7 @@ compile_dict(char_u **arg, cctx_T *cctx, ppconst_T *ppconst)
|
|
||||||
key = get_literal_key(arg);
|
|
||||||
if (key == NULL)
|
|
||||||
return FAIL;
|
|
||||||
- if (generate_PUSHS(cctx, key) == FAIL)
|
|
||||||
+ if (generate_PUSHS(cctx, &key) == FAIL)
|
|
||||||
return FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -5978,7 +5983,7 @@ compile_assign_unlet(
|
|
||||||
char_u *key_end = to_name_end(p + 1, TRUE);
|
|
||||||
char_u *key = vim_strnsave(p + 1, key_end - p - 1);
|
|
||||||
|
|
||||||
- r = generate_PUSHS(cctx, key);
|
|
||||||
+ r = generate_PUSHS(cctx, &key);
|
|
||||||
}
|
|
||||||
if (r == FAIL)
|
|
||||||
return FAIL;
|
|
||||||
@@ -6149,7 +6154,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|
||||||
// Push each line and the create the list.
|
|
||||||
FOR_ALL_LIST_ITEMS(l, li)
|
|
||||||
{
|
|
||||||
- generate_PUSHS(cctx, li->li_tv.vval.v_string);
|
|
||||||
+ generate_PUSHS(cctx, &li->li_tv.vval.v_string);
|
|
||||||
li->li_tv.vval.v_string = NULL;
|
|
||||||
}
|
|
||||||
generate_NEWLIST(cctx, l->lv_len);
|
|
||||||
@@ -7709,7 +7714,7 @@ compile_catch(char_u *arg, cctx_T *cctx UNUSED)
|
|
||||||
p += len + 2 + dropped;
|
|
||||||
if (pat == NULL)
|
|
||||||
return FAIL;
|
|
||||||
- if (generate_PUSHS(cctx, pat) == FAIL)
|
|
||||||
+ if (generate_PUSHS(cctx, &pat) == FAIL)
|
|
||||||
return FAIL;
|
|
||||||
|
|
||||||
if (generate_COMPARE(cctx, EXPR_MATCH, FALSE) == FAIL)
|
|
||||||
@@ -8080,7 +8085,9 @@ compile_exec(char_u *line, exarg_T *eap, cctx_T *cctx)
|
|
||||||
{
|
|
||||||
if (p > start)
|
|
||||||
{
|
|
||||||
- generate_PUSHS(cctx, vim_strnsave(start, p - start));
|
|
||||||
+ char_u *val = vim_strnsave(start, p - start);
|
|
||||||
+
|
|
||||||
+ generate_PUSHS(cctx, &val);
|
|
||||||
++count;
|
|
||||||
}
|
|
||||||
p += 2;
|
|
||||||
@@ -8101,7 +8108,9 @@ compile_exec(char_u *line, exarg_T *eap, cctx_T *cctx)
|
|
||||||
{
|
|
||||||
if (*skipwhite(start) != NUL)
|
|
||||||
{
|
|
||||||
- generate_PUSHS(cctx, vim_strsave(start));
|
|
||||||
+ char_u *val = vim_strsave(start);
|
|
||||||
+
|
|
||||||
+ generate_PUSHS(cctx, &val);
|
|
||||||
++count;
|
|
||||||
}
|
|
||||||
break;
|
|
@ -1,49 +0,0 @@
|
|||||||
From 3ae5fc9a6a881e0be381e4cc70080ac5908d7520 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bram Moolenaar <Bram@vim.org>
|
|
||||||
Date: Mon, 6 Sep 2021 18:57:30 +0200
|
|
||||||
Subject: [PATCH] patch 8.2.3406: on some systems tests fail without _REENTRANT
|
|
||||||
|
|
||||||
Problem: On some systems tests fail without _REENTRANT. (Elimar
|
|
||||||
Riesebieter)
|
|
||||||
Solution: Add -D_REENTRANT in configure. (closes #7402)
|
|
||||||
---
|
|
||||||
src/auto/configure | 4 ++++
|
|
||||||
src/configure.ac | 6 ++++++
|
|
||||||
src/version.c | 2 ++
|
|
||||||
3 files changed, 12 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/auto/configure b/src/auto/configure
|
|
||||||
index fba6a19b5..4f4363224 100755
|
|
||||||
--- a/src/auto/configure
|
|
||||||
+++ b/src/auto/configure
|
|
||||||
@@ -14960,6 +14960,10 @@ $as_echo "no" >&6; }
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
+if `echo "$CFLAGS" | grep -v D_XEENTRANT >/dev/null`; then
|
|
||||||
+ CFLAGS="$CFLAGS -D_REENTRANT"
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
DEPEND_CFLAGS_FILTER=
|
|
||||||
if test "$GCC" = yes; then
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC 3 or later" >&5
|
|
||||||
diff --git a/src/configure.ac b/src/configure.ac
|
|
||||||
index 5ec955757..4cd6dea1f 100644
|
|
||||||
--- a/src/configure.ac
|
|
||||||
+++ b/src/configure.ac
|
|
||||||
@@ -4504,6 +4504,12 @@ if test "$MACOS_X" = "yes"; then
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
+dnl On some systems REENTRANT needs to be defined. It should not hurt to use
|
|
||||||
+dnl it everywhere.
|
|
||||||
+if `echo "$CFLAGS" | grep -v D_REENTRANT >/dev/null`; then
|
|
||||||
+ CFLAGS="$CFLAGS -D_REENTRANT"
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
dnl gcc 3.1 changed the meaning of -MM. The only solution appears to be to
|
|
||||||
dnl use "-isystem" instead of "-I" for all non-Vim include dirs.
|
|
||||||
dnl But only when making dependencies, cproto and lint don't take "-isystem".
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
|||||||
From 65b605665997fad54ef39a93199e305af2fe4d7f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bram Moolenaar <Bram@vim.org>
|
|
||||||
Date: Tue, 7 Sep 2021 19:26:53 +0200
|
|
||||||
Subject: [PATCH] patch 8.2.3409: reading beyond end of line with invalid utf-8
|
|
||||||
character
|
|
||||||
|
|
||||||
Problem: Reading beyond end of line with invalid utf-8 character.
|
|
||||||
Solution: Check for NUL when advancing.
|
|
||||||
---
|
|
||||||
src/regexp_nfa.c | 3 ++-
|
|
||||||
src/testdir/test_regexp_utf8.vim | 8 ++++++++
|
|
||||||
src/version.c | 2 ++
|
|
||||||
3 files changed, 12 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
|
|
||||||
index 9757d7c47..c7db98187 100644
|
|
||||||
--- a/src/regexp_nfa.c
|
|
||||||
+++ b/src/regexp_nfa.c
|
|
||||||
@@ -5664,7 +5664,8 @@ find_match_text(colnr_T startcol, int regstart, char_u *match_text)
|
|
||||||
match = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
- len2 += MB_CHAR2LEN(c2);
|
|
||||||
+ len2 += enc_utf8 ? utf_ptr2len(rex.line + col + len2)
|
|
||||||
+ : MB_CHAR2LEN(c2);
|
|
||||||
}
|
|
||||||
if (match
|
|
||||||
// check that no composing char follows
|
|
||||||
diff --git a/src/testdir/test_regexp_utf8.vim b/src/testdir/test_regexp_utf8.vim
|
|
||||||
index 9f0ffb9aa..044aeffb6 100644
|
|
||||||
--- a/src/testdir/test_regexp_utf8.vim
|
|
||||||
+++ b/src/testdir/test_regexp_utf8.vim
|
|
||||||
@@ -558,4 +558,12 @@ func Test_match_char_class_upper()
|
|
||||||
bwipe!
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+func Test_match_invalid_byte()
|
|
||||||
+ call writefile(0z630a.765d30aa0a.2e0a.790a.4030, 'Xinvalid')
|
|
||||||
+ new
|
|
||||||
+ source Xinvalid
|
|
||||||
+ bwipe!
|
|
||||||
+ call delete('Xinvalid')
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
diff -up vim82/src/testdir/test_visual.vim.cve0319 vim82/src/testdir/test_visual.vim
|
|
||||||
--- vim82/src/testdir/test_visual.vim.cve0319 2022-02-08 13:24:54.170813231 +0100
|
|
||||||
+++ vim82/src/testdir/test_visual.vim 2022-02-08 13:26:21.313747976 +0100
|
|
||||||
@@ -985,4 +985,15 @@ func Test_visual_block_insert_round_off(
|
|
||||||
bwipe!
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+" this was causing an ml_get error
|
|
||||||
+func Test_visual_exchange_windows()
|
|
||||||
+ enew!
|
|
||||||
+ new
|
|
||||||
+ call setline(1, ['foo', 'bar'])
|
|
||||||
+ exe "normal G\<C-V>gg\<C-W>\<C-X>OO\<Esc>"
|
|
||||||
+ bwipe!
|
|
||||||
+ bwipe!
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
+
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
||||||
diff -up vim82/src/window.c.cve0319 vim82/src/window.c
|
|
||||||
--- vim82/src/window.c.cve0319 2022-02-08 13:24:54.137813879 +0100
|
|
||||||
+++ vim82/src/window.c 2022-02-08 13:24:54.171813211 +0100
|
|
||||||
@@ -1697,6 +1697,11 @@ win_exchange(long Prenum)
|
|
||||||
|
|
||||||
(void)win_comp_pos(); // recompute window positions
|
|
||||||
|
|
||||||
+ if (wp->w_buffer != curbuf)
|
|
||||||
+ reset_VIsual_and_resel();
|
|
||||||
+ else if (VIsual_active)
|
|
||||||
+ wp->w_cursor = curwin->w_cursor;
|
|
||||||
+
|
|
||||||
win_enter(wp, TRUE);
|
|
||||||
redraw_all_later(NOT_VALID);
|
|
||||||
}
|
|
||||||
@@ -5261,7 +5266,7 @@ frame_remove(frame_T *frp)
|
|
||||||
win_alloc_lines(win_T *wp)
|
|
||||||
{
|
|
||||||
wp->w_lines_valid = 0;
|
|
||||||
- wp->w_lines = ALLOC_CLEAR_MULT(wline_T, Rows );
|
|
||||||
+ wp->w_lines = ALLOC_CLEAR_MULT(wline_T, Rows);
|
|
||||||
if (wp->w_lines == NULL)
|
|
||||||
return FAIL;
|
|
||||||
return OK;
|
|
@ -1,55 +0,0 @@
|
|||||||
From 8d02ce1ed75d008c34a5c9aaa51b67cbb9d33baa Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bram Moolenaar <Bram@vim.org>
|
|
||||||
Date: Tue, 25 Jan 2022 18:24:00 +0000
|
|
||||||
Subject: [PATCH] patch 8.2.4217: illegal memory access when undo makes Visual
|
|
||||||
area invalid
|
|
||||||
|
|
||||||
Problem: Illegal memory access when undo makes Visual area invalid.
|
|
||||||
Solution: Correct the Visual area after undo.
|
|
||||||
---
|
|
||||||
src/testdir/test_visual.vim | 15 +++++++++++++++
|
|
||||||
src/undo.c | 2 ++
|
|
||||||
src/version.c | 2 ++
|
|
||||||
3 files changed, 19 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim
|
|
||||||
index 9b322fd21..b2beda08d 100644
|
|
||||||
--- a/src/testdir/test_visual.vim
|
|
||||||
+++ b/src/testdir/test_visual.vim
|
|
||||||
@@ -1339,5 +1339,20 @@ func Test_visual_ex_copy_line()
|
|
||||||
bwipe!
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+" This was leaving the end of the Visual area beyond the end of a line.
|
|
||||||
+" Set 'undolevels' to start a new undo block.
|
|
||||||
+func Test_visual_undo_deletes_last_line()
|
|
||||||
+ new
|
|
||||||
+ call setline(1, ["aaa", "ccc", "dyd"])
|
|
||||||
+ set undolevels=100
|
|
||||||
+ exe "normal obbbbbbbbbxbb\<Esc>"
|
|
||||||
+ set undolevels=100
|
|
||||||
+ /y
|
|
||||||
+ exe "normal ggvjfxO"
|
|
||||||
+ undo
|
|
||||||
+ normal gNU
|
|
||||||
+ bwipe!
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
||||||
diff --git a/src/undo.c b/src/undo.c
|
|
||||||
index 4d186d453..636144aef 100644
|
|
||||||
--- a/src/undo.c
|
|
||||||
+++ b/src/undo.c
|
|
||||||
@@ -3029,6 +3029,8 @@ u_undo_end(
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
+ if (VIsual_active)
|
|
||||||
+ check_pos(curbuf, &VIsual);
|
|
||||||
|
|
||||||
smsg_attr_keep(0, _("%ld %s; %s #%ld %s"),
|
|
||||||
u_oldcount < 0 ? -u_oldcount : u_oldcount,
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
@ -1,95 +0,0 @@
|
|||||||
diff -up vim82/src/indent.c.cve0417 vim82/src/indent.c
|
|
||||||
--- vim82/src/indent.c.cve0417 2022-02-09 10:01:34.250009316 +0100
|
|
||||||
+++ vim82/src/indent.c 2022-02-09 10:02:54.802588536 +0100
|
|
||||||
@@ -71,7 +71,7 @@ tabstop_set(char_u *var, int **array)
|
|
||||||
int n = atoi((char *)cp);
|
|
||||||
|
|
||||||
// Catch negative values, overflow and ridiculous big values.
|
|
||||||
- if (n < 0 || n > 9999)
|
|
||||||
+ if (n < 0 || n > TABSTOP_MAX)
|
|
||||||
{
|
|
||||||
semsg(_(e_invarg2), cp);
|
|
||||||
vim_free(*array);
|
|
||||||
@@ -1595,7 +1595,7 @@ ex_retab(exarg_T *eap)
|
|
||||||
emsg(_(e_positive));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
- if (new_ts < 0 || new_ts > 9999)
|
|
||||||
+ if (new_ts < 0 || new_ts > TABSTOP_MAX)
|
|
||||||
{
|
|
||||||
semsg(_(e_invarg2), eap->arg);
|
|
||||||
return;
|
|
||||||
diff -up vim82/src/option.c.cve0417 vim82/src/option.c
|
|
||||||
--- vim82/src/option.c.cve0417 2022-02-09 10:01:34.196009598 +0100
|
|
||||||
+++ vim82/src/option.c 2022-02-09 10:28:10.398548161 +0100
|
|
||||||
@@ -3640,6 +3640,11 @@ set_num_option(
|
|
||||||
errmsg = e_positive;
|
|
||||||
curbuf->b_p_ts = 8;
|
|
||||||
}
|
|
||||||
+ else if (curbuf->b_p_ts > TABSTOP_MAX)
|
|
||||||
+ {
|
|
||||||
+ errmsg = e_invarg;
|
|
||||||
+ curbuf->b_p_ts = 8;
|
|
||||||
+ }
|
|
||||||
if (p_tm < 0)
|
|
||||||
{
|
|
||||||
errmsg = e_positive;
|
|
||||||
@@ -5830,7 +5835,7 @@ buf_copy_options(buf_T *buf, int flags)
|
|
||||||
if (p_vsts && p_vsts != empty_option)
|
|
||||||
(void)tabstop_set(p_vsts, &buf->b_p_vsts_array);
|
|
||||||
else
|
|
||||||
- buf->b_p_vsts_array = 0;
|
|
||||||
+ buf->b_p_vsts_array = NULL;
|
|
||||||
buf->b_p_vsts_nopaste = p_vsts_nopaste
|
|
||||||
? vim_strsave(p_vsts_nopaste) : NULL;
|
|
||||||
#endif
|
|
||||||
@@ -6649,9 +6654,7 @@ paste_option_changed(void)
|
|
||||||
if (buf->b_p_vsts)
|
|
||||||
free_string_option(buf->b_p_vsts);
|
|
||||||
buf->b_p_vsts = empty_option;
|
|
||||||
- if (buf->b_p_vsts_array)
|
|
||||||
- vim_free(buf->b_p_vsts_array);
|
|
||||||
- buf->b_p_vsts_array = 0;
|
|
||||||
+ VIM_CLEAR(buf->b_p_vsts_array);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -6697,12 +6700,11 @@ paste_option_changed(void)
|
|
||||||
free_string_option(buf->b_p_vsts);
|
|
||||||
buf->b_p_vsts = buf->b_p_vsts_nopaste
|
|
||||||
? vim_strsave(buf->b_p_vsts_nopaste) : empty_option;
|
|
||||||
- if (buf->b_p_vsts_array)
|
|
||||||
- vim_free(buf->b_p_vsts_array);
|
|
||||||
+ vim_free(buf->b_p_vsts_array);
|
|
||||||
if (buf->b_p_vsts && buf->b_p_vsts != empty_option)
|
|
||||||
(void)tabstop_set(buf->b_p_vsts, &buf->b_p_vsts_array);
|
|
||||||
else
|
|
||||||
- buf->b_p_vsts_array = 0;
|
|
||||||
+ buf->b_p_vsts_array = NULL;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -up vim82/src/testdir/test_options.vim.cve0417 vim82/src/testdir/test_options.vim
|
|
||||||
--- vim82/src/testdir/test_options.vim.cve0417 2021-03-22 10:02:42.000000000 +0100
|
|
||||||
+++ vim82/src/testdir/test_options.vim 2022-02-09 10:01:34.251009311 +0100
|
|
||||||
@@ -362,6 +362,8 @@ func Test_set_errors()
|
|
||||||
call assert_fails('set shiftwidth=-1', 'E487:')
|
|
||||||
call assert_fails('set sidescroll=-1', 'E487:')
|
|
||||||
call assert_fails('set tabstop=-1', 'E487:')
|
|
||||||
+ call assert_fails('set tabstop=10000', 'E474:')
|
|
||||||
+ call assert_fails('set tabstop=5500000000', 'E474:')
|
|
||||||
call assert_fails('set textwidth=-1', 'E487:')
|
|
||||||
call assert_fails('set timeoutlen=-1', 'E487:')
|
|
||||||
call assert_fails('set updatecount=-1', 'E487:')
|
|
||||||
diff -up vim82/src/vim.h.cve0417 vim82/src/vim.h
|
|
||||||
--- vim82/src/vim.h.cve0417 2021-03-22 10:02:42.000000000 +0100
|
|
||||||
+++ vim82/src/vim.h 2022-02-09 10:01:34.252009306 +0100
|
|
||||||
@@ -2032,6 +2032,8 @@ typedef int sock_T;
|
|
||||||
|
|
||||||
#define DICT_MAXNEST 100 // maximum nesting of lists and dicts
|
|
||||||
|
|
||||||
+#define TABSTOP_MAX 9999
|
|
||||||
+
|
|
||||||
#ifdef FEAT_CLIPBOARD
|
|
||||||
|
|
||||||
// VIM_ATOM_NAME is the older Vim-specific selection type for X11. Still
|
|
@ -1,75 +0,0 @@
|
|||||||
diff -up vim82/src/buffer.c.cve0443 vim82/src/buffer.c
|
|
||||||
--- vim82/src/buffer.c.cve0443 2021-03-22 10:02:42.000000000 +0100
|
|
||||||
+++ vim82/src/buffer.c 2022-02-10 08:33:19.159488384 +0100
|
|
||||||
@@ -1710,6 +1710,7 @@ set_curbuf(buf_T *buf, int action)
|
|
||||||
#endif
|
|
||||||
bufref_T newbufref;
|
|
||||||
bufref_T prevbufref;
|
|
||||||
+ int valid;
|
|
||||||
|
|
||||||
setpcmark();
|
|
||||||
if ((cmdmod.cmod_flags & CMOD_KEEPALT) == 0)
|
|
||||||
@@ -1763,13 +1764,19 @@ set_curbuf(buf_T *buf, int action)
|
|
||||||
// An autocommand may have deleted "buf", already entered it (e.g., when
|
|
||||||
// it did ":bunload") or aborted the script processing.
|
|
||||||
// If curwin->w_buffer is null, enter_buffer() will make it valid again
|
|
||||||
- if ((buf_valid(buf) && buf != curbuf
|
|
||||||
+ valid = buf_valid(buf);
|
|
||||||
+ if ((valid && buf != curbuf
|
|
||||||
#ifdef FEAT_EVAL
|
|
||||||
&& !aborting()
|
|
||||||
#endif
|
|
||||||
) || curwin->w_buffer == NULL)
|
|
||||||
{
|
|
||||||
- enter_buffer(buf);
|
|
||||||
+ // If the buffer is not valid but curwin->w_buffer is NULL we must
|
|
||||||
+ // enter some buffer. Using the last one is hopefully OK.
|
|
||||||
+ if (!valid)
|
|
||||||
+ enter_buffer(lastbuf);
|
|
||||||
+ else
|
|
||||||
+ enter_buffer(buf);
|
|
||||||
#ifdef FEAT_SYN_HL
|
|
||||||
if (old_tw != curbuf->b_p_tw)
|
|
||||||
check_colorcolumn(curwin);
|
|
||||||
@@ -2286,8 +2293,7 @@ free_buf_options(
|
|
||||||
clear_string_option(&buf->b_p_vsts);
|
|
||||||
vim_free(buf->b_p_vsts_nopaste);
|
|
||||||
buf->b_p_vsts_nopaste = NULL;
|
|
||||||
- vim_free(buf->b_p_vsts_array);
|
|
||||||
- buf->b_p_vsts_array = NULL;
|
|
||||||
+ VIM_CLEAR(buf->b_p_vsts_array);
|
|
||||||
clear_string_option(&buf->b_p_vts);
|
|
||||||
VIM_CLEAR(buf->b_p_vts_array);
|
|
||||||
#endif
|
|
||||||
diff -up vim82/src/testdir/test_quickfix.vim.cve0443 vim82/src/testdir/test_quickfix.vim
|
|
||||||
--- vim82/src/testdir/test_quickfix.vim.cve0443 2021-03-22 10:02:42.000000000 +0100
|
|
||||||
+++ vim82/src/testdir/test_quickfix.vim 2022-02-10 08:34:10.288204457 +0100
|
|
||||||
@@ -923,6 +923,7 @@ func Test_locationlist_curwin_was_closed
|
|
||||||
call assert_fails('lrewind', 'E924:')
|
|
||||||
|
|
||||||
augroup! testgroup
|
|
||||||
+ delfunc R
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func Test_locationlist_cross_tab_jump()
|
|
||||||
@@ -5372,4 +5373,20 @@ func Test_vimgrep_noswapfile()
|
|
||||||
set swapfile
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+" Weird sequence of commands that caused entering a wiped-out buffer
|
|
||||||
+func Test_lopen_bwipe()
|
|
||||||
+ func R()
|
|
||||||
+ silent! tab lopen
|
|
||||||
+ e x
|
|
||||||
+ silent! lfile
|
|
||||||
+ endfunc
|
|
||||||
+
|
|
||||||
+ cal R()
|
|
||||||
+ cal R()
|
|
||||||
+ cal R()
|
|
||||||
+ bw!
|
|
||||||
+ delfunc R
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
+
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
@ -1,110 +0,0 @@
|
|||||||
From e3537aec2f8d6470010547af28dcbd83d41461b8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bram Moolenaar <Bram@vim.org>
|
|
||||||
Date: Tue, 8 Feb 2022 15:05:20 +0000
|
|
||||||
Subject: [PATCH] patch 8.2.4327: may end up with no current buffer
|
|
||||||
|
|
||||||
Problem: May end up with no current buffer.
|
|
||||||
Solution: When deleting the current buffer to not pick a quickfix buffer as
|
|
||||||
the new current buffer.
|
|
||||||
---
|
|
||||||
src/buffer.c | 26 ++++++++++++++++++++++----
|
|
||||||
src/testdir/test_quickfix.vim | 25 +++++++++++++++++++++++++
|
|
||||||
src/version.c | 2 ++
|
|
||||||
3 files changed, 49 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/buffer.c b/src/buffer.c
|
|
||||||
index 81bdb31ca..b3e2bc3f9 100644
|
|
||||||
--- a/src/buffer.c
|
|
||||||
+++ b/src/buffer.c
|
|
||||||
@@ -1430,8 +1430,14 @@ do_buffer_ext(
|
|
||||||
buf = buflist_findnr(curwin->w_jumplist[jumpidx].fmark.fnum);
|
|
||||||
if (buf != NULL)
|
|
||||||
{
|
|
||||||
- if (buf == curbuf || !buf->b_p_bl)
|
|
||||||
- buf = NULL; // skip current and unlisted bufs
|
|
||||||
+ // Skip current and unlisted bufs. Also skip a quickfix
|
|
||||||
+ // buffer, it might be deleted soon.
|
|
||||||
+ if (buf == curbuf || !buf->b_p_bl
|
|
||||||
+#if defined(FEAT_QUICKFIX)
|
|
||||||
+ || bt_quickfix(buf)
|
|
||||||
+#endif
|
|
||||||
+ )
|
|
||||||
+ buf = NULL;
|
|
||||||
else if (buf->b_ml.ml_mfp == NULL)
|
|
||||||
{
|
|
||||||
// skip unloaded buf, but may keep it for later
|
|
||||||
@@ -1467,7 +1473,11 @@ do_buffer_ext(
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// in non-help buffer, try to skip help buffers, and vv
|
|
||||||
- if (buf->b_help == curbuf->b_help && buf->b_p_bl)
|
|
||||||
+ if (buf->b_help == curbuf->b_help && buf->b_p_bl
|
|
||||||
+#if defined(FEAT_QUICKFIX)
|
|
||||||
+ && !bt_quickfix(buf)
|
|
||||||
+#endif
|
|
||||||
+ )
|
|
||||||
{
|
|
||||||
if (buf->b_ml.ml_mfp != NULL) // found loaded buffer
|
|
||||||
break;
|
|
||||||
@@ -1485,7 +1495,11 @@ do_buffer_ext(
|
|
||||||
if (buf == NULL) // No loaded buffer, find listed one
|
|
||||||
{
|
|
||||||
FOR_ALL_BUFFERS(buf)
|
|
||||||
- if (buf->b_p_bl && buf != curbuf)
|
|
||||||
+ if (buf->b_p_bl && buf != curbuf
|
|
||||||
+#if defined(FEAT_QUICKFIX)
|
|
||||||
+ && !bt_quickfix(buf)
|
|
||||||
+#endif
|
|
||||||
+ )
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (buf == NULL) // Still no buffer, just take one
|
|
||||||
@@ -1494,6 +1508,10 @@ do_buffer_ext(
|
|
||||||
buf = curbuf->b_next;
|
|
||||||
else
|
|
||||||
buf = curbuf->b_prev;
|
|
||||||
+#if defined(FEAT_QUICKFIX)
|
|
||||||
+ if (bt_quickfix(buf))
|
|
||||||
+ buf = NULL;
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
|
|
||||||
index 07fdb9644..adb0ea4fd 100644
|
|
||||||
--- a/src/testdir/test_quickfix.vim
|
|
||||||
+++ b/src/testdir/test_quickfix.vim
|
|
||||||
@@ -5851,5 +5851,30 @@ func Test_lopen_bwipe()
|
|
||||||
delfunc R
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+" Another sequence of commands that caused all buffers to be wiped out
|
|
||||||
+func Test_lopen_bwipe_all()
|
|
||||||
+ let lines =<< trim END
|
|
||||||
+ func R()
|
|
||||||
+ silent! tab lopen
|
|
||||||
+ e foo
|
|
||||||
+ silent! lfile
|
|
||||||
+ endfunc
|
|
||||||
+ cal R()
|
|
||||||
+ exe "norm \<C-W>\<C-V>0"
|
|
||||||
+ cal R()
|
|
||||||
+ bwipe
|
|
||||||
+
|
|
||||||
+ call writefile(['done'], 'Xresult')
|
|
||||||
+ qall!
|
|
||||||
+ END
|
|
||||||
+ call writefile(lines, 'Xscript')
|
|
||||||
+ if RunVim([], [], '-u NONE -n -X -Z -e -m -s -S Xscript')
|
|
||||||
+ call assert_equal(['done'], readfile('Xresult'))
|
|
||||||
+ endif
|
|
||||||
+
|
|
||||||
+ call delete('Xscript')
|
|
||||||
+ call delete('Xresult')
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
diff --git a/src/errors.h b/src/errors.h
|
|
||||||
index 3008020..3daf1a6 100644
|
|
||||||
--- a/src/errors.h
|
|
||||||
+++ b/src/errors.h
|
|
||||||
@@ -381,3 +381,5 @@ EXTERN char e_missing_end_block[]
|
|
||||||
INIT(= N_("E1171: Missing } after inline function"));
|
|
||||||
EXTERN char e_cannot_use_default_values_in_lambda[]
|
|
||||||
INIT(= N_("E1172: Cannot use default values in a lambda"));
|
|
||||||
+EXTERN char e_resulting_text_too_long[]
|
|
||||||
+ INIT(= N_("E1240: Resulting text too long"));
|
|
||||||
diff --git a/src/indent.c b/src/indent.c
|
|
||||||
index 4f909d0..77d8b0a 100644
|
|
||||||
--- a/src/indent.c
|
|
||||||
+++ b/src/indent.c
|
|
||||||
@@ -1696,6 +1696,11 @@ ex_retab(exarg_T *eap)
|
|
||||||
if (ptr[col] == NUL)
|
|
||||||
break;
|
|
||||||
vcol += chartabsize(ptr + col, (colnr_T)vcol);
|
|
||||||
+ if (vcol >= MAXCOL)
|
|
||||||
+ {
|
|
||||||
+ emsg(_(e_resulting_text_too_long));
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
if (has_mbyte)
|
|
||||||
col += (*mb_ptr2len)(ptr + col);
|
|
||||||
else
|
|
||||||
diff --git a/src/testdir/test_retab.vim b/src/testdir/test_retab.vim
|
|
||||||
index c7190aa..6133e8f 100644
|
|
||||||
--- a/src/testdir/test_retab.vim
|
|
||||||
+++ b/src/testdir/test_retab.vim
|
|
||||||
@@ -70,6 +70,8 @@ func Test_retab()
|
|
||||||
call assert_equal(" a b c ", Retab('!', 3))
|
|
||||||
call assert_equal(" a b c ", Retab('', 5))
|
|
||||||
call assert_equal(" a b c ", Retab('!', 5))
|
|
||||||
+
|
|
||||||
+ set tabstop& expandtab&
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func Test_retab_error()
|
|
||||||
@@ -80,4 +82,21 @@ func Test_retab_error()
|
|
||||||
call assert_fails('ret 80000000000000000000', 'E475:')
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+func Test_retab_endless()
|
|
||||||
+ new
|
|
||||||
+ call setline(1, "\t0\t")
|
|
||||||
+ let caught = 'no'
|
|
||||||
+ try
|
|
||||||
+ while 1
|
|
||||||
+ set ts=4000
|
|
||||||
+ retab 4
|
|
||||||
+ endwhile
|
|
||||||
+ catch /E1240/
|
|
||||||
+ let caught = 'yes'
|
|
||||||
+ endtry
|
|
||||||
+ bwipe!
|
|
||||||
+ set tabstop&
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
+
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
@ -1,49 +0,0 @@
|
|||||||
From 34f8117dec685ace52cd9e578e2729db278163fc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bram Moolenaar <Bram@vim.org>
|
|
||||||
Date: Wed, 16 Feb 2022 12:16:19 +0000
|
|
||||||
Subject: [PATCH] patch 8.2.4397: crash when using many composing characters in
|
|
||||||
error message
|
|
||||||
|
|
||||||
Problem: Crash when using many composing characters in error message.
|
|
||||||
Solution: Use mb_cptr2char_adv() instead of mb_ptr2char_adv().
|
|
||||||
---
|
|
||||||
src/testdir/test_assert.vim | 8 ++++++++
|
|
||||||
src/testing.c | 2 +-
|
|
||||||
src/version.c | 2 ++
|
|
||||||
3 files changed, 11 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/testdir/test_assert.vim b/src/testdir/test_assert.vim
|
|
||||||
index 8987f3f8d..27b2d73fb 100644
|
|
||||||
--- a/src/testdir/test_assert.vim
|
|
||||||
+++ b/src/testdir/test_assert.vim
|
|
||||||
@@ -53,6 +53,14 @@ func Test_assert_equal()
|
|
||||||
call assert_equal("\b\e\f\n\t\r\\\x01\x7f", 'x')
|
|
||||||
call assert_match('Expected ''\\b\\e\\f\\n\\t\\r\\\\\\x01\\x7f'' but got ''x''', v:errors[0])
|
|
||||||
call remove(v:errors, 0)
|
|
||||||
+
|
|
||||||
+ " many composing characters are handled properly
|
|
||||||
+ call setline(1, ' ')
|
|
||||||
+ norm 100gr݀
|
|
||||||
+ call assert_equal(1, getline(1))
|
|
||||||
+ call assert_match("Expected 1 but got '.* occurs 100 times]'", v:errors[0])
|
|
||||||
+ call remove(v:errors, 0)
|
|
||||||
+ bwipe!
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func Test_assert_equal_dict()
|
|
||||||
diff --git a/src/testing.c b/src/testing.c
|
|
||||||
index 448c01c1e..48ba14d2c 100644
|
|
||||||
--- a/src/testing.c
|
|
||||||
+++ b/src/testing.c
|
|
||||||
@@ -101,7 +101,7 @@ ga_concat_shorten_esc(garray_T *gap, char_u *str)
|
|
||||||
{
|
|
||||||
same_len = 1;
|
|
||||||
s = p;
|
|
||||||
- c = mb_ptr2char_adv(&s);
|
|
||||||
+ c = mb_cptr2char_adv(&s);
|
|
||||||
clen = s - p;
|
|
||||||
while (*s != NUL && c == mb_ptr2char(s))
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
diff --git a/src/indent.c b/src/indent.c
|
|
||||||
index 77d8b0a..9830685 100644
|
|
||||||
--- a/src/indent.c
|
|
||||||
+++ b/src/indent.c
|
|
||||||
@@ -1284,6 +1284,8 @@ change_indent(
|
|
||||||
new_cursor_col += (*mb_ptr2len)(ptr + new_cursor_col);
|
|
||||||
else
|
|
||||||
++new_cursor_col;
|
|
||||||
+ if (ptr[new_cursor_col] == NUL)
|
|
||||||
+ break;
|
|
||||||
vcol += lbr_chartabsize(ptr, ptr + new_cursor_col, (colnr_T)vcol);
|
|
||||||
}
|
|
||||||
vcol = last_vcol;
|
|
||||||
diff --git a/src/testdir/test_vartabs.vim b/src/testdir/test_vartabs.vim
|
|
||||||
index 0ff1ea8..a613510 100644
|
|
||||||
--- a/src/testdir/test_vartabs.vim
|
|
||||||
+++ b/src/testdir/test_vartabs.vim
|
|
||||||
@@ -419,4 +419,17 @@ func Test_varsofttabstop()
|
|
||||||
close!
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+func Test_vartabstop_latin1()
|
|
||||||
+ let save_encoding = &encoding
|
|
||||||
+ new
|
|
||||||
+ set encoding=iso8859-1
|
|
||||||
+ set compatible linebreak list revins smarttab
|
|
||||||
+ set vartabstop=400
|
|
||||||
+ exe "norm i00\t\<C-D>"
|
|
||||||
+ bwipe!
|
|
||||||
+ let &encoding = save_encoding
|
|
||||||
+ set nocompatible linebreak& list& revins& smarttab& vartabstop&
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
+
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
@ -1,44 +1,22 @@
|
|||||||
diff -up vim82/src/regexp_bt.c.cve1154 vim82/src/regexp_bt.c
|
diff -up vim80/src/regexp.c.cve1154 vim80/src/regexp.c
|
||||||
--- vim82/src/regexp_bt.c.cve1154 2022-04-25 15:22:28.367621755 +0200
|
--- vim80/src/regexp.c.cve1154 2022-04-09 12:01:30.054452927 +0200
|
||||||
+++ vim82/src/regexp_bt.c 2022-04-25 15:25:13.726340728 +0200
|
+++ vim80/src/regexp.c 2022-04-09 12:02:48.987999877 +0200
|
||||||
@@ -3188,8 +3188,17 @@ regmatch(
|
@@ -4415,8 +4415,17 @@ regmatch(
|
||||||
int mark = OPERAND(scan)[0];
|
int mark = OPERAND(scan)[0];
|
||||||
int cmp = OPERAND(scan)[1];
|
int cmp = OPERAND(scan)[1];
|
||||||
pos_T *pos;
|
pos_T *pos;
|
||||||
+ size_t col = REG_MULTI ? rex.input - rex.line : 0;
|
+ size_t col = REG_MULTI ? reginput - regline : 0;
|
||||||
|
|
||||||
pos = getmark_buf(rex.reg_buf, mark, FALSE);
|
pos = getmark_buf(rex.reg_buf, mark, FALSE);
|
||||||
+
|
+
|
||||||
+ // Line may have been freed, get it again.
|
+ // Line may have been freed, get it again.
|
||||||
+ if (REG_MULTI)
|
+ if (REG_MULTI)
|
||||||
+ {
|
+ {
|
||||||
+ rex.line = reg_getline(rex.lnum);
|
+ regline = reg_getline(reglnum);
|
||||||
+ rex.input = rex.line + col;
|
+ reginput = regline + col;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
if (pos == NULL // mark doesn't exist
|
if (pos == NULL /* mark doesn't exist */
|
||||||
|| pos->lnum <= 0 // mark isn't set in reg_buf
|
|| pos->lnum <= 0 /* mark isn't set in reg_buf */
|
||||||
|| (pos->lnum == rex.lnum + rex.reg_firstlnum
|
|| (pos->lnum == reglnum + rex.reg_firstlnum
|
||||||
diff -up vim82/src/testdir/test_regexp_latin.vim.cve1154 vim82/src/testdir/test_regexp_latin.vim
|
diff -up vim80/src/testdir/test_regexp_latin.vim.cve1154 vim80/src/testdir/test_regexp_latin.vim
|
||||||
--- vim82/src/testdir/test_regexp_latin.vim.cve1154 2022-04-25 15:22:28.368621752 +0200
|
|
||||||
+++ vim82/src/testdir/test_regexp_latin.vim 2022-04-25 15:26:57.515227712 +0200
|
|
||||||
@@ -954,4 +954,19 @@ func Test_using_visual_position()
|
|
||||||
bwipe!
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+func Test_using_mark_position()
|
|
||||||
+ " this was using freed memory
|
|
||||||
+ " new engine
|
|
||||||
+ new
|
|
||||||
+ norm O0
|
|
||||||
+ call assert_fails("s/\\%')", 'E486:')
|
|
||||||
+ bwipe!
|
|
||||||
+
|
|
||||||
+ " old engine
|
|
||||||
+ new
|
|
||||||
+ norm O0
|
|
||||||
+ call assert_fails("s/\\%#=1\\%')", 'E486:')
|
|
||||||
+ bwipe!
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
diff -up vim82/src/errors.h.cve1420 vim82/src/errors.h
|
|
||||||
--- vim82/src/errors.h.cve1420 2022-04-25 16:01:03.559985019 +0200
|
|
||||||
+++ vim82/src/errors.h 2022-04-25 16:01:58.113332024 +0200
|
|
||||||
@@ -383,3 +383,7 @@ EXTERN char e_cannot_use_default_values_
|
|
||||||
INIT(= N_("E1172: Cannot use default values in a lambda"));
|
|
||||||
EXTERN char e_resulting_text_too_long[]
|
|
||||||
INIT(= N_("E1240: Resulting text too long"));
|
|
||||||
+#ifdef FEAT_EVAL
|
|
||||||
+EXTERN char e_string_or_function_required_for_arrow_parens_expr[]
|
|
||||||
+ INIT(= N_("E1275: String or function required for ->(expr)"));
|
|
||||||
+#endif
|
|
||||||
diff -up vim82/src/eval.c.cve1420 vim82/src/eval.c
|
|
||||||
--- vim82/src/eval.c.cve1420 2022-04-25 16:01:03.560985007 +0200
|
|
||||||
+++ vim82/src/eval.c 2022-04-25 16:14:11.746600369 +0200
|
|
||||||
@@ -3718,13 +3718,20 @@ eval_lambda(
|
|
||||||
if (**arg != ')')
|
|
||||||
{
|
|
||||||
emsg(_(e_missing_close));
|
|
||||||
- ret = FAIL;
|
|
||||||
+ return FAIL;
|
|
||||||
+ }
|
|
||||||
+ if (rettv->v_type != VAR_STRING && rettv->v_type != VAR_FUNC
|
|
||||||
+ && rettv->v_type != VAR_PARTIAL)
|
|
||||||
+ {
|
|
||||||
+ emsg(_(e_string_or_function_required_for_arrow_parens_expr));
|
|
||||||
+ return FAIL;
|
|
||||||
}
|
|
||||||
++*arg;
|
|
||||||
}
|
|
||||||
if (ret != OK)
|
|
||||||
return FAIL;
|
|
||||||
- else if (**arg != '(')
|
|
||||||
+
|
|
||||||
+ if (**arg != '(')
|
|
||||||
{
|
|
||||||
if (verbose)
|
|
||||||
{
|
|
||||||
diff -up vim82/src/testdir/test_lambda.vim.cve1420 vim82/src/testdir/test_lambda.vim
|
|
||||||
--- vim82/src/testdir/test_lambda.vim.cve1420 2022-04-25 16:01:03.560985007 +0200
|
|
||||||
+++ vim82/src/testdir/test_lambda.vim 2022-04-25 16:17:01.694886566 +0200
|
|
||||||
@@ -64,6 +64,10 @@ function Test_lambda_fails()
|
|
||||||
call assert_fails('echo {a, a -> a + a}(1, 2)', 'E853:')
|
|
||||||
call assert_fails('echo {a, b -> a + b)}(1, 2)', 'E451:')
|
|
||||||
echo assert_fails('echo 10->{a -> a + 2}', 'E107:')
|
|
||||||
+ call assert_fails('eval 0->(3)()', "E1275:")
|
|
||||||
+ call assert_fails('eval 0->([3])()', "E1275:")
|
|
||||||
+ call assert_fails('eval 0->({"a": 3})()', "E1275:")
|
|
||||||
+ call assert_fails('eval 0->(xxx)()', "E121:")
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
func Test_not_lamda()
|
|
@ -1,106 +1,85 @@
|
|||||||
diff -up vim82/src/ex_docmd.c.cve1927 vim82/src/ex_docmd.c
|
diff -up vim80/src/ex_docmd.c.cve1927 vim80/src/ex_docmd.c
|
||||||
--- vim82/src/ex_docmd.c.cve1927 2021-03-22 10:02:42.000000000 +0100
|
--- vim80/src/ex_docmd.c.cve1927 2022-06-13 16:31:41.841068554 +0200
|
||||||
+++ vim82/src/ex_docmd.c 2022-06-13 15:29:45.099472751 +0200
|
+++ vim80/src/ex_docmd.c 2022-06-13 16:37:02.789876973 +0200
|
||||||
@@ -3081,6 +3081,8 @@ parse_cmd_address(exarg_T *eap, char **e
|
@@ -1720,6 +1720,8 @@ do_one_cmd(
|
||||||
{
|
int ni; /* set when Not Implemented */
|
||||||
|
char_u *cmd;
|
||||||
int address_count = 1;
|
int address_count = 1;
|
||||||
linenr_T lnum;
|
|
||||||
+ int need_check_cursor = FALSE;
|
+ int need_check_cursor = FALSE;
|
||||||
+ int ret = FAIL;
|
+ int ret_addr = FAIL;
|
||||||
|
|
||||||
// Repeat for all ',' or ';' separated addresses.
|
vim_memset(&ea, 0, sizeof(ea));
|
||||||
for (;;)
|
ea.line1 = 1;
|
||||||
@@ -3091,7 +3093,7 @@ parse_cmd_address(exarg_T *eap, char **e
|
@@ -2084,7 +2086,7 @@ do_one_cmd(
|
||||||
lnum = get_address(eap, &eap->cmd, eap->addr_type, eap->skip, silent,
|
lnum = get_address(&ea, &ea.cmd, ea.addr_type, ea.skip,
|
||||||
eap->addr_count == 0, address_count++);
|
ea.addr_count == 0, address_count++);
|
||||||
if (eap->cmd == NULL) // error detected
|
if (ea.cmd == NULL) /* error detected */
|
||||||
- return FAIL;
|
- goto doend;
|
||||||
+ goto theend;
|
+ goto addr_end;
|
||||||
if (lnum == MAXLNUM)
|
if (lnum == MAXLNUM)
|
||||||
{
|
{
|
||||||
if (*eap->cmd == '%') // '%' - all lines
|
if (*ea.cmd == '%') /* '%' - all lines */
|
||||||
@@ -3136,14 +3138,14 @@ parse_cmd_address(exarg_T *eap, char **e
|
@@ -2128,12 +2130,12 @@ do_one_cmd(
|
||||||
// there is no Vim command which uses '%' and
|
/* there is no Vim command which uses '%' and
|
||||||
// ADDR_WINDOWS or ADDR_TABS
|
* ADDR_WINDOWS or ADDR_TABS */
|
||||||
*errormsg = _(e_invrange);
|
errormsg = (char_u *)_(e_invrange);
|
||||||
- return FAIL;
|
- goto doend;
|
||||||
+ goto theend;
|
+ goto addr_end;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ADDR_TABS_RELATIVE:
|
case ADDR_TABS_RELATIVE:
|
||||||
case ADDR_UNSIGNED:
|
errormsg = (char_u *)_(e_invrange);
|
||||||
case ADDR_QUICKFIX:
|
- goto doend;
|
||||||
*errormsg = _(e_invrange);
|
+ goto addr_end;
|
||||||
- return FAIL;
|
break;
|
||||||
+ goto theend;
|
|
||||||
case ADDR_ARGUMENTS:
|
case ADDR_ARGUMENTS:
|
||||||
if (ARGCOUNT == 0)
|
if (ARGCOUNT == 0)
|
||||||
eap->line1 = eap->line2 = 0;
|
@@ -2163,7 +2165,7 @@ do_one_cmd(
|
||||||
@@ -3175,7 +3177,7 @@ parse_cmd_address(exarg_T *eap, char **e
|
if (ea.addr_type != ADDR_LINES)
|
||||||
if (eap->addr_type != ADDR_LINES)
|
|
||||||
{
|
{
|
||||||
*errormsg = _(e_invrange);
|
errormsg = (char_u *)_(e_invrange);
|
||||||
- return FAIL;
|
- goto doend;
|
||||||
+ goto theend;
|
+ goto addr_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
++eap->cmd;
|
++ea.cmd;
|
||||||
@@ -3183,11 +3185,11 @@ parse_cmd_address(exarg_T *eap, char **e
|
@@ -2171,11 +2173,11 @@ do_one_cmd(
|
||||||
{
|
{
|
||||||
fp = getmark('<', FALSE);
|
fp = getmark('<', FALSE);
|
||||||
if (check_mark(fp) == FAIL)
|
if (check_mark(fp) == FAIL)
|
||||||
- return FAIL;
|
- goto doend;
|
||||||
+ goto theend;
|
+ goto addr_end;
|
||||||
eap->line1 = fp->lnum;
|
ea.line1 = fp->lnum;
|
||||||
fp = getmark('>', FALSE);
|
fp = getmark('>', FALSE);
|
||||||
if (check_mark(fp) == FAIL)
|
if (check_mark(fp) == FAIL)
|
||||||
- return FAIL;
|
- goto doend;
|
||||||
+ goto theend;
|
+ goto addr_end;
|
||||||
eap->line2 = fp->lnum;
|
ea.line2 = fp->lnum;
|
||||||
++eap->addr_count;
|
++ea.addr_count;
|
||||||
}
|
}
|
||||||
@@ -3202,10 +3204,13 @@ parse_cmd_address(exarg_T *eap, char **e
|
@@ -2190,8 +2192,11 @@ do_one_cmd(
|
||||||
if (!eap->skip)
|
if (!ea.skip)
|
||||||
{
|
{
|
||||||
curwin->w_cursor.lnum = eap->line2;
|
curwin->w_cursor.lnum = ea.line2;
|
||||||
+
|
+
|
||||||
// Don't leave the cursor on an illegal line or column, but do
|
/* don't leave the cursor on an illegal line or column */
|
||||||
// accept zero as address, so 0;/PATTERN/ works correctly.
|
|
||||||
+ // Check the cursor position before returning.
|
+ // Check the cursor position before returning.
|
||||||
if (eap->line2 > 0)
|
|
||||||
check_cursor();
|
check_cursor();
|
||||||
+ need_check_cursor = TRUE;
|
+ need_check_cursor = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (*eap->cmd != ',')
|
else if (*ea.cmd != ',')
|
||||||
@@ -3221,7 +3226,12 @@ parse_cmd_address(exarg_T *eap, char **e
|
@@ -2208,6 +2213,13 @@ do_one_cmd(
|
||||||
if (lnum == MAXLNUM)
|
ea.addr_count = 0;
|
||||||
eap->addr_count = 0;
|
|
||||||
}
|
}
|
||||||
- return OK;
|
|
||||||
+ ret = OK;
|
+ ret_addr = OK;
|
||||||
+
|
+
|
||||||
+theend:
|
+addr_end:
|
||||||
+ if (need_check_cursor)
|
+ if (need_check_cursor)
|
||||||
+ check_cursor();
|
+ check_cursor();
|
||||||
+ return ret;
|
+ if (ret_addr == FAIL)
|
||||||
}
|
+ goto doend;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
diff -up vim82/src/testdir/test_excmd.vim.cve1927 vim82/src/testdir/test_excmd.vim
|
* 5. Parse the command.
|
||||||
--- vim82/src/testdir/test_excmd.vim.cve1927 2022-06-13 15:26:53.941517542 +0200
|
*/
|
||||||
+++ vim82/src/testdir/test_excmd.vim 2022-06-13 15:30:53.972860361 +0200
|
|
||||||
@@ -536,4 +536,13 @@ func Test_sandbox()
|
|
||||||
sandbox call Sandbox_tests()
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
+" This was leaving the cursor in line zero
|
|
||||||
+func Test_using_zero_in_range()
|
|
||||||
+ new
|
|
||||||
+ norm o00
|
|
||||||
+ silent! 0;s/\%')
|
|
||||||
+ bwipe!
|
|
||||||
+endfunc
|
|
||||||
+
|
|
||||||
+
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
From a63ad78ed31e36dbdf3a9cd28071dcdbefce7d19 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bram Moolenaar <Bram@vim.org>
|
|
||||||
Date: Wed, 31 Aug 2022 12:01:54 +0100
|
|
||||||
Subject: [PATCH] patch 9.0.0339: no check if the return value of XChangeGC()
|
|
||||||
is NULL
|
|
||||||
|
|
||||||
Problem: No check if the return value of XChangeGC() is NULL.
|
|
||||||
Solution: Only use the return value when it is not NULL. (closes #11020)
|
|
||||||
---
|
|
||||||
src/gui_x11.c | 10 +++++++---
|
|
||||||
src/version.c | 2 ++
|
|
||||||
2 files changed, 9 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/gui_x11.c b/src/gui_x11.c
|
|
||||||
index 6e3e903be..7293ac490 100644
|
|
||||||
--- a/src/gui_x11.c
|
|
||||||
+++ b/src/gui_x11.c
|
|
||||||
@@ -2231,10 +2231,14 @@ gui_x11_create_blank_mouse(void)
|
|
||||||
{
|
|
||||||
Pixmap blank_pixmap = XCreatePixmap(gui.dpy, gui.wid, 1, 1, 1);
|
|
||||||
GC gc = XCreateGC(gui.dpy, blank_pixmap, (unsigned long)0, (XGCValues*)0);
|
|
||||||
- XDrawPoint(gui.dpy, blank_pixmap, gc, 0, 0);
|
|
||||||
- XFreeGC(gui.dpy, gc);
|
|
||||||
+
|
|
||||||
+ if (gc != NULL)
|
|
||||||
+ {
|
|
||||||
+ XDrawPoint(gui.dpy, blank_pixmap, gc, 0, 0);
|
|
||||||
+ XFreeGC(gui.dpy, gc);
|
|
||||||
+ }
|
|
||||||
return XCreatePixmapCursor(gui.dpy, blank_pixmap, blank_pixmap,
|
|
||||||
- (XColor*)&gui.norm_pixel, (XColor*)&gui.norm_pixel, 0, 0);
|
|
||||||
+ (XColor*)&gui.norm_pixel, (XColor*)&gui.norm_pixel, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
--
|
|
||||||
2.39.1
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
|||||||
|
Name:
|
||||||
|
Version:
|
||||||
|
Release: 1%{?dist}
|
||||||
|
Summary:
|
||||||
|
|
||||||
|
Group:
|
||||||
|
License:
|
||||||
|
URL:
|
||||||
|
Source0:
|
||||||
|
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
||||||
|
|
||||||
|
BuildRequires:
|
||||||
|
Requires:
|
||||||
|
|
||||||
|
%description
|
||||||
|
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
|
||||||
|
%build
|
||||||
|
%configure
|
||||||
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
make install DESTDIR=$RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%doc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%changelog
|
@ -1,23 +0,0 @@
|
|||||||
#!/usr/bin/sh
|
|
||||||
|
|
||||||
# run vim if:
|
|
||||||
# - 'vi' command is used and 'vim' binary is available
|
|
||||||
# - 'vim' command is used
|
|
||||||
# NOTE: Set up a local alias if you want vim -> vi functionality. We will not
|
|
||||||
# do it globally, because it messes up with available startup options (see
|
|
||||||
# ':help starting', 'vi' is not capable of '-d'). The introducing an environment
|
|
||||||
# variable, which an user must set to get the feature, will do the same trick
|
|
||||||
# as setting an alias (needs user input, does not work with sudo), so it is left
|
|
||||||
# on user whether he decides to use an alias:
|
|
||||||
#
|
|
||||||
# alias vim=vi
|
|
||||||
#
|
|
||||||
# in bashrc file.
|
|
||||||
|
|
||||||
if test -f /usr/bin/vim
|
|
||||||
then
|
|
||||||
exec /usr/bin/vim "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# run vi otherwise
|
|
||||||
exec /usr/libexec/vi "$@"
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/sh
|
|
||||||
|
|
||||||
# run vim -R if available
|
|
||||||
if test -f /usr/bin/vim
|
|
||||||
then
|
|
||||||
exec /usr/bin/vim -R "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# run vi otherwise
|
|
||||||
exec /usr/libexec/vi -R "$@"
|
|
@ -0,0 +1,12 @@
|
|||||||
|
diff -up vim74/runtime/syntax/spec.vim.kh1 vim74/runtime/syntax/spec.vim
|
||||||
|
--- vim74/runtime/syntax/spec.vim.kh1 2016-08-04 15:23:25.275955301 +0200
|
||||||
|
+++ vim74/runtime/syntax/spec.vim 2016-08-04 15:24:56.699417602 +0200
|
||||||
|
@@ -114,7 +114,7 @@ syn region specDescriptionArea matchgrou
|
||||||
|
syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
|
||||||
|
|
||||||
|
"%% Scripts Section %%
|
||||||
|
-syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
|
||||||
|
+syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|check\|clean\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
|
||||||
|
|
||||||
|
"%% Changelog Section %%
|
||||||
|
syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
|
@ -1,13 +1,12 @@
|
|||||||
diff --git a/runtime/syntax/spec.vim b/runtime/syntax/spec.vim
|
diff -up vim74/runtime/syntax/spec.vim.orig vim74/runtime/syntax/spec.vim
|
||||||
index 1a5a108..b709d20 100644
|
--- vim74/runtime/syntax/spec.vim.orig 2016-01-12 13:51:55.727569873 +0100
|
||||||
--- a/runtime/syntax/spec.vim
|
+++ vim74/runtime/syntax/spec.vim 2016-01-12 13:53:08.124991178 +0100
|
||||||
+++ b/runtime/syntax/spec.vim
|
@@ -114,7 +114,7 @@ syn region specDescriptionArea matchgrou
|
||||||
@@ -111,7 +111,7 @@ syn region specDescriptionArea matchgroup=specSection start='^%description' end=
|
|
||||||
syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
|
syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
|
||||||
|
|
||||||
"%% Scripts Section %%
|
"%% Scripts Section %%
|
||||||
-syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|check\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
|
-syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|check\|clean\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
|
||||||
+syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|check\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|global\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
|
+syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|check\|clean\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|global\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
|
||||||
|
|
||||||
"%% Changelog Section %%
|
"%% Changelog Section %%
|
||||||
syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
|
syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
diff -up vim74_new/runtime/syntax/spec.vim.1151450 vim74_new/runtime/syntax/spec.vim
|
||||||
|
--- vim74_new/runtime/syntax/spec.vim.1151450 2014-10-13 10:45:07.570944538 +0200
|
||||||
|
+++ vim74_new/runtime/syntax/spec.vim 2014-10-13 10:44:09.046945965 +0200
|
||||||
|
@@ -88,9 +88,9 @@ syn region specSectionMacroBracketArea o
|
||||||
|
"%% Files Section %%
|
||||||
|
"TODO %config valid parameters: missingok\|noreplace
|
||||||
|
"TODO %verify valid parameters: \(not\)\= \(md5\|atime\|...\)
|
||||||
|
-syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier
|
||||||
|
+syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\|license\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier
|
||||||
|
"tip: remember to include new itens in specFilesArea above
|
||||||
|
-syn match specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>'
|
||||||
|
+syn match specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\|license\)\>'
|
||||||
|
|
||||||
|
"valid options for certain section headers
|
||||||
|
syn match specDescriptionOpts contained '\s-[ln]\s*\a'ms=s+1,me=e-1
|
@ -0,0 +1,11 @@
|
|||||||
|
diff -up vim74/src/ex_docmd.c.e319 vim74/src/ex_docmd.c
|
||||||
|
--- vim74/src/ex_docmd.c.e319 2016-02-17 14:48:23.033995923 +0100
|
||||||
|
+++ vim74/src/ex_docmd.c 2016-02-17 14:48:03.712890575 +0100
|
||||||
|
@@ -4630,6 +4630,7 @@ get_flags(exarg_T *eap)
|
||||||
|
void
|
||||||
|
ex_ni(exarg_T *eap)
|
||||||
|
{
|
||||||
|
+ return;
|
||||||
|
if (!eap->skip)
|
||||||
|
eap->errmsg = (char_u *)N_("E319: Sorry, the command is not available in this version");
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
diff -up vim80/src/syntax.c.syncolor vim80/src/syntax.c
|
||||||
|
--- vim80/src/syntax.c.syncolor 2017-08-15 12:14:21.716020676 +0200
|
||||||
|
+++ vim80/src/syntax.c 2017-08-15 12:30:31.380158974 +0200
|
||||||
|
@@ -6972,8 +6972,8 @@ static char *(highlight_init_light[]) =
|
||||||
|
CENT("Visual term=reverse",
|
||||||
|
"Visual term=reverse guibg=LightGrey"),
|
||||||
|
#ifdef FEAT_DIFF
|
||||||
|
- CENT("DiffAdd term=bold ctermbg=LightBlue",
|
||||||
|
- "DiffAdd term=bold ctermbg=LightBlue guibg=LightBlue"),
|
||||||
|
+ CENT("DiffAdd term=bold ctermbg=LightRed",
|
||||||
|
+ "DiffAdd term=bold ctermbg=LightRed guibg=LightBlue"),
|
||||||
|
CENT("DiffChange term=bold ctermbg=LightMagenta",
|
||||||
|
"DiffChange term=bold ctermbg=LightMagenta guibg=LightMagenta"),
|
||||||
|
CENT("DiffDelete term=bold ctermfg=Blue ctermbg=LightCyan",
|
||||||
|
@@ -7066,8 +7066,8 @@ static char *(highlight_init_dark[]) = {
|
||||||
|
CENT("Visual term=reverse",
|
||||||
|
"Visual term=reverse guibg=DarkGrey"),
|
||||||
|
#ifdef FEAT_DIFF
|
||||||
|
- CENT("DiffAdd term=bold ctermbg=DarkBlue",
|
||||||
|
- "DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue"),
|
||||||
|
+ CENT("DiffAdd term=bold ctermbg=DarkRed",
|
||||||
|
+ "DiffAdd term=bold ctermbg=DarkRed guibg=DarkBlue"),
|
||||||
|
CENT("DiffChange term=bold ctermbg=DarkMagenta",
|
||||||
|
"DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta"),
|
||||||
|
CENT("DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan",
|
@ -1,79 +1,16 @@
|
|||||||
diff --git a/runtime/defaults.vim b/runtime/defaults.vim
|
diff -up vim80/runtime/defaults.vim.copy-paste vim80/runtime/defaults.vim
|
||||||
index f3c639b..20637e2 100644
|
--- vim80/runtime/defaults.vim.copy-paste 2016-12-19 09:01:20.351119199 +0100
|
||||||
--- a/runtime/defaults.vim
|
+++ vim80/runtime/defaults.vim 2016-12-19 09:01:53.735738941 +0100
|
||||||
+++ b/runtime/defaults.vim
|
@@ -64,12 +64,6 @@ map Q gq
|
||||||
@@ -73,18 +73,6 @@ map Q gq
|
|
||||||
" Revert with ":iunmap <C-U>".
|
" Revert with ":iunmap <C-U>".
|
||||||
inoremap <C-U> <C-G>u<C-U>
|
inoremap <C-U> <C-G>u<C-U>
|
||||||
|
|
||||||
-" In many terminal emulators the mouse works just fine. By enabling it you
|
-" In many terminal emulators the mouse works just fine. By enabling it you
|
||||||
-" can position the cursor, Visually select and scroll with the mouse.
|
-" can position the cursor, Visually select and scroll with the mouse.
|
||||||
-" Only xterm can grab the mouse events when using the shift key, for other
|
|
||||||
-" terminals use ":", select text and press Esc.
|
|
||||||
-if has('mouse')
|
-if has('mouse')
|
||||||
- if &term =~ 'xterm'
|
|
||||||
- set mouse=a
|
- set mouse=a
|
||||||
- else
|
|
||||||
- set mouse=nvi
|
|
||||||
- endif
|
|
||||||
-endif
|
-endif
|
||||||
-
|
-
|
||||||
" Only do this part when Vim was compiled with the +eval feature.
|
" Switch syntax highlighting on when the terminal has colors or when using the
|
||||||
if 1
|
" GUI (which always has colors).
|
||||||
|
if &t_Co > 2 || has("gui_running")
|
||||||
diff --git a/src/testdir/test_balloon.vim b/src/testdir/test_balloon.vim
|
|
||||||
index 319e546..8fcf63c 100644
|
|
||||||
--- a/src/testdir/test_balloon.vim
|
|
||||||
+++ b/src/testdir/test_balloon.vim
|
|
||||||
@@ -9,6 +9,7 @@ source screendump.vim
|
|
||||||
CheckScreendump
|
|
||||||
|
|
||||||
let s:common_script =<< trim [CODE]
|
|
||||||
+ set mouse=a
|
|
||||||
call setline(1, ["one one one", "two tXo two", "three three three"])
|
|
||||||
set balloonevalterm balloonexpr=MyBalloonExpr() balloondelay=100
|
|
||||||
func MyBalloonExpr()
|
|
||||||
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
|
|
||||||
index f13252b..ec755a4 100644
|
|
||||||
--- a/src/testdir/test_popupwin.vim
|
|
||||||
+++ b/src/testdir/test_popupwin.vim
|
|
||||||
@@ -553,6 +553,7 @@ func Test_popup_drag()
|
|
||||||
" create a popup that covers the command line
|
|
||||||
let lines =<< trim END
|
|
||||||
call setline(1, range(1, 20))
|
|
||||||
+ set mouse=a
|
|
||||||
split
|
|
||||||
vsplit
|
|
||||||
$wincmd w
|
|
||||||
@@ -599,6 +600,7 @@ func Test_popup_drag_termwin()
|
|
||||||
let lines =<< trim END
|
|
||||||
set foldmethod=marker
|
|
||||||
call setline(1, range(100))
|
|
||||||
+ set mouse=a
|
|
||||||
for nr in range(7)
|
|
||||||
call setline(nr * 12 + 1, "fold {{{")
|
|
||||||
call setline(nr * 12 + 11, "end }}}")
|
|
||||||
@@ -652,6 +654,7 @@ func Test_popup_close_with_mouse()
|
|
||||||
|
|
||||||
let lines =<< trim END
|
|
||||||
call setline(1, range(1, 20))
|
|
||||||
+ set mouse=a
|
|
||||||
" With border, can click on X
|
|
||||||
let winid = popup_create('foobar', #{
|
|
||||||
\ close: 'button',
|
|
||||||
@@ -1479,6 +1482,7 @@ func Test_popup_beval()
|
|
||||||
let lines =<< trim END
|
|
||||||
call setline(1, range(1, 20))
|
|
||||||
call setline(5, 'here is some text to hover over')
|
|
||||||
+ set mouse=a
|
|
||||||
set balloonevalterm
|
|
||||||
set balloonexpr=BalloonExpr()
|
|
||||||
set balloondelay=100
|
|
||||||
@@ -2170,6 +2174,7 @@ func Test_popup_scrollbar()
|
|
||||||
|
|
||||||
let lines =<< trim END
|
|
||||||
call setline(1, range(1, 20))
|
|
||||||
+ set mouse=a
|
|
||||||
hi ScrollThumb ctermbg=blue
|
|
||||||
hi ScrollBar ctermbg=red
|
|
||||||
let winid = popup_create(['one', 'two', 'three', 'four', 'five',
|
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
diff --git a/src/ex_getln.c b/src/ex_getln.c
|
||||||
|
index 9fdfac5..6451378 100644
|
||||||
|
--- a/src/ex_getln.c
|
||||||
|
+++ b/src/ex_getln.c
|
||||||
|
@@ -797,6 +797,7 @@ getcmdline(
|
||||||
|
redrawcmd();
|
||||||
|
goto cmdline_changed;
|
||||||
|
}
|
||||||
|
+ vim_free(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
beep_flush();
|
||||||
|
diff --git a/src/memline.c b/src/memline.c
|
||||||
|
index 4be1036..366de4c 100644
|
||||||
|
--- a/src/memline.c
|
||||||
|
+++ b/src/memline.c
|
||||||
|
@@ -344,7 +344,7 @@ ml_open(buf_T *buf)
|
||||||
|
b0p->b0_magic_int = (int)B0_MAGIC_INT;
|
||||||
|
b0p->b0_magic_short = (short)B0_MAGIC_SHORT;
|
||||||
|
b0p->b0_magic_char = B0_MAGIC_CHAR;
|
||||||
|
- STRNCPY(b0p->b0_version, "VIM ", 4);
|
||||||
|
+ mch_memmove(b0p->b0_version, "VIM ", 4);
|
||||||
|
STRNCPY(b0p->b0_version + 4, Version, 6);
|
||||||
|
long_to_char((long)mfp->mf_page_size, b0p->b0_page_size);
|
||||||
|
|
||||||
|
diff --git a/src/move.c b/src/move.c
|
||||||
|
index a560030..2ea3975 100644
|
||||||
|
--- a/src/move.c
|
||||||
|
+++ b/src/move.c
|
||||||
|
@@ -1939,7 +1939,7 @@ scroll_cursor_bot(int min_scroll, int set_topbot)
|
||||||
|
scrolled += loff.height;
|
||||||
|
if (loff.lnum == curwin->w_botline
|
||||||
|
#ifdef FEAT_DIFF
|
||||||
|
- && boff.fill == 0
|
||||||
|
+ && loff.fill == 0
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
scrolled -= curwin->w_empty_rows;
|
||||||
|
diff --git a/src/term.c b/src/term.c
|
||||||
|
index 9ac824f..89b663a 100644
|
||||||
|
--- a/src/term.c
|
||||||
|
+++ b/src/term.c
|
||||||
|
@@ -1460,7 +1460,7 @@ parse_builtin_tcap(char_u *term)
|
||||||
|
if (term_7to8bit(t))
|
||||||
|
{
|
||||||
|
*t = term_7to8bit(t);
|
||||||
|
- STRCPY(t + 1, t + 2);
|
||||||
|
+ STRMOVE(t + 1, t + 2);
|
||||||
|
}
|
||||||
|
term_strings[p->bt_entry] = s;
|
||||||
|
set_term_option_alloced(&term_strings[p->bt_entry]);
|
@ -1,200 +0,0 @@
|
|||||||
diff --git a/src/indent.c b/src/indent.c
|
|
||||||
index e1c6f52..a002b4b 100644
|
|
||||||
--- a/src/indent.c
|
|
||||||
+++ b/src/indent.c
|
|
||||||
@@ -18,18 +18,19 @@
|
|
||||||
/*
|
|
||||||
* Set the integer values corresponding to the string setting of 'vartabstop'.
|
|
||||||
* "array" will be set, caller must free it if needed.
|
|
||||||
+ * Return FAIL for an error.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
tabstop_set(char_u *var, int **array)
|
|
||||||
{
|
|
||||||
- int valcount = 1;
|
|
||||||
- int t;
|
|
||||||
- char_u *cp;
|
|
||||||
+ int valcount = 1;
|
|
||||||
+ int t;
|
|
||||||
+ char_u *cp;
|
|
||||||
|
|
||||||
if (var[0] == NUL || (var[0] == '0' && var[1] == NUL))
|
|
||||||
{
|
|
||||||
*array = NULL;
|
|
||||||
- return TRUE;
|
|
||||||
+ return OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (cp = var; *cp != NUL; ++cp)
|
|
||||||
@@ -43,8 +44,8 @@ tabstop_set(char_u *var, int **array)
|
|
||||||
if (cp != end)
|
|
||||||
emsg(_(e_positive));
|
|
||||||
else
|
|
||||||
- emsg(_(e_invarg));
|
|
||||||
- return FALSE;
|
|
||||||
+ semsg(_(e_invarg2), cp);
|
|
||||||
+ return FAIL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -55,26 +56,36 @@ tabstop_set(char_u *var, int **array)
|
|
||||||
++valcount;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
- emsg(_(e_invarg));
|
|
||||||
- return FALSE;
|
|
||||||
+ semsg(_(e_invarg2), var);
|
|
||||||
+ return FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
*array = ALLOC_MULT(int, valcount + 1);
|
|
||||||
if (*array == NULL)
|
|
||||||
- return FALSE;
|
|
||||||
+ return FAIL;
|
|
||||||
(*array)[0] = valcount;
|
|
||||||
|
|
||||||
t = 1;
|
|
||||||
for (cp = var; *cp != NUL;)
|
|
||||||
{
|
|
||||||
- (*array)[t++] = atoi((char *)cp);
|
|
||||||
- while (*cp != NUL && *cp != ',')
|
|
||||||
+ int n = atoi((char *)cp);
|
|
||||||
+
|
|
||||||
+ // Catch negative values, overflow and ridiculous big values.
|
|
||||||
+ if (n < 0 || n > 9999)
|
|
||||||
+ {
|
|
||||||
+ semsg(_(e_invarg2), cp);
|
|
||||||
+ vim_free(*array);
|
|
||||||
+ *array = NULL;
|
|
||||||
+ return FAIL;
|
|
||||||
+ }
|
|
||||||
+ (*array)[t++] = n;
|
|
||||||
+ while (*cp != NUL && *cp != ',')
|
|
||||||
++cp;
|
|
||||||
if (*cp != NUL)
|
|
||||||
++cp;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return TRUE;
|
|
||||||
+ return OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -1561,7 +1572,7 @@ ex_retab(exarg_T *eap)
|
|
||||||
|
|
||||||
#ifdef FEAT_VARTABS
|
|
||||||
new_ts_str = eap->arg;
|
|
||||||
- if (!tabstop_set(eap->arg, &new_vts_array))
|
|
||||||
+ if (tabstop_set(eap->arg, &new_vts_array) == FAIL)
|
|
||||||
return;
|
|
||||||
while (vim_isdigit(*(eap->arg)) || *(eap->arg) == ',')
|
|
||||||
++(eap->arg);
|
|
||||||
@@ -1577,12 +1588,18 @@ ex_retab(exarg_T *eap)
|
|
||||||
else
|
|
||||||
new_ts_str = vim_strnsave(new_ts_str, eap->arg - new_ts_str);
|
|
||||||
#else
|
|
||||||
- new_ts = getdigits(&(eap->arg));
|
|
||||||
- if (new_ts < 0)
|
|
||||||
+ ptr = eap->arg;
|
|
||||||
+ new_ts = getdigits(&ptr);
|
|
||||||
+ if (new_ts < 0 && *eap->arg == '-')
|
|
||||||
{
|
|
||||||
emsg(_(e_positive));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+ if (new_ts < 0 || new_ts > 9999)
|
|
||||||
+ {
|
|
||||||
+ semsg(_(e_invarg2), eap->arg);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
if (new_ts == 0)
|
|
||||||
new_ts = curbuf->b_p_ts;
|
|
||||||
#endif
|
|
||||||
diff --git a/src/option.c b/src/option.c
|
|
||||||
index b9d7edb..9a3b71e 100644
|
|
||||||
--- a/src/option.c
|
|
||||||
+++ b/src/option.c
|
|
||||||
@@ -2349,9 +2349,9 @@ didset_options2(void)
|
|
||||||
#endif
|
|
||||||
#ifdef FEAT_VARTABS
|
|
||||||
vim_free(curbuf->b_p_vsts_array);
|
|
||||||
- tabstop_set(curbuf->b_p_vsts, &curbuf->b_p_vsts_array);
|
|
||||||
+ (void)tabstop_set(curbuf->b_p_vsts, &curbuf->b_p_vsts_array);
|
|
||||||
vim_free(curbuf->b_p_vts_array);
|
|
||||||
- tabstop_set(curbuf->b_p_vts, &curbuf->b_p_vts_array);
|
|
||||||
+ (void)tabstop_set(curbuf->b_p_vts, &curbuf->b_p_vts_array);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -5828,7 +5828,7 @@ buf_copy_options(buf_T *buf, int flags)
|
|
||||||
buf->b_p_vsts = vim_strsave(p_vsts);
|
|
||||||
COPY_OPT_SCTX(buf, BV_VSTS);
|
|
||||||
if (p_vsts && p_vsts != empty_option)
|
|
||||||
- tabstop_set(p_vsts, &buf->b_p_vsts_array);
|
|
||||||
+ (void)tabstop_set(p_vsts, &buf->b_p_vsts_array);
|
|
||||||
else
|
|
||||||
buf->b_p_vsts_array = 0;
|
|
||||||
buf->b_p_vsts_nopaste = p_vsts_nopaste
|
|
||||||
@@ -5988,7 +5988,7 @@ buf_copy_options(buf_T *buf, int flags)
|
|
||||||
buf->b_p_isk = save_p_isk;
|
|
||||||
#ifdef FEAT_VARTABS
|
|
||||||
if (p_vts && p_vts != empty_option && !buf->b_p_vts_array)
|
|
||||||
- tabstop_set(p_vts, &buf->b_p_vts_array);
|
|
||||||
+ (void)tabstop_set(p_vts, &buf->b_p_vts_array);
|
|
||||||
else
|
|
||||||
buf->b_p_vts_array = NULL;
|
|
||||||
#endif
|
|
||||||
@@ -6003,7 +6003,7 @@ buf_copy_options(buf_T *buf, int flags)
|
|
||||||
buf->b_p_vts = vim_strsave(p_vts);
|
|
||||||
COPY_OPT_SCTX(buf, BV_VTS);
|
|
||||||
if (p_vts && p_vts != empty_option && !buf->b_p_vts_array)
|
|
||||||
- tabstop_set(p_vts, &buf->b_p_vts_array);
|
|
||||||
+ (void)tabstop_set(p_vts, &buf->b_p_vts_array);
|
|
||||||
else
|
|
||||||
buf->b_p_vts_array = NULL;
|
|
||||||
#endif
|
|
||||||
@@ -6700,7 +6700,7 @@ paste_option_changed(void)
|
|
||||||
if (buf->b_p_vsts_array)
|
|
||||||
vim_free(buf->b_p_vsts_array);
|
|
||||||
if (buf->b_p_vsts && buf->b_p_vsts != empty_option)
|
|
||||||
- tabstop_set(buf->b_p_vsts, &buf->b_p_vsts_array);
|
|
||||||
+ (void)tabstop_set(buf->b_p_vsts, &buf->b_p_vsts_array);
|
|
||||||
else
|
|
||||||
buf->b_p_vsts_array = 0;
|
|
||||||
#endif
|
|
||||||
diff --git a/src/optionstr.c b/src/optionstr.c
|
|
||||||
index 521242d..db015e8 100644
|
|
||||||
--- a/src/optionstr.c
|
|
||||||
+++ b/src/optionstr.c
|
|
||||||
@@ -2215,7 +2215,7 @@ ambw_end:
|
|
||||||
if (errmsg == NULL)
|
|
||||||
{
|
|
||||||
int *oldarray = curbuf->b_p_vsts_array;
|
|
||||||
- if (tabstop_set(*varp, &(curbuf->b_p_vsts_array)))
|
|
||||||
+ if (tabstop_set(*varp, &(curbuf->b_p_vsts_array)) == OK)
|
|
||||||
{
|
|
||||||
if (oldarray)
|
|
||||||
vim_free(oldarray);
|
|
||||||
@@ -2254,7 +2254,7 @@ ambw_end:
|
|
||||||
{
|
|
||||||
int *oldarray = curbuf->b_p_vts_array;
|
|
||||||
|
|
||||||
- if (tabstop_set(*varp, &(curbuf->b_p_vts_array)))
|
|
||||||
+ if (tabstop_set(*varp, &(curbuf->b_p_vts_array)) == OK)
|
|
||||||
{
|
|
||||||
vim_free(oldarray);
|
|
||||||
#ifdef FEAT_FOLDING
|
|
||||||
diff --git a/src/testdir/test_retab.vim b/src/testdir/test_retab.vim
|
|
||||||
index b792da5..c7190aa 100644
|
|
||||||
--- a/src/testdir/test_retab.vim
|
|
||||||
+++ b/src/testdir/test_retab.vim
|
|
||||||
@@ -75,6 +75,9 @@ endfunc
|
|
||||||
func Test_retab_error()
|
|
||||||
call assert_fails('retab -1', 'E487:')
|
|
||||||
call assert_fails('retab! -1', 'E487:')
|
|
||||||
+ call assert_fails('ret -1000', 'E487:')
|
|
||||||
+ call assert_fails('ret 10000', 'E475:')
|
|
||||||
+ call assert_fails('ret 80000000000000000000', 'E475:')
|
|
||||||
endfunc
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
|
@ -0,0 +1,13 @@
|
|||||||
|
diff -up vim80/src/regexp_nfa.c.cve3796-fix vim80/src/regexp_nfa.c
|
||||||
|
--- vim80/src/regexp_nfa.c.cve3796-fix 2021-09-20 08:27:13.752604505 +0200
|
||||||
|
+++ vim80/src/regexp_nfa.c 2021-09-20 08:29:10.206546910 +0200
|
||||||
|
@@ -5493,7 +5493,8 @@ find_match_text(colnr_T startcol, int re
|
||||||
|
match = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
- len2 += MB_CHAR2LEN(c2);
|
||||||
|
+ len2 += enc_utf8 ? utf_ptr2len(regline + col + len2)
|
||||||
|
+ : MB_CHAR2LEN(c2);
|
||||||
|
}
|
||||||
|
if (match
|
||||||
|
#ifdef FEAT_MBYTE
|
@ -1,5 +0,0 @@
|
|||||||
# Ensure vim is set as EDITOR if it isn't already set
|
|
||||||
|
|
||||||
if ( ! ($?EDITOR) ) then
|
|
||||||
setenv EDITOR "/usr/bin/vim"
|
|
||||||
endif
|
|
@ -1,8 +0,0 @@
|
|||||||
# Ensure vim is set as EDITOR if it isn't already set
|
|
||||||
# This is set as a universal variable so that any other definition
|
|
||||||
# by the user would win
|
|
||||||
# Cf. https://fishshell.com/docs/current/index.html#variables-scope
|
|
||||||
|
|
||||||
if ! set -q EDITOR;
|
|
||||||
set -x EDITOR /usr/bin/vim
|
|
||||||
end
|
|
@ -1,5 +0,0 @@
|
|||||||
# Ensure vim is set as EDITOR if it isn't already set
|
|
||||||
|
|
||||||
if [ -z "$EDITOR" ]; then
|
|
||||||
export EDITOR="/usr/bin/vim"
|
|
||||||
fi
|
|
@ -0,0 +1,6 @@
|
|||||||
|
if ( -x /usr/bin/id ) then
|
||||||
|
if ( "`/usr/bin/id -u`" > 200 ) then
|
||||||
|
alias vi vim
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
@ -0,0 +1,5 @@
|
|||||||
|
if [ -n "${BASH_VERSION-}" -o -n "${KSH_VERSION-}" -o -n "${ZSH_VERSION-}" ]; then
|
||||||
|
[ "`/usr/bin/id -u 2>/dev/null || echo 0`" -le 200 ] && return
|
||||||
|
# for bash and zsh, only if no alias is already set
|
||||||
|
alias vi >/dev/null 2>&1 || alias vi=vim
|
||||||
|
fi
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue