Coverage Report

Created: 2025-07-11 06:18

/src/fuzz-scanopt.c
Line
Count
Source (jump to first uncovered line)
1
/* Copyright 2023 Google LLC
2
Licensed under the Apache License, Version 2.0 (the "License");
3
you may not use this file except in compliance with the License.
4
You may obtain a copy of the License at
5
      http://www.apache.org/licenses/LICENSE-2.0
6
Unless required by applicable law or agreed to in writing, software
7
distributed under the License is distributed on an "AS IS" BASIS,
8
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9
See the License for the specific language governing permissions and
10
limitations under the License.
11
*/
12
13
#include <stdint.h>
14
#include <stdlib.h>
15
#include <string.h>
16
17
#include "flexdef.h"
18
#include "options.h"
19
#include "scanopt.h"
20
21
char *my_argv[4];
22
23
191
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
24
191
  if (size < 24) {
25
8
    return 0;
26
8
  }
27
183
  char *opt_fuzz = malloc(24);
28
29
183
  memcpy(opt_fuzz, data, 23);
30
183
  opt_fuzz[23] = 0;
31
183
  data += 23;
32
183
  size -= 23;
33
34
183
  char *new_str = (char *)malloc(size + 1);
35
183
  if (new_str == NULL) {
36
0
    return 0;
37
0
  }
38
183
  memcpy(new_str, data, size);
39
183
  new_str[size] = '\0';
40
183
  my_argv[0] = "/tmp/fuzz/";
41
183
  my_argv[1] = opt_fuzz;
42
183
  my_argv[2] = new_str;
43
183
  my_argv[3] = NULL;
44
45
183
  scanopt_t sopt;
46
183
  sopt = scanopt_init(flexopts, 3, my_argv, 0);
47
183
  if (!sopt) {
48
0
    free(new_str);
49
0
    free(opt_fuzz);
50
0
    return 0;
51
0
  }
52
183
  int optind;
53
183
  char *arg;
54
183
  scanopt(sopt, &arg, &optind);
55
183
  scanopt_destroy(sopt);
56
57
183
  free(new_str);
58
183
  free(opt_fuzz);
59
183
  return 0;
60
183
}