Coverage Report

Created: 2025-10-10 06:07

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/load_from_memory_fuzzer.cc
Line
Count
Source
1
#include <cstddef>
2
#include <cstdint>
3
#include <cstdlib>
4
#include <vector>
5
#include <FreeImage.h>
6
7
namespace {
8
9
// Returns true if the format should be attempted to loaded from memory.
10
23.3k
bool SafeToLoadFromMemory(FREE_IMAGE_FORMAT fif) {
11
  // For now, just load if it is a BMP. Future heuristics may need to be based
12
  // on the expected size in different formats for memory regions to avoid OOMs.
13
23.3k
  return fif == FIF_BMP;
14
23.3k
}
15
16
}  // namespace
17
18
23.3k
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
19
23.3k
  static bool initialized = false;
20
23.3k
  if (!initialized) {
21
23.3k
    FreeImage_Initialise();
22
23.3k
  }
23
24
23.3k
  if (size > 100 * 1000) {
25
1
    return 0;
26
1
  }
27
28
23.3k
  std::vector<uint8_t> fuzzer_data_vector(data, data + size);
29
23.3k
  FIMEMORY* fiMem = FreeImage_OpenMemory(
30
23.3k
      reinterpret_cast<unsigned char*>(fuzzer_data_vector.data()),
31
23.3k
      fuzzer_data_vector.size());
32
33
23.3k
  FREE_IMAGE_FORMAT fif = FreeImage_GetFileTypeFromMemory(fiMem, 0);
34
23.3k
  if (SafeToLoadFromMemory(fif)) {
35
183
    FIBITMAP* fiBitmap = FreeImage_LoadFromMemory(fif, fiMem);
36
183
    FreeImage_Unload(fiBitmap);
37
183
  }
38
23.3k
  FreeImage_CloseMemory(fiMem);
39
40
23.3k
  return 0;
41
23.3k
}