mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
psql: Fix psql slash option leaks
psql_scan_slash_option() returns a malloc'd string, but \getresults, \gset in pipeline mode, \restrict, and \unrestrict did not free it after consuming or copying the value. Free these option strings after use. Backpatch to all supported versions. In v17 and older, only \restrict and \unrestrict are affected, so those branches need only that part of the fix. Author: Fujii Masao <masao.fujii@gmail.com> Reviewed-by: Chao Li <li.evan.chao@gmail.com> Discussion: https://postgr.es/m/CAHGQGwEh3R3=1tx_a5=fTDJ+ycuwxWMEn6bG_Yt4B5P+hE7AVw@mail.gmail.com Backpatch-through: 14
This commit is contained in:
@@ -2297,10 +2297,12 @@ exec_command_restrict(PsqlScanState scan_state, bool active_branch,
|
||||
if (opt == NULL || opt[0] == '\0')
|
||||
{
|
||||
pg_log_error("\\%s: missing required argument", cmd);
|
||||
free(opt);
|
||||
return PSQL_CMD_ERROR;
|
||||
}
|
||||
|
||||
restrict_key = pstrdup(opt);
|
||||
free(opt);
|
||||
restricted = true;
|
||||
}
|
||||
else
|
||||
@@ -2627,6 +2629,7 @@ exec_command_unrestrict(PsqlScanState scan_state, bool active_branch,
|
||||
if (opt == NULL || opt[0] == '\0')
|
||||
{
|
||||
pg_log_error("\\%s: missing required argument", cmd);
|
||||
free(opt);
|
||||
return PSQL_CMD_ERROR;
|
||||
}
|
||||
|
||||
@@ -2641,16 +2644,19 @@ exec_command_unrestrict(PsqlScanState scan_state, bool active_branch,
|
||||
if (!restricted)
|
||||
{
|
||||
pg_log_error("\\%s: not currently in restricted mode", cmd);
|
||||
free(opt);
|
||||
return PSQL_CMD_ERROR;
|
||||
}
|
||||
else if (strcmp(opt, restrict_key) == 0)
|
||||
{
|
||||
pfree(restrict_key);
|
||||
restricted = false;
|
||||
free(opt);
|
||||
}
|
||||
else
|
||||
{
|
||||
pg_log_error("\\%s: wrong key", cmd);
|
||||
free(opt);
|
||||
return PSQL_CMD_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user