Coverage Report

Created: 2026-07-16 06:46

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.45k
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
26
1.45k
    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
165
        case 0:
39
165
            buffer_urldecode_path(b);
40
165
            break;
41
225
        case 1:
42
225
            buffer_path_simplify(b);
43
225
            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
47
        case 4:
51
47
            buffer_to_upper(b);
52
47
            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
149
        case 6:
61
149
            {
62
149
                buffer *dest = buffer_init();
63
149
                buffer_append_string_encoded(dest, b->ptr, buffer_clen(b), ENCODING_HTML);
64
149
                buffer_free(dest);
65
149
            }
66
149
            break;
67
144
        case 7:
68
144
            {
69
144
                buffer *dest = buffer_init();
70
144
                buffer_append_string_c_escaped(dest, b->ptr, buffer_clen(b));
71
144
                buffer_free(dest);
72
144
            }
73
144
            break;
74
173
        case 8:
75
173
            {
76
173
                buffer *dest = buffer_init();
77
173
                buffer_append_bs_escaped(dest, b->ptr, buffer_clen(b));
78
173
                buffer_free(dest);
79
173
            }
80
173
            break;
81
250
        case 9:
82
250
            {
83
250
                buffer *dest = buffer_init();
84
250
                buffer_append_bs_escaped_json(dest, b->ptr, buffer_clen(b));
85
250
                buffer_free(dest);
86
250
            }
87
250
            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
133
        case 11:
96
133
            {
97
133
                buffer *dest = buffer_init();
98
133
                buffer_append_base64_decode(dest, b->ptr, buffer_clen(b), BASE64_STANDARD);
99
133
                buffer_free(dest);
100
133
            }
101
133
            break;
102
1.45k
    }
103
104
1.45k
    buffer_free(b);
105
106
1.45k
    return 0;
107
1.45k
}