diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-03-27 18:25:52 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-03-27 18:25:52 -0400 |
commit | fa6eaab83e05a11b60735f7bf4064b05e7085230 (patch) | |
tree | b3ac400212c8d950d6a9f97cfe0fafa3212668fa | |
parent | 979c7e5c83531089aa4bf3998ae3353fbdd2031d (diff) | |
parent | ddee28a3c9b9dd256cd6560a4766f17a6c6fc13d (diff) | |
download | tor-fa6eaab83e05a11b60735f7bf4064b05e7085230.tar.gz tor-fa6eaab83e05a11b60735f7bf4064b05e7085230.zip |
Merge branch 'maint-0.3.3'
-rw-r--r-- | changes/bug25629 | 3 | ||||
-rw-r--r-- | src/or/nodelist.c | 28 |
2 files changed, 17 insertions, 14 deletions
diff --git a/changes/bug25629 b/changes/bug25629 new file mode 100644 index 0000000000..190928a941 --- /dev/null +++ b/changes/bug25629 @@ -0,0 +1,3 @@ + o Minor bugfixes (C correctness): + - Fix a very unlikely null pointer dereference. Fixes bug 25629; + bugfix on 0.2.9.15. Found by Coverity; this is CID 1430932. diff --git a/src/or/nodelist.c b/src/or/nodelist.c index 40b56f3d1d..991781d92b 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; |