From: Bram Moolenaar Date: Tue, 24 Apr 2018 18:23:56 +0000 (+0200) Subject: patch 8.0.1759: memory leak from duplicate options X-Git-Tag: v8.0.1759 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=09d1d51df5d9b215e583b5bbe36df46afb3db35f;p=vim patch 8.0.1759: memory leak from duplicate options Problem: Memory leak from duplicate options. (Yegappan Lakshmanan) Solution: Don't set the default value twice. --- diff --git a/src/option.c b/src/option.c index aea506647..31aec7e78 100644 --- a/src/option.c +++ b/src/option.c @@ -3805,17 +3805,23 @@ set_option_default( dvi = ((flags & P_VI_DEF) || compatible) ? VI_DEFAULT : VIM_DEFAULT; if (flags & P_STRING) { - /* Use set_string_option_direct() for local options to handle - * freeing and allocating the value. */ - if (options[opt_idx].indir != PV_NONE) - set_string_option_direct(NULL, opt_idx, - options[opt_idx].def_val[dvi], opt_flags, 0); - else + /* skip 'termkey' and 'termsize, they are duplicates of + * 'termwinkey' and 'termwinsize' */ + if (STRCMP(options[opt_idx].fullname, "termkey") != 0 + && STRCMP(options[opt_idx].fullname, "termsize") != 0) { - if ((opt_flags & OPT_FREE) && (flags & P_ALLOCED)) - free_string_option(*(char_u **)(varp)); - *(char_u **)varp = options[opt_idx].def_val[dvi]; - options[opt_idx].flags &= ~P_ALLOCED; + /* Use set_string_option_direct() for local options to handle + * freeing and allocating the value. */ + if (options[opt_idx].indir != PV_NONE) + set_string_option_direct(NULL, opt_idx, + options[opt_idx].def_val[dvi], opt_flags, 0); + else + { + if ((opt_flags & OPT_FREE) && (flags & P_ALLOCED)) + free_string_option(*(char_u **)(varp)); + *(char_u **)varp = options[opt_idx].def_val[dvi]; + options[opt_idx].flags &= ~P_ALLOCED; + } } } else if (flags & P_NUM) diff --git a/src/version.c b/src/version.c index dfd82f997..c25fcf163 100644 --- a/src/version.c +++ b/src/version.c @@ -761,6 +761,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1759, /**/ 1758, /**/