Browse Source

Merge commit 'origin/maint-0.2.1'

Roger Dingledine 16 years ago
parent
commit
cee9a28d1e
2 changed files with 5 additions and 0 deletions
  1. 3 0
      ChangeLog
  2. 2 0
      src/or/circuitlist.c

+ 3 - 0
ChangeLog

@@ -336,6 +336,9 @@ Changes in Version 0.2.1.21 - 20??-??-??
       handshake from working unless we explicitly tell OpenSSL that we are
       handshake from working unless we explicitly tell OpenSSL that we are
       using SSL renegotiation safely.  We are, of course, but OpenSSL
       using SSL renegotiation safely.  We are, of course, but OpenSSL
       0.9.8l won't work unless we say we are.
       0.9.8l won't work unless we say we are.
+    - Avoid crashing if the client is trying to upload many bytes and the
+      circuit gets torn down at the same time, or if the flip side
+      happens on the exit relay. Bugfix on 0.2.0.1-alpha; fixes bug 1150.
 
 
   o Minor bugfixes:
   o Minor bugfixes:
     - Do not refuse to learn about authority certs and v2 networkstatus
     - Do not refuse to learn about authority certs and v2 networkstatus

+ 2 - 0
src/or/circuitlist.c

@@ -1103,6 +1103,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
     edge_connection_t *conn;
     edge_connection_t *conn;
     for (conn=or_circ->n_streams; conn; conn=conn->next_stream)
     for (conn=or_circ->n_streams; conn; conn=conn->next_stream)
       connection_edge_destroy(or_circ->p_circ_id, conn);
       connection_edge_destroy(or_circ->p_circ_id, conn);
+    or_circ->n_streams = NULL;
 
 
     while (or_circ->resolving_streams) {
     while (or_circ->resolving_streams) {
       conn = or_circ->resolving_streams;
       conn = or_circ->resolving_streams;
@@ -1126,6 +1127,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
     edge_connection_t *conn;
     edge_connection_t *conn;
     for (conn=ocirc->p_streams; conn; conn=conn->next_stream)
     for (conn=ocirc->p_streams; conn; conn=conn->next_stream)
       connection_edge_destroy(circ->n_circ_id, conn);
       connection_edge_destroy(circ->n_circ_id, conn);
+    ocirc->p_streams = NULL;
   }
   }
 
 
   circ->marked_for_close = line;
   circ->marked_for_close = line;