From ab516f799dd43faccaf01ce5eacd5f7a1b9b109a Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 13 Jun 2016 00:50:25 +0800 Subject: [PATCH] Purge certificates only when expanding plaintext buffer --- ssl/tls1.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/ssl/tls1.c b/ssl/tls1.c index cfb9776d0..1a13fc579 100644 --- a/ssl/tls1.c +++ b/ssl/tls1.c @@ -288,10 +288,6 @@ EXP_FUNC int STDCALL ssl_write(SSL *ssl, const uint8_t *out_data, int out_len) int n = out_len, nw, i, tot = 0; /* maximum size of a TLS packet is around 16kB, so fragment */ - if (ssl->can_free_certificates) { - certificate_free(ssl); - } - do { nw = n; @@ -1226,10 +1222,6 @@ int basic_read(SSL *ssl, uint8_t **in_data) int read_len, is_client = IS_SET_SSL_FLAG(SSL_IS_CLIENT); uint8_t *buf = ssl->bm_data; - if (ssl->can_free_certificates) { - certificate_free(ssl); - } - read_len = SOCKET_READ(ssl->client_fd, &buf[ssl->bm_read_index], ssl->need_bytes-ssl->got_bytes); @@ -1436,6 +1428,9 @@ int increase_bm_data_size(SSL *ssl, size_t size) if (ssl->max_plain_length == RT_MAX_PLAIN_LENGTH) { return SSL_OK; } + if (ssl->can_free_certificates) { + certificate_free(ssl); + } size_t required = (size + 1023) & ~(1023); // round up to 1k required = (required < RT_MAX_PLAIN_LENGTH) ? required : RT_MAX_PLAIN_LENGTH; uint8_t* new_bm_all_data = (uint8_t*) realloc(ssl->bm_all_data, required + RT_EXTRA);