diff options
| author | Peter Stephenson <pws@zsh.org> | 2017-01-11 12:11:22 +0000 |
|---|---|---|
| committer | Peter Stephenson <pws@zsh.org> | 2017-01-11 12:11:22 +0000 |
| commit | 47b7f2adef9d7e399af9d06a67b4db1ad55d4f32 (patch) | |
| tree | 62956db751e1bfe226bae4d5b14c075ca8871c4d | |
| parent | Add features associated with autoloading a function using an absolute (diff) | |
| download | zsh-47b7f2adef9d7e399af9d06a67b4db1ad55d4f32.tar zsh-47b7f2adef9d7e399af9d06a67b4db1ad55d4f32.tar.gz zsh-47b7f2adef9d7e399af9d06a67b4db1ad55d4f32.tar.bz2 zsh-47b7f2adef9d7e399af9d06a67b4db1ad55d4f32.tar.lz zsh-47b7f2adef9d7e399af9d06a67b4db1ad55d4f32.tar.xz zsh-47b7f2adef9d7e399af9d06a67b4db1ad55d4f32.tar.zst zsh-47b7f2adef9d7e399af9d06a67b4db1ad55d4f32.zip | |
unposted: more care with shell function filename.
When updating shfunc structure to change filename we should be
careful to free whatever's there already, we may now be the
directory in which to find the function definition. After loading
the field contains the full name of the file.
| -rw-r--r-- | ChangeLog | 3 | ||||
| -rw-r--r-- | Src/builtin.c | 4 | ||||
| -rw-r--r-- | Src/exec.c | 2 |
3 files changed, 8 insertions, 1 deletions
@@ -1,5 +1,8 @@ 2017-01-11 Peter Stephenson <p.stephenson@samsung.com> + * unposted: Src/builtin.c, Src/exec.c: be more careful to free + memory when updating filename in struct shfunc. + * 40327 (with minor fixes): Doc/Zsh/builtins.yo, README,Src/builtin.c, Src/exec.c, Src/hashtable.c, Src/parse.c, Src/zsh.h, Test/C04funcdef.ztst: add ability to autoload diff --git a/Src/builtin.c b/Src/builtin.c index 78d67ca8e..b986dd89a 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -3275,8 +3275,10 @@ bin_functions(char *name, char **argv, Options ops, int func) shf = (Shfunc) zshcalloc(sizeof *shf); shfunctab->addnode(shfunctab, ztrdup(funcname), shf); } - if (*argv) + if (*argv) { + zsfree(shf->filename); shf->filename = ztrdup(*argv); + } shf->node.flags = on; ret = eval_autoload(shf, funcname, ops, func); } diff --git a/Src/exec.c b/Src/exec.c index a41d05b41..7bec7ce48 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -5204,6 +5204,7 @@ loadautofn(Shfunc shf, int fksh, int autol, int current_fpath) else shf->funcdef = dupeprog(prog, 0); shf->node.flags &= ~PM_UNDEFINED; + zsfree(shf->filename); shf->filename = fname; } else { VARARR(char, n, strlen(shf->node.nam) + 1); @@ -5227,6 +5228,7 @@ loadautofn(Shfunc shf, int fksh, int autol, int current_fpath) else shf->funcdef = dupeprog(stripkshdef(prog, shf->node.nam), 0); shf->node.flags &= ~PM_UNDEFINED; + zsfree(shf->filename); shf->filename = fname; } popheap(); |
