/src/serenity/Meta/Lagom/Fuzzers/AudioFuzzerCommon.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2022, Luke Wilde <lukew@serenityos.org> |
3 | | * Copyright (c) 2023, kleines Filmröllchen <filmroellchen@serenityos.org> |
4 | | * Copyright (c) 2021-2023, the SerenityOS developers. |
5 | | * |
6 | | * SPDX-License-Identifier: BSD-2-Clause |
7 | | */ |
8 | | |
9 | | #pragma once |
10 | | |
11 | | #include <AK/Concepts.h> |
12 | | #include <AK/MemoryStream.h> |
13 | | #include <LibAudio/Loader.h> |
14 | | #include <stddef.h> |
15 | | #include <stdint.h> |
16 | | |
17 | | template<typename LoaderPluginType> |
18 | | requires(IsBaseOf<Audio::LoaderPlugin, LoaderPluginType>) |
19 | | int fuzz_audio_loader(uint8_t const* data, size_t size) |
20 | 3.59k | { |
21 | 3.59k | auto const bytes = ReadonlyBytes { data, size }; |
22 | 3.59k | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); |
23 | 3.59k | auto audio_or_error = LoaderPluginType::create(move(stream)); |
24 | | |
25 | 3.59k | if (audio_or_error.is_error()) |
26 | 1.86k | return 0; |
27 | | |
28 | 1.72k | auto audio = audio_or_error.release_value(); |
29 | | |
30 | 89.6k | for (;;) { |
31 | 89.6k | auto samples = audio->load_chunks(4 * KiB); |
32 | 89.6k | if (samples.is_error()) |
33 | 867 | return 0; |
34 | 88.8k | if (samples.value().size() == 0) |
35 | 862 | break; |
36 | 88.8k | } |
37 | | |
38 | 862 | return 0; |
39 | 1.72k | } int fuzz_audio_loader<Audio::QOALoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::QOALoaderPlugin> Line | Count | Source | 20 | 761 | { | 21 | 761 | auto const bytes = ReadonlyBytes { data, size }; | 22 | 761 | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 761 | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 761 | if (audio_or_error.is_error()) | 26 | 286 | return 0; | 27 | | | 28 | 475 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 5.46k | for (;;) { | 31 | 5.46k | auto samples = audio->load_chunks(4 * KiB); | 32 | 5.46k | if (samples.is_error()) | 33 | 443 | return 0; | 34 | 5.01k | if (samples.value().size() == 0) | 35 | 32 | break; | 36 | 5.01k | } | 37 | | | 38 | 32 | return 0; | 39 | 475 | } |
int fuzz_audio_loader<Audio::WavLoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::WavLoaderPlugin> Line | Count | Source | 20 | 1.58k | { | 21 | 1.58k | auto const bytes = ReadonlyBytes { data, size }; | 22 | 1.58k | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 1.58k | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 1.58k | if (audio_or_error.is_error()) | 26 | 1.32k | return 0; | 27 | | | 28 | 258 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 1.21k | for (;;) { | 31 | 1.21k | auto samples = audio->load_chunks(4 * KiB); | 32 | 1.21k | if (samples.is_error()) | 33 | 104 | return 0; | 34 | 1.11k | if (samples.value().size() == 0) | 35 | 154 | break; | 36 | 1.11k | } | 37 | | | 38 | 154 | return 0; | 39 | 258 | } |
int fuzz_audio_loader<Audio::FlacLoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::FlacLoaderPlugin> Line | Count | Source | 20 | 293 | { | 21 | 293 | auto const bytes = ReadonlyBytes { data, size }; | 22 | 293 | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 293 | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 293 | if (audio_or_error.is_error()) | 26 | 139 | return 0; | 27 | | | 28 | 154 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 74.8k | for (;;) { | 31 | 74.8k | auto samples = audio->load_chunks(4 * KiB); | 32 | 74.8k | if (samples.is_error()) | 33 | 152 | return 0; | 34 | 74.7k | if (samples.value().size() == 0) | 35 | 2 | break; | 36 | 74.7k | } | 37 | | | 38 | 2 | return 0; | 39 | 154 | } |
int fuzz_audio_loader<Audio::MP3LoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::MP3LoaderPlugin> Line | Count | Source | 20 | 956 | { | 21 | 956 | auto const bytes = ReadonlyBytes { data, size }; | 22 | 956 | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 956 | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 956 | if (audio_or_error.is_error()) | 26 | 114 | return 0; | 27 | | | 28 | 842 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 8.09k | for (;;) { | 31 | 8.09k | auto samples = audio->load_chunks(4 * KiB); | 32 | 8.09k | if (samples.is_error()) | 33 | 168 | return 0; | 34 | 7.92k | if (samples.value().size() == 0) | 35 | 674 | break; | 36 | 7.92k | } | 37 | | | 38 | 674 | return 0; | 39 | 842 | } |
|