1
0
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:
Fujii Masao
2026-08-19 12:38:16 +09:00
parent 1c62efd142
commit 4d2c7beb69

View File

@@ -2390,10 +2390,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
@@ -2705,6 +2707,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;
}
@@ -2719,16 +2722,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;
}
}