/work/toxcore/tox_events_fuzz_test.cc
Line | Count | Source |
1 | | #include "tox_events.h" |
2 | | |
3 | | #include <cassert> |
4 | | #include <cstdint> |
5 | | #include <cstring> |
6 | | #include <vector> |
7 | | |
8 | | #include "../testing/fuzzing/fuzz_support.h" |
9 | | #include "tox_dispatch.h" |
10 | | |
11 | | namespace { |
12 | | |
13 | | void TestUnpack(Fuzz_Data data) |
14 | 606 | { |
15 | | // 2 bytes: size of the events data |
16 | 606 | CONSUME_OR_RETURN(const uint8_t *events_size_bytes, data, sizeof(uint16_t)); |
17 | 605 | uint16_t events_size; |
18 | 605 | std::memcpy(&events_size, events_size_bytes, sizeof(uint16_t)); |
19 | | |
20 | | // events_size bytes: events data (max 64K) |
21 | 605 | CONSUME_OR_RETURN(const uint8_t *events_data, data, events_size); |
22 | | |
23 | 604 | if (data.empty()) { |
24 | | // If there's no more input, no malloc failure paths can possibly be |
25 | | // tested, so we ignore this input. |
26 | 1 | return; |
27 | 1 | } |
28 | | |
29 | | // rest of the fuzz data is input for malloc |
30 | 603 | Fuzz_System sys{data}; |
31 | | |
32 | 603 | Tox_Dispatch *dispatch = tox_dispatch_new(nullptr); |
33 | 603 | assert(dispatch != nullptr); |
34 | | |
35 | 603 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK30Tox_Event_Conference_ConnectedEEDaP3ToxPT_Pv Line | Count | Source | 35 | 4 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK27Tox_Event_Conference_InviteEEDaP3ToxPT_Pv Line | Count | Source | 35 | 1 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK28Tox_Event_Conference_MessageEEDaP3ToxPT_Pv Line | Count | Source | 35 | 1 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK38Tox_Event_Conference_Peer_List_ChangedEEDaP3ToxPT_Pv Line | Count | Source | 35 | 60 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK30Tox_Event_Conference_Peer_NameEEDaP3ToxPT_Pv Line | Count | Source | 35 | 6 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK26Tox_Event_Conference_TitleEEDaP3ToxPT_Pv Line | Count | Source | 35 | 48 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK28Tox_Event_File_Chunk_RequestEEDaP3ToxPT_Pv Line | Count | Source | 35 | 47 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
Unexecuted instantiation: unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK19Tox_Event_File_RecvEEDaP3ToxPT_Pv unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_File_Recv_ChunkEEDaP3ToxPT_Pv Line | Count | Source | 35 | 1 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK27Tox_Event_File_Recv_ControlEEDaP3ToxPT_Pv Line | Count | Source | 35 | 16 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK34Tox_Event_Friend_Connection_StatusEEDaP3ToxPT_Pv Line | Count | Source | 35 | 24 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK32Tox_Event_Friend_Lossless_PacketEEDaP3ToxPT_Pv Line | Count | Source | 35 | 11 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK29Tox_Event_Friend_Lossy_PacketEEDaP3ToxPT_Pv Line | Count | Source | 35 | 15 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK24Tox_Event_Friend_MessageEEDaP3ToxPT_Pv Line | Count | Source | 35 | 1 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK21Tox_Event_Friend_NameEEDaP3ToxPT_Pv Line | Count | Source | 35 | 34 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK29Tox_Event_Friend_Read_ReceiptEEDaP3ToxPT_Pv Line | Count | Source | 35 | 11 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
Unexecuted instantiation: unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK24Tox_Event_Friend_RequestEEDaP3ToxPT_Pv unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK23Tox_Event_Friend_StatusEEDaP3ToxPT_Pv Line | Count | Source | 35 | 28 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK31Tox_Event_Friend_Status_MessageEEDaP3ToxPT_Pv Line | Count | Source | 35 | 12 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK23Tox_Event_Friend_TypingEEDaP3ToxPT_Pv Line | Count | Source | 35 | 18 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK32Tox_Event_Self_Connection_StatusEEDaP3ToxPT_Pv Line | Count | Source | 35 | 62 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Peer_NameEEDaP3ToxPT_Pv Line | Count | Source | 35 | 10 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK27Tox_Event_Group_Peer_StatusEEDaP3ToxPT_Pv Line | Count | Source | 35 | 6 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK21Tox_Event_Group_TopicEEDaP3ToxPT_Pv Line | Count | Source | 35 | 14 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK29Tox_Event_Group_Privacy_StateEEDaP3ToxPT_Pv Line | Count | Source | 35 | 12 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK27Tox_Event_Group_Voice_StateEEDaP3ToxPT_Pv Line | Count | Source | 35 | 24 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK26Tox_Event_Group_Topic_LockEEDaP3ToxPT_Pv Line | Count | Source | 35 | 25 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK26Tox_Event_Group_Peer_LimitEEDaP3ToxPT_Pv Line | Count | Source | 35 | 12 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK24Tox_Event_Group_PasswordEEDaP3ToxPT_Pv Line | Count | Source | 35 | 6 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK23Tox_Event_Group_MessageEEDaP3ToxPT_Pv Line | Count | Source | 35 | 10 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK31Tox_Event_Group_Private_MessageEEDaP3ToxPT_Pv Line | Count | Source | 35 | 1 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK29Tox_Event_Group_Custom_PacketEEDaP3ToxPT_Pv Line | Count | Source | 35 | 10 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK37Tox_Event_Group_Custom_Private_PacketEEDaP3ToxPT_Pv Line | Count | Source | 35 | 1 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
Unexecuted instantiation: unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK22Tox_Event_Group_InviteEEDaP3ToxPT_Pv unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Peer_JoinEEDaP3ToxPT_Pv Line | Count | Source | 35 | 10 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Peer_ExitEEDaP3ToxPT_Pv Line | Count | Source | 35 | 10 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Self_JoinEEDaP3ToxPT_Pv Line | Count | Source | 35 | 12 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Join_FailEEDaP3ToxPT_Pv Line | Count | Source | 35 | 25 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK26Tox_Event_Group_ModerationEEDaP3ToxPT_Pv Line | Count | Source | 35 | 13 | auto ignore = [](Tox *tox, auto *event, void *user_data) {}; |
|
36 | 603 | tox_events_callback_conference_connected(dispatch, ignore); |
37 | 603 | tox_events_callback_conference_invite(dispatch, ignore); |
38 | 603 | tox_events_callback_conference_message(dispatch, ignore); |
39 | 603 | tox_events_callback_conference_peer_list_changed(dispatch, ignore); |
40 | 603 | tox_events_callback_conference_peer_name(dispatch, ignore); |
41 | 603 | tox_events_callback_conference_title(dispatch, ignore); |
42 | 603 | tox_events_callback_file_chunk_request(dispatch, ignore); |
43 | 603 | tox_events_callback_file_recv(dispatch, ignore); |
44 | 603 | tox_events_callback_file_recv_chunk(dispatch, ignore); |
45 | 603 | tox_events_callback_file_recv_control(dispatch, ignore); |
46 | 603 | tox_events_callback_friend_connection_status(dispatch, ignore); |
47 | 603 | tox_events_callback_friend_lossless_packet(dispatch, ignore); |
48 | 603 | tox_events_callback_friend_lossy_packet(dispatch, ignore); |
49 | 603 | tox_events_callback_friend_message(dispatch, ignore); |
50 | 603 | tox_events_callback_friend_name(dispatch, ignore); |
51 | 603 | tox_events_callback_friend_read_receipt(dispatch, ignore); |
52 | 603 | tox_events_callback_friend_request(dispatch, ignore); |
53 | 603 | tox_events_callback_friend_status(dispatch, ignore); |
54 | 603 | tox_events_callback_friend_status_message(dispatch, ignore); |
55 | 603 | tox_events_callback_friend_typing(dispatch, ignore); |
56 | 603 | tox_events_callback_self_connection_status(dispatch, ignore); |
57 | 603 | tox_events_callback_group_peer_name(dispatch, ignore); |
58 | 603 | tox_events_callback_group_peer_status(dispatch, ignore); |
59 | 603 | tox_events_callback_group_topic(dispatch, ignore); |
60 | 603 | tox_events_callback_group_privacy_state(dispatch, ignore); |
61 | 603 | tox_events_callback_group_voice_state(dispatch, ignore); |
62 | 603 | tox_events_callback_group_topic_lock(dispatch, ignore); |
63 | 603 | tox_events_callback_group_peer_limit(dispatch, ignore); |
64 | 603 | tox_events_callback_group_password(dispatch, ignore); |
65 | 603 | tox_events_callback_group_message(dispatch, ignore); |
66 | 603 | tox_events_callback_group_private_message(dispatch, ignore); |
67 | 603 | tox_events_callback_group_custom_packet(dispatch, ignore); |
68 | 603 | tox_events_callback_group_custom_private_packet(dispatch, ignore); |
69 | 603 | tox_events_callback_group_invite(dispatch, ignore); |
70 | 603 | tox_events_callback_group_peer_join(dispatch, ignore); |
71 | 603 | tox_events_callback_group_peer_exit(dispatch, ignore); |
72 | 603 | tox_events_callback_group_self_join(dispatch, ignore); |
73 | 603 | tox_events_callback_group_join_fail(dispatch, ignore); |
74 | 603 | tox_events_callback_group_moderation(dispatch, ignore); |
75 | | |
76 | 603 | Tox_Events *events = tox_events_load(sys.sys.get(), events_data, events_size); |
77 | 603 | if (events) { |
78 | 165 | std::vector<uint8_t> packed(tox_events_bytes_size(events)); |
79 | 165 | tox_events_get_bytes(events, packed.data()); |
80 | | |
81 | 165 | tox_dispatch_invoke(dispatch, events, nullptr, nullptr); |
82 | 165 | } |
83 | 603 | tox_events_free(events); |
84 | 603 | tox_dispatch_free(dispatch); |
85 | 603 | } |
86 | | |
87 | | } // namespace |
88 | | |
89 | | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); |
90 | | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) |
91 | 2.99k | { |
92 | 2.99k | TestUnpack(Fuzz_Data(data, size)); |
93 | 2.99k | return 0; |
94 | 2.99k | } |