/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 | 1.31k | #define kMinInputLength 2 |
14 | 658 | #define kMaxInputLength 20480 |
15 | | |
16 | | void load_res(char *file); |
17 | | |
18 | | extern int |
19 | | LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) |
20 | 659 | { |
21 | 659 | FILE *fp; |
22 | 659 | char file_name[256]; |
23 | | |
24 | 659 | if (size < kMinInputLength || size > kMaxInputLength) { |
25 | 16 | return 0; |
26 | 16 | } |
27 | | |
28 | 643 | sprintf(file_name, "/tmp/libfuzzer.%d", getpid()); |
29 | | |
30 | 643 | fp = fopen(file_name, "w"); |
31 | 643 | if (fp == NULL) { |
32 | 0 | return 0; |
33 | 0 | } |
34 | | |
35 | 643 | fwrite(data, sizeof(char), size, fp); |
36 | 643 | fclose(fp); |
37 | | |
38 | 643 | load_res(file_name); |
39 | 643 | unlink(file_name); |
40 | | |
41 | 643 | return 0; |
42 | 643 | } |
43 | | |
44 | | void load_res(char *file) |
45 | 643 | { |
46 | 643 | int fd; |
47 | 643 | cups_raster_t *ras; |
48 | 643 | cups_page_header2_t header; |
49 | | |
50 | 643 | fd = open(file, O_RDONLY); |
51 | 643 | if (fd < 0) { |
52 | 0 | return; |
53 | 0 | } |
54 | | |
55 | 643 | ras = cupsRasterOpen(fd, CUPS_RASTER_READ); |
56 | 643 | if(ras == NULL) { |
57 | 232 | close(fd); |
58 | 232 | return; |
59 | 232 | } |
60 | | |
61 | 411 | cupsRasterReadHeader2(ras, &header); |
62 | | |
63 | 411 | cupsRasterClose(ras); |
64 | 411 | close(fd); |
65 | 411 | } |