From fb541a1b59afa207984ad6e98cefb6548f79ba10 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 3 Oct 2006 21:45:20 +0000 Subject: [PATCH] Fix yesno_prompt() memory leak in /script tools, reported by Converity. --- src/bin/scripts/common.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/bin/scripts/common.c b/src/bin/scripts/common.c index 93d64d7ff5..d5f0262054 100644 --- a/src/bin/scripts/common.c +++ b/src/bin/scripts/common.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/bin/scripts/common.c,v 1.22 2006/09/22 19:51:14 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/scripts/common.c,v 1.23 2006/10/03 21:45:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -208,20 +208,28 @@ yesno_prompt(const char *question) { char prompt[256]; + /* translator: This is a question followed by the translated options for "yes" and "no". */ + snprintf(prompt, sizeof(prompt), _("%s (%s/%s) "), + _(question), _(PG_YESLETTER), _(PG_NOLETTER)); + for (;;) { char *resp; - /* translator: This is a question followed by the translated options for "yes" and "no". */ - snprintf(prompt, sizeof(prompt), _("%s (%s/%s) "), - _(question), _(PG_YESLETTER), _(PG_NOLETTER)); resp = simple_prompt(prompt, 1, true); if (strcmp(resp, _(PG_YESLETTER)) == 0) + { + free(resp); return true; + } else if (strcmp(resp, _(PG_NOLETTER)) == 0) + { + free(resp); return false; + } + free(resp); printf(_("Please answer \"%s\" or \"%s\".\n"), _(PG_YESLETTER), _(PG_NOLETTER)); }