summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2011-04-11 21:35:11 +0200
committerBram Moolenaar <Bram@vim.org>2011-04-11 21:35:11 +0200
commitd9462e394a582b2698e13648c95acf22322ee766 (patch)
treeaf599d1593650fcac4b64dfd3503836ce0e10070 /src/eval.c
parentef9d6aa70d68cd3a765ed55f4c3781aeb8aeea23 (diff)
updated for version 7.3.161v7.3.161
Problem: Items on the stack may be too big. Solution: Make items static or allocate them.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/eval.c b/src/eval.c
index 45d3cbf680..c940109aaf 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -11100,18 +11100,22 @@ f_getcwd(argvars, rettv)
typval_T *argvars UNUSED;
typval_T *rettv;
{
- char_u cwd[MAXPATHL];
+ char_u *cwd;
rettv->v_type = VAR_STRING;
- if (mch_dirname(cwd, MAXPATHL) == FAIL)
- rettv->vval.v_string = NULL;
- else
+ rettv->vval.v_string = NULL;
+ cwd = alloc(MAXPATHL);
+ if (cwd != NULL)
{
- rettv->vval.v_string = vim_strsave(cwd);
+ if (mch_dirname(cwd, MAXPATHL) != FAIL)
+ {
+ rettv->vval.v_string = vim_strsave(cwd);
#ifdef BACKSLASH_IN_FILENAME
- if (rettv->vval.v_string != NULL)
- slash_adjust(rettv->vval.v_string);
+ if (rettv->vval.v_string != NULL)
+ slash_adjust(rettv->vval.v_string);
#endif
+ }
+ vim_free(cwd);
}
}
@@ -14938,6 +14942,9 @@ f_resolve(argvars, rettv)
typval_T *rettv;
{
char_u *p;
+#ifdef HAVE_READLINK
+ char_u *buf = NULL;
+#endif
p = get_tv_string(&argvars[0]);
#ifdef FEAT_SHORTCUT
@@ -14953,7 +14960,6 @@ f_resolve(argvars, rettv)
#else
# ifdef HAVE_READLINK
{
- char_u buf[MAXPATHL + 1];
char_u *cpy;
int len;
char_u *remain = NULL;
@@ -14981,6 +14987,10 @@ f_resolve(argvars, rettv)
q[-1] = NUL;
}
+ buf = alloc(MAXPATHL + 1);
+ if (buf == NULL)
+ goto fail;
+
for (;;)
{
for (;;)
@@ -15124,6 +15134,7 @@ f_resolve(argvars, rettv)
#ifdef HAVE_READLINK
fail:
+ vim_free(buf);
#endif
rettv->v_type = VAR_STRING;
}
@@ -17604,18 +17615,22 @@ f_tagfiles(argvars, rettv)
typval_T *argvars UNUSED;
typval_T *rettv;
{
- char_u fname[MAXPATHL + 1];
+ char_u *fname;
tagname_T tn;
int first;
if (rettv_list_alloc(rettv) == FAIL)
return;
+ fname = alloc(MAXPATHL);
+ if (fname == NULL)
+ return;
for (first = TRUE; ; first = FALSE)
if (get_tagfname(&tn, first, fname) == FAIL
|| list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
break;
tagname_free(&tn);
+ vim_free(fname);
}
/*