aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/option.c
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 /src/nvim/option.c
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
Diffstat (limited to 'src/nvim/option.c')
-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) {