]> git.ipfire.org Git - thirdparty/rspamd.git/commit
[Fix] Fix memory leak in upstream address parsing
authorVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 28 Oct 2025 14:37:36 +0000 (14:37 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 28 Oct 2025 14:37:36 +0000 (14:37 +0000)
commit20bdd0ce2137458d23a84fcfbe4de16a4e6ed152
treee5c8f8209d27e74442be0aadedecb88de175da85
parenta874072aa9a50739f49b49c343b49e18f8d74a8e
[Fix] Fix memory leak in upstream address parsing

When parsing upstream addresses in rspamd_upstreams_add_upstream(),
the GPtrArray 'addrs' was not properly freed in several cases:

1. For service= variant: destructor was not added to mempool
2. After copying addresses to upstream: array was not freed when
   ups->ctx is NULL
3. On parse failure: addrs was not freed

This commit adds proper cleanup:
- Add mempool destructor for service= variant when ctx exists
- Free addrs after copying addresses if no ctx (not managed by mempool)
- Free addrs on parse failure if not managed by mempool
- Set addrs = NULL after freeing to avoid dangling pointer

The fix is careful about mempool-managed vs manual cleanup to avoid
double-free issues, especially important since upstreams can be called
from destructor functions.
src/libutil/upstream.c