]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
prop250: Sort commits in lexicographical order in votes
authorDavid Goulet <dgoulet@torproject.org>
Tue, 17 May 2016 19:13:13 +0000 (15:13 -0400)
committerDavid Goulet <dgoulet@torproject.org>
Fri, 1 Jul 2016 18:01:41 +0000 (14:01 -0400)
Signed-off-by: David Goulet <dgoulet@torproject.org>
src/or/shared_random.c

index 15c33af60c68120e4109d05939b2ba313df1a4fc..23c2b1417cbfee1d747861c10496bb7e809b9af0 100644 (file)
@@ -1205,11 +1205,21 @@ sr_get_string_for_vote(void)
 
   /* In our vote we include every commitment in our permanent state. */
   state_commits = sr_state_get_commits();
+  smartlist_t *state_commit_vote_lines = smartlist_new();
   DIGESTMAP_FOREACH(state_commits, key, const sr_commit_t *, commit) {
     char *line = get_vote_line_from_commit(commit, sr_state_get_phase());
-    smartlist_add(chunks, line);
+    smartlist_add(state_commit_vote_lines, line);
   } DIGESTMAP_FOREACH_END;
 
+  /* Sort the commit strings by version (string, not numeric), algorithm,
+   * and fingerprint. This makes sure the commit lines in votes are in a
+   * recognisable, stable order. */
+  smartlist_sort_strings(state_commit_vote_lines);
+
+  /* Now add the sorted list of commits to the vote */
+  smartlist_add_all(chunks, state_commit_vote_lines);
+  smartlist_free(state_commit_vote_lines);
+
   /* Add the SRV value(s) if any. */
   {
     char *srv_lines = get_ns_str_from_sr_values(sr_state_get_previous_srv(),