summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-01 09:50:35 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-01 09:50:35 +0200
commit2516d36ea71362d014907bf175ae88f3df09dbb3 (patch)
treed54d26464b9eae62bd67b9094d46ea77087a8029
parent56d756fe73e9c206b333276f0cde1c1dc13999c2 (diff)
kernel: always check if we can create the catalog.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
-rw-r--r--Private/Source/AppMain.cxx11
-rw-r--r--Private/Source/FS/NewFS.cxx5
2 files changed, 15 insertions, 1 deletions
diff --git a/Private/Source/AppMain.cxx b/Private/Source/AppMain.cxx
index c113958a..d3f140d2 100644
--- a/Private/Source/AppMain.cxx
+++ b/Private/Source/AppMain.cxx
@@ -89,7 +89,16 @@ class FilesystemAutomountProvider final {
metadataSz, "FolderInfo");
}
- NewOS::kcout << (NewOS::Char*)fNewFS->GetImpl()->ReadCatalog(fNewFS->GetImpl()->GetCatalog("/System/"), 512, "FolderInfo");
+ auto systemFolder = fNewFS->GetImpl()->GetCatalog("/System/");
+ auto buf = fNewFS->GetImpl()->ReadCatalog(systemFolder, 512, "FolderInfo");
+ NewOS::kcout << (NewOS::Char*)buf;
+
+ delete (NewOS::Char*) buf;
+ delete systemFolder;
+
+ systemFolder = fNewFS->GetImpl()->GetCatalog("/Boot/");
+
+ NewOS::kcout << systemFolder->Name << NewOS::endl;
}
}
}
diff --git a/Private/Source/FS/NewFS.cxx b/Private/Source/FS/NewFS.cxx
index 9074b348..3e247360 100644
--- a/Private/Source/FS/NewFS.cxx
+++ b/Private/Source/FS/NewFS.cxx
@@ -285,6 +285,11 @@ _Output NewCatalog* NewFSParser::CreateCatalog(_Input const char* name,
NewPartitionBlock* partBlock = (NewPartitionBlock*)sectorBufPartBlock;
+ if (partBlock->FreeCatalog < 1) {
+ delete catalogChild;
+ return nullptr;
+ }
+
catalogChild->DataFork = partBlock->DiskSize - partBlock->StartCatalog;
catalogChild->ResourceFork = catalogChild->DataFork;