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