diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2022-10-01 12:48:24 +0200 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2022-10-01 12:48:24 +0200 |
commit | a9d58bfe8a3ae2254e1553ab76974feeaafa0133 (patch) | |
tree | 3e4d3673aebad22fcd75ba11f5d9b4a6e135e5fd /src/backend/commands/variable.c | |
parent | 83e42a0035718914efad2fe04080fd6c579e9ef2 (diff) | |
download | postgresql-a9d58bfe8a3ae2254e1553ab76974feeaafa0133.tar.gz postgresql-a9d58bfe8a3ae2254e1553ab76974feeaafa0133.zip |
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 <sawada.mshk@gmail.com>
Reviewed-by: Jacob Champion <jchampion@timescale.com>
Discussion: https://www.postgresql.org/message-id/CAD21AoBmFNy9MPfA0UUbMubQqH3AaK5U3mrv6pSeWrwCk3LJ8g@mail.gmail.com
Diffstat (limited to 'src/backend/commands/variable.c')
-rw-r--r-- | src/backend/commands/variable.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index c795cb7a29c..e555fb31501 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; } |