Skip to content

Commit 3c1db5b

Browse files
committed
fix: Truncate NIfTI header data to avoid extensions
1 parent 34c15a6 commit 3c1db5b

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

src/files/nifti.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isCompressed, readHeader } from '@mango/nifti'
1+
import { isCompressed, isNIFTI1, isNIFTI2, NIFTI1, NIFTI2 } from '@mango/nifti'
22
import type { BIDSFile } from '../types/filetree.ts'
33
import { logger } from '../utils/logger.ts'
44
import type { NiftiHeader } from '@bids/schema/context'
@@ -34,8 +34,16 @@ async function extract(buffer: Uint8Array, nbytes: number): Promise<Uint8Array>
3434
export async function loadHeader(file: BIDSFile): Promise<NiftiHeader> {
3535
try {
3636
const buf = await file.readBytes(1024)
37-
const data = isCompressed(buf.buffer) ? await extract(buf, 540) : buf
38-
const header = readHeader(data.buffer)
37+
const data = isCompressed(buf.buffer) ? await extract(buf, 540) : buf.slice(0, 540)
38+
let header
39+
if (isNIFTI1(data.buffer)) {
40+
header = new NIFTI1()
41+
// Truncate to 348 bytes to avoid attempting to parse extensions
42+
header.readHeader(data.buffer.slice(0, 348))
43+
} else if (isNIFTI2(data.buffer)) {
44+
header = new NIFTI2()
45+
header.readHeader(data.buffer)
46+
}
3947
if (!header) {
4048
throw { key: 'NIFTI_HEADER_UNREADABLE' }
4149
}

0 commit comments

Comments
 (0)