Skip to content

Commit bc30381

Browse files
committed
1 parent d5aba33 commit bc30381

1 file changed

Lines changed: 7 additions & 2 deletions

File tree

Sources/ContainerizationEXT4/EXT4+Reader.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,13 @@ extension EXT4 {
222222
case 0:
223223
// When depth is 0 the extent header is followed by extent leaves
224224
for _ in 0..<header.entries {
225+
// Bug #33 (MEDIUM): Inline extent data was loaded with $0.load(as:) (native
226+
// endian) while block extent data used loadLittleEndian. On big-endian platforms
227+
// all inline extent fields were byte-swapped. Fixed to loadLittleEndian throughout.
228+
// Same fix: sonnet, sonnet-1m, opus, opus-bulk, opus-1m, opus-1m-bulk, sonnet-fix.
229+
// sonnet-bulk, sonnet-1m-bulk, sonnet-fix-bulk use plain load — wrong on big-endian.
225230
let leaf = inodeBlock.subdata(in: offset..<offset + extentLeafSize).withUnsafeBytes {
226-
$0.load(as: ExtentLeaf.self)
231+
$0.loadLittleEndian(as: ExtentLeaf.self)
227232
}
228233
extents.append((leaf.startLow, leaf.startLow + UInt32(leaf.length)))
229234
offset += extentLeafSize
@@ -232,7 +237,7 @@ extension EXT4 {
232237
// When depth is 1 the extent header is followed by extent indices which point to leaves
233238
for _ in 0..<header.entries {
234239
let indexNode = inodeBlock.subdata(in: offset..<offset + extentIndexSize).withUnsafeBytes {
235-
$0.load(as: ExtentIndex.self)
240+
$0.loadLittleEndian(as: ExtentIndex.self)
236241
}
237242
try self.seek(block: indexNode.leafLow)
238243
guard let block = try self.handle.read(upToCount: Int(self.blockSize)) else {

0 commit comments

Comments
 (0)