Skip to content

Commit 417d28d

Browse files
committed
fix: really fix overrun added in e49a477
1 parent 7e38ead commit 417d28d

3 files changed

Lines changed: 45 additions & 2 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8a21d15ab133d9cb6dea68a536ed1f3d9e7a5ae81c8ea55e315d3a111c857476 /usr/local/bin/tox-bootstrapd
1+
ea227a21dcaed2f54d61bd9175c6deb02480ebd894ebd589061556a1708c0c9f /usr/local/bin/tox-bootstrapd

toxcore/DHT.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1035,7 +1035,7 @@ void set_announce_node(DHT *dht, const uint8_t *public_key)
10351035
index = LCLIENT_LENGTH - 1;
10361036
}
10371037

1038-
set_announce_node_in_list(dht->close_clientlist + index * LCLIENT_NODES, LCLIENT_LENGTH, public_key);
1038+
set_announce_node_in_list(dht->close_clientlist + index * LCLIENT_NODES, LCLIENT_NODES, public_key);
10391039

10401040
for (int32_t i = 0; i < dht->num_friends; ++i) {
10411041
set_announce_node_in_list(dht->friends_list[i].client_list, MAX_FRIEND_CLIENTS, public_key);

toxcore/DHT_test.cc

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,4 +185,47 @@ TEST(Request, CreateAndParse)
185185
}
186186
}
187187

188+
TEST(AnnounceNodes, SetAndTest)
189+
{
190+
Logger *log = logger_new();
191+
Mono_Time *mono_time = mono_time_new(nullptr, nullptr);
192+
const Random *rng = system_random();
193+
const Network *ns = system_network();
194+
Networking_Core *net = new_networking_no_udp(log, ns);
195+
DHT *dht = new_dht(log, rng, ns, mono_time, net, true, true);
196+
ASSERT_NE(dht, nullptr);
197+
198+
uint8_t pk_data[CRYPTO_PUBLIC_KEY_SIZE];
199+
memcpy(pk_data, dht_get_self_public_key(dht), sizeof(pk_data));
200+
PublicKey self_pk = to_array(pk_data);
201+
202+
PublicKey pk1 = random_pk(rng);
203+
ASSERT_NE(pk1, self_pk);
204+
205+
// Test with maximally close key to self
206+
pk_data[CRYPTO_PUBLIC_KEY_SIZE - 1] = ~pk_data[CRYPTO_PUBLIC_KEY_SIZE - 1];
207+
PublicKey pk2 = to_array(pk_data);
208+
ASSERT_NE(pk2, pk1);
209+
210+
IP_Port ip_port = {0};
211+
ip_port.ip.family = net_family_ipv4();
212+
213+
set_announce_node(dht, pk1.data());
214+
set_announce_node(dht, pk2.data());
215+
216+
EXPECT_TRUE(addto_lists(dht, &ip_port, pk1.data()));
217+
EXPECT_TRUE(addto_lists(dht, &ip_port, pk2.data()));
218+
219+
Node_format nodes[MAX_SENT_NODES];
220+
EXPECT_EQ(0, get_close_nodes(dht, self_pk.data(), nodes, net_family_unspec(), true, true));
221+
set_announce_node(dht, pk1.data());
222+
set_announce_node(dht, pk2.data());
223+
EXPECT_EQ(2, get_close_nodes(dht, self_pk.data(), nodes, net_family_unspec(), true, true));
224+
225+
kill_dht(dht);
226+
kill_networking(net);
227+
mono_time_free(mono_time);
228+
logger_kill(log);
229+
}
230+
188231
} // namespace

0 commit comments

Comments
 (0)