Coverage Report

Created: 2026-07-10 07:00

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
167
        case 0:
39
167
            buffer_urldecode_path(b);
40
167
            break;
41
233
        case 1:
42
233
            buffer_path_simplify(b);
43
233
            break;
44
1
        case 2:
45
1
            buffer_is_valid_UTF8(b);
46
1
            break;
47
43
        case 3:
48
43
            buffer_to_lower(b);
49
43
            break;
50
48
        case 4:
51
48
            buffer_to_upper(b);
52
48
            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
151
        case 6:
61
151
            {
62
151
                buffer *dest = buffer_init();
63
151
                buffer_append_string_encoded(dest, b->ptr, buffer_clen(b), ENCODING_HTML);
64
151
                buffer_free(dest);
65
151
            }
66
151
            break;
67
145
        case 7:
68
145
            {
69
145
                buffer *dest = buffer_init();
70
145
                buffer_append_string_c_escaped(dest, b->ptr, buffer_clen(b));
71
145
                buffer_free(dest);
72
145
            }
73
145
            break;
74
175
        case 8:
75
175
            {
76
175
                buffer *dest = buffer_init();
77
175
                buffer_append_bs_escaped(dest, b->ptr, buffer_clen(b));
78
175
                buffer_free(dest);
79
175
            }
80
175
            break;
81
249
        case 9:
82
249
            {
83
249
                buffer *dest = buffer_init();
84
249
                buffer_append_bs_escaped_json(dest, b->ptr, buffer_clen(b));
85
249
                buffer_free(dest);
86
249
            }
87
249
            break;
88
80
        case 10:
89
80
            {
90
80
                buffer *dest = buffer_init();
91
80
                buffer_append_base64_enc(dest, (const unsigned char *)b->ptr, buffer_clen(b), BASE64_STANDARD, 1);
92
80
                buffer_free(dest);
93
80
            }
94
80
            break;
95
126
        case 11:
96
126
            {
97
126
                buffer *dest = buffer_init();
98
126
                buffer_append_base64_decode(dest, b->ptr, buffer_clen(b), BASE64_STANDARD);
99
126
                buffer_free(dest);
100
126
            }
101
126
            break;
102
1.45k
    }
103
104
1.45k
    buffer_free(b);
105
106
1.45k
    return 0;
107
1.45k
}