Skip to content

Commit e7fb91d

Browse files
committed
refactor: Allow NULL pointers for byte arrays in events.
Some events, notably the file chunk recv one, can give NULL pointers to the client. Not sure they should, but that's what happens, so we support it.
1 parent 5e2c8ca commit e7fb91d

22 files changed

+147
-24
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
030f7ea99c34523091b268df0ea8fb02e81ee340d608af85d502bace4817d6b0 /usr/local/bin/tox-bootstrapd
1+
4384074ef96cf8f1ed3c420a58b7f67a49a4e22ad5b8fe1d66a4bddf61235fce /usr/local/bin/tox-bootstrapd

other/event_tooling/generate_event_c.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,17 @@ void generate_event_impl(const std::string& event_name, const std::vector<EventT
216216
// gen setters and getters
217217
for (const auto& t : event_types) {
218218
// setter
219-
f << "non_null()\n";
219+
std::visit(
220+
overloaded{
221+
[&](const EventTypeTrivial& t) {
222+
f << "non_null()\n";
223+
},
224+
[&](const EventTypeByteRange& t) {
225+
f << "non_null(1) nullable(2)\n";
226+
}
227+
},
228+
t
229+
);
220230
f << "static " << (t.index() == 0 ? "void" : "bool") << " tox_event_" << event_name_l << "_set_";
221231
std::visit(
222232
overloaded{
@@ -254,6 +264,9 @@ void generate_event_impl(const std::string& event_name, const std::vector<EventT
254264
f << " " << event_name_l << "->" << t.name_data << " = nullptr;\n";
255265
f << " " << event_name_l << "->" << t.name_length << " = 0;\n";
256266
f << " }\n\n";
267+
f << " if (" << t.name_data << " == nullptr) {\n";
268+
f << " assert(" << t.name_length << " == 0);\n";
269+
f << " return true;\n }\n\n";
257270
f << " uint8_t *" << t.name_data << "_copy = (uint8_t *)malloc(" << t.name_length << ");\n\n";
258271
f << " if (" << t.name_data << "_copy == nullptr) {\n";
259272
f << " return false;\n }\n\n";

toxcore/events/conference_invite.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Tox_Conference_Type tox_event_conference_invite_get_type(const Tox_Event_Confere
5858
return conference_invite->type;
5959
}
6060

61-
non_null()
61+
non_null(1) nullable(2)
6262
static bool tox_event_conference_invite_set_cookie(Tox_Event_Conference_Invite *conference_invite,
6363
const uint8_t *cookie, uint32_t cookie_length)
6464
{
@@ -70,6 +70,11 @@ static bool tox_event_conference_invite_set_cookie(Tox_Event_Conference_Invite *
7070
conference_invite->cookie_length = 0;
7171
}
7272

73+
if (cookie == nullptr) {
74+
assert(cookie_length == 0);
75+
return true;
76+
}
77+
7378
uint8_t *cookie_copy = (uint8_t *)malloc(cookie_length);
7479

7580
if (cookie_copy == nullptr) {

toxcore/events/conference_message.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ Tox_Message_Type tox_event_conference_message_get_type(const Tox_Event_Conferenc
7272
return conference_message->type;
7373
}
7474

75-
non_null()
75+
non_null(1) nullable(2)
7676
static bool tox_event_conference_message_set_message(Tox_Event_Conference_Message *conference_message,
7777
const uint8_t *message, uint32_t message_length)
7878
{
@@ -84,6 +84,11 @@ static bool tox_event_conference_message_set_message(Tox_Event_Conference_Messag
8484
conference_message->message_length = 0;
8585
}
8686

87+
if (message == nullptr) {
88+
assert(message_length == 0);
89+
return true;
90+
}
91+
8792
uint8_t *message_copy = (uint8_t *)malloc(message_length);
8893

8994
if (message_copy == nullptr) {

toxcore/events/conference_peer_name.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ uint32_t tox_event_conference_peer_name_get_peer_number(const Tox_Event_Conferen
5656
return conference_peer_name->peer_number;
5757
}
5858

59-
non_null()
59+
non_null(1) nullable(2)
6060
static bool tox_event_conference_peer_name_set_name(Tox_Event_Conference_Peer_Name *conference_peer_name,
6161
const uint8_t *name, uint32_t name_length)
6262
{
@@ -68,6 +68,11 @@ static bool tox_event_conference_peer_name_set_name(Tox_Event_Conference_Peer_Na
6868
conference_peer_name->name_length = 0;
6969
}
7070

71+
if (name == nullptr) {
72+
assert(name_length == 0);
73+
return true;
74+
}
75+
7176
uint8_t *name_copy = (uint8_t *)malloc(name_length);
7277

7378
if (name_copy == nullptr) {

toxcore/events/conference_title.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ uint32_t tox_event_conference_title_get_peer_number(const Tox_Event_Conference_T
5656
return conference_title->peer_number;
5757
}
5858

59-
non_null()
59+
non_null(1) nullable(2)
6060
static bool tox_event_conference_title_set_title(Tox_Event_Conference_Title *conference_title,
6161
const uint8_t *title, uint32_t title_length)
6262
{
@@ -68,6 +68,11 @@ static bool tox_event_conference_title_set_title(Tox_Event_Conference_Title *con
6868
conference_title->title_length = 0;
6969
}
7070

71+
if (title == nullptr) {
72+
assert(title_length == 0);
73+
return true;
74+
}
75+
7176
uint8_t *title_copy = (uint8_t *)malloc(title_length);
7277

7378
if (title_copy == nullptr) {

toxcore/events/file_recv.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ uint64_t tox_event_file_recv_get_file_size(const Tox_Event_File_Recv *file_recv)
8484
return file_recv->file_size;
8585
}
8686

87-
non_null()
87+
non_null(1) nullable(2)
8888
static bool tox_event_file_recv_set_filename(Tox_Event_File_Recv *file_recv,
8989
const uint8_t *filename, uint32_t filename_length)
9090
{
@@ -96,6 +96,11 @@ static bool tox_event_file_recv_set_filename(Tox_Event_File_Recv *file_recv,
9696
file_recv->filename_length = 0;
9797
}
9898

99+
if (filename == nullptr) {
100+
assert(filename_length == 0);
101+
return true;
102+
}
103+
99104
uint8_t *filename_copy = (uint8_t *)malloc(filename_length);
100105

101106
if (filename_copy == nullptr) {

toxcore/events/file_recv_chunk.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ uint64_t tox_event_file_recv_chunk_get_position(const Tox_Event_File_Recv_Chunk
7070
return file_recv_chunk->position;
7171
}
7272

73-
non_null()
73+
non_null(1) nullable(2)
7474
static bool tox_event_file_recv_chunk_set_data(Tox_Event_File_Recv_Chunk *file_recv_chunk,
7575
const uint8_t *data, uint32_t data_length)
7676
{
@@ -82,6 +82,11 @@ static bool tox_event_file_recv_chunk_set_data(Tox_Event_File_Recv_Chunk *file_r
8282
file_recv_chunk->data_length = 0;
8383
}
8484

85+
if (data == nullptr) {
86+
assert(data_length == 0);
87+
return true;
88+
}
89+
8590
uint8_t *data_copy = (uint8_t *)malloc(data_length);
8691

8792
if (data_copy == nullptr) {

toxcore/events/friend_lossless_packet.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ uint32_t tox_event_friend_lossless_packet_get_friend_number(const Tox_Event_Frie
4242
return friend_lossless_packet->friend_number;
4343
}
4444

45-
non_null()
45+
non_null(1) nullable(2)
4646
static bool tox_event_friend_lossless_packet_set_data(Tox_Event_Friend_Lossless_Packet *friend_lossless_packet,
4747
const uint8_t *data, uint32_t data_length)
4848
{
@@ -54,6 +54,11 @@ static bool tox_event_friend_lossless_packet_set_data(Tox_Event_Friend_Lossless_
5454
friend_lossless_packet->data_length = 0;
5555
}
5656

57+
if (data == nullptr) {
58+
assert(data_length == 0);
59+
return true;
60+
}
61+
5762
uint8_t *data_copy = (uint8_t *)malloc(data_length);
5863

5964
if (data_copy == nullptr) {

toxcore/events/friend_lossy_packet.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ uint32_t tox_event_friend_lossy_packet_get_friend_number(const Tox_Event_Friend_
4242
return friend_lossy_packet->friend_number;
4343
}
4444

45-
non_null()
45+
non_null(1) nullable(2)
4646
static bool tox_event_friend_lossy_packet_set_data(Tox_Event_Friend_Lossy_Packet *friend_lossy_packet,
4747
const uint8_t *data, uint32_t data_length)
4848
{
@@ -54,6 +54,11 @@ static bool tox_event_friend_lossy_packet_set_data(Tox_Event_Friend_Lossy_Packet
5454
friend_lossy_packet->data_length = 0;
5555
}
5656

57+
if (data == nullptr) {
58+
assert(data_length == 0);
59+
return true;
60+
}
61+
5762
uint8_t *data_copy = (uint8_t *)malloc(data_length);
5863

5964
if (data_copy == nullptr) {

0 commit comments

Comments
 (0)