changeset 5826:afb542ea210c v7.4.256

updated for version 7.4.256 Problem: Using systemlist() may cause a crash and does not handle NUL characters properly. Solution: Increase the reference count, allocate memory by length. (Yasuhiro Matsumoto)
author Bram Moolenaar <bram@vim.org>
date Fri, 11 Apr 2014 10:22:53 +0200
parents 6ca0d241c8bf
children f8223dbea078
files src/eval.c src/version.c
diffstat 2 files changed, 10 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -18334,16 +18334,17 @@ get_cmd_output_as_rettv(argvars, rettv, 
 	for (i = 0; i < len; ++i)
 	{
 	    start = res + i;
-	    for (end = start; i < len && *end != NL; ++end)
+	    while (i < len && res[i] != NL)
 		++i;
-
-	    s = vim_strnsave(start, (int)(end - start));
+	    end = res + i;
+
+	    s = alloc((unsigned)(end - start + 1));
 	    if (s == NULL)
 		goto errret;
 
-	    for (p = s, end = s + (end - start); p < end; ++p)
-		if (*p == NUL)
-		    *p = NL;
+	    for (p = s; start < end; ++p, ++start)
+		*p = *start == NUL ? NL : *start;
+	    *p = NUL;
 
 	    li = listitem_alloc();
 	    if (li == NULL)
@@ -18356,6 +18357,7 @@ get_cmd_output_as_rettv(argvars, rettv, 
 	    list_append(list, li);
 	}
 
+	++list->lv_refcount;
 	rettv->v_type = VAR_LIST;
 	rettv->vval.v_list = list;
 	list = NULL;
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    256,
+/**/
     255,
 /**/
     254,