Coverage Report

Created: 2025-08-29 06:03

/src/zip/fuzz/fuzz_stream.c
Line
Count
Source (jump to first uncovered line)
1
#include "zip.h"
2
#include <assert.h>
3
#include <stdint.h>
4
#include <stdlib.h>
5
6
2.09k
int LLVMFuzzerTestOneInput(const uint8_t *data, const size_t size) {
7
  /* Discard inputs larger than 1MB. */
8
2.09k
  static const size_t MaxSize = 1024 * 1024;
9
2.09k
  if (size < 1 || size > MaxSize) {
10
0
    return 0;
11
0
  }
12
13
2.09k
  char *outbuf = NULL;
14
2.09k
  size_t outbufsize = 0;
15
2.09k
  {
16
2.09k
    struct zip_t *zip =
17
2.09k
        zip_stream_open(NULL, 0, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w');
18
2.09k
    zip_entry_open(zip, "test");
19
2.09k
    zip_entry_write(zip, data, size);
20
2.09k
    zip_entry_close(zip);
21
2.09k
    zip_stream_copy(zip, (void **)&outbuf, &outbufsize);
22
2.09k
    zip_stream_close(zip);
23
2.09k
  }
24
25
2.09k
  void *inbuf = NULL;
26
2.09k
  size_t inbufsize = 0;
27
2.09k
  {
28
2.09k
    struct zip_t *zip = zip_stream_open(outbuf, outbufsize, 0, 'r');
29
2.09k
    zip_entry_open(zip, "test");
30
2.09k
    zip_entry_read(zip, &inbuf, &inbufsize);
31
2.09k
    zip_entry_close(zip);
32
2.09k
    zip_stream_close(zip);
33
2.09k
  }
34
2.09k
  free(inbuf);
35
2.09k
  free(outbuf);
36
37
2.09k
  assert(inbufsize == size);
38
39
2.09k
  return 0;
40
2.09k
}