Skip to content

Commit 614e080

Browse files
tests: Add fuzzing harness for CBufferedFile::{SetPos,GetPos,GetType,GetVersion} (stream.h)
1 parent 7bcc71e commit 614e080

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/test/fuzz/buffered_file.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ void test_one_input(const std::vector<uint8_t>& buffer)
2929
}
3030
}
3131
if (opt_buffered_file && fuzzed_file != nullptr) {
32+
bool setpos_fail = false;
3233
while (fuzzed_data_provider.ConsumeBool()) {
33-
switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 4)) {
34+
switch (fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 5)) {
3435
case 0: {
3536
std::array<uint8_t, 4096> arr{};
3637
try {
@@ -48,17 +49,30 @@ void test_one_input(const std::vector<uint8_t>& buffer)
4849
break;
4950
}
5051
case 3: {
52+
if (!opt_buffered_file->SetPos(fuzzed_data_provider.ConsumeIntegralInRange<uint64_t>(0, 4096))) {
53+
setpos_fail = true;
54+
}
55+
break;
56+
}
57+
case 4: {
58+
if (setpos_fail) {
59+
// Calling FindByte(...) after a failed SetPos(...) call may result in an infinite loop.
60+
break;
61+
}
5162
try {
5263
opt_buffered_file->FindByte(fuzzed_data_provider.ConsumeIntegral<char>());
5364
} catch (const std::ios_base::failure&) {
5465
}
5566
break;
5667
}
57-
case 4: {
68+
case 5: {
5869
ReadFromStream(fuzzed_data_provider, *opt_buffered_file);
5970
break;
6071
}
6172
}
6273
}
74+
opt_buffered_file->GetPos();
75+
opt_buffered_file->GetType();
76+
opt_buffered_file->GetVersion();
6377
}
6478
}

0 commit comments

Comments
 (0)