diff --git a/Tests/LibSQL/TestSqlHeap.cpp b/Tests/LibSQL/TestSqlHeap.cpp index eb02d58e2f..2de40038d4 100644 --- a/Tests/LibSQL/TestSqlHeap.cpp +++ b/Tests/LibSQL/TestSqlHeap.cpp @@ -186,6 +186,7 @@ TEST_CASE(heap_free_storage) TRY_OR_FAIL(heap->free_storage(storage_block_id)); // Again, write some large storage spanning multiple blocks + storage_block_id = heap->request_new_block_index(); TRY_OR_FAIL(heap->write_storage(storage_block_id, long_string.bytes())); MUST(heap->flush()); auto new_heap_size = MUST(heap->file_size_in_bytes()); diff --git a/Userland/Libraries/LibSQL/Heap.cpp b/Userland/Libraries/LibSQL/Heap.cpp index efa4eab37b..eaa568d049 100644 --- a/Userland/Libraries/LibSQL/Heap.cpp +++ b/Userland/Libraries/LibSQL/Heap.cpp @@ -118,8 +118,12 @@ ErrorOr Heap::read_storage(Block::Index index) ErrorOr Heap::write_storage(Block::Index index, ReadonlyBytes data) { dbgln_if(SQL_DEBUG, "{}({}, {} bytes)", __FUNCTION__, index, data.size()); - VERIFY(index > 0); - VERIFY(data.size() > 0); + if (index == 0) + return Error::from_string_view("Writing to zero block is not allowed"sv); + if (data.is_empty()) + return Error::from_string_view("Writing empty data is not allowed"sv); + if (m_free_block_indices.contains_slow(index)) + return Error::from_string_view("Invalid write to a free block index"sv); // Split up the storage across multiple blocks if necessary, creating a chain u32 remaining_size = static_cast(data.size());