Coverage Report

Created: 2026-09-14 07:15

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
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
}