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?ds=inline 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); } }