Coverage Report

Created: 2026-01-16 08:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/keystone/suite/fuzz/fuzz_asm_arm_thumbv8be.c
Line
Count
Source
1
#include <keystone/keystone.h>
2
3
#include <string.h>
4
5
FILE * outfile = NULL;
6
7
8
131k
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
9
131k
    ks_engine *ks;
10
131k
    ks_err err;
11
131k
    size_t count;
12
131k
    unsigned char *encode = NULL;
13
131k
    size_t size;
14
131k
    char * assembler;
15
16
131k
    if (outfile == NULL) {
17
        // we compute the output
18
25
        outfile = fopen("/dev/null", "w");
19
25
        if (outfile == NULL) {
20
0
            printf("failed opening /dev/null\n");
21
0
            abort();
22
0
        }
23
25
    }
24
25
131k
    if (Size < 1) {
26
0
        return 0;
27
0
    }
28
29
131k
    err = ks_open(KS_ARCH_ARM, KS_MODE_THUMB+KS_MODE_BIG_ENDIAN+KS_MODE_V8, &ks);
30
131k
    if (err != KS_ERR_OK) {
31
0
        printf("ERROR: failed on ks_open(), quit error = %u\n", err);
32
0
        abort();
33
0
    }
34
35
131k
    ks_option(ks, KS_OPT_SYNTAX, Data[Size-1]);
36
37
131k
    assembler = malloc(Size);
38
131k
    memcpy(assembler, Data, Size-1);
39
    //null terminate string
40
131k
    assembler[Size-1] = 0;
41
42
131k
    if (ks_asm(ks, assembler, 0, &encode, &size, &count) != KS_ERR_OK) {
43
79.9k
        fprintf(outfile, "ERROR: ks_asm() failed & count = %lu, error = %u\n",
44
79.9k
                count, ks_errno(ks));
45
79.9k
    } else {
46
51.1k
        size_t i;
47
48
51.1k
        fprintf(outfile, "%s = ", assembler);
49
1.33G
        for (i = 0; i < size; i++) {
50
1.33G
            fprintf(outfile, "%02x ", encode[i]);
51
1.33G
        }
52
51.1k
        fprintf(outfile, "\n");
53
51.1k
        fprintf(outfile, "Compiled: %lu bytes, statements: %lu\n", size, count);
54
51.1k
    }
55
56
131k
    free(assembler);
57
    // NOTE: free encode after usage to avoid leaking memory
58
131k
    if (encode != NULL) {
59
51.1k
        ks_free(encode);
60
51.1k
    }
61
62
    // close Keystone instance when done
63
131k
    ks_close(ks);
64
65
131k
    return 0;
66
131k
}