aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/eval/decode.c1
-rw-r--r--src/nvim/eval/encode.c10
2 files changed, 6 insertions, 5 deletions
diff --git a/src/nvim/eval/decode.c b/src/nvim/eval/decode.c
index a89a9b8920..c6706eb0dd 100644
--- a/src/nvim/eval/decode.c
+++ b/src/nvim/eval/decode.c
@@ -552,6 +552,7 @@ json_decode_string_cycle_start:
clear_tv(&obj);
goto json_decode_string_fail;
}
+ xfree(str);
POP(obj, true);
} else {
*str_end = NUL;
diff --git a/src/nvim/eval/encode.c b/src/nvim/eval/encode.c
index 48fbc44b0c..2df689990a 100644
--- a/src/nvim/eval/encode.c
+++ b/src/nvim/eval/encode.c
@@ -613,7 +613,7 @@ scope int encode_vim_to_##name(firstargtype firstargname, typval_T *const tv, \
CONV_DICT_BETWEEN_ITEMS(); \
} \
const list_T *const kv_pair = cur_mpsv->data.l.li->li_tv.vval.v_list; \
- CONV_SPECIAL_DICT_KEY_CHECK(kv_pair); \
+ CONV_SPECIAL_DICT_KEY_CHECK(name, kv_pair); \
if (name##_convert_one_value(firstargname, &mpstack, \
&kv_pair->lv_first->li_tv, copyID, \
objname) == FAIL) { \
@@ -735,7 +735,7 @@ encode_vim_to_##name##_error_ret: \
#define CONV_DICT_BETWEEN_ITEMS() \
ga_concat(gap, ", ")
-#define CONV_SPECIAL_DICT_KEY_CHECK(kv_pair)
+#define CONV_SPECIAL_DICT_KEY_CHECK(name, kv_pair)
#define CONV_LIST_END(lst) \
ga_append(gap, ']')
@@ -1058,11 +1058,11 @@ static inline bool check_json_key(const typval_T *const tv)
}
#undef CONV_SPECIAL_DICT_KEY_CHECK
-#define CONV_SPECIAL_DICT_KEY_CHECK(kv_pair) \
+#define CONV_SPECIAL_DICT_KEY_CHECK(name, kv_pair) \
do { \
if (!check_json_key(&kv_pair->lv_first->li_tv)) { \
EMSG(_("E474: Invalid key in special dictionary")); \
- return FAIL; \
+ goto encode_vim_to_##name##_error_ret; \
} \
} while (0)
@@ -1235,7 +1235,7 @@ char *encode_tv2json(typval_T *tv, size_t *len)
#define CONV_DICT_BETWEEN_ITEMS()
-#define CONV_SPECIAL_DICT_KEY_CHECK(kv_pair)
+#define CONV_SPECIAL_DICT_KEY_CHECK(name, kv_pair)
#define CONV_LIST_END(lst)