]> granicus.if.org Git - postgresql/commitdiff
Fix yesno_prompt() memory leak in /script tools, reported by Converity.
authorBruce Momjian <bruce@momjian.us>
Tue, 3 Oct 2006 21:45:20 +0000 (21:45 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 3 Oct 2006 21:45:20 +0000 (21:45 +0000)
src/bin/scripts/common.c

index 93d64d7ff5b7516f71fd455f01f5648a11e6625e..d5f026205448dce50d44acd3fee7506d432cf9e9 100644 (file)
@@ -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));
        }