1 /* Copyright (c) 2016-2021, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
4 #define CONSDIFF_PRIVATE
7 #include "core/or/or.h"
8 #include "feature/dircommon/consdiff.h"
10 #include "test/fuzz/fuzzing.h"
13 mock_consensus_compute_digest_(const char *c
, size_t len
,
14 consensus_digest_t
*d
)
18 memset(d
->sha3_256
, 3, sizeof(d
->sha3_256
));
25 MOCK(consensus_compute_digest
, mock_consensus_compute_digest_
);
26 MOCK(consensus_compute_digest_as_signed
, mock_consensus_compute_digest_
);
33 UNMOCK(consensus_compute_digest
);
34 UNMOCK(consensus_compute_digest_as_signed
);
39 fuzz_main(const uint8_t *stdin_buf
, size_t data_size
)
42 #define SEPLEN strlen(SEP)
43 const uint8_t *separator
= tor_memmem(stdin_buf
, data_size
, SEP
, SEPLEN
);
46 size_t c1_len
= separator
- stdin_buf
;
47 const char *c1
= (const char *)stdin_buf
;
48 size_t c2_len
= data_size
- c1_len
- SEPLEN
;
49 const char *c2
= (const char *)separator
+ SEPLEN
;
51 const char *cp
= memchr(c1
, 0, c1_len
);
55 cp
= memchr(c2
, 0, c2_len
);
59 char *c3
= consensus_diff_generate(c1
, c1_len
, c2
, c2_len
);
62 char *c4
= consensus_diff_apply(c1
, c1_len
, c3
, strlen(c3
));
64 int equal
= (c2_len
== strlen(c4
)) && fast_memeq(c2
, c4
, c2_len
);
66 //printf("%s\n", escaped(c1));
67 //printf("%s\n", escaped(c2));
68 printf("%s\n", escaped(c3
));
69 printf("%s\n", escaped(c4
));