Coverage Report

Created: 2026-10-24 08:16

/work/toxcore/tox_events_fuzz_test.cc
Line
Count
Source
1
#include "tox_events.h"
2
3
#include <cassert>
4
#include <cstddef>
5
#include <cstdint>
6
#include <cstring>
7
#include <vector>
8
9
#include "../testing/support/public/fuzz_data.hh"
10
#include "../testing/support/public/fuzz_helpers.hh"
11
#include "../testing/support/public/simulated_environment.hh"
12
#include "tox_dispatch.h"
13
14
namespace {
15
16
using tox::test::configure_fuzz_memory_source;
17
using tox::test::Fuzz_Data;
18
using tox::test::SimulatedEnvironment;
19
20
void TestUnpack(Fuzz_Data data)
21
698
{
22
    // 2 bytes: size of the events data
23
698
    CONSUME_OR_RETURN(const std::uint8_t *events_size_bytes, data, sizeof(std::uint16_t));
24
697
    std::uint16_t events_size;
25
697
    std::memcpy(&events_size, events_size_bytes, sizeof(std::uint16_t));
26
27
    // events_size bytes: events data (max 64K)
28
697
    CONSUME_OR_RETURN(const std::uint8_t *events_data, data, events_size);
29
30
696
    if (data.empty()) {
31
        // If there's no more input, no std::malloc failure paths can possibly be
32
        // tested, so we ignore this input.
33
1
        return;
34
1
    }
35
36
    // rest of the fuzz data is input for malloc
37
695
    SimulatedEnvironment env{12345};
38
695
    auto node = env.create_node(33445);
39
695
    configure_fuzz_memory_source(env.fake_memory(), data);
40
41
695
    Tox_Dispatch *dispatch = tox_dispatch_new(nullptr);
42
695
    assert(dispatch != nullptr);
43
44
757
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK30Tox_Event_Conference_ConnectedEEDaPT_Pv
Line
Count
Source
44
22
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK27Tox_Event_Conference_InviteEEDaPT_Pv
Line
Count
Source
44
12
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK28Tox_Event_Conference_MessageEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK38Tox_Event_Conference_Peer_List_ChangedEEDaPT_Pv
Line
Count
Source
44
77
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK30Tox_Event_Conference_Peer_NameEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK26Tox_Event_Conference_TitleEEDaPT_Pv
Line
Count
Source
44
34
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK28Tox_Event_File_Chunk_RequestEEDaPT_Pv
Line
Count
Source
44
55
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK19Tox_Event_File_RecvEEDaPT_Pv
Line
Count
Source
44
19
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK25Tox_Event_File_Recv_ChunkEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK27Tox_Event_File_Recv_ControlEEDaPT_Pv
Line
Count
Source
44
13
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK34Tox_Event_Friend_Connection_StatusEEDaPT_Pv
Line
Count
Source
44
20
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK32Tox_Event_Friend_Lossless_PacketEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK29Tox_Event_Friend_Lossy_PacketEEDaPT_Pv
Line
Count
Source
44
13
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK24Tox_Event_Friend_MessageEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK21Tox_Event_Friend_NameEEDaPT_Pv
Line
Count
Source
44
12
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK29Tox_Event_Friend_Read_ReceiptEEDaPT_Pv
Line
Count
Source
44
18
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK24Tox_Event_Friend_RequestEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK23Tox_Event_Friend_StatusEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK31Tox_Event_Friend_Status_MessageEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK23Tox_Event_Friend_TypingEEDaPT_Pv
Line
Count
Source
44
15
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK32Tox_Event_Self_Connection_StatusEEDaPT_Pv
Line
Count
Source
44
113
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK25Tox_Event_Group_Peer_NameEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK27Tox_Event_Group_Peer_StatusEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK21Tox_Event_Group_TopicEEDaPT_Pv
Line
Count
Source
44
11
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK29Tox_Event_Group_Privacy_StateEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK27Tox_Event_Group_Voice_StateEEDaPT_Pv
Line
Count
Source
44
19
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK26Tox_Event_Group_Topic_LockEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK26Tox_Event_Group_Peer_LimitEEDaPT_Pv
Line
Count
Source
44
11
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK24Tox_Event_Group_PasswordEEDaPT_Pv
Line
Count
Source
44
18
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK23Tox_Event_Group_MessageEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK31Tox_Event_Group_Private_MessageEEDaPT_Pv
Line
Count
Source
44
19
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK29Tox_Event_Group_Custom_PacketEEDaPT_Pv
Line
Count
Source
44
10
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK37Tox_Event_Group_Custom_Private_PacketEEDaPT_Pv
Line
Count
Source
44
12
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK22Tox_Event_Group_InviteEEDaPT_Pv
Line
Count
Source
44
11
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK25Tox_Event_Group_Peer_JoinEEDaPT_Pv
Line
Count
Source
44
28
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK25Tox_Event_Group_Peer_ExitEEDaPT_Pv
Line
Count
Source
44
14
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK25Tox_Event_Group_Self_JoinEEDaPT_Pv
Line
Count
Source
44
19
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK25Tox_Event_Group_Join_FailEEDaPT_Pv
Line
Count
Source
44
18
    auto ignore = [](auto *event, void *user_data) {};
unity_0_cxx.cxx:_ZZN12_GLOBAL__N_110TestUnpackEN3tox4test9Fuzz_DataEENK3$_0clIK26Tox_Event_Group_ModerationEEDaPT_Pv
Line
Count
Source
44
14
    auto ignore = [](auto *event, void *user_data) {};
45
695
    tox_events_callback_conference_connected(dispatch, ignore);
46
695
    tox_events_callback_conference_invite(dispatch, ignore);
47
695
    tox_events_callback_conference_message(dispatch, ignore);
48
695
    tox_events_callback_conference_peer_list_changed(dispatch, ignore);
49
695
    tox_events_callback_conference_peer_name(dispatch, ignore);
50
695
    tox_events_callback_conference_title(dispatch, ignore);
51
695
    tox_events_callback_file_chunk_request(dispatch, ignore);
52
695
    tox_events_callback_file_recv(dispatch, ignore);
53
695
    tox_events_callback_file_recv_chunk(dispatch, ignore);
54
695
    tox_events_callback_file_recv_control(dispatch, ignore);
55
695
    tox_events_callback_friend_connection_status(dispatch, ignore);
56
695
    tox_events_callback_friend_lossless_packet(dispatch, ignore);
57
695
    tox_events_callback_friend_lossy_packet(dispatch, ignore);
58
695
    tox_events_callback_friend_message(dispatch, ignore);
59
695
    tox_events_callback_friend_name(dispatch, ignore);
60
695
    tox_events_callback_friend_read_receipt(dispatch, ignore);
61
695
    tox_events_callback_friend_request(dispatch, ignore);
62
695
    tox_events_callback_friend_status(dispatch, ignore);
63
695
    tox_events_callback_friend_status_message(dispatch, ignore);
64
695
    tox_events_callback_friend_typing(dispatch, ignore);
65
695
    tox_events_callback_self_connection_status(dispatch, ignore);
66
695
    tox_events_callback_group_peer_name(dispatch, ignore);
67
695
    tox_events_callback_group_peer_status(dispatch, ignore);
68
695
    tox_events_callback_group_topic(dispatch, ignore);
69
695
    tox_events_callback_group_privacy_state(dispatch, ignore);
70
695
    tox_events_callback_group_voice_state(dispatch, ignore);
71
695
    tox_events_callback_group_topic_lock(dispatch, ignore);
72
695
    tox_events_callback_group_peer_limit(dispatch, ignore);
73
695
    tox_events_callback_group_password(dispatch, ignore);
74
695
    tox_events_callback_group_message(dispatch, ignore);
75
695
    tox_events_callback_group_private_message(dispatch, ignore);
76
695
    tox_events_callback_group_custom_packet(dispatch, ignore);
77
695
    tox_events_callback_group_custom_private_packet(dispatch, ignore);
78
695
    tox_events_callback_group_invite(dispatch, ignore);
79
695
    tox_events_callback_group_peer_join(dispatch, ignore);
80
695
    tox_events_callback_group_peer_exit(dispatch, ignore);
81
695
    tox_events_callback_group_self_join(dispatch, ignore);
82
695
    tox_events_callback_group_join_fail(dispatch, ignore);
83
695
    tox_events_callback_group_moderation(dispatch, ignore);
84
85
695
    Tox_Events *events = tox_events_load(&node->system, events_data, events_size);
86
695
    if (events) {
87
190
        std::vector<std::uint8_t> packed(tox_events_bytes_size(events));
88
190
        tox_events_get_bytes(events, packed.data());
89
90
190
        tox_dispatch_invoke(dispatch, events, nullptr);
91
190
    }
92
695
    tox_events_free(events);
93
695
    tox_dispatch_free(dispatch);
94
695
}
95
96
}  // namespace
97
98
extern "C" int LLVMFuzzerTestOneInput(const std::uint8_t *data, std::size_t size);
99
extern "C" int LLVMFuzzerTestOneInput(const std::uint8_t *data, std::size_t size)
100
2.69k
{
101
2.69k
    TestUnpack(Fuzz_Data(data, size));
102
2.69k
    return 0;
103
2.69k
}