Changeset View
Changeset View
Standalone View
Standalone View
src/test/fuzz/buffered_file.cpp
Show All 29 Lines | void test_one_input(const std::vector<uint8_t> &buffer) { | ||||
} catch (const std::ios_base::failure &) { | } catch (const std::ios_base::failure &) { | ||||
if (fuzzed_file != nullptr) { | if (fuzzed_file != nullptr) { | ||||
fclose(fuzzed_file); | fclose(fuzzed_file); | ||||
} | } | ||||
} | } | ||||
if (opt_buffered_file && fuzzed_file != nullptr) { | if (opt_buffered_file && fuzzed_file != nullptr) { | ||||
bool setpos_fail = false; | bool setpos_fail = false; | ||||
while (fuzzed_data_provider.ConsumeBool()) { | while (fuzzed_data_provider.ConsumeBool()) { | ||||
switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 5)) { | switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 4)) { | ||||
case 0: { | case 0: { | ||||
std::array<uint8_t, 4096> arr{}; | std::array<uint8_t, 4096> arr{}; | ||||
try { | try { | ||||
opt_buffered_file->read( | opt_buffered_file->read( | ||||
(char *)arr.data(), | (char *)arr.data(), | ||||
fuzzed_data_provider.ConsumeIntegralInRange<size_t>( | fuzzed_data_provider.ConsumeIntegralInRange<size_t>( | ||||
0, 4096)); | 0, 4096)); | ||||
} catch (const std::ios_base::failure &) { | } catch (const std::ios_base::failure &) { | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
case 1: { | case 1: { | ||||
opt_buffered_file->Seek( | |||||
fuzzed_data_provider.ConsumeIntegralInRange<uint64_t>( | |||||
0, 4096)); | |||||
break; | |||||
} | |||||
case 2: { | |||||
opt_buffered_file->SetLimit( | opt_buffered_file->SetLimit( | ||||
fuzzed_data_provider.ConsumeIntegralInRange<uint64_t>( | fuzzed_data_provider.ConsumeIntegralInRange<uint64_t>( | ||||
0, 4096)); | 0, 4096)); | ||||
break; | break; | ||||
} | } | ||||
case 3: { | case 2: { | ||||
if (!opt_buffered_file->SetPos( | if (!opt_buffered_file->SetPos( | ||||
fuzzed_data_provider | fuzzed_data_provider | ||||
.ConsumeIntegralInRange<uint64_t>(0, 4096))) { | .ConsumeIntegralInRange<uint64_t>(0, 4096))) { | ||||
setpos_fail = true; | setpos_fail = true; | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
case 4: { | case 3: { | ||||
if (setpos_fail) { | if (setpos_fail) { | ||||
// Calling FindByte(...) after a failed SetPos(...) call | // Calling FindByte(...) after a failed SetPos(...) call | ||||
// may result in an infinite loop. | // may result in an infinite loop. | ||||
break; | break; | ||||
} | } | ||||
try { | try { | ||||
opt_buffered_file->FindByte( | opt_buffered_file->FindByte( | ||||
fuzzed_data_provider.ConsumeIntegral<char>()); | fuzzed_data_provider.ConsumeIntegral<char>()); | ||||
} catch (const std::ios_base::failure &) { | } catch (const std::ios_base::failure &) { | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
case 5: { | case 4: { | ||||
ReadFromStream(fuzzed_data_provider, *opt_buffered_file); | ReadFromStream(fuzzed_data_provider, *opt_buffered_file); | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
opt_buffered_file->GetPos(); | opt_buffered_file->GetPos(); | ||||
opt_buffered_file->GetType(); | opt_buffered_file->GetType(); | ||||
opt_buffered_file->GetVersion(); | opt_buffered_file->GetVersion(); | ||||
} | } | ||||
} | } |