Free malloc data on encoding errors.
authorRich Salz <rsalz@openssl.org>
Sun, 26 Apr 2015 02:55:36 +0000 (22:55 -0400)
committerRich Salz <rsalz@openssl.org>
Sun, 26 Apr 2015 02:55:36 +0000 (22:55 -0400)
Reviewed-by: Richard Levitte <levitte@openssl.org>
apps/s_server.c

index 88309a6b9c78d324594ec56a31d40e2b14deafee..da725e7a4da87509b9edad762d83cb7ab90028b1 100644 (file)
@@ -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;
     }