| 15 | #include <vector> |
| 16 | |
| 17 | FUZZ_TARGET(buffered_file) |
| 18 | { |
| 19 | FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()}; |
| 20 | FuzzedFileProvider fuzzed_file_provider = ConsumeFile(fuzzed_data_provider); |
| 21 | std::optional<CBufferedFile> opt_buffered_file; |
| 22 | FILE* fuzzed_file = fuzzed_file_provider.open(); |
| 23 | try { |
| 24 | opt_buffered_file.emplace(fuzzed_file, fuzzed_data_provider.ConsumeIntegralInRange<uint64_t>(0, 4096), fuzzed_data_provider.ConsumeIntegralInRange<uint64_t>(0, 4096), fuzzed_data_provider.ConsumeIntegral<int>(), fuzzed_data_provider.ConsumeIntegral<int>()); |
| 25 | } catch (const std::ios_base::failure&) { |
| 26 | if (fuzzed_file != nullptr) { |
| 27 | fclose(fuzzed_file); |
| 28 | } |
| 29 | } |
| 30 | if (opt_buffered_file && fuzzed_file != nullptr) { |
| 31 | bool setpos_fail = false; |
| 32 | LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) { |
| 33 | CallOneOf( |
| 34 | fuzzed_data_provider, |
| 35 | [&] { |
| 36 | std::array<std::byte, 4096> arr{}; |
| 37 | try { |
| 38 | opt_buffered_file->read({arr.data(), fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, 4096)}); |
| 39 | } catch (const std::ios_base::failure&) { |
| 40 | } |
| 41 | }, |
| 42 | [&] { |
| 43 | opt_buffered_file->SetLimit(fuzzed_data_provider.ConsumeIntegralInRange<uint64_t>(0, 4096)); |
| 44 | }, |
| 45 | [&] { |
| 46 | if (!opt_buffered_file->SetPos(fuzzed_data_provider.ConsumeIntegralInRange<uint64_t>(0, 4096))) { |
| 47 | setpos_fail = true; |
| 48 | } |
| 49 | }, |
| 50 | [&] { |
| 51 | if (setpos_fail) { |
| 52 | // Calling FindByte(...) after a failed SetPos(...) call may result in an infinite loop. |
| 53 | return; |
| 54 | } |
| 55 | try { |
| 56 | opt_buffered_file->FindByte(fuzzed_data_provider.ConsumeIntegral<uint8_t>()); |
| 57 | } catch (const std::ios_base::failure&) { |
| 58 | } |
| 59 | }, |
| 60 | [&] { |
| 61 | ReadFromStream(fuzzed_data_provider, *opt_buffered_file); |
| 62 | }); |
| 63 | } |
| 64 | opt_buffered_file->GetPos(); |
| 65 | opt_buffered_file->GetType(); |
| 66 | opt_buffered_file->GetVersion(); |
| 67 | } |
| 68 | } |
nothing calls this directly
no test coverage detected