diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-12-29 21:00:27 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-12-29 21:00:27 +0100 |
commit | 1ea88a3e12e5f6afc5353cd0d6e6d4f4a89ced94 (patch) | |
tree | d29c21ca473e027fd1689d8d4de192bd1b82ce9c /src/evalfunc.c | |
parent | ced198d4b4efae75417e4366354679db2d0ec68e (diff) |
patch 8.1.0660: sign_cleanup() may leak memoryv8.1.0660
Problem: sign_cleanup() may leak memory.
Solution: Free the group name before returning. Add a few more tests.
(Yegappan Lakshmanan)
Diffstat (limited to 'src/evalfunc.c')
-rw-r--r-- | src/evalfunc.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 13e6d6e269..2e9b16a3e3 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -11578,7 +11578,7 @@ f_sign_unplace(typval_T *argvars, typval_T *rettv) if (argvars[1].v_type != VAR_DICT) { EMSG(_(e_dictreq)); - return; + goto cleanup; } dict = argvars[1].vval.v_dict; @@ -11589,7 +11589,7 @@ f_sign_unplace(typval_T *argvars, typval_T *rettv) { EMSG2(_("E158: Invalid buffer name: %s"), tv_get_string(&di->di_tv)); - return; + goto cleanup; } } if (dict_find(dict, (char_u *)"id", -1) != NULL) @@ -11608,6 +11608,8 @@ f_sign_unplace(typval_T *argvars, typval_T *rettv) if (sign_unplace(sign_id, group, buf, 0) == OK) rettv->vval.v_number = 0; } + +cleanup: vim_free(group); } #endif |