Parse votes with >31 flags correctly

We were doing (1<<p) to generate a flag at position p, but we should
have been doing (U64_LITERAL(1)<<p).

Fixes bug 6861; bugfix on 0.2.0.3-alpha; reported pseudonymously.
This commit is contained in:
Nick Mathewson 2012-09-17 10:24:52 -04:00
parent b1447a4312
commit 414adb237b
2 changed files with 4 additions and 1 deletions

3
changes/bug6853 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (directory authority):
- Correctly handle votes with more than 31 flags. Fixes bug 6853;
bugfix on 0.2.0.3-alpha.

View File

@ -2067,7 +2067,7 @@ routerstatus_parse_entry_from_string(memarea_t *area,
for (i=0; i < tok->n_args; ++i) {
int p = smartlist_string_pos(vote->known_flags, tok->args[i]);
if (p >= 0) {
vote_rs->flags |= (1<<p);
vote_rs->flags |= (U64_LITERAL(1)<<p);
} else {
log_warn(LD_DIR, "Flags line had a flag %s not listed in known_flags.",
escaped(tok->args[i]));