Skip to content

Commit dbef0ee

Browse files
Merge pull request #3505 from kevinbackhouse/fuzz-preview
Add fuzz target for previews
2 parents 4a2d50d + d114ebb commit dbef0ee

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

fuzz/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ endmacro()
1414

1515
FUZZER(fuzz-read-print-write)
1616
FUZZER(fuzz-read-write)
17+
FUZZER(fuzz-preview)

fuzz/fuzz-preview.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <exiv2/exiv2.hpp>
2+
3+
#include <cassert>
4+
#include <iomanip>
5+
#include <iostream>
6+
7+
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
8+
// Invalid files generate a lot of warnings, so switch off logging.
9+
Exiv2::LogMsg::setLevel(Exiv2::LogMsg::mute);
10+
11+
try {
12+
Exiv2::DataBuf data_copy(data, size);
13+
Exiv2::Image::UniquePtr image = Exiv2::ImageFactory::open(data_copy.c_data(), size);
14+
assert(image.get() != 0);
15+
16+
image->readMetadata();
17+
18+
Exiv2::PreviewManager pm(*image);
19+
std::ostringstream os;
20+
Exiv2::PreviewPropertiesList list = pm.getPreviewProperties();
21+
for (const auto& pos : list) {
22+
os << pos.mimeType_ << "\n";
23+
24+
if (pos.width_ != 0 && pos.height_ != 0)
25+
os << pos.width_ << " " << pos.height_ << " ";
26+
27+
os << pos.size_ << "\n";
28+
}
29+
30+
} catch (...) {
31+
// Exiv2 throws an exception if the metadata is invalid.
32+
}
33+
34+
return 0;
35+
}

0 commit comments

Comments
 (0)