diff options
author | Nick Mathewson <nickm@torproject.org> | 2012-05-24 11:14:28 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2012-05-24 11:14:28 -0400 |
commit | 6b7c3b42ee72cb2e7de443e8942ccc21a6304c59 (patch) | |
tree | 659baabe48a2d6a5af138a21a30592f26304841f | |
parent | 466276faa50c4cb31857dfea2ae9e1612aae3911 (diff) | |
download | tor-6b7c3b42ee72cb2e7de443e8942ccc21a6304c59.tar tor-6b7c3b42ee72cb2e7de443e8942ccc21a6304c59.tar.gz |
Change an assertion into a warning in connection_or_handle_event_cb()
Possibly addresses bug 4873, though IMO that's likely not a real
bug: it seems likely to have been an ssl version mismatch.
-rw-r--r-- | changes/bug4873 | 3 | ||||
-rw-r--r-- | src/or/connection_or.c | 28 |
2 files changed, 19 insertions, 12 deletions
diff --git a/changes/bug4873 b/changes/bug4873 new file mode 100644 index 000000000..6c999ccfc --- /dev/null +++ b/changes/bug4873 @@ -0,0 +1,3 @@ + o Minor bugfixes: + - Turn an assertion (that the number of handshakes received as a + server is not < 1) into a warning. Bug 4873. diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 81df70eb3..f20608941 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -1286,27 +1286,31 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event, return; /* ???? */ } } - } else if (tor_tls_get_num_server_handshakes(conn->tls) == 1) { - /* v2 or v3 handshake, as a server. Only got one handshake, so - * wait for the next one. */ - tor_tls_set_renegotiate_callback(conn->tls, - connection_or_tls_renegotiated_cb, - conn); - conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING; - /* return 0; */ - return; /* ???? */ } else { const int handshakes = tor_tls_get_num_server_handshakes(conn->tls); - tor_assert(handshakes >= 2); - if (handshakes == 2) { + + if (handshakes == 1) { + /* v2 or v3 handshake, as a server. Only got one handshake, so + * wait for the next one. */ + tor_tls_set_renegotiate_callback(conn->tls, + connection_or_tls_renegotiated_cb, + conn); + conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING; + /* return 0; */ + return; /* ???? */ + } else if (handshakes == 2) { /* v2 handshake, as a server. Two handshakes happened already, * so we treat renegotiation as done. */ connection_or_tls_renegotiated_cb(conn->tls, conn); - } else { + } else if (handshakes > 2) { log_warn(LD_OR, "More than two handshakes done on connection. " "Closing."); connection_mark_for_close(TO_CONN(conn)); + } else { + log_warn(LD_BUG, "We were unexpectedly unexpectedly told that " + "a connection got %d handshakes. Closing.", handshakes); + connection_mark_for_close(TO_CONN(conn)); } return; } |