Kaynağa Gözat

Merge remote branch 'origin/maint-0.2.1' into maint-0.2.2

Nick Mathewson 14 yıl önce
ebeveyn
işleme
a4bf5b51e9
2 değiştirilmiş dosya ile 23 ekleme ve 4 silme
  1. 10 0
      changes/annotations_fix
  2. 13 4
      src/or/routerparse.c

+ 10 - 0
changes/annotations_fix

@@ -0,0 +1,10 @@
+  o Major bugfixes
+    - Do even more to reject (and not just ignore) annotations on
+      router descriptors received anywhere but from the cache.
+      Previously we would ignore such annotations at first, but cache
+      them to disk anyway.  Bugfix on 0.2.0.8-alpha. Found by piebeer.
+
+  o Minor bugfixes
+    - Enforce multiplicity rules when parsing annotations.  Bugfix on
+      0.2.0.8-alpha. Found by piebeer.
+

+ 13 - 4
src/or/routerparse.c

@@ -1312,10 +1312,16 @@ router_parse_entry_from_string(const char *s, const char *end,
     s = cp+1;
   }
 
-  if (allow_annotations && start_of_annotations != s) {
-    if (tokenize_string(area,start_of_annotations,s,tokens,
-                        routerdesc_token_table,TS_NOCHECK)) {
-      log_warn(LD_DIR, "Error tokenizing router descriptor (annotations).");
+  if (start_of_annotations != s) { /* We have annotations */
+    if (allow_annotations) {
+      if (tokenize_string(area,start_of_annotations,s,tokens,
+                          routerdesc_token_table,TS_NOCHECK)) {
+        log_warn(LD_DIR, "Error tokenizing router descriptor (annotations).");
+        goto err;
+      }
+    } else {
+      log_warn(LD_DIR, "Found unexpected annotations on router descriptor not "
+               "loaded from disk.  Dropping it.");
       goto err;
     }
   }
@@ -3967,6 +3973,9 @@ tokenize_string(memarea_t *area,
     end = start+strlen(start);
   for (i = 0; i < _NIL; ++i)
     counts[i] = 0;
+
+  SMARTLIST_FOREACH(out, const directory_token_t *, t, ++counts[t->tp]);
+
   while (*s < end && (!tok || tok->tp != _EOF)) {
     tok = get_next_token(area, s, end, table);
     if (tok->tp == _ERR) {