Allow variable length keys in fuzz test
This commit is contained in:
@@ -1251,15 +1251,22 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
|||||||
int numWrites = gArbitrary.bounded(10);
|
int numWrites = gArbitrary.bounded(10);
|
||||||
int64_t v = ++writeVersion;
|
int64_t v = ++writeVersion;
|
||||||
auto *writes = new (arena) ConflictSet::WriteRange[numWrites];
|
auto *writes = new (arena) ConflictSet::WriteRange[numWrites];
|
||||||
std::set<int, std::less<int>, ArenaAlloc<int>> keys{
|
std::set<std::string_view, std::less<std::string_view>, ArenaAlloc<std::string_view>> keys{
|
||||||
ArenaAlloc<int>(&arena)};
|
ArenaAlloc<int>(&arena)};
|
||||||
while (int(keys.size()) < numWrites) {
|
while (int(keys.size()) < numWrites) {
|
||||||
keys.insert(gArbitrary.hasEntropy() ? gArbitrary.bounded(100)
|
if (!gArbitrary.hasEntropy()) {
|
||||||
: rand.bounded(100));
|
// 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();
|
auto iter = keys.begin();
|
||||||
for (int i = 0; i < numWrites; ++i) {
|
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].end.len = 0;
|
||||||
writes[i].writeVersion = v;
|
writes[i].writeVersion = v;
|
||||||
}
|
}
|
||||||
@@ -1274,15 +1281,22 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
|||||||
int numReads = gArbitrary.bounded(10);
|
int numReads = gArbitrary.bounded(10);
|
||||||
int64_t v = writeVersion - gArbitrary.bounded(10);
|
int64_t v = writeVersion - gArbitrary.bounded(10);
|
||||||
auto *reads = new (arena) ConflictSet::ReadRange[numReads];
|
auto *reads = new (arena) ConflictSet::ReadRange[numReads];
|
||||||
std::set<int, std::less<int>, ArenaAlloc<int>> keys{
|
std::set<std::string_view, std::less<std::string_view>, ArenaAlloc<std::string_view>> keys{
|
||||||
ArenaAlloc<int>(&arena)};
|
ArenaAlloc<int>(&arena)};
|
||||||
while (int(keys.size()) < numReads) {
|
while (int(keys.size()) < numReads) {
|
||||||
keys.insert(gArbitrary.hasEntropy() ? gArbitrary.bounded(100)
|
if (!gArbitrary.hasEntropy()) {
|
||||||
: rand.bounded(100));
|
// 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();
|
auto iter = keys.begin();
|
||||||
for (int i = 0; i < numReads; ++i) {
|
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].end.len = 0;
|
||||||
reads[i].readVersion = v;
|
reads[i].readVersion = v;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user