aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/eval.c2
-rw-r--r--test/functional/eval/json_functions_spec.lua8
2 files changed, 9 insertions, 1 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 9d1baec33f..bec234bb22 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -11618,7 +11618,7 @@ static void f_json_decode(typval_T *argvars, typval_T *rettv)
return;
}
if (json_decode_string(s, len, rettv) == FAIL) {
- EMSG2(_("E474: Failed to parse %s"), s);
+ emsgf(_("E474: Failed to parse %.*s"), (int) len, s);
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
}
diff --git a/test/functional/eval/json_functions_spec.lua b/test/functional/eval/json_functions_spec.lua
index bed9d668fa..091b6f5457 100644
--- a/test/functional/eval/json_functions_spec.lua
+++ b/test/functional/eval/json_functions_spec.lua
@@ -6,6 +6,7 @@ local eq = helpers.eq
local eval = helpers.eval
local execute = helpers.execute
local exc_exec = helpers.exc_exec
+local redir_exec = helpers.redir_exec
describe('json_decode() function', function()
local restart = function(cmd)
@@ -529,6 +530,13 @@ describe('json_decode() function', function()
restart('set encoding=latin1')
eq(('%c'):format(0xAB), funcs.json_decode('"«"'))
end)
+
+ it('does not overflow when writing error message about decoding ["", ""]',
+ function()
+ eq('\nE474: Attempt to decode a blank string'
+ .. '\nE474: Failed to parse \n',
+ redir_exec('call json_decode(["", ""])'))
+ end)
end)
describe('json_encode() function', function()