diff options
author | Rich Salz <rsalz@openssl.org> | 2015-04-25 22:55:36 -0400 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2015-04-25 22:55:36 -0400 |
commit | a194ee7b9aab3c8fae2d5b840ce1ae81de940b48 (patch) | |
tree | 4fca6877e2a23c107c8168e851cc4af5f7627d71 /apps | |
parent | 46aa6078675132bce25c1d06878ae0fcc5f7cd55 (diff) |
Free malloc data on encoding errors.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/s_server.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/apps/s_server.c b/apps/s_server.c index 88309a6b9c..da725e7a4d 100644 --- a/apps/s_server.c +++ b/apps/s_server.c @@ -3169,6 +3169,7 @@ static int add_session(SSL *ssl, SSL_SESSION *session) sess->derlen = i2d_SSL_SESSION(session, NULL); if (sess->derlen < 0) { BIO_printf(bio_err, "Error encoding session\n"); + OPENSSL_free(sess); return 0; } @@ -3176,10 +3177,8 @@ static int add_session(SSL *ssl, SSL_SESSION *session) sess->der = OPENSSL_malloc(sess->derlen); if (!sess->id || !sess->der) { BIO_printf(bio_err, "Out of memory adding to external cache\n"); - if (sess->id) - OPENSSL_free(sess->id); - if (sess->der) - OPENSSL_free(sess->der); + OPENSSL_free(sess->id); + OPENSSL_free(sess->der); OPENSSL_free(sess); return 0; } @@ -3187,7 +3186,10 @@ static int add_session(SSL *ssl, SSL_SESSION *session) /* Assume it still works. */ if (i2d_SSL_SESSION(session, &p) != sess->derlen) { - BIO_printf(bio_err, "Error encoding session\n"); + BIO_printf(bio_err, "Re-encoding session strangeness\n"); + OPENSSL_free(sess->id); + OPENSSL_free(sess->der); + OPENSSL_free(sess); return 0; } |