aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-12-11 22:55:12 -0500
committerJames McCoy <jamessan@jamessan.com>2016-12-11 23:17:50 -0500
commit79c711670c11b395a3d78d2782e109eb04f4331e (patch)
treedc915d18567d7d85c26c43e3aac05c0853a9bde7
parent29e651515fec1a4bc2cd41ed1c04eb5d03250525 (diff)
downloadrneovim-79c711670c11b395a3d78d2782e109eb04f4331e.tar.gz
rneovim-79c711670c11b395a3d78d2782e109eb04f4331e.tar.bz2
rneovim-79c711670c11b395a3d78d2782e109eb04f4331e.zip
option.c: Update free_oldval after adjusting opt_idx for shada/viminfo
Previously, free_oldval was set immediately on entering did_set_string_option. However, opt_idx hadn't been adjusted to account for diverting 'viminfo' manipulation to 'shada'. Therefore, the code which determines whether to free the old value was looking at the flags for 'viminfo' while the code which sets whether a value was allocated was modifying the flags for 'shada'. This led to a leak of any values set for 'viminfo'. Updating free_oldval once opt_idx has been adjusted for the 'viminfo'/'shada' handling ensures the check/set values are consistent. Closes #5698
-rw-r--r--src/nvim/option.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 469aeecc23..797dd1dfe7 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -2770,6 +2770,10 @@ did_set_string_option (
? ((shada_idx = findoption((char_u *) "shada")))
: shada_idx)
: opt_idx);
+ // Update free_oldval now that we have the opt_idx for 'shada', otherwise
+ // there would be a disconnect between the check for P_ALLOCED at the start
+ // of the function and the set of P_ALLOCED at the end of the fuction.
+ free_oldval = (options[opt_idx].flags & P_ALLOCED);
for (s = p_shada; *s; ) {
/* Check it's a valid character */
if (vim_strchr((char_u *)"!\"%'/:<@cfhnrs", *s) == NULL) {