1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Fix access after delete of workspace folders when deleting parent and child

This commit is contained in:
Fusion 2022-07-14 21:29:24 +02:00
parent 9d2cdadc7a
commit 1eb2b97db7

View file

@ -1798,12 +1798,34 @@ namespace IDE.ui
if (mListViewToProjectMap.TryGetValue(projectListViewItem, let projectItem))
mProjectToWorkspaceFolderMap.Remove(projectItem);
}
HashSet<void*> deletedFolders = scope .();
bool HasDeletedParent(WorkspaceFolder folder)
{
WorkspaceFolder parent = folder;
repeat
{
parent = parent.mParent;
if (deletedFolders.Contains(Internal.UnsafeCastToPtr(parent)))
return true;
}
while (parent != null);
return false;
}
for (let folder in foldersToDelete)
{
let folderItem = folder.mListView;
mListViewToWorkspaceFolderMap.Remove(folderItem);
folderItem.mParentItem.RemoveChildItem(folderItem);
gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
if (!HasDeletedParent(folder))
{
let folderItem = folder.mListView;
mListViewToWorkspaceFolderMap.Remove(folderItem);
folderItem.mParentItem.RemoveChildItem(folderItem);
}
gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
deletedFolders.Add(Internal.UnsafeCastToPtr(folder));
delete folder;
}