Coverage Report

Created: 2026-09-07 06:29

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
162
        case 0:
39
162
            buffer_urldecode_path(b);
40
162
            break;
41
223
        case 1:
42
223
            buffer_path_simplify(b);
43
223
            break;
44
1
        case 2:
45
1
            buffer_is_valid_UTF8(b);
46
1
            break;
47
47
        case 3:
48
47
            buffer_to_lower(b);
49
47
            break;
50
50
        case 4:
51
50
            buffer_to_upper(b);
52
50
            break;
53
40
        case 5:
54
40
            {
55
40
                buffer *dest = buffer_init();
56
40
                buffer_append_string_encoded(dest, b->ptr, buffer_clen(b), ENCODING_REL_URI);
57
40
                buffer_free(dest);
58
40
            }
59
40
            break;
60
155
        case 6:
61
155
            {
62
155
                buffer *dest = buffer_init();
63
155
                buffer_append_string_encoded(dest, b->ptr, buffer_clen(b), ENCODING_HTML);
64
155
                buffer_free(dest);
65
155
            }
66
155
            break;
67
148
        case 7:
68
148
            {
69
148
                buffer *dest = buffer_init();
70
148
                buffer_append_string_c_escaped(dest, b->ptr, buffer_clen(b));
71
148
                buffer_free(dest);
72
148
            }
73
148
            break;
74
171
        case 8:
75
171
            {
76
171
                buffer *dest = buffer_init();
77
171
                buffer_append_bs_escaped(dest, b->ptr, buffer_clen(b));
78
171
                buffer_free(dest);
79
171
            }
80
171
            break;
81
253
        case 9:
82
253
            {
83
253
                buffer *dest = buffer_init();
84
253
                buffer_append_bs_escaped_json(dest, b->ptr, buffer_clen(b));
85
253
                buffer_free(dest);
86
253
            }
87
253
            break;
88
79
        case 10:
89
79
            {
90
79
                buffer *dest = buffer_init();
91
79
                buffer_append_base64_enc(dest, (const unsigned char *)b->ptr, buffer_clen(b), BASE64_STANDARD, 1);
92
79
                buffer_free(dest);
93
79
            }
94
79
            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
}