summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/linterrcodes.lua1
-rw-r--r--src/nvim/errors.h1
-rw-r--r--src/nvim/ex_cmds.c7
-rw-r--r--src/nvim/strings.c5
-rw-r--r--test/functional/ex_cmds/excmd_spec.lua4
5 files changed, 10 insertions, 8 deletions
diff --git a/scripts/linterrcodes.lua b/scripts/linterrcodes.lua
index 578ff16a01..6bcf9f2757 100644
--- a/scripts/linterrcodes.lua
+++ b/scripts/linterrcodes.lua
@@ -18,6 +18,7 @@ local dup_allowed = {
E116 = 2,
E121 = 2,
E1502 = 4,
+ E1510 = 2,
E151 = 2,
E155 = 3,
E158 = 2,
diff --git a/src/nvim/errors.h b/src/nvim/errors.h
index aa0eb00478..113b2058ff 100644
--- a/src/nvim/errors.h
+++ b/src/nvim/errors.h
@@ -210,6 +210,7 @@ EXTERN const char e_not_allowed_to_change_window_layout_in_this_autocmd[]
INIT(= N_("E1312: Not allowed to change the window layout in this autocmd"));
EXTERN const char e_val_too_large[] INIT(= N_("E1510: Value too large: %s"));
+EXTERN const char e_val_too_large_len[] INIT(= N_("E1510: Value too large: %.*s"));
EXTERN const char e_undobang_cannot_redo_or_move_branch[]
INIT(= N_("E5767: Cannot use :undo! to redo or move to a different undo branch"));
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index d983f05629..6f0ca99ffb 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -3678,15 +3678,14 @@ static int do_sub(exarg_T *eap, const proftime_T timeout, const int cmdpreview_n
// check for a trailing count
cmd = skipwhite(cmd);
if (ascii_isdigit(*cmd)) {
- i = getdigits_int(&cmd, true, INT_MAX);
+ const char *const count_arg = cmd;
+ i = getdigits_int(&cmd, false, INT_MAX);
if (i <= 0 && !eap->skip && subflags.do_error) {
emsg(_(e_zerocount));
xfree(sub);
return 0;
} else if (i >= INT_MAX) {
- char buf[20];
- vim_snprintf(buf, sizeof(buf), "%d", i);
- semsg(_(e_val_too_large), buf);
+ semsg(_(e_val_too_large_len), (int)(cmd - count_arg), count_arg);
xfree(sub);
return 0;
}
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index 72f0bfa789..24ecb8a5ec 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -1053,10 +1053,7 @@ static void format_overflow_error(const char *pstart)
p++;
}
- size_t arglen = (size_t)(p - pstart);
- char *argcopy = xstrnsave(pstart, arglen);
- semsg(_(e_val_too_large), argcopy);
- xfree(argcopy);
+ semsg(_(e_val_too_large_len), (int)(p - pstart), pstart);
}
enum { MAX_ALLOWED_STRING_WIDTH = 1048576, }; // 1MiB
diff --git a/test/functional/ex_cmds/excmd_spec.lua b/test/functional/ex_cmds/excmd_spec.lua
index 7c67222cb3..46413bc7da 100644
--- a/test/functional/ex_cmds/excmd_spec.lua
+++ b/test/functional/ex_cmds/excmd_spec.lua
@@ -41,6 +41,10 @@ describe('Ex cmds', function()
'Vim(menu):E329: No menu "9999999999999999999999999999999999999999"',
pcall_err(command, ':menu 9999999999999999999999999999999999999999')
)
+ eq(
+ 'Vim(substitute):E1510: Value too large: 9999999999999999999999999999999999999999',
+ pcall_err(command, ':%s/./b/9999999999999999999999999999999999999999')
+ )
assert_alive()
end)