summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src/FS/HeFS+FileSystemParser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/src/FS/HeFS+FileSystemParser.cc')
-rw-r--r--dev/kernel/src/FS/HeFS+FileSystemParser.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/dev/kernel/src/FS/HeFS+FileSystemParser.cc b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
index 465cfc32..1cd7e61a 100644
--- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc
+++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
@@ -514,10 +514,14 @@ namespace Detail {
if (start > root->fEndIND) break;
}
- node_arr[start_cnt + 1].fDeleted = 1UL;
err_global_get() = kErrorSuccess;
delete dir;
+ if (start_cnt == 0) {
+ delete[] node_arr;
+ node_arr = nullptr;
+ }
+
return node_arr;
}
@@ -577,7 +581,7 @@ namespace Detail {
node->fOffsetSlices = root->fStartBlock;
- auto offset = 0;
+ auto offset = kHeFSBlockLen;
SizeT cnt = 0ULL;
@@ -1031,6 +1035,10 @@ _Output Bool HeFileSystemParser::INodeManip(_Input DriveTrait* mnt, VoidPtr bloc
mnt->fPacket.fPacketSize = kHeFSBlockLen;
mnt->fPacket.fPacketContent = block;
+ if (mnt->fPacket.fPacketLba > root->fEndBlock) {
+ goto inode_manip_fail;
+ }
+
in ? mnt->fInput(mnt->fPacket) : mnt->fOutput(mnt->fPacket);
sz_out += kHeFSBlockLen;
@@ -1049,6 +1057,7 @@ _Output Bool HeFileSystemParser::INodeManip(_Input DriveTrait* mnt, VoidPtr bloc
}
}
+inode_manip_fail:
delete[] nodes;
return NO;
}
@@ -1174,7 +1183,7 @@ Boolean fs_init_hefs(Void) {
Utf8Char contents_1[kHeFSBlockLen] = u8"ロケットにはジエットエンジン\r";
MUST_PASS(parser.INodeManip(&kMountPoint, contents_1, kHeFSBlockLen, u8"/boot",
- kHeFSFileKindRegular, u8"ジェット警察.txt", NO));
+ kHeFSFileKindRegular, u8"ジェット警察.txt", YES));
return YES;
}