diff options
author | Adrian Neumann <adrian_neumann@gmx.de> | 2017-09-28 10:19:57 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-11-06 05:00:58 +0100 |
commit | 8f03014e8861df7f49bf4e1dbdfcc20e1611ce35 (patch) | |
tree | 33bc5bc3af4e2ff6337f8c976f42de7fa48a0aed | |
parent | d31b94ac209d2161f60084d5fa1e18f0cbaf0207 (diff) | |
download | rneovim-8f03014e8861df7f49bf4e1dbdfcc20e1611ce35.tar.gz rneovim-8f03014e8861df7f49bf4e1dbdfcc20e1611ce35.tar.bz2 rneovim-8f03014e8861df7f49bf4e1dbdfcc20e1611ce35.zip |
eval/decode.c: Avoid NULL arg to memchr() #7332
Clang complains because memchr has undefined behavior if the ptr is
NULL, even if len==0.
Helped-by: Nikolai Aleksandrovich Pavlov <kp-pav@yandex.ru>
-rw-r--r-- | src/nvim/eval/decode.c | 2 | ||||
-rw-r--r-- | test/functional/eval/json_functions_spec.lua | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/nvim/eval/decode.c b/src/nvim/eval/decode.c index 9c9c2c2dc8..0933b1bf9c 100644 --- a/src/nvim/eval/decode.c +++ b/src/nvim/eval/decode.c @@ -266,7 +266,7 @@ typval_T decode_string(const char *const s, const size_t len, { assert(s != NULL || len == 0); const bool really_hasnul = (hasnul == kNone - ? memchr(s, NUL, len) != NULL + ? ((s != NULL) && (memchr(s, NUL, len) != NULL)) : (bool)hasnul); if (really_hasnul) { list_T *const list = tv_list_alloc(); diff --git a/test/functional/eval/json_functions_spec.lua b/test/functional/eval/json_functions_spec.lua index 4d34cde849..8dcaea806e 100644 --- a/test/functional/eval/json_functions_spec.lua +++ b/test/functional/eval/json_functions_spec.lua @@ -776,4 +776,11 @@ describe('json_encode() function', function() it('can dump NULL dictionary', function() eq('{}', eval('json_encode(v:_null_dict)')) end) + + it('fails to parse NULL strings and lists', function() + eq('Vim(call):E474: Attempt to decode a blank string', + exc_exec('call json_decode($XXX_UNEXISTENT_VAR_XXX)')) + eq('Vim(call):E474: Attempt to decode a blank string', + exc_exec('call json_decode(v:_null_list)')) + end) end) |