summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-03-27 18:25:52 -0400
committerNick Mathewson <nickm@torproject.org>2018-03-27 18:25:52 -0400
commitf2027d5bf8bc70738b14d50e7a694dfd1a47d69a (patch)
treee436cd6a9ce8ecfd6c05c8e242d77e57a50b6026
parentd5580d9a2778ac399aa6db44ad602cf02e7c1dbe (diff)
parentddee28a3c9b9dd256cd6560a4766f17a6c6fc13d (diff)
downloadtor-f2027d5bf8bc70738b14d50e7a694dfd1a47d69a.tar.gz
tor-f2027d5bf8bc70738b14d50e7a694dfd1a47d69a.zip
Merge branch 'maint-0.3.3' into release-0.3.3
-rw-r--r--changes/bug256293
-rw-r--r--src/or/nodelist.c28
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 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;