diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 83fb0c2..2fd148e 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -1251,15 +1251,22 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int numWrites = gArbitrary.bounded(10); int64_t v = ++writeVersion; auto *writes = new (arena) ConflictSet::WriteRange[numWrites]; - std::set, ArenaAlloc> keys{ + std::set, ArenaAlloc> keys{ ArenaAlloc(&arena)}; while (int(keys.size()) < numWrites) { - keys.insert(gArbitrary.hasEntropy() ? gArbitrary.bounded(100) - : rand.bounded(100)); + if (!gArbitrary.hasEntropy()) { + // Tell the fuzzer it's not interesting + return -1; + } + int keyLen = gArbitrary.bounded(8); + auto* begin = new (arena) uint8_t[keyLen]; + gArbitrary.randomHex(begin, keyLen); + keys.insert(std::string_view((const char*)begin, keyLen)); } auto iter = keys.begin(); for (int i = 0; i < numWrites; ++i) { - writes[i].begin = toKey(arena, *iter++); + writes[i].begin.p = (const uint8_t*)iter->data(); + writes[i].begin.len = iter->size(); writes[i].end.len = 0; writes[i].writeVersion = v; } @@ -1274,15 +1281,22 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int numReads = gArbitrary.bounded(10); int64_t v = writeVersion - gArbitrary.bounded(10); auto *reads = new (arena) ConflictSet::ReadRange[numReads]; - std::set, ArenaAlloc> keys{ + std::set, ArenaAlloc> keys{ ArenaAlloc(&arena)}; while (int(keys.size()) < numReads) { - keys.insert(gArbitrary.hasEntropy() ? gArbitrary.bounded(100) - : rand.bounded(100)); + if (!gArbitrary.hasEntropy()) { + // Tell the fuzzer it's not interesting + return -1; + } + int keyLen = gArbitrary.bounded(8); + auto* begin = new (arena) uint8_t[keyLen]; + gArbitrary.randomHex(begin, keyLen); + keys.insert(std::string_view((const char*)begin, keyLen)); } auto iter = keys.begin(); for (int i = 0; i < numReads; ++i) { - reads[i].begin = toKey(arena, *iter++); + reads[i].begin.p = (const uint8_t*)iter->data(); + reads[i].begin.len = iter->size(); reads[i].end.len = 0; reads[i].readVersion = v; }