summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-04-26 23:00:07 +0000
committerNick Mathewson <nickm@torproject.org>2004-04-26 23:00:07 +0000
commitad07c62938e6b905db5ca6468bb2c5f211300e5c (patch)
treeba393231ddb00e2e8eb0fbbbf4f2df6a08891447
parente34c201bb3678891c425f8db615759003ff77649 (diff)
downloadtor-ad07c62938e6b905db5ca6468bb2c5f211300e5c.tar.gz
tor-ad07c62938e6b905db5ca6468bb2c5f211300e5c.zip
Add a macro to catch unhandled openssl errors.
svn:r1723
-rw-r--r--src/common/tortls.c12
-rw-r--r--src/common/tortls.h4
-rw-r--r--src/or/buffers.c4
3 files changed, 19 insertions, 1 deletions
diff --git a/src/common/tortls.c b/src/common/tortls.c
index f3183190d7..738556d247 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 da22454f2e..c0099c9444 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 4cf9b39624..8eca58818d 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;