-- v2: kerberos: Fix memory leaks in (wow64_)query_ticket_cache (scan-build).
From: Alex Henrie alexhenrie24@gmail.com
--- dlls/kerberos/unixlib.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/dlls/kerberos/unixlib.c b/dlls/kerberos/unixlib.c index a918959dbe5..45cf494aa70 100644 --- a/dlls/kerberos/unixlib.c +++ b/dlls/kerberos/unixlib.c @@ -339,22 +339,30 @@ done: return status; }
+static void free_tickets_in_list( struct ticket_list *list ) +{ + ULONG i; + + for (i = 0; i < list->count; i++) + { + free( list->tickets[i].RealmName.Buffer ); + free( list->tickets[i].ServerName.Buffer ); + } + + free( list->tickets ); +} + static NTSTATUS query_ticket_cache( void *args ) { struct query_ticket_cache_params *params = args; struct ticket_list list = { 0 }; NTSTATUS status; - ULONG i;
status = kerberos_fill_ticket_list( &list );
if (status == STATUS_SUCCESS) status = copy_tickets_to_client( &list, params->resp, params->out_size );
- for (i = 0; i < list.count; i++) - { - free( list.tickets[i].RealmName.Buffer ); - free( list.tickets[i].ServerName.Buffer ); - } + free_tickets_in_list( &list ); return status; }
@@ -1237,17 +1245,12 @@ static NTSTATUS wow64_query_ticket_cache( void *args ) } const *params32 = args; struct ticket_list list = { 0 }; NTSTATUS status; - ULONG i;
status = kerberos_fill_ticket_list( &list ); if (status == STATUS_SUCCESS) status = copy_tickets_to_client32( &list, ULongToPtr(params32->resp), ULongToPtr(params32->out_size) );
- for (i = 0; i < list.count; i++) - { - free( list.tickets[i].RealmName.Buffer ); - free( list.tickets[i].ServerName.Buffer ); - } + free_tickets_in_list( &list ); return status;
}
On Tue Jun 6 05:42:57 2023 +0000, Nikolay Sivov wrote:
Maybe we should have a helper for that.
I've pushed a new version that uses a helper function to free the tickets. Thanks for the feedback.
This merge request was approved by Nikolay Sivov.