Coverage Report

Created: 2025-10-08 19:34

/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.hh"
9
#include "tox_dispatch.h"
10
11
namespace {
12
13
void TestUnpack(Fuzz_Data data)
14
688
{
15
    // 2 bytes: size of the events data
16
688
    CONSUME_OR_RETURN(const uint8_t *events_size_bytes, data, sizeof(uint16_t));
17
687
    uint16_t events_size;
18
687
    std::memcpy(&events_size, events_size_bytes, sizeof(uint16_t));
19
20
    // events_size bytes: events data (max 64K)
21
687
    CONSUME_OR_RETURN(const uint8_t *events_data, data, events_size);
22
23
686
    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
685
    Fuzz_System sys{data};
31
32
685
    Tox_Dispatch *dispatch = tox_dispatch_new(nullptr);
33
685
    assert(dispatch != nullptr);
34
35
783
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK30Tox_Event_Conference_ConnectedEEDaPT_Pv
Line
Count
Source
35
23
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK27Tox_Event_Conference_InviteEEDaPT_Pv
Line
Count
Source
35
12
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK28Tox_Event_Conference_MessageEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK38Tox_Event_Conference_Peer_List_ChangedEEDaPT_Pv
Line
Count
Source
35
78
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK30Tox_Event_Conference_Peer_NameEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK26Tox_Event_Conference_TitleEEDaPT_Pv
Line
Count
Source
35
33
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK28Tox_Event_File_Chunk_RequestEEDaPT_Pv
Line
Count
Source
35
58
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK19Tox_Event_File_RecvEEDaPT_Pv
Line
Count
Source
35
18
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_File_Recv_ChunkEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK27Tox_Event_File_Recv_ControlEEDaPT_Pv
Line
Count
Source
35
13
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK34Tox_Event_Friend_Connection_StatusEEDaPT_Pv
Line
Count
Source
35
20
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK32Tox_Event_Friend_Lossless_PacketEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK29Tox_Event_Friend_Lossy_PacketEEDaPT_Pv
Line
Count
Source
35
13
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK24Tox_Event_Friend_MessageEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK21Tox_Event_Friend_NameEEDaPT_Pv
Line
Count
Source
35
11
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK29Tox_Event_Friend_Read_ReceiptEEDaPT_Pv
Line
Count
Source
35
18
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK24Tox_Event_Friend_RequestEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK23Tox_Event_Friend_StatusEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK31Tox_Event_Friend_Status_MessageEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK23Tox_Event_Friend_TypingEEDaPT_Pv
Line
Count
Source
35
15
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK32Tox_Event_Self_Connection_StatusEEDaPT_Pv
Line
Count
Source
35
128
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Peer_NameEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK27Tox_Event_Group_Peer_StatusEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK21Tox_Event_Group_TopicEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK29Tox_Event_Group_Privacy_StateEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK27Tox_Event_Group_Voice_StateEEDaPT_Pv
Line
Count
Source
35
18
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK26Tox_Event_Group_Topic_LockEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK26Tox_Event_Group_Peer_LimitEEDaPT_Pv
Line
Count
Source
35
11
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK24Tox_Event_Group_PasswordEEDaPT_Pv
Line
Count
Source
35
18
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK23Tox_Event_Group_MessageEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK31Tox_Event_Group_Private_MessageEEDaPT_Pv
Line
Count
Source
35
19
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK29Tox_Event_Group_Custom_PacketEEDaPT_Pv
Line
Count
Source
35
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK37Tox_Event_Group_Custom_Private_PacketEEDaPT_Pv
Line
Count
Source
35
12
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK22Tox_Event_Group_InviteEEDaPT_Pv
Line
Count
Source
35
27
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Peer_JoinEEDaPT_Pv
Line
Count
Source
35
28
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Peer_ExitEEDaPT_Pv
Line
Count
Source
35
14
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Self_JoinEEDaPT_Pv
Line
Count
Source
35
19
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK25Tox_Event_Group_Join_FailEEDaPT_Pv
Line
Count
Source
35
13
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackE9Fuzz_DataENK3$_0clIK26Tox_Event_Group_ModerationEEDaPT_Pv
Line
Count
Source
35
14
    auto ignore = [](auto *event, void *user_data) {};
36
685
    tox_events_callback_conference_connected(dispatch, ignore);
37
685
    tox_events_callback_conference_invite(dispatch, ignore);
38
685
    tox_events_callback_conference_message(dispatch, ignore);
39
685
    tox_events_callback_conference_peer_list_changed(dispatch, ignore);
40
685
    tox_events_callback_conference_peer_name(dispatch, ignore);
41
685
    tox_events_callback_conference_title(dispatch, ignore);
42
685
    tox_events_callback_file_chunk_request(dispatch, ignore);
43
685
    tox_events_callback_file_recv(dispatch, ignore);
44
685
    tox_events_callback_file_recv_chunk(dispatch, ignore);
45
685
    tox_events_callback_file_recv_control(dispatch, ignore);
46
685
    tox_events_callback_friend_connection_status(dispatch, ignore);
47
685
    tox_events_callback_friend_lossless_packet(dispatch, ignore);
48
685
    tox_events_callback_friend_lossy_packet(dispatch, ignore);
49
685
    tox_events_callback_friend_message(dispatch, ignore);
50
685
    tox_events_callback_friend_name(dispatch, ignore);
51
685
    tox_events_callback_friend_read_receipt(dispatch, ignore);
52
685
    tox_events_callback_friend_request(dispatch, ignore);
53
685
    tox_events_callback_friend_status(dispatch, ignore);
54
685
    tox_events_callback_friend_status_message(dispatch, ignore);
55
685
    tox_events_callback_friend_typing(dispatch, ignore);
56
685
    tox_events_callback_self_connection_status(dispatch, ignore);
57
685
    tox_events_callback_group_peer_name(dispatch, ignore);
58
685
    tox_events_callback_group_peer_status(dispatch, ignore);
59
685
    tox_events_callback_group_topic(dispatch, ignore);
60
685
    tox_events_callback_group_privacy_state(dispatch, ignore);
61
685
    tox_events_callback_group_voice_state(dispatch, ignore);
62
685
    tox_events_callback_group_topic_lock(dispatch, ignore);
63
685
    tox_events_callback_group_peer_limit(dispatch, ignore);
64
685
    tox_events_callback_group_password(dispatch, ignore);
65
685
    tox_events_callback_group_message(dispatch, ignore);
66
685
    tox_events_callback_group_private_message(dispatch, ignore);
67
685
    tox_events_callback_group_custom_packet(dispatch, ignore);
68
685
    tox_events_callback_group_custom_private_packet(dispatch, ignore);
69
685
    tox_events_callback_group_invite(dispatch, ignore);
70
685
    tox_events_callback_group_peer_join(dispatch, ignore);
71
685
    tox_events_callback_group_peer_exit(dispatch, ignore);
72
685
    tox_events_callback_group_self_join(dispatch, ignore);
73
685
    tox_events_callback_group_join_fail(dispatch, ignore);
74
685
    tox_events_callback_group_moderation(dispatch, ignore);
75
76
685
    Tox_Events *events = tox_events_load(sys.sys.get(), events_data, events_size);
77
685
    if (events) {
78
193
        std::vector<uint8_t> packed(tox_events_bytes_size(events));
79
193
        tox_events_get_bytes(events, packed.data());
80
81
193
        tox_dispatch_invoke(dispatch, events, nullptr);
82
193
    }
83
685
    tox_events_free(events);
84
685
    tox_dispatch_free(dispatch);
85
685
}
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.57k
{
92
2.57k
    TestUnpack(Fuzz_Data(data, size));
93
2.57k
    return 0;
94
2.57k
}