diff options
author | Jeff King <peff@peff.net> | 2022-09-08 07:58:11 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-09-08 21:07:58 +0300 |
commit | dd49699d12a81aa344bb44c882eeddbe799c666f (patch) | |
tree | 3e9269d899e5d8533a293c16305683bc91b2e2af /transport.c | |
parent | 3f0e86a158e85de20537e8b2c8531d09802433ba (diff) |
transport: free filter options in disconnect_git()
If a user of the transport API calls transport_set_option() with
TRANS_OPT_LIST_OBJECTS_FILTER, it doesn't pass a struct, but rather a
string with the filter-spec, which the transport code then stores in its
own list_objects_filter_options struct.
When the caller is done and we call transport_disconnect(), the contents
of that filter struct are then leaked. We should release it before
freeing the transport struct.
Another way to solve this would be for transport_set_option() to pass a
pointer to the struct. But that's awkward, because there's a generic
transport-option interface that always takes a string. Plus it opens up
questions of memory lifetimes; by storing its own filter-options struct,
the transport code remains self-contained.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'transport.c')
-rw-r--r-- | transport.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/transport.c b/transport.c index 24540f642a..6ec6130852 100644 --- a/transport.c +++ b/transport.c @@ -895,6 +895,7 @@ static int disconnect_git(struct transport *transport) finish_connect(data->conn); } + list_objects_filter_release(&data->options.filter_options); free(data); return 0; } |