Commit a194ee7b authored by Rich Salz's avatar Rich Salz
Browse files

Free malloc data on encoding errors.

parent 46aa6078
Loading
Loading
Loading
Loading
+7 −5
Original line number Original line Diff line number Diff line
@@ -3169,6 +3169,7 @@ static int add_session(SSL *ssl, SSL_SESSION *session)
    sess->derlen = i2d_SSL_SESSION(session, NULL);
    sess->derlen = i2d_SSL_SESSION(session, NULL);
    if (sess->derlen < 0) {
    if (sess->derlen < 0) {
        BIO_printf(bio_err, "Error encoding session\n");
        BIO_printf(bio_err, "Error encoding session\n");
        OPENSSL_free(sess);
        return 0;
        return 0;
    }
    }


@@ -3176,9 +3177,7 @@ static int add_session(SSL *ssl, SSL_SESSION *session)
    sess->der = OPENSSL_malloc(sess->derlen);
    sess->der = OPENSSL_malloc(sess->derlen);
    if (!sess->id || !sess->der) {
    if (!sess->id || !sess->der) {
        BIO_printf(bio_err, "Out of memory adding to external cache\n");
        BIO_printf(bio_err, "Out of memory adding to external cache\n");
        if (sess->id)
        OPENSSL_free(sess->id);
        OPENSSL_free(sess->id);
        if (sess->der)
        OPENSSL_free(sess->der);
        OPENSSL_free(sess->der);
        OPENSSL_free(sess);
        OPENSSL_free(sess);
        return 0;
        return 0;
@@ -3187,7 +3186,10 @@ static int add_session(SSL *ssl, SSL_SESSION *session)


    /* Assume it still works. */
    /* Assume it still works. */
    if (i2d_SSL_SESSION(session, &p) != sess->derlen) {
    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;
        return 0;
    }
    }