Coverage Report

Created: 2025-07-23 07:08

/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
184
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
24
184
  if (size < 24) {
25
8
    return 0;
26
8
  }
27
176
  char *opt_fuzz = malloc(24);
28
29
176
  memcpy(opt_fuzz, data, 23);
30
176
  opt_fuzz[23] = 0;
31
176
  data += 23;
32
176
  size -= 23;
33
34
176
  char *new_str = (char *)malloc(size + 1);
35
176
  if (new_str == NULL) {
36
0
    return 0;
37
0
  }
38
176
  memcpy(new_str, data, size);
39
176
  new_str[size] = '\0';
40
176
  my_argv[0] = "/tmp/fuzz/";
41
176
  my_argv[1] = opt_fuzz;
42
176
  my_argv[2] = new_str;
43
176
  my_argv[3] = NULL;
44
45
176
  scanopt_t sopt;
46
176
  sopt = scanopt_init(flexopts, 3, my_argv, 0);
47
176
  if (!sopt) {
48
0
    free(new_str);
49
0
    free(opt_fuzz);
50
0
    return 0;
51
0
  }
52
176
  int optind;
53
176
  char *arg;
54
176
  scanopt(sopt, &arg, &optind);
55
176
  scanopt_destroy(sopt);
56
57
176
  free(new_str);
58
176
  free(opt_fuzz);
59
176
  return 0;
60
176
}