From 4ba3c257e483f645e08da8101a944a141bc01dde Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 21 Jul 2011 00:35:35 +0200 Subject: [PATCH] Fix package removal with skipped directories Volume::_RemovePackageContentRootNode(): Check whether a directory corresponding to the package directory does actually exist. This might not be the case when the package directory has been skipped due to clashing with a shine-through directory. Would crash in this case. --- src/add-ons/kernel/file_systems/packagefs/Volume.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/add-ons/kernel/file_systems/packagefs/Volume.cpp b/src/add-ons/kernel/file_systems/packagefs/Volume.cpp index 961928be05..88e96cf3a0 100644 --- a/src/add-ons/kernel/file_systems/packagefs/Volume.cpp +++ b/src/add-ons/kernel/file_systems/packagefs/Volume.cpp @@ -1182,11 +1182,13 @@ Volume::_RemovePackageContentRootNode(Package* package, if (PackageDirectory* packageDirectory = dynamic_cast(packageNode)) { if (packageDirectory->FirstChild() != NULL) { - directory = dynamic_cast( - directory->FindChild(packageNode->Name())); - packageNode = packageDirectory->FirstChild(); - directory->WriteLock(); - continue; + if (Directory* childDirectory = dynamic_cast( + directory->FindChild(packageNode->Name()))) { + directory = childDirectory; + packageNode = packageDirectory->FirstChild(); + directory->WriteLock(); + continue; + } } }