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