Coverage Report

Created: 2026-02-09 06:53

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libzmq/tests/test_socket_options_fuzzer.cpp
Line
Count
Source
1
/* SPDX-License-Identifier: MPL-2.0 */
2
3
#ifdef ZMQ_USE_FUZZING_ENGINE
4
#include <fuzzer/FuzzedDataProvider.h>
5
#endif
6
7
#include "testutil.hpp"
8
#include "testutil_unity.hpp"
9
10
#ifdef ZMQ_DISCONNECT_MSG
11
97.0k
#define LAST_OPTION ZMQ_DISCONNECT_MSG
12
#else
13
#define LAST_OPTION ZMQ_BINDTODEVICE
14
#endif
15
16
extern "C" int LLVMFuzzerTestOneInput (const uint8_t *data, size_t size)
17
890
{
18
890
    int option;
19
890
    void *ctx = zmq_ctx_new ();
20
890
    TEST_ASSERT_NOT_NULL (ctx);
21
890
    void *server = zmq_socket (ctx, ZMQ_XPUB);
22
890
    TEST_ASSERT_NOT_NULL (server);
23
24
890
    if (!size)
25
0
        return 0;
26
27
97.0k
    for (option = ZMQ_AFFINITY; option <= LAST_OPTION; ++option) {
28
96.1k
        uint8_t out[8192];
29
96.1k
        size_t out_size = 8192;
30
31
96.1k
        zmq_setsockopt (server, option, data, size);
32
96.1k
        zmq_getsockopt (server, option, out, &out_size);
33
96.1k
    }
34
35
890
    zmq_close (server);
36
890
    zmq_ctx_term (ctx);
37
38
890
    return 0;
39
890
}
40
41
#ifndef ZMQ_USE_FUZZING_ENGINE
42
void test_socket_options_fuzzer ()
43
{
44
    uint8_t **data;
45
    size_t *len, num_cases = 0;
46
    if (fuzzer_corpus_encode (
47
          "tests/libzmq-fuzz-corpora/test_socket_options_fuzzer_seed_corpus",
48
          &data, &len, &num_cases)
49
        != 0)
50
        exit (77);
51
52
    while (num_cases-- > 0) {
53
        TEST_ASSERT_SUCCESS_ERRNO (
54
          LLVMFuzzerTestOneInput (data[num_cases], len[num_cases]));
55
        free (data[num_cases]);
56
    }
57
58
    free (data);
59
    free (len);
60
}
61
62
int main (int argc, char **argv)
63
{
64
    setup_test_environment ();
65
66
    UNITY_BEGIN ();
67
    RUN_TEST (test_socket_options_fuzzer);
68
69
    return UNITY_END ();
70
}
71
#endif