Skip to content

Commit

Permalink
wolfssl: clean up wolfcrypt error queue
Browse files Browse the repository at this point in the history
If wolfSSL is built in certain ways (OPENSSL_EXTRA or Debug), the error
queue gets added on to for each session and never freed. Fix it by
calling ERR_clear_error() like in vtls/openssl when needed. This func
is a no-op in wolfcrypt if the error queue is not enabled.
  • Loading branch information
Ehren Bendler committed Aug 19, 2021
1 parent 5b1c2dd commit 345d8ce
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions lib/vtls/wolfssl.c
Expand Up @@ -525,6 +525,8 @@ wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
const char * const dispname = SSL_HOST_DISPNAME();
const char * const pinnedpubkey = SSL_PINNED_PUB_KEY();

ERR_clear_error();

conn->recv[sockindex] = wolfssl_recv;
conn->send[sockindex] = wolfssl_send;

Expand Down Expand Up @@ -774,6 +776,9 @@ static ssize_t wolfssl_send(struct Curl_easy *data,
struct ssl_connect_data *connssl = &conn->ssl[sockindex];
struct ssl_backend_data *backend = connssl->backend;
char error_buffer[WOLFSSL_MAX_ERROR_SZ];

ERR_clear_error();

int memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len;
int rc = SSL_write(backend->handle, mem, memlen);

Expand Down Expand Up @@ -830,6 +835,9 @@ static ssize_t wolfssl_recv(struct Curl_easy *data,
struct ssl_connect_data *connssl = &conn->ssl[num];
struct ssl_backend_data *backend = connssl->backend;
char error_buffer[WOLFSSL_MAX_ERROR_SZ];

ERR_clear_error();

int buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
int nread = SSL_read(backend->handle, buf, buffsize);

Expand Down Expand Up @@ -916,6 +924,7 @@ static int wolfssl_shutdown(struct Curl_easy *data, struct connectdata *conn,
(void) data;

if(backend->handle) {
ERR_clear_error();
SSL_free(backend->handle);
backend->handle = NULL;
}
Expand Down

0 comments on commit 345d8ce

Please sign in to comment.