Coverage Report

Created: 2026-04-12 06:26

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libsndfile/ossfuzz/sndfile_alt_fuzzer.cc
Line
Count
Source
1
#include <stdlib.h>
2
#include <string.h>
3
#include <sys/types.h>
4
#include <sndfile.h>
5
#include <inttypes.h>
6
7
#include "sndfile_fuzz_header.h"
8
9
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
10
17.8k
{   // One byte is needed for deciding which function to target.
11
17.8k
    if (size == 0)
12
0
       return 0 ;
13
14
17.8k
    const uint8_t decider = *data ;
15
17.8k
    data += 1 ;
16
17.8k
    size -= 1 ;
17
18
17.8k
    SF_INFO sndfile_info ;
19
17.8k
    VIO_DATA vio_data ;
20
17.8k
    SF_VIRTUAL_IO vio ;
21
17.8k
    SNDFILE *sndfile = NULL ;
22
17.8k
    int err = sf_init_file(data, size, &sndfile, &vio_data, &vio, &sndfile_info) ;
23
17.8k
    if (err)
24
13.0k
      goto EXIT_LABEL ;
25
26
    // Just the right number of channels. Create some buffer space for reading.
27
4.77k
    switch (decider % 3)
28
4.77k
    {   case 0  :
29
1.46k
                {
30
1.46k
                  short* read_buffer = NULL ;
31
1.46k
                  read_buffer = (short*)malloc(sizeof(short) * size);
32
1.46k
                  if (read_buffer == NULL)
33
0
                    abort() ;
34
35
1.82M
                  while (sf_read_short(sndfile, read_buffer, size))
36
1.82M
                  {
37
                    // Do nothing with the data.
38
1.82M
                  }
39
1.46k
                  free(read_buffer) ;
40
1.46k
                }
41
0
                break ;
42
1.55k
        case 1  :
43
1.55k
                {
44
1.55k
                  int* read_buffer = NULL ;
45
1.55k
                  read_buffer = (int*)malloc(sizeof(int) * size) ;
46
1.55k
                  if (read_buffer == NULL)
47
0
                    abort() ;
48
49
1.84M
                  while (sf_read_int(sndfile, read_buffer, size))
50
1.83M
                  {
51
                    // Do nothing with the data.
52
1.83M
                  }
53
1.55k
                  free(read_buffer) ;
54
1.55k
                }
55
0
                break ;
56
1.75k
        case 2  :
57
1.75k
                {
58
1.75k
                  double* read_buffer = NULL ;
59
1.75k
                  read_buffer = (double*)malloc(sizeof(double) * size) ;
60
1.75k
                  if (read_buffer == NULL)
61
0
                    abort() ;
62
63
2.21M
                  while (sf_read_double(sndfile, read_buffer, size))
64
2.21M
                  {
65
                    // Do nothing with the data.
66
2.21M
                  }
67
1.75k
                  free(read_buffer) ;
68
1.75k
                }
69
0
                break ;
70
0
        default :
71
0
                break ;
72
4.77k
                } ;
73
74
17.8k
  EXIT_LABEL:
75
17.8k
    if (sndfile != NULL)
76
4.77k
      sf_close(sndfile);
77
78
17.8k
    return 0 ;
79
4.77k
}