/src/gpac/testsuite/oss-fuzzers/fuzz_parse.c
Line | Count | Source |
1 | | #include <stdio.h> |
2 | | #include <unistd.h> |
3 | | #include <gpac/isomedia.h> |
4 | | #include <gpac/internal/isomedia_dev.h> |
5 | | #include <gpac/media_tools.h> |
6 | | #include <gpac/constants.h> |
7 | | #include <gpac/setup.h> |
8 | | |
9 | | /* |
10 | | ** Reproducer command-line: |
11 | | ** MP4Box -fuzz-chk <poc> |
12 | | */ |
13 | | |
14 | 4 | int LLVMFuzzerInitialize(int *argc, char ***argv) { |
15 | 4 | gf_log_set_tool_level(GF_LOG_ALL, GF_LOG_QUIET); |
16 | 4 | return 0; |
17 | 4 | } |
18 | | |
19 | 24.1k | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
20 | 24.1k | if (size < 8 || size > 65536) return 0; |
21 | | |
22 | 24.0k | char filename[256]; |
23 | 24.0k | sprintf(filename, "/tmp/libfuzzer.%d", getpid()); |
24 | 24.0k | FILE *fp = fopen(filename, "wb"); |
25 | 24.0k | if (!fp) { |
26 | 0 | return 0; |
27 | 0 | } |
28 | 24.0k | fwrite(data, size, 1, fp); |
29 | 24.0k | fclose(fp); |
30 | | |
31 | 24.0k | GF_ISOFile *movie = NULL; |
32 | 24.0k | movie = gf_isom_open_file(filename, GF_ISOM_OPEN_READ_DUMP, NULL); |
33 | 24.0k | if (movie != NULL) { |
34 | 17.0k | u32 i, count = gf_isom_get_track_count(movie); |
35 | 17.6k | for (i = 1; i <= count && i <= 16; i++) { |
36 | 518 | gf_isom_get_media_type(movie, i); |
37 | 518 | gf_isom_get_media_subtype(movie, i, 1); |
38 | 518 | gf_isom_get_sample_count(movie, i); |
39 | 518 | gf_isom_get_media_timescale(movie, i); |
40 | | |
41 | 518 | u32 w, h; |
42 | 518 | gf_isom_get_visual_info(movie, i, 1, &w, &h); |
43 | | |
44 | 518 | u32 sr, nb_ch, bps; |
45 | 518 | gf_isom_get_audio_info(movie, i, 1, &sr, &nb_ch, &bps); |
46 | | |
47 | 518 | GF_DecoderConfig *dcfg = gf_isom_get_decoder_config(movie, i, 1); |
48 | 518 | if (dcfg) gf_odf_desc_del((GF_Descriptor *)dcfg); |
49 | 518 | } |
50 | 17.0k | gf_isom_close(movie); |
51 | 17.0k | } |
52 | 24.0k | unlink(filename); |
53 | 24.0k | return 0; |
54 | 24.0k | } |