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/FuzzTar.cpp
Line
Count
Source
1
/*
2
 * Copyright (c) 2022, Idan Horowitz <idan.horowitz@serenityos.org>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#include <AK/MemoryStream.h>
8
#include <AK/NonnullOwnPtr.h>
9
#include <LibArchive/TarStream.h>
10
#include <stdio.h>
11
12
extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size)
13
419
{
14
419
    AK::set_debug_enabled(false);
15
16
419
    auto input_stream_or_error = try_make<FixedMemoryStream>(ReadonlyBytes { data, size });
17
18
419
    if (input_stream_or_error.is_error())
19
0
        return 0;
20
21
419
    auto tar_stream_or_error = Archive::TarInputStream::construct(input_stream_or_error.release_value());
22
23
419
    if (tar_stream_or_error.is_error())
24
12
        return 0;
25
26
407
    auto tar_stream = tar_stream_or_error.release_value();
27
28
7.35k
    while (!tar_stream->finished()) {
29
7.28k
        auto const& header = tar_stream->header();
30
31
7.28k
        if (!header.content_is_like_extended_header()) {
32
2.53k
            if (tar_stream->advance().is_error())
33
48
                return 0;
34
2.48k
            else
35
2.48k
                continue;
36
2.53k
        }
37
38
4.75k
        switch (header.type_flag()) {
39
983
        case Archive::TarFileType::GlobalExtendedHeader:
40
4.75k
        case Archive::TarFileType::ExtendedHeader: {
41
4.99k
            auto result = tar_stream->for_each_extended_header([&](StringView, StringView) { });
42
4.75k
            if (result.is_error())
43
201
                return 0;
44
4.55k
            break;
45
4.75k
        }
46
4.55k
        default:
47
0
            return 0;
48
4.75k
        }
49
50
4.55k
        if (tar_stream->advance().is_error())
51
92
            return 0;
52
4.55k
    }
53
54
66
    return 0;
55
407
}