Fix very minor memory leaks in psql's command.c.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 27 Jul 2017 15:10:38 +0000 (11:10 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 27 Jul 2017 15:10:38 +0000 (11:10 -0400)
\drds leaked its second pattern argument if any, and \connect leaked
any empty-string or "-" arguments.  These are old bugs, but it's hard
to imagine any real use-case where the leaks could amount to anything
meaningful, so not bothering with a back-patch.

Daniel Gustafsson and Tom Lane

Discussion: https://postgr.es/m/3641F19B-336A-431A-86CE-A80562505C5E@yesql.se

src/bin/psql/command.c

index 14c64208ca3fcf22e3218fdefcd5d6c08f7d824f..4e04459d45ea53a5104fe92814e37fe6cf00ffea 100644 (file)
@@ -806,6 +806,9 @@ exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd)
                        pattern2 = psql_scan_slash_option(scan_state,
                                                          OT_NORMAL, NULL, true);
                    success = listDbRoleSettings(pattern, pattern2);
+
+                   if (pattern2)
+                       free(pattern2);
                }
                else
                    status = PSQL_CMD_UNKNOWN;
@@ -2725,6 +2728,8 @@ exec_command_slash_command_help(PsqlScanState scan_state, bool active_branch)
 
 /*
  * Read and interpret an argument to the \connect slash command.
+ *
+ * Returns a malloc'd string, or NULL if no/empty argument.
  */
 static char *
 read_connect_arg(PsqlScanState scan_state)
@@ -2750,7 +2755,10 @@ read_connect_arg(PsqlScanState scan_state)
        return result;
 
    if (*result == '\0' || strcmp(result, "-") == 0)
+   {
+       free(result);
        return NULL;
+   }
 
    return result;
 }