changeset 5314:bb358cc41d92 v7.4.010

updated for version 7.4.010 Problem: Crash with invalid argument to mkdir(). Solution: Check for empty string. (lcd47)
author Bram Moolenaar <bram@vim.org>
date Fri, 30 Aug 2013 16:00:08 +0200
parents 477b4f701156
children fe180a01a2c2
files src/eval.c src/version.c
diffstat 2 files changed, 19 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -14292,18 +14292,23 @@ f_mkdir(argvars, rettv)
 	return;
 
     dir = get_tv_string_buf(&argvars[0], buf);
-    if (*gettail(dir) == NUL)
-	/* remove trailing slashes */
-	*gettail_sep(dir) = NUL;
-
-    if (argvars[1].v_type != VAR_UNKNOWN)
-    {
-	if (argvars[2].v_type != VAR_UNKNOWN)
-	    prot = get_tv_number_chk(&argvars[2], NULL);
-	if (prot != -1 && STRCMP(get_tv_string(&argvars[1]), "p") == 0)
-	    mkdir_recurse(dir, prot);
-    }
-    rettv->vval.v_number = prot == -1 ? FAIL : vim_mkdir_emsg(dir, prot);
+    if (*dir == NUL)
+	rettv->vval.v_number = FAIL;
+    else
+    {
+	if (*gettail(dir) == NUL)
+	    /* remove trailing slashes */
+	    *gettail_sep(dir) = NUL;
+
+	if (argvars[1].v_type != VAR_UNKNOWN)
+	{
+	    if (argvars[2].v_type != VAR_UNKNOWN)
+		prot = get_tv_number_chk(&argvars[2], NULL);
+	    if (prot != -1 && STRCMP(get_tv_string(&argvars[1]), "p") == 0)
+		mkdir_recurse(dir, prot);
+	}
+	rettv->vval.v_number = prot == -1 ? FAIL : vim_mkdir_emsg(dir, prot);
+    }
 }
 #endif
 
--- a/src/version.c
+++ b/src/version.c
@@ -728,6 +728,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    10,
+/**/
     9,
 /**/
     8,