diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-08-22 00:49:33 -0400 |
---|---|---|
committer | Daniel Hahler <git@thequod.de> | 2019-08-22 06:49:33 +0200 |
commit | ed28668392e450bf22fe97e0581a63135498b8c0 (patch) | |
tree | f2590a2bfdbb9e54e386d9f6fa913b9deccf87b8 /src/nvim/ex_getln.c | |
parent | bb50eadc84a4d095b1739ad31720fafe7bca6d0f (diff) | |
download | rneovim-ed28668392e450bf22fe97e0581a63135498b8c0.tar.gz rneovim-ed28668392e450bf22fe97e0581a63135498b8c0.tar.bz2 rneovim-ed28668392e450bf22fe97e0581a63135498b8c0.zip |
vim-patch:8.1.1897: may free memory twice when out of memory (#10827)
Problem: May free memory twice when out of memory.
Solution: Check that backslash_halve_save() returns a different pointer.
(Dominique Pelle, closes vim/vim#4847)
https://github.com/vim/vim/commit/f1552d07d715b437d941659479942c2543b02bd4
Diffstat (limited to 'src/nvim/ex_getln.c')
-rw-r--r-- | src/nvim/ex_getln.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 17292dfde1..e8d650accf 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -4212,24 +4212,24 @@ static int showmatches(expand_T *xp, int wildmenu) || xp->xp_context == EXPAND_BUFFERS) { /* highlight directories */ if (xp->xp_numfiles != -1) { - char_u *halved_slash; - char_u *exp_path; - - /* Expansion was done before and special characters - * were escaped, need to halve backslashes. Also - * $HOME has been replaced with ~/. */ - exp_path = expand_env_save_opt(files_found[k], TRUE); - halved_slash = backslash_halve_save( - exp_path != NULL ? exp_path : files_found[k]); + // Expansion was done before and special characters + // were escaped, need to halve backslashes. Also + // $HOME has been replaced with ~/. + char_u *exp_path = expand_env_save_opt(files_found[k], true); + char_u *path = exp_path != NULL ? exp_path : files_found[k]; + char_u *halved_slash = backslash_halve_save(path); j = os_isdir(halved_slash); xfree(exp_path); - xfree(halved_slash); - } else - /* Expansion was done here, file names are literal. */ + if (halved_slash != path) { + xfree(halved_slash); + } + } else { + // Expansion was done here, file names are literal. j = os_isdir(files_found[k]); - if (showtail) + } + if (showtail) { p = L_SHOWFILE(k); - else { + } else { home_replace(NULL, files_found[k], NameBuff, MAXPATHL, TRUE); p = NameBuff; |