Bläddra i källkod

check for duplicate circuit ID _after_ updating circ_id_type.

svn:r3058
Nick Mathewson 21 år sedan
förälder
incheckning
e3f6f92cf7
1 ändrade filer med 7 tillägg och 7 borttagningar
  1. 7 7
      src/or/command.c

+ 7 - 7
src/or/command.c

@@ -137,13 +137,6 @@ static void command_process_create_cell(cell_t *cell, connection_t *conn) {
     return;
   }
 
-  circ = circuit_get_by_circ_id_conn(cell->circ_id, conn);
-
-  if (circ) {
-    log_fn(LOG_WARN,"received CREATE cell (circID %d) for known circ. Dropping.", cell->circ_id);
-    return;
-  }
-
   /* If the high bit of the circuit ID is not as expected, then switch
    * which half of the space we'll use for our own CREATE cells.
    *
@@ -160,6 +153,13 @@ static void command_process_create_cell(cell_t *cell, connection_t *conn) {
     conn->circ_id_type = CIRC_ID_TYPE_HIGHER;
   }
 
+  circ = circuit_get_by_circ_id_conn(cell->circ_id, conn);
+
+  if (circ) {
+    log_fn(LOG_WARN,"received CREATE cell (circID %d) for known circ. Dropping.", cell->circ_id);
+    return;
+  }
+
   circ = circuit_new(cell->circ_id, conn);
   circ->state = CIRCUIT_STATE_ONIONSKIN_PENDING;
   circ->purpose = CIRCUIT_PURPOSE_OR;