summaryrefslogtreecommitdiff
path: root/testing/afl_toxsave.c
diff options
context:
space:
mode:
authorsudden6 <sudden6@gmx.at>2019-08-02 00:18:58 +0200
committersudden6 <sudden6@gmx.at>2020-03-24 16:49:41 +0100
commit6732e5ef2fde4adc7db65880ff866111f1d1cbc8 (patch)
treee33cca67d04011499994e585a7c9c4fc538f602a /testing/afl_toxsave.c
parentef7058422eec1c8b90208bb3522fce28374feb58 (diff)
Add basic test adapter for AFL
Diffstat (limited to 'testing/afl_toxsave.c')
-rw-r--r--testing/afl_toxsave.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/testing/afl_toxsave.c b/testing/afl_toxsave.c
new file mode 100644
index 00000000..ddfa569f
--- /dev/null
+++ b/testing/afl_toxsave.c
@@ -0,0 +1,54 @@
1#include <malloc.h>
2#include <stdio.h>
3
4#include "../toxcore/tox.h"
5
6int main(int argc, char **argv)
7{
8 if (argc != 2) {
9 return -1;
10 }
11
12 // determine file size
13 FILE *fileptr = fopen(argv[1], "rb");
14 fseek(fileptr, 0, SEEK_END);
15 long filelen = ftell(fileptr);
16 rewind(fileptr);
17
18 // read file into buffer
19 uint8_t *buffer = (uint8_t *)malloc(filelen * sizeof(uint8_t));
20 size_t bytes_read = fread(buffer, filelen, 1, fileptr);
21
22 if (bytes_read != filelen) {
23 free(buffer);
24 return -1;
25 }
26
27 fclose(fileptr);
28
29 Tox_Err_Options_New error_options;
30
31 struct Tox_Options *tox_options = tox_options_new(&error_options);
32
33 if (error_options != TOX_ERR_OPTIONS_NEW_OK) {
34 free(buffer);
35 return -1;
36 }
37
38 // pass test data to Tox
39 tox_options_set_savedata_data(tox_options, buffer, filelen);
40 tox_options_set_savedata_type(tox_options, TOX_SAVEDATA_TYPE_TOX_SAVE);
41
42 Tox_Err_New error_new;
43 Tox *tox = tox_new(tox_options, &error_new);
44
45 if (!tox || error_new != TOX_ERR_NEW_OK) {
46 free(buffer);
47 return -1;
48 }
49
50 tox_kill(tox);
51 free(buffer);
52
53 return 0;
54}