From 69fc251cd603c3dd55c076c38386cf32e252d735 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Tue, 30 Mar 2021 18:17:07 +0200 Subject: [PATCH] Two more checks --- src/dwarfs/block_cache.cpp | 3 +++ src/dwarfs/metadata_types.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/dwarfs/block_cache.cpp b/src/dwarfs/block_cache.cpp index 0b8e5f79..8c4b8f68 100644 --- a/src/dwarfs/block_cache.cpp +++ b/src/dwarfs/block_cache.cpp @@ -265,6 +265,9 @@ class block_cache_ final : public block_cache::impl { void set_block_size(size_t size) override { // XXX: This currently inevitably clears the cache + if (size == 0) { + DWARFS_THROW(runtime_error, "block size is zero"); + } auto max_blocks = std::max(options_.max_bytes / size, 1); if (!block_.empty() && max_blocks > block_.size()) { diff --git a/src/dwarfs/metadata_types.cpp b/src/dwarfs/metadata_types.cpp index 1953a881..ef5b9bae 100644 --- a/src/dwarfs/metadata_types.cpp +++ b/src/dwarfs/metadata_types.cpp @@ -225,6 +225,10 @@ void check_packed_tables(global_metadata::Meta const* meta) { void check_chunks(global_metadata::Meta const* meta) { auto block_size = meta->block_size(); + if (block_size == 0 || (block_size & (block_size - 1))) { + DWARFS_THROW(runtime_error, "invalid block size"); + } + for (auto c : meta->chunks()) { if (c.offset() >= block_size || c.size() > block_size) { DWARFS_THROW(runtime_error, "chunk offset/size out of range");