memory: avoid a tiny leak when an option with an argument is given twice

(Aaah, being able to define a keyboard macro
came in very handy when making this edit.)

This fixes https://savannah.gnu.org/bugs/?61331.

Bug existed since before version 2.2.0.
master
Benno Schulenberg 2021-10-11 17:10:49 +02:00
parent 6018de2466
commit 42610db847
1 changed files with 9 additions and 9 deletions

View File

@ -1565,7 +1565,7 @@ void parse_rcfile(FILE *rcstream, bool just_syntax, bool intros_only)
#endif #endif
#ifdef ENABLE_OPERATINGDIR #ifdef ENABLE_OPERATINGDIR
if (strcmp(option, "operatingdir") == 0) if (strcmp(option, "operatingdir") == 0)
operating_dir = copy_of(argument); operating_dir = free_and_assign(operating_dir, copy_of(argument));
else else
#endif #endif
#ifdef ENABLED_WRAPORJUSTIFY #ifdef ENABLED_WRAPORJUSTIFY
@ -1583,12 +1583,12 @@ void parse_rcfile(FILE *rcstream, bool just_syntax, bool intros_only)
else if (mbstrlen(argument) % 2 != 0) else if (mbstrlen(argument) % 2 != 0)
jot_error(N_("Even number of characters required")); jot_error(N_("Even number of characters required"));
else else
matchbrackets = copy_of(argument); matchbrackets = free_and_assign(matchbrackets, copy_of(argument));
} else if (strcmp(option, "whitespace") == 0) { } else if (strcmp(option, "whitespace") == 0) {
if (mbstrlen(argument) != 2 || breadth(argument) != 2) if (mbstrlen(argument) != 2 || breadth(argument) != 2)
jot_error(N_("Two single-column characters required")); jot_error(N_("Two single-column characters required"));
else { else {
whitespace = copy_of(argument); whitespace = free_and_assign(whitespace, copy_of(argument));
whitelen[0] = char_length(whitespace); whitelen[0] = char_length(whitespace);
whitelen[1] = char_length(whitespace + whitelen[0]); whitelen[1] = char_length(whitespace + whitelen[0]);
} }
@ -1599,26 +1599,26 @@ void parse_rcfile(FILE *rcstream, bool just_syntax, bool intros_only)
if (has_blank_char(argument)) if (has_blank_char(argument))
jot_error(N_("Non-blank characters required")); jot_error(N_("Non-blank characters required"));
else else
punct = copy_of(argument); punct = free_and_assign(punct, copy_of(argument));
} else if (strcmp(option, "brackets") == 0) { } else if (strcmp(option, "brackets") == 0) {
if (has_blank_char(argument)) if (has_blank_char(argument))
jot_error(N_("Non-blank characters required")); jot_error(N_("Non-blank characters required"));
else else
brackets = copy_of(argument); brackets = free_and_assign(brackets, copy_of(argument));
} else if (strcmp(option, "quotestr") == 0) } else if (strcmp(option, "quotestr") == 0)
quotestr = copy_of(argument); quotestr = free_and_assign(quotestr, copy_of(argument));
else else
#endif #endif
#ifdef ENABLE_SPELLER #ifdef ENABLE_SPELLER
if (strcmp(option, "speller") == 0) if (strcmp(option, "speller") == 0)
alt_speller = copy_of(argument); alt_speller = free_and_assign(alt_speller, copy_of(argument));
else else
#endif #endif
#ifndef NANO_TINY #ifndef NANO_TINY
if (strcmp(option, "backupdir") == 0) if (strcmp(option, "backupdir") == 0)
backup_dir = copy_of(argument); backup_dir = free_and_assign(backup_dir, copy_of(argument));
else if (strcmp(option, "wordchars") == 0) else if (strcmp(option, "wordchars") == 0)
word_chars = copy_of(argument); word_chars = free_and_assign(word_chars, copy_of(argument));
else if (strcmp(option, "guidestripe") == 0) { else if (strcmp(option, "guidestripe") == 0) {
if (!parse_num(argument, &stripe_column) || stripe_column <= 0) { if (!parse_num(argument, &stripe_column) || stripe_column <= 0) {
jot_error(N_("Guide column \"%s\" is invalid"), argument); jot_error(N_("Guide column \"%s\" is invalid"), argument);