diff --git a/db/db_encryption_test.cc b/db/db_encryption_test.cc index 4ddc11986..bc7274465 100644 --- a/db/db_encryption_test.cc +++ b/db/db_encryption_test.cc @@ -83,6 +83,34 @@ TEST_F(DBEncryptionTest, CheckEncrypted) { } } +TEST_F(DBEncryptionTest, ReadEmptyFile) { + auto defaultEnv = Env::Default(); + + // create empty file for reading it back in later + auto envOptions = EnvOptions(CurrentOptions()); + auto filePath = dbname_ + "/empty.empty"; + + Status status; + { + std::unique_ptr writableFile; + status = defaultEnv->NewWritableFile(filePath, &writableFile, envOptions); + ASSERT_OK(status); + } + + std::unique_ptr seqFile; + status = defaultEnv->NewSequentialFile(filePath, &seqFile, envOptions); + ASSERT_OK(status); + + std::string scratch; + Slice data; + // reading back 16 bytes from the empty file shouldn't trigger an assertion. + // it should just work and return an empty string + status = seqFile->Read(16, &data, (char*)scratch.data()); + ASSERT_OK(status); + + ASSERT_TRUE(data.empty()); +} + #endif // ROCKSDB_LITE } // namespace rocksdb diff --git a/env/env_encryption.cc b/env/env_encryption.cc index 6be2137ed..b7095c0f5 100644 --- a/env/env_encryption.cc +++ b/env/env_encryption.cc @@ -745,8 +745,6 @@ Status BlockAccessCipherStream::Decrypt(uint64_t fileOffset, char *data, size_t std::string scratch; AllocateScratch(scratch); - assert(fileOffset < dataSize); - // Decrypt individual blocks. while (1) { char *block = data;