From 66b52b64340eca9b1ef3d7994de3b0316b96645b Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Thu, 28 Apr 2016 22:36:53 -0700 Subject: [PATCH] Fix rename corner case: Renaming element to its old name --- src/cryfs/filesystem/fsblobstore/utils/DirEntryList.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/cryfs/filesystem/fsblobstore/utils/DirEntryList.cpp b/src/cryfs/filesystem/fsblobstore/utils/DirEntryList.cpp index 92aa8f49..cdb21dd7 100644 --- a/src/cryfs/filesystem/fsblobstore/utils/DirEntryList.cpp +++ b/src/cryfs/filesystem/fsblobstore/utils/DirEntryList.cpp @@ -76,18 +76,15 @@ void DirEntryList::addOrOverwrite(const string &name, const Key &blobKey, fspp:: void DirEntryList::rename(const blockstore::Key &key, const std::string &name, std::function onOverwritten) { auto foundSameName = _findByName(name); - if (foundSameName != _entries.end()) { + if (foundSameName != _entries.end() && foundSameName->key() != key) { onOverwritten(foundSameName->key()); _entries.erase(foundSameName); } - ASSERT(_findByName(name) == _entries.end(), "There is still an entry with this name. That means there was a duplicate."); - auto elementToRename = _findByKey(key); std::string oldName = elementToRename->name(); ASSERT(elementToRename != _entries.end(), "Didn't find element to rename"); elementToRename->setName(name); - ASSERT(_findByName(oldName) == _entries.end(), "There is an entry with the old name left. That means there was a duplicate."); } void DirEntryList::_overwrite(vector::iterator entry, const string &name, const Key &blobKey, fspp::Dir::EntryType entryType, mode_t mode,