diff options
author | Taylor Yu <catalyst@torproject.org> | 2018-03-26 19:29:59 -0500 |
---|---|---|
committer | Taylor Yu <catalyst@torproject.org> | 2018-03-27 16:11:29 -0500 |
commit | 471f28a2a85b8db8315f518aff456440f9791877 (patch) | |
tree | f47c5bd619ee004642e7332f4eec6f4b3979b45b /src/or/nodelist.c | |
parent | 46c2b0ca228d2d95666f28d4e42411dce0a59e15 (diff) | |
download | tor-471f28a2a85b8db8315f518aff456440f9791877.tar.gz tor-471f28a2a85b8db8315f518aff456440f9791877.zip |
Fix CID 1430932
Coverity found a null pointer reference in nodelist_add_microdesc().
This is almost certainly impossible assuming that the routerstatus_t
returned by router_get_consensus_status_by_descriptor_digest() always
corresponds to an entry in the nodelist. Fixes bug 25629.
Diffstat (limited to 'src/or/nodelist.c')
-rw-r--r-- | src/or/nodelist.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/or/nodelist.c b/src/or/nodelist.c index 391b31d683..125dd8b9f1 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -507,22 +507,22 @@ nodelist_add_microdesc(microdesc_t *md) if (rs == NULL) return NULL; node = node_get_mutable_by_id(rs->identity_digest); - if (node) { - node_remove_from_ed25519_map(node); - if (node->md) - node->md->held_by_nodes--; + if (node == NULL) + return NULL; - node->md = md; - md->held_by_nodes++; - /* Setting the HSDir index requires the ed25519 identity key which can - * only be found either in the ri or md. This is why this is called here. - * Only nodes supporting HSDir=2 protocol version needs this index. */ - if (rs->pv.supports_v3_hsdir) { - node_set_hsdir_index(node, ns); - } - node_add_to_ed25519_map(node); - } + node_remove_from_ed25519_map(node); + if (node->md) + node->md->held_by_nodes--; + node->md = md; + md->held_by_nodes++; + /* Setting the HSDir index requires the ed25519 identity key which can + * only be found either in the ri or md. This is why this is called here. + * Only nodes supporting HSDir=2 protocol version needs this index. */ + if (rs->pv.supports_v3_hsdir) { + node_set_hsdir_index(node, ns); + } + node_add_to_ed25519_map(node); node_add_to_address_set(node); return node; |