Coverage Report

Created: 2025-11-11 06:08

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cjson/fuzzing/cjson_read_fuzzer.c
Line
Count
Source
1
#include <stdlib.h>
2
#include <stdint.h>
3
#include <string.h>
4
5
#ifdef __cplusplus
6
extern "C" {
7
#endif
8
9
#include "../cJSON.h"
10
11
int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size); /* required by C89 */
12
13
int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
14
2.00k
{
15
2.00k
    cJSON *json;
16
2.00k
    size_t offset = 4;
17
2.00k
    unsigned char *copied;
18
2.00k
    char *printed_json = NULL;
19
2.00k
    int minify, require_termination, formatted, buffered;
20
21
22
2.00k
    if(size <= offset) return 0;
23
1.99k
    if(data[size-1] != '\0') return 0;
24
1.98k
    if(data[0] != '1' && data[0] != '0') return 0;
25
1.97k
    if(data[1] != '1' && data[1] != '0') return 0;
26
1.95k
    if(data[2] != '1' && data[2] != '0') return 0;
27
1.94k
    if(data[3] != '1' && data[3] != '0') return 0;
28
29
1.93k
    minify              = data[0] == '1' ? 1 : 0;
30
1.93k
    require_termination = data[1] == '1' ? 1 : 0;
31
1.93k
    formatted           = data[2] == '1' ? 1 : 0;
32
1.93k
    buffered            = data[3] == '1' ? 1 : 0;
33
34
1.93k
    json = cJSON_ParseWithOpts((const char*)data + offset, NULL, require_termination);
35
36
1.93k
    if(json == NULL) return 0;
37
38
1.04k
    if(buffered)
39
601
    {
40
601
        printed_json = cJSON_PrintBuffered(json, 1, formatted);
41
601
    }
42
446
    else
43
446
    {
44
        /* unbuffered printing */
45
446
        if(formatted)
46
247
        {
47
247
            printed_json = cJSON_Print(json);
48
247
        }
49
199
        else
50
199
        {
51
199
            printed_json = cJSON_PrintUnformatted(json);
52
199
        }
53
446
    }
54
55
1.04k
    if(printed_json != NULL) free(printed_json);
56
57
1.04k
    if(minify)
58
857
    {
59
857
        copied = (unsigned char*)malloc(size);
60
857
        if(copied == NULL) return 0;
61
62
857
        memcpy(copied, data, size);
63
64
857
        cJSON_Minify((char*)copied + offset);
65
66
857
        free(copied);
67
857
    }
68
69
1.04k
    cJSON_Delete(json);
70
71
1.04k
    return 0;
72
1.04k
}
73
74
#ifdef __cplusplus
75
}
76
#endif
77