Changeset View
Changeset View
Standalone View
Standalone View
src/test/fuzz/util.h
Show First 20 Lines • Show All 319 Lines • ▼ Show 20 Lines | static ssize_t read(void *cookie, char *buf, size_t size) { | ||||
return fuzzed_file->m_fuzzed_data_provider.ConsumeBool() ? 0 : -1; | return fuzzed_file->m_fuzzed_data_provider.ConsumeBool() ? 0 : -1; | ||||
} | } | ||||
const std::vector<uint8_t> random_bytes = | const std::vector<uint8_t> random_bytes = | ||||
fuzzed_file->m_fuzzed_data_provider.ConsumeBytes<uint8_t>(size); | fuzzed_file->m_fuzzed_data_provider.ConsumeBytes<uint8_t>(size); | ||||
if (random_bytes.empty()) { | if (random_bytes.empty()) { | ||||
return 0; | return 0; | ||||
} | } | ||||
std::memcpy(buf, random_bytes.data(), random_bytes.size()); | std::memcpy(buf, random_bytes.data(), random_bytes.size()); | ||||
if (AdditionOverflow((uint64_t)fuzzed_file->m_offset, | if (AdditionOverflow(fuzzed_file->m_offset, | ||||
random_bytes.size())) { | int64_t(random_bytes.size()))) { | ||||
return fuzzed_file->m_fuzzed_data_provider.ConsumeBool() ? 0 : -1; | return fuzzed_file->m_fuzzed_data_provider.ConsumeBool() ? 0 : -1; | ||||
} | } | ||||
fuzzed_file->m_offset += random_bytes.size(); | fuzzed_file->m_offset += random_bytes.size(); | ||||
return random_bytes.size(); | return random_bytes.size(); | ||||
} | } | ||||
static ssize_t write(void *cookie, const char *buf, size_t size) { | static ssize_t write(void *cookie, const char *buf, size_t size) { | ||||
FuzzedFileProvider *fuzzed_file = (FuzzedFileProvider *)cookie; | FuzzedFileProvider *fuzzed_file = (FuzzedFileProvider *)cookie; | ||||
const ssize_t n = | const ssize_t n = | ||||
fuzzed_file->m_fuzzed_data_provider.ConsumeIntegralInRange<ssize_t>( | fuzzed_file->m_fuzzed_data_provider.ConsumeIntegralInRange<ssize_t>( | ||||
0, size); | 0, size); | ||||
if (AdditionOverflow(fuzzed_file->m_offset, n)) { | if (AdditionOverflow(fuzzed_file->m_offset, int64_t(n))) { | ||||
return fuzzed_file->m_fuzzed_data_provider.ConsumeBool() ? 0 : -1; | return fuzzed_file->m_fuzzed_data_provider.ConsumeBool() ? 0 : -1; | ||||
} | } | ||||
fuzzed_file->m_offset += n; | fuzzed_file->m_offset += n; | ||||
return n; | return n; | ||||
} | } | ||||
static int seek(void *cookie, int64_t *offset, int whence) { | static int seek(void *cookie, int64_t *offset, int whence) { | ||||
// SEEK_END not implemented yet. | // SEEK_END not implemented yet. | ||||
▲ Show 20 Lines • Show All 141 Lines • Show Last 20 Lines |