From 52bb855627402506b7bfd0a4be13b42f44938cac Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Tue, 29 Sep 2015 18:51:59 +0200 Subject: [PATCH] EncryptedBlockStore crashed when a modified block was removed. Fixed crash and added test case. --- implementations/encrypted/EncryptedBlock.h | 1 + test/testutils/BlockStoreTest.h | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/implementations/encrypted/EncryptedBlock.h b/implementations/encrypted/EncryptedBlock.h index 0a7dce7c..5d1a8ee7 100644 --- a/implementations/encrypted/EncryptedBlock.h +++ b/implementations/encrypted/EncryptedBlock.h @@ -151,6 +151,7 @@ void EncryptedBlock::_encryptToBaseBlock() { template cpputils::unique_ref EncryptedBlock::releaseBlock() { + _encryptToBaseBlock(); return std::move(_baseBlock); } diff --git a/test/testutils/BlockStoreTest.h b/test/testutils/BlockStoreTest.h index 0ab01fd8..a59414b2 100644 --- a/test/testutils/BlockStoreTest.h +++ b/test/testutils/BlockStoreTest.h @@ -100,6 +100,14 @@ TYPED_TEST_P(BlockStoreTest, NumBlocksIsCorrectAfterRemovingABlock) { EXPECT_EQ(1, blockStore->numBlocks()); } +TYPED_TEST_P(BlockStoreTest, CanRemoveModifiedBlock) { + auto blockStore = this->fixture.createBlockStore(); + auto block = blockStore->create(cpputils::Data(5)); + block->write("data", 0, 4); + blockStore->remove(std::move(block)); + EXPECT_EQ(0, blockStore->numBlocks()); +} + #include "BlockStoreTest_Size.h" #include "BlockStoreTest_Data.h" @@ -129,7 +137,8 @@ REGISTER_TYPED_TEST_CASE_P(BlockStoreTest, NumBlocksIsCorrectAfterRemovingABlock, WriteAndReadImmediately, WriteAndReadAfterLoading, - OverwriteAndRead + OverwriteAndRead, + CanRemoveModifiedBlock );