summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-04-19 15:20:46 +0200
committerBram Moolenaar <Bram@vim.org>2019-04-19 15:20:46 +0200
commit334ad415040f9592451ec99498cd99f90d6e33e6 (patch)
treeb8731633fa1d11f461b1aed623a302038301b7cf
parent86ec6d7e1e037e839879a5c05c2ee77db27fb557 (diff)
patch 8.1.1186: readdir() allocates list twicev8.1.1186
Problem: readdir() allocates list twice. Solution: Remove second allocation. Also check for zero length.
-rw-r--r--src/evalfunc.c9
-rw-r--r--src/version.c2
2 files changed, 4 insertions, 7 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 76f1125a1d..7368ba284b 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -9324,10 +9324,8 @@ f_readdir(typval_T *argvars, typval_T *rettv)
}
#endif
- rettv->vval.v_list = list_alloc();
- if (!failed && rettv->vval.v_list != NULL)
+ if (!failed && rettv->vval.v_list != NULL && ga.ga_len > 0)
{
- ++rettv->vval.v_list->lv_refcount;
sort_strings((char_u **)ga.ga_data, ga.ga_len);
for (i = 0; i < ga.ga_len; i++)
{
@@ -9335,10 +9333,7 @@ f_readdir(typval_T *argvars, typval_T *rettv)
list_append_string(rettv->vval.v_list, p, -1);
}
}
- for (i = 0; i < ga.ga_len; i++)
- vim_free(((char_u **)ga.ga_data)[i]);
-
- ga_clear(&ga);
+ ga_clear_strings(&ga);
}
/*
diff --git a/src/version.c b/src/version.c
index b08b22c10d..0b9a5dfa2e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1186,
+/**/
1185,
/**/
1184,