summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorRich Salz <rsalz@openssl.org>2015-04-25 22:55:36 -0400
committerRich Salz <rsalz@openssl.org>2015-04-25 22:55:36 -0400
commita194ee7b9aab3c8fae2d5b840ce1ae81de940b48 (patch)
tree4fca6877e2a23c107c8168e851cc4af5f7627d71 /apps
parent46aa6078675132bce25c1d06878ae0fcc5f7cd55 (diff)
Free malloc data on encoding errors.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'apps')
-rw-r--r--apps/s_server.c12
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;
}