From da3193976380b8bd697a472025ff9f384cbca7af Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Thu, 26 May 2022 11:30:09 +0100 Subject: [PATCH] Fix another decoder mem leak on an error path If pushing the decoder onto a stack fails then we should free the ref we just created. Found due to the error report here: https://github.com/openssl/openssl/pull/18355#issuecomment-1138205688 Reviewed-by: Richard Levitte Reviewed-by: Shane Lontis Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/18411) --- crypto/encode_decode/decoder_lib.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crypto/encode_decode/decoder_lib.c b/crypto/encode_decode/decoder_lib.c index 9dcbab10776..8863c316d6e 100644 --- a/crypto/encode_decode/decoder_lib.c +++ b/crypto/encode_decode/decoder_lib.c @@ -362,8 +362,9 @@ static void collect_all_decoders(OSSL_DECODER *decoder, void *arg) { STACK_OF(OSSL_DECODER) *skdecoders = arg; - if (OSSL_DECODER_up_ref(decoder)) - sk_OSSL_DECODER_push(skdecoders, decoder); + if (OSSL_DECODER_up_ref(decoder) + && !sk_OSSL_DECODER_push(skdecoders, decoder)) + OSSL_DECODER_free(decoder); } static void collect_extra_decoder(OSSL_DECODER *decoder, void *arg) -- 2.47.2