From 2d877599ee1cede063ef4abe3a2272e67c116238 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 16 Dec 2021 08:21:09 +0000 Subject: patch 8.2.3822: leaking memory in map() and filter(), no string in Vim9 Problem: Leaking memory in map() and filter(), cannot use a string argument in Vim9 script. Solution: Fix the leak, adjust the argument check, also run the tests as Vim9 script. (Yegappan Lakshmanan, closes #9354) --- src/typval.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/typval.c') diff --git a/src/typval.c b/src/typval.c index 8dbb939a7..5e1c78c41 100644 --- a/src/typval.c +++ b/src/typval.c @@ -831,6 +831,28 @@ check_for_list_or_dict_or_blob_arg(typval_T *args, int idx) return OK; } +/* + * Give an error and return FAIL unless "args[idx]" is a list or dict or a + * blob or a string. + */ + int +check_for_list_or_dict_or_blob_or_string_arg(typval_T *args, int idx) +{ + if (args[idx].v_type != VAR_LIST + && args[idx].v_type != VAR_DICT + && args[idx].v_type != VAR_BLOB + && args[idx].v_type != VAR_STRING) + { + if (idx >= 0) + semsg(_(e_list_dict_blob_or_string_required_for_argument_nr), + idx + 1); + else + emsg(_(e_listreq)); + return FAIL; + } + return OK; +} + /* * Give an error and return FAIL unless "args[idx]" is an optional buffer * number or a dict. -- cgit v1.2.1