Commit e2cdb561 authored by Willem Thiart's avatar Willem Thiart
Browse files

Fix: NULL node in recv_ae_response segfaults

parent d106d229
......@@ -192,6 +192,9 @@ int raft_recv_appendentries_response(raft_server_t* me_,
r->current_idx,
r->first_idx);
if (!node)
return -1;
/* Stale response -- ignore */
if (r->current_idx != 0 && r->current_idx <= raft_node_get_match_idx(node))
return 0;
......
......@@ -2298,6 +2298,27 @@ void TestRaft_leader_recv_appendentries_response_retry_only_if_leader(CuTest * t
CuAssertTrue(tc, NULL == sender_poll_msg_data(sender));
}
void TestRaft_leader_recv_appendentries_response_without_node_fails(CuTest * tc)
{
void *r = raft_new();
raft_add_node(r, NULL, 1, 1);
raft_add_node(r, NULL, 2, 0);
raft_add_node(r, NULL, 3, 0);
/* I'm the leader */
raft_set_state(r, RAFT_STATE_LEADER);
raft_set_current_term(r, 1);
/* receive mock success responses */
msg_appendentries_response_t aer;
memset(&aer, 0, sizeof(msg_appendentries_response_t));
aer.term = 1;
aer.success = 1;
aer.current_idx = 0;
aer.first_idx = 0;
CuAssertIntEquals(tc, -1, raft_recv_appendentries_response(r, NULL, &aer));
}
void TestRaft_leader_recv_entry_resets_election_timeout(
CuTest * tc)
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment