From cd858d78a7d04fa64b9af3d602c435154acd284f Mon Sep 17 00:00:00 2001 From: David Goulet Date: Tue, 17 May 2016 15:13:13 -0400 Subject: [PATCH] prop250: Sort commits in lexicographical order in votes Signed-off-by: David Goulet --- src/or/shared_random.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/or/shared_random.c b/src/or/shared_random.c index 15c33af60c..23c2b1417c 100644 --- a/src/or/shared_random.c +++ b/src/or/shared_random.c @@ -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(),