From: Ralph Corderoy Date: Sun, 10 Sep 2017 14:03:09 +0000 (+0100) Subject: readline(3) wrapper: Move free(3) of line to where it's reachable. X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/544d453bef5ccf734140f36efb1efd08ab8d71cb readline(3) wrapper: Move free(3) of line to where it's reachable. Every line returned by readline() has to be freed. The call to free() was unreachable because all paths heading towards it veered off, resulting in a memory leak. Move the free() to just after where the line has been used for the last time. Fixes 3a85e0bc9. --- diff --git a/sbr/read_switch_multiword_via_readline.c b/sbr/read_switch_multiword_via_readline.c index fe84b4e0..3d6e8818 100644 --- a/sbr/read_switch_multiword_via_readline.c +++ b/sbr/read_switch_multiword_via_readline.c @@ -49,6 +49,8 @@ read_switch_multiword_via_readline(char *prompt, struct swit *ansp) add_history(ans); strncpy(ansbuf, ans, sizeof(ansbuf)); ansbuf[sizeof(ansbuf) - 1] = '\0'; + free(ans); + cpp = brkstring(ansbuf, " ", NULL); switch (smatch(*cpp, ansp)) { case AMBIGSW: @@ -58,10 +60,8 @@ read_switch_multiword_via_readline(char *prompt, struct swit *ansp) printf(" -%s unknown. Hit for help.\n", *cpp); continue; default: - free(ans); return cpp; } - free(ans); } }