Fixed bug found by fuzzing.
Thanks to OSS-Fuzz for finding the bug.
https://oss-fuzz.com/v2/testcase-detail/4700815620046848
diff --git a/src/bloaty.cc b/src/bloaty.cc
index 025f5be..8834c0c 100644
--- a/src/bloaty.cc
+++ b/src/bloaty.cc
@@ -1068,6 +1068,13 @@
void RangeSink::AddRange(const char* analyzer, string_view name,
uint64_t vmaddr, uint64_t vmsize, uint64_t fileoff,
uint64_t filesize) {
+ if (vmsize == RangeMap::kUnknownSize || filesize == RangeMap::kUnknownSize) {
+ // AddRange() is used for segments and sections; the mappings that establish
+ // the file <-> vm mapping. The size should always be known. Moreover it
+ // would be unclear how the logic should work if the size was *not* known.
+ THROW("AddRange() does not allow unknown size.");
+ }
+
if (IsVerboseForVMRange(vmaddr, vmsize) ||
IsVerboseForFileRange(fileoff, filesize)) {
printf("[%s, %s] AddRange(%.*s, %" PRIx64 ", %" PRIx64 ", %" PRIx64
diff --git a/tests/testdata/fuzz_corpus/a493f77d0d04aaed2e2dca8256c9a5cc591aa8fa b/tests/testdata/fuzz_corpus/a493f77d0d04aaed2e2dca8256c9a5cc591aa8fa
new file mode 100755
index 0000000..c768a24
--- /dev/null
+++ b/tests/testdata/fuzz_corpus/a493f77d0d04aaed2e2dca8256c9a5cc591aa8fa
Binary files differ