diff --git a/Sources/ContainerizationEXT4/EXT4+Formatter.swift b/Sources/ContainerizationEXT4/EXT4+Formatter.swift index f386537a..045e9cd0 100644 --- a/Sources/ContainerizationEXT4/EXT4+Formatter.swift +++ b/Sources/ContainerizationEXT4/EXT4+Formatter.swift @@ -699,9 +699,11 @@ extension EXT4 { for i in 0...usedGroupDescriptorBlocks { bitmap[Int(i / 8)] |= 1 << (i % 8) } - for i in usedGroupDescriptorBlocks + 1...self.groupDescriptorBlocks { - bitmap[Int(i / 8)] &= ~(1 << (i % 8)) - blocks -= 1 + if usedGroupDescriptorBlocks + 1 <= self.groupDescriptorBlocks { + for i in usedGroupDescriptorBlocks + 1...self.groupDescriptorBlocks { + bitmap[Int(i / 8)] &= ~(1 << (i % 8)) + blocks -= 1 + } } } diff --git a/Tests/ContainerizationEXT4Tests/TestEXT4Format.swift b/Tests/ContainerizationEXT4Tests/TestEXT4Format.swift index 4c0f2952..c9796c63 100644 --- a/Tests/ContainerizationEXT4Tests/TestEXT4Format.swift +++ b/Tests/ContainerizationEXT4Tests/TestEXT4Format.swift @@ -219,3 +219,14 @@ struct Ext4FormatTests: ~Copyable { #expect(regFile.sizeLow == 4) } } + +struct Ext4FormatEmptyRangeTests { + @Test func closeEmptyFilesystem() throws { + let fsPath = FilePath( + FileManager.default.temporaryDirectory + .appendingPathComponent(UUID().uuidString, isDirectory: false)) + defer { try? FileManager.default.removeItem(at: fsPath.url) } + let formatter = try EXT4.Formatter(fsPath, minDiskSize: 32.kib()) + try formatter.close() + } +}