From: FdaSilvaYY Date: Fri, 18 Mar 2016 23:40:11 +0000 (+0100) Subject: Fix a big leak when using stack-allocated BIO items. X-Git-Tag: OpenSSL_1_1_0-pre5~216 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=1a50b8139a6221d65bc526ab415c77b0561ff708;p=oweals%2Fopenssl.git Fix a big leak when using stack-allocated BIO items. Reviewed-by: Richard Levitte Reviewed-by: Matt Caswell --- diff --git a/crypto/err/err_prn.c b/crypto/err/err_prn.c index ac6b81f80b..0f7d40c398 100644 --- a/crypto/err/err_prn.c +++ b/crypto/err/err_prn.c @@ -92,23 +92,6 @@ void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), } } -#ifndef OPENSSL_NO_STDIO -static int print_fp(const char *str, size_t len, void *fp) -{ - BIO bio; - - BIO_set(&bio, BIO_s_file()); - BIO_set_fp(&bio, fp, BIO_NOCLOSE); - - return BIO_printf(&bio, "%s", str); -} - -void ERR_print_errors_fp(FILE *fp) -{ - ERR_print_errors_cb(print_fp, fp); -} -#endif - static int print_bio(const char *str, size_t len, void *bp) { return BIO_write((BIO *)bp, str, len); @@ -118,3 +101,15 @@ void ERR_print_errors(BIO *bp) { ERR_print_errors_cb(print_bio, bp); } + +#ifndef OPENSSL_NO_STDIO +void ERR_print_errors_fp(FILE *fp) +{ + BIO *bio = BIO_new_fp(fp, BIO_NOCLOSE); + if (bio == NULL) + return; + + ERR_print_errors_cb(print_bio, bio); + BIO_free(bio); +} +#endif