From fd8947ddc107108efd9b2aed3d840e9bc81e55fd Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 22 Oct 2024 08:55:59 +0200 Subject: [PATCH] [winpr,kerberos] fix a leak in failure handling --- winpr/libwinpr/sspi/Kerberos/kerberos.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/winpr/libwinpr/sspi/Kerberos/kerberos.c b/winpr/libwinpr/sspi/Kerberos/kerberos.c index bf7d22e54..1c6ea9485 100644 --- a/winpr/libwinpr/sspi/Kerberos/kerberos.c +++ b/winpr/libwinpr/sspi/Kerberos/kerberos.c @@ -693,20 +693,26 @@ static BOOL kerberos_rd_tgt_req_tag2(WinPrAsn1Decoder* dec, char* buf, size_t le BOOL first = TRUE; while (WinPrAsn1DecPeekTag(dec, &tag)) { + BOOL success = FALSE; char* lstr = NULL; if (!WinPrAsn1DecReadGeneralString(dec, &lstr)) - goto end; + goto fail; if (!first) { if (!append(buf, len, "/")) - goto end; + goto fail; } first = FALSE; if (!append(buf, len, lstr)) - goto end; + goto fail; + + success = TRUE; + fail: free(lstr); + if (!success) + goto end; } rc = TRUE; @@ -779,7 +785,6 @@ static BOOL kerberos_rd_tgt_req(WinPrAsn1Decoder* dec, char** target) rc = FALSE; } -end: if (rc) *target = buf; else