diff options
-rw-r--r-- | src/common/tortls.c | 12 | ||||
-rw-r--r-- | src/common/tortls.h | 4 | ||||
-rw-r--r-- | src/or/buffers.c | 4 |
3 files changed, 19 insertions, 1 deletions
diff --git a/src/common/tortls.c b/src/common/tortls.c index f3183190d..738556d24 100644 --- a/src/common/tortls.c +++ b/src/common/tortls.c @@ -618,6 +618,18 @@ unsigned long tor_tls_get_n_bytes_written(tor_tls *tls) return BIO_number_written(SSL_get_wbio(tls->ssl)); } +void _assert_no_tls_errors(const char *fname, int line) +{ + if (ERR_peek_error() == 0) + return; + log_fn(LOG_ERR, "Unhandled OpenSSL errors found at %s:%d: ", + fname, line); + tls_log_errors(LOG_ERR, NULL); + + tor_assert(0); +} + + /* Local Variables: mode:c diff --git a/src/common/tortls.h b/src/common/tortls.h index da22454f2..c0099c944 100644 --- a/src/common/tortls.h +++ b/src/common/tortls.h @@ -33,6 +33,10 @@ int tor_tls_get_pending_bytes(tor_tls *tls); unsigned long tor_tls_get_n_bytes_read(tor_tls *tls); unsigned long tor_tls_get_n_bytes_written(tor_tls *tls); +#define assert_no_tls_errors() _assert_no_tls_errors(__FILE__,__LINE__); + +void _assert_no_tls_errors(const char *fname, int line); + #endif /* diff --git a/src/or/buffers.c b/src/or/buffers.c index 4cf9b3962..8eca58818 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -221,7 +221,7 @@ int read_to_buf_tls(tor_tls *tls, int at_most, buf_t *buf) { tor_tls_get_pending_bytes(tls), at_most); if (buf_ensure_capacity(buf, at_most+buf->datalen)) - return -1; + return TOR_TLS_ERROR; if (at_most > buf->len - buf->datalen) at_most = buf->len - buf->datalen; @@ -231,6 +231,8 @@ int read_to_buf_tls(tor_tls *tls, int at_most, buf_t *buf) { log_fn(LOG_DEBUG,"before: %d on buf, %d pending, at_most %d.",(int)buf_datalen(buf), tor_tls_get_pending_bytes(tls), at_most); + + assert_no_tls_errors(); r = tor_tls_read(tls, buf->mem+buf->datalen, at_most); if (r<0) return r; |