Coverage Report

Created: 2026-02-16 07:47

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}