Coverage Report

Created: 2024-11-21 06:36

/src/gfwx-fuzzers/decoder.cpp
Line
Count
Source (jump to first uncovered line)
1
/* By Guido Vranken <guidovranken@gmail.com> */
2
3
#include <cstdint>
4
#include <cstddef>
5
#include <cstring>
6
#include <cmath>
7
#include "gfwx.h"
8
#include "fuzzing/memory.hpp"
9
10
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
11
15
{
12
15
    GFWX::Header header;
13
14
15
    {
15
15
        ptrdiff_t result = GFWX::decompress((uint8_t*)0, header, data, size, 0, true);
16
15
        if (result != GFWX::ResultOk) {
17
4
            return 0;
18
4
        }
19
15
    }
20
21
11
    if ( header.bitDepth > 32 ) {
22
0
        return 0;
23
0
    }
24
11
    if ( header.channels > 10 ) {
25
0
        return 0;
26
0
    }
27
11
    if ( header.layers > 10 ) {
28
0
        return 0;
29
0
    }
30
11
    if ( header.sizex > 10240 ) {
31
0
        return 0;
32
0
    }
33
11
    if ( header.sizey > 10240 ) {
34
0
        return 0;
35
0
    }
36
37
11
    {
38
11
        const size_t totalOutSize = (header.bitDepth / 8) * header.channels * header.layers * header.sizex * header.sizey;
39
11
        if ( totalOutSize > (1024*1024) ) {
40
0
            return 0;
41
0
        }
42
11
        std::vector<uint8_t> out(totalOutSize);
43
11
        ptrdiff_t result = GFWX::decompress(out.data(), header, data, size, 0, false);
44
11
        if (result != GFWX::ResultOk) {
45
10
            return 0;
46
10
        }
47
1
        fuzzing::memory::memory_test(out);
48
1
    }
49
50
0
    return 0;
51
11
}