Don't leak memory during failure exit from SelectConfigFiles().

Make sure the memory allocated by make_absolute_path() is freed
when SelectConfigFiles() fails.  Since all the callers will exit
immediately in that case, there's no practical gain here, but
silencing Valgrind leak complaints seems useful.  In any case,
it was inconsistent that only one of the failure exits did this.

Author: Aleksander Alekseev <aleksander@tigerdata.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CAJ7c6TMByXE8dc7zDvDWTQjk6o-XXAdRg_RAg5CBaUOgFPV3LQ%40mail.gmail.com
pull/239/head
Tom Lane 4 weeks ago
parent 4ec6e22b43
commit ed07361721
  1. 18
      src/backend/utils/misc/guc.c

@ -1803,7 +1803,7 @@ SelectConfigFiles(const char *userDoption, const char *progname)
configdir); configdir);
if (errno == ENOENT) if (errno == ENOENT)
write_stderr("Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n"); write_stderr("Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n");
return false; goto fail;
} }
/* /*
@ -1830,7 +1830,7 @@ SelectConfigFiles(const char *userDoption, const char *progname)
"You must specify the --config-file or -D invocation " "You must specify the --config-file or -D invocation "
"option or set the PGDATA environment variable.\n", "option or set the PGDATA environment variable.\n",
progname); progname);
return false; goto fail;
} }
/* /*
@ -1851,8 +1851,7 @@ SelectConfigFiles(const char *userDoption, const char *progname)
{ {
write_stderr("%s: could not access the server configuration file \"%s\": %m\n", write_stderr("%s: could not access the server configuration file \"%s\": %m\n",
progname, ConfigFileName); progname, ConfigFileName);
free(configdir); goto fail;
return false;
} }
/* /*
@ -1882,7 +1881,7 @@ SelectConfigFiles(const char *userDoption, const char *progname)
"or by the -D invocation option, or by the " "or by the -D invocation option, or by the "
"PGDATA environment variable.\n", "PGDATA environment variable.\n",
progname, ConfigFileName); progname, ConfigFileName);
return false; goto fail;
} }
/* /*
@ -1934,7 +1933,7 @@ SelectConfigFiles(const char *userDoption, const char *progname)
"or by the -D invocation option, or by the " "or by the -D invocation option, or by the "
"PGDATA environment variable.\n", "PGDATA environment variable.\n",
progname, ConfigFileName); progname, ConfigFileName);
return false; goto fail;
} }
SetConfigOption("hba_file", fname, PGC_POSTMASTER, PGC_S_OVERRIDE); SetConfigOption("hba_file", fname, PGC_POSTMASTER, PGC_S_OVERRIDE);
@ -1965,7 +1964,7 @@ SelectConfigFiles(const char *userDoption, const char *progname)
"or by the -D invocation option, or by the " "or by the -D invocation option, or by the "
"PGDATA environment variable.\n", "PGDATA environment variable.\n",
progname, ConfigFileName); progname, ConfigFileName);
return false; goto fail;
} }
SetConfigOption("ident_file", fname, PGC_POSTMASTER, PGC_S_OVERRIDE); SetConfigOption("ident_file", fname, PGC_POSTMASTER, PGC_S_OVERRIDE);
@ -1977,6 +1976,11 @@ SelectConfigFiles(const char *userDoption, const char *progname)
free(configdir); free(configdir);
return true; return true;
fail:
free(configdir);
return false;
} }
/* /*

Loading…
Cancel
Save