/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 |