Coverage Report

Created: 2026-08-31 06:19

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.45k
    uint8_t action = data[0];
31
1.45k
    data++;
32
1.45k
    size--;
33
34
1.45k
    buffer *b = buffer_init();
35
1.45k
    buffer_copy_string_len(b, (const char *)data, size);
36
37
1.45k
    switch (action % 12) {
38
166
        case 0:
39
166
            buffer_urldecode_path(b);
40
166
            break;
41
218
        case 1:
42
218
            buffer_path_simplify(b);
43
218
            break;
44
1
        case 2:
45
1
            buffer_is_valid_UTF8(b);
46
1
            break;
47
45
        case 3:
48
45
            buffer_to_lower(b);
49
45
            break;
50
46
        case 4:
51
46
            buffer_to_upper(b);
52
46
            break;
53
43
        case 5:
54
43
            {
55
43
                buffer *dest = buffer_init();
56
43
                buffer_append_string_encoded(dest, b->ptr, buffer_clen(b), ENCODING_REL_URI);
57
43
                buffer_free(dest);
58
43
            }
59
43
            break;
60
153
        case 6:
61
153
            {
62
153
                buffer *dest = buffer_init();
63
153
                buffer_append_string_encoded(dest, b->ptr, buffer_clen(b), ENCODING_HTML);
64
153
                buffer_free(dest);
65
153
            }
66
153
            break;
67
143
        case 7:
68
143
            {
69
143
                buffer *dest = buffer_init();
70
143
                buffer_append_string_c_escaped(dest, b->ptr, buffer_clen(b));
71
143
                buffer_free(dest);
72
143
            }
73
143
            break;
74
168
        case 8:
75
168
            {
76
168
                buffer *dest = buffer_init();
77
168
                buffer_append_bs_escaped(dest, b->ptr, buffer_clen(b));
78
168
                buffer_free(dest);
79
168
            }
80
168
            break;
81
258
        case 9:
82
258
            {
83
258
                buffer *dest = buffer_init();
84
258
                buffer_append_bs_escaped_json(dest, b->ptr, buffer_clen(b));
85
258
                buffer_free(dest);
86
258
            }
87
258
            break;
88
78
        case 10:
89
78
            {
90
78
                buffer *dest = buffer_init();
91
78
                buffer_append_base64_enc(dest, (const unsigned char *)b->ptr, buffer_clen(b), BASE64_STANDARD, 1);
92
78
                buffer_free(dest);
93
78
            }
94
78
            break;
95
140
        case 11:
96
140
            {
97
140
                buffer *dest = buffer_init();
98
140
                buffer_append_base64_decode(dest, b->ptr, buffer_clen(b), BASE64_STANDARD);
99
140
                buffer_free(dest);
100
140
            }
101
140
            break;
102
1.45k
    }
103
104
1.45k
    buffer_free(b);
105
106
1.45k
    return 0;
107
1.45k
}