/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.91k | return 0; |
27 | | |
28 | 1.67k | auto audio = audio_or_error.release_value(); |
29 | | |
30 | 81.6k | for (;;) { |
31 | 81.6k | auto samples = audio->load_chunks(4 * KiB); |
32 | 81.6k | if (samples.is_error()) |
33 | 851 | return 0; |
34 | 80.7k | if (samples.value().size() == 0) |
35 | 826 | break; |
36 | 80.7k | } |
37 | | |
38 | 826 | return 0; |
39 | 1.67k | } int fuzz_audio_loader<Audio::QOALoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::QOALoaderPlugin> Line | Count | Source | 20 | 796 | { | 21 | 796 | auto const bytes = ReadonlyBytes { data, size }; | 22 | 796 | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 796 | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 796 | if (audio_or_error.is_error()) | 26 | 306 | return 0; | 27 | | | 28 | 490 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 5.77k | for (;;) { | 31 | 5.77k | auto samples = audio->load_chunks(4 * KiB); | 32 | 5.77k | if (samples.is_error()) | 33 | 459 | return 0; | 34 | 5.31k | if (samples.value().size() == 0) | 35 | 31 | break; | 36 | 5.31k | } | 37 | | | 38 | 31 | return 0; | 39 | 490 | } |
int fuzz_audio_loader<Audio::WavLoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::WavLoaderPlugin> Line | Count | Source | 20 | 1.60k | { | 21 | 1.60k | auto const bytes = ReadonlyBytes { data, size }; | 22 | 1.60k | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 1.60k | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 1.60k | if (audio_or_error.is_error()) | 26 | 1.35k | return 0; | 27 | | | 28 | 244 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 1.19k | for (;;) { | 31 | 1.19k | auto samples = audio->load_chunks(4 * KiB); | 32 | 1.19k | if (samples.is_error()) | 33 | 97 | return 0; | 34 | 1.09k | if (samples.value().size() == 0) | 35 | 147 | break; | 36 | 1.09k | } | 37 | | | 38 | 147 | return 0; | 39 | 244 | } |
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 | 136 | return 0; | 27 | | | 28 | 157 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 66.6k | for (;;) { | 31 | 66.6k | auto samples = audio->load_chunks(4 * KiB); | 32 | 66.6k | if (samples.is_error()) | 33 | 155 | return 0; | 34 | 66.4k | if (samples.value().size() == 0) | 35 | 2 | break; | 36 | 66.4k | } | 37 | | | 38 | 2 | return 0; | 39 | 157 | } |
int fuzz_audio_loader<Audio::MP3LoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::MP3LoaderPlugin> Line | Count | Source | 20 | 903 | { | 21 | 903 | auto const bytes = ReadonlyBytes { data, size }; | 22 | 903 | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 903 | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 903 | if (audio_or_error.is_error()) | 26 | 117 | return 0; | 27 | | | 28 | 786 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 8.07k | for (;;) { | 31 | 8.07k | auto samples = audio->load_chunks(4 * KiB); | 32 | 8.07k | if (samples.is_error()) | 33 | 140 | return 0; | 34 | 7.93k | if (samples.value().size() == 0) | 35 | 646 | break; | 36 | 7.93k | } | 37 | | | 38 | 646 | return 0; | 39 | 786 | } |
|