/src/cups/ossfuzz/fuzz_raster.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Fuzztest for `cupsRasterReadHeader2`. |
3 | | * |
4 | | * Copyright © 2024 by OpenPrinting. |
5 | | * |
6 | | * Licensed under Apache License v2.0. See the file "LICENSE" for more |
7 | | * information. |
8 | | */ |
9 | | |
10 | | #include <cups/raster-private.h> |
11 | | |
12 | | /* I'm aware that the maximum size is 20KB.*/ |
13 | 5.01k | #define kMinInputLength 2 |
14 | 2.50k | #define kMaxInputLength 20480 |
15 | | |
16 | | void load_res(char *file); |
17 | | |
18 | | extern int |
19 | | LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) |
20 | 2.50k | { |
21 | 2.50k | FILE *fp; |
22 | 2.50k | char file_name[256]; |
23 | | |
24 | 2.50k | if (size < kMinInputLength || size > kMaxInputLength) { |
25 | 32 | return 0; |
26 | 32 | } |
27 | | |
28 | 2.47k | sprintf(file_name, "/tmp/libfuzzer.%d", getpid()); |
29 | | |
30 | 2.47k | fp = fopen(file_name, "w"); |
31 | 2.47k | if (fp == NULL) { |
32 | 0 | return 0; |
33 | 0 | } |
34 | | |
35 | 2.47k | fwrite(data, sizeof(char), size, fp); |
36 | 2.47k | fclose(fp); |
37 | | |
38 | 2.47k | load_res(file_name); |
39 | 2.47k | unlink(file_name); |
40 | | |
41 | 2.47k | return 0; |
42 | 2.47k | } |
43 | | |
44 | | void load_res(char *file) |
45 | 616 | { |
46 | 616 | int fd; |
47 | 616 | cups_raster_t *ras; |
48 | 616 | cups_page_header2_t header; |
49 | | |
50 | 616 | fd = open(file, O_RDONLY); |
51 | 616 | if (fd < 0) { |
52 | 0 | return; |
53 | 0 | } |
54 | | |
55 | 616 | ras = cupsRasterOpen(fd, CUPS_RASTER_READ); |
56 | 616 | if(ras == NULL) { |
57 | 236 | close(fd); |
58 | 236 | return; |
59 | 236 | } |
60 | | |
61 | 380 | cupsRasterReadHeader2(ras, &header); |
62 | | |
63 | 380 | cupsRasterClose(ras); |
64 | 380 | close(fd); |
65 | 380 | } |