Discard all cells on a marked connection

Fix for bug 4299
This commit is contained in:
Nick Mathewson 2011-10-28 17:04:15 -04:00
parent f6b1dc2805
commit cf8bffa359
2 changed files with 11 additions and 0 deletions

5
changes/bug4299 Normal file
View File

@ -0,0 +1,5 @@
o Major bugfix:
- Do not process cells on a marked-for-close connection. We previously
avoided this by not calling read handlers on marked connections, but
that's not adequate for the case when cells are very small. Fixes
bug 4299; bugfix on 0.2.0.20-rc which first made small cells possible.

View File

@ -132,6 +132,9 @@ command_process_cell(cell_t *cell, or_connection_t *conn)
#define PROCESS_CELL(tp, cl, cn) command_process_ ## tp ## _cell(cl, cn)
#endif
if (conn->_base.marked_for_close)
return;
/* Reject all but VERSIONS and NETINFO when handshaking. */
if (handshaking && cell->command != CELL_VERSIONS &&
cell->command != CELL_NETINFO)
@ -205,6 +208,9 @@ command_process_var_cell(var_cell_t *cell, or_connection_t *conn)
}
#endif
if (conn->_base.marked_for_close)
return;
/* reject all when not handshaking. */
if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING)
return;