/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 | 1.99k | { |
21 | 1.99k | auto const bytes = ReadonlyBytes { data, size }; |
22 | 1.99k | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); |
23 | 1.99k | auto audio_or_error = LoaderPluginType::create(move(stream)); |
24 | | |
25 | 1.99k | if (audio_or_error.is_error()) |
26 | 575 | return 0; |
27 | | |
28 | 1.41k | auto audio = audio_or_error.release_value(); |
29 | | |
30 | 106k | for (;;) { |
31 | 106k | auto samples = audio->load_chunks(4 * KiB); |
32 | 106k | if (samples.is_error()) |
33 | 749 | return 0; |
34 | 105k | if (samples.value().size() == 0) |
35 | 668 | break; |
36 | 105k | } |
37 | | |
38 | 668 | return 0; |
39 | 1.41k | } int fuzz_audio_loader<Audio::QOALoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::QOALoaderPlugin> Line | Count | Source | 20 | 823 | { | 21 | 823 | auto const bytes = ReadonlyBytes { data, size }; | 22 | 823 | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 823 | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 823 | if (audio_or_error.is_error()) | 26 | 309 | return 0; | 27 | | | 28 | 514 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 11.7k | for (;;) { | 31 | 11.7k | auto samples = audio->load_chunks(4 * KiB); | 32 | 11.7k | if (samples.is_error()) | 33 | 481 | return 0; | 34 | 11.2k | if (samples.value().size() == 0) | 35 | 33 | break; | 36 | 11.2k | } | 37 | | | 38 | 33 | return 0; | 39 | 514 | } |
Unexecuted instantiation: int fuzz_audio_loader<Audio::WavLoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::WavLoaderPlugin> int fuzz_audio_loader<Audio::FlacLoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::FlacLoaderPlugin> Line | Count | Source | 20 | 282 | { | 21 | 282 | auto const bytes = ReadonlyBytes { data, size }; | 22 | 282 | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 282 | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 282 | if (audio_or_error.is_error()) | 26 | 136 | return 0; | 27 | | | 28 | 146 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 86.5k | for (;;) { | 31 | 86.5k | auto samples = audio->load_chunks(4 * KiB); | 32 | 86.5k | if (samples.is_error()) | 33 | 143 | return 0; | 34 | 86.4k | if (samples.value().size() == 0) | 35 | 3 | break; | 36 | 86.4k | } | 37 | | | 38 | 3 | return 0; | 39 | 146 | } |
int fuzz_audio_loader<Audio::MP3LoaderPlugin>(unsigned char const*, unsigned long) requires IsBaseOf<Audio::LoaderPlugin, Audio::MP3LoaderPlugin> Line | Count | Source | 20 | 887 | { | 21 | 887 | auto const bytes = ReadonlyBytes { data, size }; | 22 | 887 | auto stream = try_make<FixedMemoryStream>(bytes).release_value(); | 23 | 887 | auto audio_or_error = LoaderPluginType::create(move(stream)); | 24 | | | 25 | 887 | if (audio_or_error.is_error()) | 26 | 130 | return 0; | 27 | | | 28 | 757 | auto audio = audio_or_error.release_value(); | 29 | | | 30 | 7.72k | for (;;) { | 31 | 7.72k | auto samples = audio->load_chunks(4 * KiB); | 32 | 7.72k | if (samples.is_error()) | 33 | 125 | return 0; | 34 | 7.60k | if (samples.value().size() == 0) | 35 | 632 | break; | 36 | 7.60k | } | 37 | | | 38 | 632 | return 0; | 39 | 757 | } |
|