Merge branch 'maint-0.4.8'
[tor.git] / src / test / fuzz / fuzz_diff_apply.c
blobf145bd26253d887c2d86959f2a46b81570f8dc09
1 /* Copyright (c) 2016-2021, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
4 #define CONSDIFF_PRIVATE
6 #include "orconfig.h"
7 #include "core/or/or.h"
8 #include "feature/dircommon/consdiff.h"
10 #include "test/fuzz/fuzzing.h"
12 static int
13 mock_consensus_compute_digest_(const char *c, size_t len,
14 consensus_digest_t *d)
16 (void)c;
17 (void)len;
18 memset(d->sha3_256, 3, sizeof(d->sha3_256));
19 return 0;
22 static int
23 mock_consensus_digest_eq_(const uint8_t *a, const uint8_t *b)
25 (void)a;
26 (void)b;
27 return 1;
30 int
31 fuzz_init(void)
33 MOCK(consensus_compute_digest, mock_consensus_compute_digest_);
34 MOCK(consensus_digest_eq, mock_consensus_digest_eq_);
35 return 0;
38 int
39 fuzz_cleanup(void)
41 UNMOCK(consensus_compute_digest);
42 UNMOCK(consensus_digest_eq);
43 return 0;
46 int
47 fuzz_main(const uint8_t *stdin_buf, size_t data_size)
49 #define SEP "=====\n"
50 #define SEPLEN strlen(SEP)
51 const uint8_t *separator = tor_memmem(stdin_buf, data_size, SEP, SEPLEN);
52 if (! separator)
53 return 0;
54 size_t c1_len = separator - stdin_buf;
55 const char *c1 = (const char *)stdin_buf;
56 size_t c2_len = data_size - c1_len - SEPLEN;
57 const char *c2 = (const char *)separator + SEPLEN;
59 char *c3 = consensus_diff_apply(c1, c1_len, c2, c2_len);
61 tor_free(c3);
63 return 0;