Skip to content

Commit 4067628

Browse files
committed
fix: events leak that can occur if allocation fails
rare in practice, found by fuzzing
1 parent 9610ac3 commit 4067628

40 files changed

+160
-40
lines changed

other/event_tooling/generate_event_c.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,10 @@ void generate_event_impl(const std::string& event_name, const std::vector<EventT
444444
f << " Tox_Event event;\n";
445445
f << " event.type = TOX_EVENT_" << str_toupper(event_name) << ";\n";
446446
f << " event.data." << event_name_l << " = " << event_name_l << ";\n\n";
447-
f << " tox_events_add(events, &event);\n";
447+
f << " if (!tox_events_add(events, &event)) {\n";
448+
f << " tox_event_" << event_name_l << "_free(" << event_name_l << ", mem);\n";
449+
f << " return nullptr;\n";
450+
f << " }\n";
448451
f << " return " << event_name_l << ";\n}\n\n";
449452

450453
// unpack

toxcore/events/conference_connected.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,10 @@ static Tox_Event_Conference_Connected *tox_events_add_conference_connected(Tox_E
109109
event.type = TOX_EVENT_CONFERENCE_CONNECTED;
110110
event.data.conference_connected = conference_connected;
111111

112-
tox_events_add(events, &event);
112+
if (!tox_events_add(events, &event)) {
113+
tox_event_conference_connected_free(conference_connected, mem);
114+
return nullptr;
115+
}
113116
return conference_connected;
114117
}
115118

toxcore/events/conference_invite.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,10 @@ static Tox_Event_Conference_Invite *tox_events_add_conference_invite(Tox_Events
177177
event.type = TOX_EVENT_CONFERENCE_INVITE;
178178
event.data.conference_invite = conference_invite;
179179

180-
tox_events_add(events, &event);
180+
if (!tox_events_add(events, &event)) {
181+
tox_event_conference_invite_free(conference_invite, mem);
182+
return nullptr;
183+
}
181184
return conference_invite;
182185
}
183186

toxcore/events/conference_message.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,10 @@ static Tox_Event_Conference_Message *tox_events_add_conference_message(Tox_Event
193193
event.type = TOX_EVENT_CONFERENCE_MESSAGE;
194194
event.data.conference_message = conference_message;
195195

196-
tox_events_add(events, &event);
196+
if (!tox_events_add(events, &event)) {
197+
tox_event_conference_message_free(conference_message, mem);
198+
return nullptr;
199+
}
197200
return conference_message;
198201
}
199202

toxcore/events/conference_peer_list_changed.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,10 @@ static Tox_Event_Conference_Peer_List_Changed *tox_events_add_conference_peer_li
109109
event.type = TOX_EVENT_CONFERENCE_PEER_LIST_CHANGED;
110110
event.data.conference_peer_list_changed = conference_peer_list_changed;
111111

112-
tox_events_add(events, &event);
112+
if (!tox_events_add(events, &event)) {
113+
tox_event_conference_peer_list_changed_free(conference_peer_list_changed, mem);
114+
return nullptr;
115+
}
113116
return conference_peer_list_changed;
114117
}
115118

toxcore/events/conference_peer_name.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,10 @@ static Tox_Event_Conference_Peer_Name *tox_events_add_conference_peer_name(Tox_E
175175
event.type = TOX_EVENT_CONFERENCE_PEER_NAME;
176176
event.data.conference_peer_name = conference_peer_name;
177177

178-
tox_events_add(events, &event);
178+
if (!tox_events_add(events, &event)) {
179+
tox_event_conference_peer_name_free(conference_peer_name, mem);
180+
return nullptr;
181+
}
179182
return conference_peer_name;
180183
}
181184

toxcore/events/conference_title.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,10 @@ static Tox_Event_Conference_Title *tox_events_add_conference_title(Tox_Events *e
175175
event.type = TOX_EVENT_CONFERENCE_TITLE;
176176
event.data.conference_title = conference_title;
177177

178-
tox_events_add(events, &event);
178+
if (!tox_events_add(events, &event)) {
179+
tox_event_conference_title_free(conference_title, mem);
180+
return nullptr;
181+
}
179182
return conference_title;
180183
}
181184

toxcore/events/file_chunk_request.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,10 @@ static Tox_Event_File_Chunk_Request *tox_events_add_file_chunk_request(Tox_Event
162162
event.type = TOX_EVENT_FILE_CHUNK_REQUEST;
163163
event.data.file_chunk_request = file_chunk_request;
164164

165-
tox_events_add(events, &event);
165+
if (!tox_events_add(events, &event)) {
166+
tox_event_file_chunk_request_free(file_chunk_request, mem);
167+
return nullptr;
168+
}
166169
return file_chunk_request;
167170
}
168171

toxcore/events/file_recv.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,10 @@ static Tox_Event_File_Recv *tox_events_add_file_recv(Tox_Events *events, const M
207207
event.type = TOX_EVENT_FILE_RECV;
208208
event.data.file_recv = file_recv;
209209

210-
tox_events_add(events, &event);
210+
if (!tox_events_add(events, &event)) {
211+
tox_event_file_recv_free(file_recv, mem);
212+
return nullptr;
213+
}
211214
return file_recv;
212215
}
213216

toxcore/events/file_recv_chunk.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,10 @@ static Tox_Event_File_Recv_Chunk *tox_events_add_file_recv_chunk(Tox_Events *eve
191191
event.type = TOX_EVENT_FILE_RECV_CHUNK;
192192
event.data.file_recv_chunk = file_recv_chunk;
193193

194-
tox_events_add(events, &event);
194+
if (!tox_events_add(events, &event)) {
195+
tox_event_file_recv_chunk_free(file_recv_chunk, mem);
196+
return nullptr;
197+
}
195198
return file_recv_chunk;
196199
}
197200

0 commit comments

Comments
 (0)