Coverage Report

Created: 2026-09-03 06:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/fuzz_utils.c
Line
Count
Source
1
/* Copyright 2026 Google LLC
2
3
Licensed under the Apache License, Version 2.0 (the "License");
4
you may not use this file except in compliance with the License.
5
You may obtain a copy of the License at
6
7
      http://www.apache.org/licenses/LICENSE-2.0
8
9
Unless required by applicable law or agreed to in writing, software
10
distributed under the License is distributed on an "AS IS" BASIS,
11
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
See the License for the specific language governing permissions and
13
limitations under the License.
14
*/
15
16
#include <stdio.h>
17
#include <stdlib.h>
18
#include <stdint.h>
19
#include <string.h>
20
21
#include "first.h"
22
#include "buffer.h"
23
#include "base64.h"
24
25
1.46k
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
26
1.46k
    if (size < 2) {
27
1
        return 0;
28
1
    }
29
30
1.46k
    uint8_t action = data[0];
31
1.46k
    data++;
32
1.46k
    size--;
33
34
1.46k
    buffer *b = buffer_init();
35
1.46k
    buffer_copy_string_len(b, (const char *)data, size);
36
37
1.46k
    switch (action % 12) {
38
170
        case 0:
39
170
            buffer_urldecode_path(b);
40
170
            break;
41
226
        case 1:
42
226
            buffer_path_simplify(b);
43
226
            break;
44
1
        case 2:
45
1
            buffer_is_valid_UTF8(b);
46
1
            break;
47
46
        case 3:
48
46
            buffer_to_lower(b);
49
46
            break;
50
47
        case 4:
51
47
            buffer_to_upper(b);
52
47
            break;
53
41
        case 5:
54
41
            {
55
41
                buffer *dest = buffer_init();
56
41
                buffer_append_string_encoded(dest, b->ptr, buffer_clen(b), ENCODING_REL_URI);
57
41
                buffer_free(dest);
58
41
            }
59
41
            break;
60
156
        case 6:
61
156
            {
62
156
                buffer *dest = buffer_init();
63
156
                buffer_append_string_encoded(dest, b->ptr, buffer_clen(b), ENCODING_HTML);
64
156
                buffer_free(dest);
65
156
            }
66
156
            break;
67
147
        case 7:
68
147
            {
69
147
                buffer *dest = buffer_init();
70
147
                buffer_append_string_c_escaped(dest, b->ptr, buffer_clen(b));
71
147
                buffer_free(dest);
72
147
            }
73
147
            break;
74
169
        case 8:
75
169
            {
76
169
                buffer *dest = buffer_init();
77
169
                buffer_append_bs_escaped(dest, b->ptr, buffer_clen(b));
78
169
                buffer_free(dest);
79
169
            }
80
169
            break;
81
256
        case 9:
82
256
            {
83
256
                buffer *dest = buffer_init();
84
256
                buffer_append_bs_escaped_json(dest, b->ptr, buffer_clen(b));
85
256
                buffer_free(dest);
86
256
            }
87
256
            break;
88
76
        case 10:
89
76
            {
90
76
                buffer *dest = buffer_init();
91
76
                buffer_append_base64_enc(dest, (const unsigned char *)b->ptr, buffer_clen(b), BASE64_STANDARD, 1);
92
76
                buffer_free(dest);
93
76
            }
94
76
            break;
95
131
        case 11:
96
131
            {
97
131
                buffer *dest = buffer_init();
98
131
                buffer_append_base64_decode(dest, b->ptr, buffer_clen(b), BASE64_STANDARD);
99
131
                buffer_free(dest);
100
131
            }
101
131
            break;
102
1.46k
    }
103
104
1.46k
    buffer_free(b);
105
106
1.46k
    return 0;
107
1.46k
}