|
@@ -1513,7 +1513,8 @@ router_parse_entry_from_string(const char *s, const char *end,
|
|
char d[DIGEST_LEN];
|
|
char d[DIGEST_LEN];
|
|
tor_assert(tok->n_args == 1);
|
|
tor_assert(tok->n_args == 1);
|
|
tor_strstrip(tok->args[0], " ");
|
|
tor_strstrip(tok->args[0], " ");
|
|
- if (base16_decode(d, DIGEST_LEN, tok->args[0], strlen(tok->args[0]))) {
|
|
+ if (base16_decode(d, DIGEST_LEN,
|
|
|
|
+ tok->args[0], strlen(tok->args[0])) != DIGEST_LEN) {
|
|
log_warn(LD_DIR, "Couldn't decode router fingerprint %s",
|
|
log_warn(LD_DIR, "Couldn't decode router fingerprint %s",
|
|
escaped(tok->args[0]));
|
|
escaped(tok->args[0]));
|
|
goto err;
|
|
goto err;
|
|
@@ -1594,8 +1595,10 @@ router_parse_entry_from_string(const char *s, const char *end,
|
|
if ((tok = find_opt_by_keyword(tokens, K_EXTRA_INFO_DIGEST))) {
|
|
if ((tok = find_opt_by_keyword(tokens, K_EXTRA_INFO_DIGEST))) {
|
|
tor_assert(tok->n_args >= 1);
|
|
tor_assert(tok->n_args >= 1);
|
|
if (strlen(tok->args[0]) == HEX_DIGEST_LEN) {
|
|
if (strlen(tok->args[0]) == HEX_DIGEST_LEN) {
|
|
- base16_decode(router->cache_info.extra_info_digest,
|
|
+ if (base16_decode(router->cache_info.extra_info_digest, DIGEST_LEN,
|
|
- DIGEST_LEN, tok->args[0], HEX_DIGEST_LEN);
|
|
+ tok->args[0], HEX_DIGEST_LEN) != DIGEST_LEN) {
|
|
|
|
+ log_warn(LD_DIR,"Invalid extra info digest");
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
log_warn(LD_DIR, "Invalid extra info digest %s", escaped(tok->args[0]));
|
|
log_warn(LD_DIR, "Invalid extra info digest %s", escaped(tok->args[0]));
|
|
}
|
|
}
|
|
@@ -1738,7 +1741,7 @@ extrainfo_parse_entry_from_string(const char *s, const char *end,
|
|
strlcpy(extrainfo->nickname, tok->args[0], sizeof(extrainfo->nickname));
|
|
strlcpy(extrainfo->nickname, tok->args[0], sizeof(extrainfo->nickname));
|
|
if (strlen(tok->args[1]) != HEX_DIGEST_LEN ||
|
|
if (strlen(tok->args[1]) != HEX_DIGEST_LEN ||
|
|
base16_decode(extrainfo->cache_info.identity_digest, DIGEST_LEN,
|
|
base16_decode(extrainfo->cache_info.identity_digest, DIGEST_LEN,
|
|
- tok->args[1], HEX_DIGEST_LEN)) {
|
|
+ tok->args[1], HEX_DIGEST_LEN) != DIGEST_LEN) {
|
|
log_warn(LD_DIR,"Invalid fingerprint %s on \"extra-info\"",
|
|
log_warn(LD_DIR,"Invalid fingerprint %s on \"extra-info\"",
|
|
escaped(tok->args[1]));
|
|
escaped(tok->args[1]));
|
|
goto err;
|
|
goto err;
|
|
@@ -1960,7 +1963,7 @@ authority_cert_parse_from_string(const char *s, const char **end_of_string)
|
|
tok = find_by_keyword(tokens, K_FINGERPRINT);
|
|
tok = find_by_keyword(tokens, K_FINGERPRINT);
|
|
tor_assert(tok->n_args);
|
|
tor_assert(tok->n_args);
|
|
if (base16_decode(fp_declared, DIGEST_LEN, tok->args[0],
|
|
if (base16_decode(fp_declared, DIGEST_LEN, tok->args[0],
|
|
- strlen(tok->args[0]))) {
|
|
+ strlen(tok->args[0])) != DIGEST_LEN) {
|
|
log_warn(LD_DIR, "Couldn't decode key certificate fingerprint %s",
|
|
log_warn(LD_DIR, "Couldn't decode key certificate fingerprint %s",
|
|
escaped(tok->args[0]));
|
|
escaped(tok->args[0]));
|
|
goto err;
|
|
goto err;
|
|
@@ -3097,7 +3100,8 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
|
|
voter->nickname = tor_strdup(tok->args[0]);
|
|
voter->nickname = tor_strdup(tok->args[0]);
|
|
if (strlen(tok->args[1]) != HEX_DIGEST_LEN ||
|
|
if (strlen(tok->args[1]) != HEX_DIGEST_LEN ||
|
|
base16_decode(voter->identity_digest, sizeof(voter->identity_digest),
|
|
base16_decode(voter->identity_digest, sizeof(voter->identity_digest),
|
|
- tok->args[1], HEX_DIGEST_LEN) < 0) {
|
|
+ tok->args[1], HEX_DIGEST_LEN)
|
|
|
|
+ != sizeof(voter->identity_digest)) {
|
|
log_warn(LD_DIR, "Error decoding identity digest %s in "
|
|
log_warn(LD_DIR, "Error decoding identity digest %s in "
|
|
"network-status document.", escaped(tok->args[1]));
|
|
"network-status document.", escaped(tok->args[1]));
|
|
goto err;
|
|
goto err;
|
|
@@ -3146,7 +3150,8 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
|
|
}
|
|
}
|
|
if (strlen(tok->args[0]) != HEX_DIGEST_LEN ||
|
|
if (strlen(tok->args[0]) != HEX_DIGEST_LEN ||
|
|
base16_decode(voter->vote_digest, sizeof(voter->vote_digest),
|
|
base16_decode(voter->vote_digest, sizeof(voter->vote_digest),
|
|
- tok->args[0], HEX_DIGEST_LEN) < 0) {
|
|
+ tok->args[0], HEX_DIGEST_LEN)
|
|
|
|
+ != sizeof(voter->vote_digest)) {
|
|
log_warn(LD_DIR, "Error decoding vote digest %s in "
|
|
log_warn(LD_DIR, "Error decoding vote digest %s in "
|
|
"network-status consensus.", escaped(tok->args[0]));
|
|
"network-status consensus.", escaped(tok->args[0]));
|
|
goto err;
|
|
goto err;
|
|
@@ -3171,7 +3176,7 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
|
|
if (strlen(tok->args[0]) == HEX_DIGEST_LEN) {
|
|
if (strlen(tok->args[0]) == HEX_DIGEST_LEN) {
|
|
networkstatus_voter_info_t *voter = smartlist_get(ns->voters, 0);
|
|
networkstatus_voter_info_t *voter = smartlist_get(ns->voters, 0);
|
|
if (base16_decode(voter->legacy_id_digest, DIGEST_LEN,
|
|
if (base16_decode(voter->legacy_id_digest, DIGEST_LEN,
|
|
- tok->args[0], HEX_DIGEST_LEN)<0)
|
|
+ tok->args[0], HEX_DIGEST_LEN) != DIGEST_LEN)
|
|
bad = 1;
|
|
bad = 1;
|
|
else
|
|
else
|
|
bad = 0;
|
|
bad = 0;
|
|
@@ -3330,7 +3335,8 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
|
|
|
|
|
|
if (strlen(id_hexdigest) != HEX_DIGEST_LEN ||
|
|
if (strlen(id_hexdigest) != HEX_DIGEST_LEN ||
|
|
base16_decode(declared_identity, sizeof(declared_identity),
|
|
base16_decode(declared_identity, sizeof(declared_identity),
|
|
- id_hexdigest, HEX_DIGEST_LEN) < 0) {
|
|
+ id_hexdigest, HEX_DIGEST_LEN)
|
|
|
|
+ != sizeof(declared_identity)) {
|
|
log_warn(LD_DIR, "Error decoding declared identity %s in "
|
|
log_warn(LD_DIR, "Error decoding declared identity %s in "
|
|
"network-status document.", escaped(id_hexdigest));
|
|
"network-status document.", escaped(id_hexdigest));
|
|
goto err;
|
|
goto err;
|
|
@@ -3345,7 +3351,8 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
|
|
sig->alg = alg;
|
|
sig->alg = alg;
|
|
if (strlen(sk_hexdigest) != HEX_DIGEST_LEN ||
|
|
if (strlen(sk_hexdigest) != HEX_DIGEST_LEN ||
|
|
base16_decode(sig->signing_key_digest, sizeof(sig->signing_key_digest),
|
|
base16_decode(sig->signing_key_digest, sizeof(sig->signing_key_digest),
|
|
- sk_hexdigest, HEX_DIGEST_LEN) < 0) {
|
|
+ sk_hexdigest, HEX_DIGEST_LEN)
|
|
|
|
+ != sizeof(sig->signing_key_digest)) {
|
|
log_warn(LD_DIR, "Error decoding declared signing key digest %s in "
|
|
log_warn(LD_DIR, "Error decoding declared signing key digest %s in "
|
|
"network-status document.", escaped(sk_hexdigest));
|
|
"network-status document.", escaped(sk_hexdigest));
|
|
tor_free(sig);
|
|
tor_free(sig);
|
|
@@ -3547,7 +3554,7 @@ networkstatus_parse_detached_signatures(const char *s, const char *eos)
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
if (base16_decode(digests->d[alg], digest_length,
|
|
if (base16_decode(digests->d[alg], digest_length,
|
|
- hexdigest, strlen(hexdigest)) < 0) {
|
|
+ hexdigest, strlen(hexdigest)) != (int) digest_length) {
|
|
log_warn(LD_DIR, "Bad encoding on consensus-digest in detached "
|
|
log_warn(LD_DIR, "Bad encoding on consensus-digest in detached "
|
|
"networkstatus signatures");
|
|
"networkstatus signatures");
|
|
goto err;
|
|
goto err;
|
|
@@ -3620,14 +3627,14 @@ networkstatus_parse_detached_signatures(const char *s, const char *eos)
|
|
|
|
|
|
if (strlen(id_hexdigest) != HEX_DIGEST_LEN ||
|
|
if (strlen(id_hexdigest) != HEX_DIGEST_LEN ||
|
|
base16_decode(id_digest, sizeof(id_digest),
|
|
base16_decode(id_digest, sizeof(id_digest),
|
|
- id_hexdigest, HEX_DIGEST_LEN) < 0) {
|
|
+ id_hexdigest, HEX_DIGEST_LEN) != sizeof(id_digest)) {
|
|
log_warn(LD_DIR, "Error decoding declared identity %s in "
|
|
log_warn(LD_DIR, "Error decoding declared identity %s in "
|
|
"network-status vote.", escaped(id_hexdigest));
|
|
"network-status vote.", escaped(id_hexdigest));
|
|
goto err;
|
|
goto err;
|
|
}
|
|
}
|
|
if (strlen(sk_hexdigest) != HEX_DIGEST_LEN ||
|
|
if (strlen(sk_hexdigest) != HEX_DIGEST_LEN ||
|
|
base16_decode(sk_digest, sizeof(sk_digest),
|
|
base16_decode(sk_digest, sizeof(sk_digest),
|
|
- sk_hexdigest, HEX_DIGEST_LEN) < 0) {
|
|
+ sk_hexdigest, HEX_DIGEST_LEN) != sizeof(sk_digest)) {
|
|
log_warn(LD_DIR, "Error decoding declared signing key digest %s in "
|
|
log_warn(LD_DIR, "Error decoding declared signing key digest %s in "
|
|
"network-status vote.", escaped(sk_hexdigest));
|
|
"network-status vote.", escaped(sk_hexdigest));
|
|
goto err;
|
|
goto err;
|
|
@@ -4829,7 +4836,7 @@ tor_version_parse(const char *s, tor_version_t *out)
|
|
memwipe(digest, 0, sizeof(digest));
|
|
memwipe(digest, 0, sizeof(digest));
|
|
if ( hexlen == 0 || (hexlen % 2) == 1)
|
|
if ( hexlen == 0 || (hexlen % 2) == 1)
|
|
return -1;
|
|
return -1;
|
|
- if (base16_decode(digest, hexlen/2, cp, hexlen))
|
|
+ if (base16_decode(digest, hexlen/2, cp, hexlen) != hexlen/2)
|
|
return -1;
|
|
return -1;
|
|
memcpy(out->git_tag, digest, hexlen/2);
|
|
memcpy(out->git_tag, digest, hexlen/2);
|
|
out->git_tag_len = hexlen/2;
|
|
out->git_tag_len = hexlen/2;
|