summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-10-28 18:02:57 -0400
committerNick Mathewson <nickm@torproject.org>2011-10-28 18:02:57 -0400
commit212c3acd42285b77ae8197a185cbb00fea2c8926 (patch)
tree6261c93809ea3c63f8063da7463875f286a41c3b
parenta2517fa77c066e34d58fd50f930529b84e30946e (diff)
parentcf8bffa35901a26ae840dcd715dd2f664259efb3 (diff)
downloadtor-212c3acd42285b77ae8197a185cbb00fea2c8926.tar.gz
tor-212c3acd42285b77ae8197a185cbb00fea2c8926.zip
Merge remote-tracking branch 'origin/maint-0.2.2'
Conflicts: src/or/command.c
-rw-r--r--changes/bug42995
-rw-r--r--src/or/command.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/changes/bug4299 b/changes/bug4299
new file mode 100644
index 0000000000..c43d81460a
--- /dev/null
+++ b/changes/bug4299
@@ -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.
diff --git a/src/or/command.c b/src/or/command.c
index d35e2a9c80..43d304e07b 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -148,6 +148,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. */
/* (VERSIONS should actually be impossible; it's variable-length.) */
if (handshaking && cell->command != CELL_VERSIONS &&
@@ -230,6 +233,9 @@ command_process_var_cell(var_cell_t *cell, or_connection_t *conn)
}
#endif
+ if (conn->_base.marked_for_close)
+ return;
+
switch (conn->_base.state)
{
case OR_CONN_STATE_OR_HANDSHAKING_V2: