I noticed that \bind is leaking memory for each option. =# SELECT $1, $2, $3 \ bind 1 2 3 \g
The leaked memory blocks are comming from psql_scan_slash_option(). The attached small patch resolves that issue. I looked through the function's call sites, but I didn't find the same mistake. regards. -- Kyotaro Horiguchi NTT Open Source Software Center
>From e67f5820455079ad6cdc1039a8d44314a360841f Mon Sep 17 00:00:00 2001 From: Kyotaro Horiguchi <horikyota....@gmail.com> Date: Tue, 21 Feb 2023 11:49:54 +0900 Subject: [PATCH] Fix memory leak of psql's \bind exec_command_bind() is discarding malloc'ed memory blocks returned from psql_scan_slash_option() after strdup'ed them. To address this issue, use the returned memory directly instead of making a copy. --- src/bin/psql/command.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index b5201edf55..955397ee9d 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -480,7 +480,7 @@ exec_command_bind(PsqlScanState scan_state, bool active_branch) nalloc = nalloc ? nalloc * 2 : 1; pset.bind_params = pg_realloc_array(pset.bind_params, char *, nalloc); } - pset.bind_params[nparams - 1] = pg_strdup(opt); + pset.bind_params[nparams - 1] = opt; } pset.bind_nparams = nparams; -- 2.31.1