1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-02 11:44:50 +03:00

psql: fix startup crash caused by PSQLRC containing a tilde

'strdup' the PSQLRC environment variable value before calling a routine
that might free() it.

Backpatch to 9.2, where the bug first appeared.
This commit is contained in:
Bruce Momjian 2013-04-04 12:56:21 -04:00
parent c99e0d382f
commit 39d4c764da
3 changed files with 10 additions and 9 deletions

View File

@ -1617,11 +1617,11 @@ session_username(void)
* substitute '~' with HOME or '~username' with username's home dir
*
*/
char *
void
expand_tilde(char **filename)
{
if (!filename || !(*filename))
return NULL;
return;
/*
* WIN32 doesn't use tilde expansion for file names. Also, it uses tilde
@ -1669,5 +1669,5 @@ expand_tilde(char **filename)
}
#endif
return *filename;
return;
}

View File

@ -61,6 +61,6 @@ extern bool is_superuser(void);
extern bool standard_strings(void);
extern const char *session_username(void);
extern char *expand_tilde(char **filename);
extern void expand_tilde(char **filename);
#endif /* COMMON_H */

View File

@ -591,7 +591,7 @@ process_psqlrc(char *argv0)
char rc_file[MAXPGPATH];
char my_exec_path[MAXPGPATH];
char etc_path[MAXPGPATH];
char *envrc;
char *envrc = getenv("PSQLRC");
find_my_exec(argv0, my_exec_path);
get_etc_path(my_exec_path, etc_path);
@ -599,12 +599,13 @@ process_psqlrc(char *argv0)
snprintf(rc_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
process_psqlrc_file(rc_file);
envrc = getenv("PSQLRC");
if (envrc != NULL && strlen(envrc) > 0)
{
expand_tilde(&envrc);
process_psqlrc_file(envrc);
/* might need to free() this */
char *envrc_alloc = pg_strdup(envrc);
expand_tilde(&envrc_alloc);
process_psqlrc_file(envrc_alloc);
}
else if (get_home_path(home))
{