D20519: Fix double delete on broken files
Albert Astals Cid
noreply at phabricator.kde.org
Sat Apr 13 23:21:38 BST 2019
aacid created this revision.
Herald added a project: Frameworks.
Herald added a subscriber: kde-frameworks-devel.
aacid requested review of this revision.
REVISION SUMMARY
findOrCreate has some code that tries to recover broken files.
That code will delete an empty file if later it looks like it should be a directory.
The problem is that that code, was doing
entry = rootDir->get(path)
if (entry is not dir and it's 0 size) {
rootDir->remove(entry)
delete entry;
}
But unfortunately get() and remove() are not equally stubborn.
get will try to see if the path lives in a subdir while remove only will remove entries in the exact dir.
So it might happen that the old code did call remove() on the root dir but that did nothing since the entry didn't belong to the root dir.
This failure would result in a double delete when the dir that actually contains the entry would be deleted.
This patch introduces a private get that will also return which directory entry exactly lives on so remove succeeds and no double delete happens.
REPOSITORY
R243 KArchive
BRANCH
master
REVISION DETAIL
https://phabricator.kde.org/D20519
AFFECTED FILES
src/karchive.cpp
src/karchivedirectory.h
To: aacid
Cc: kde-frameworks-devel, michaelh, ngraham, bruns
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20190413/fb6d9fdd/attachment-0001.html>
More information about the Kde-frameworks-devel
mailing list