Coverage Report

Created: 2026-01-10 06:30

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/bag/fuzzers/bag_extended_fuzzer.cpp
Line
Count
Source
1
#include <iostream>
2
#include <iomanip>
3
4
#include <stddef.h>
5
#include <stdint.h>
6
#include <unistd.h>
7
8
#include "bag_dataset.h"
9
10
using BAG::Dataset;
11
12
13
void printLayerDescriptor(
14
        const BAG::LayerDescriptor& descriptor)
15
50
{
16
50
    std::cout << "\t\tchunkSize == " << descriptor.getChunkSize() << '\n';
17
50
    std::cout << "\t\tcompression level == " << descriptor.getCompressionLevel() << '\n';
18
50
    std::cout << "\t\tdata type == " << descriptor.getDataType() << '\n';
19
50
    std::cout << "\t\telement size == " << +descriptor.getElementSize() << '\n';
20
50
    std::cout << "\t\tinternalPath == " << descriptor.getInternalPath() << '\n';
21
50
    std::cout << "\t\tlayer type == " << descriptor.getLayerType() << '\n';
22
23
50
    const auto minMax = descriptor.getMinMax();
24
50
    std::cout << "\t\tmin max == (" << std::get<0>(minMax) << ", " <<
25
50
              std::get<1>(minMax) << ")\n";
26
50
}
27
28
29
27
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) {
30
31
27
    char filename[256];
32
27
    snprintf(filename, 255, "/tmp/libfuzzer.%d", getpid());
33
34
    // Save input file to temporary file so that we can read it.
35
27
    FILE *fp = fopen(filename, "wb");
36
27
    if (!fp) {
37
0
        return 0;
38
0
    }
39
27
    fwrite(buf, len, 1, fp);
40
27
    fclose(fp);
41
42
27
    auto pDataset = Dataset::open(filename, BAG_OPEN_READONLY);
43
27
    if (pDataset == NULL) {
44
1
        return EXIT_FAILURE;
45
1
    }
46
47
26
    const auto& descriptor = pDataset->getDescriptor();
48
26
    uint64_t numRows = 0, numCols = 0;
49
26
    std::tie(numRows, numCols) = descriptor.getDims();
50
26
    std::cout << "\trows, columns == " << numRows << ", " << numCols << '\n';
51
52
26
    double minX = 0., minY = 0., maxX = 0., maxY = 0.;
53
26
    std::tie(minX, minY) = pDataset->gridToGeo(0, 0);
54
26
    std::tie(maxX, maxY) = pDataset->gridToGeo(numRows - 1, numCols - 1);
55
56
26
    std::cout << "\tgrid cover (llx, lly), (urx, ury) == (" <<
57
26
              std::setprecision(10) << minX << ", " << minY << "), (" << maxX <<
58
26
              ", " << maxY << ")\n";
59
60
26
    const auto& dims = descriptor.getDims();
61
26
    std::cout << "\tdims == (" << std::get<0>(dims) << ", " <<
62
26
              std::get<1>(dims) << ")\n";
63
64
26
    const auto& gridSpacing = descriptor.getGridSpacing();
65
26
    std::cout << "\tgrid spacing == (" << std::get<0>(gridSpacing) << ", " <<
66
26
              std::get<1>(gridSpacing) << ")\n";
67
68
26
    const auto& origin = descriptor.getOrigin();
69
26
    std::cout << "\torigin == (" << std::get<0>(origin) << ", "
70
26
              << std::get<1>(origin) << ")\n";
71
72
26
    const auto& projCover = descriptor.getProjectedCover();
73
26
    std::cout << "\tprojected cover (llx, lly), (urx, ury) == (" << std::get<0>(projCover) << ", " <<
74
26
              std::get<1>(projCover) << "), (" << std::get<2>(projCover) << ", " <<
75
26
              std::get<3>(projCover) << ")\n";
76
77
26
    std::cout << "\tversion == " << descriptor.getVersion() << '\n';
78
79
26
    std::cout << "\thorizontal reference system ==\n" <<
80
26
              descriptor.getHorizontalReferenceSystem() << "\n\n";
81
82
26
    std::cout << "\tvertical reference system ==\n" << descriptor.getVerticalReferenceSystem() << '\n';
83
84
26
    std::cout << "\nLayers:\n";
85
86
26
    for (const auto& layer : pDataset->getLayers())
87
50
    {
88
50
        auto pDescriptor = layer->getDescriptor();
89
90
50
        std::cout << "\t" << pDescriptor->getName() << " Layer .. id(" <<
91
50
                  pDescriptor->getId() << ")\n";
92
93
50
        printLayerDescriptor(*pDescriptor);
94
50
    }
95
96
26
    const auto& trackingList = pDataset->getTrackingList();
97
26
    std::cout << "\nTracking List:  (" << trackingList.size() << " items)\n";
98
99
26
    size_t itemNum = 0;
100
26
    for (const auto& item : trackingList)
101
0
    {
102
0
        std::cout << "\tTracking list item #" << itemNum++ << '\n';
103
0
        std::cout << "\t\trow == " << item.row << '\n';
104
0
        std::cout << "\t\tcol == " << item.col << '\n';
105
0
        std::cout << "\t\tdepth == " << item.depth << '\n';
106
0
        std::cout << "\t\tuncertainty == " << item.uncertainty << '\n';
107
0
        std::cout << "\t\ttrack_code == " << item.track_code << '\n';
108
0
        std::cout << "\t\tlist_series == " << item.list_series << '\n';
109
0
    }
110
111
26
    pDataset->close();
112
113
    return EXIT_SUCCESS;
114
27
}