summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2022-10-01 10:48:24 +0000
committerPeter Eisentraut2022-10-01 10:48:24 +0000
commita9d58bfe8a3ae2254e1553ab76974feeaafa0133 (patch)
tree3e4d3673aebad22fcd75ba11f5d9b4a6e135e5fd
parent83e42a0035718914efad2fe04080fd6c579e9ef2 (diff)
Fix tiny memory leaks
Both check_application_name() and check_cluster_name() use pg_clean_ascii() but didn't release the memory. Depending on when the GUC is set, this might be cleaned up at some later time or it would leak postmaster memory once. In any case, it seems better not to have to rely on such analysis and make the code locally robust. Also, this makes Valgrind happier. Author: Masahiko Sawada <[email protected]> Reviewed-by: Jacob Champion <[email protected]> Discussion: https://www.postgresql.org/message-id/CAD21AoBmFNy9MPfA0UUbMubQqH3AaK5U3mrv6pSeWrwCk3LJ8g@mail.gmail.com
-rw-r--r--src/backend/commands/variable.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index c795cb7a29..e555fb3150 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -1025,17 +1025,22 @@ bool
check_application_name(char **newval, void **extra, GucSource source)
{
char *clean;
+ char *ret;
/* Only allow clean ASCII chars in the application name */
clean = pg_clean_ascii(*newval, MCXT_ALLOC_NO_OOM);
if (!clean)
return false;
- clean = guc_strdup(WARNING, clean);
- if (!clean)
+ ret = guc_strdup(WARNING, clean);
+ if (!ret)
+ {
+ pfree(clean);
return false;
+ }
- *newval = clean;
+ pfree(clean);
+ *newval = ret;
return true;
}
@@ -1056,17 +1061,22 @@ bool
check_cluster_name(char **newval, void **extra, GucSource source)
{
char *clean;
+ char *ret;
/* Only allow clean ASCII chars in the cluster name */
clean = pg_clean_ascii(*newval, MCXT_ALLOC_NO_OOM);
if (!clean)
return false;
- clean = guc_strdup(WARNING, clean);
- if (!clean)
+ ret = guc_strdup(WARNING, clean);
+ if (!ret)
+ {
+ pfree(clean);
return false;
+ }
- *newval = clean;
+ pfree(clean);
+ *newval = ret;
return true;
}