Skip to content

Commit 34c15a6

Browse files
committed
fix: Prevent gzip decompressor from hanging
1 parent 07efb46 commit 34c15a6

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/files/nifti.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,24 @@ async function extract(buffer: Uint8Array, nbytes: number): Promise<Uint8Array>
1111
const stream = new ReadableStream({
1212
start(controller) {
1313
controller.enqueue(buffer)
14+
controller.close()
1415
},
1516
})
1617
const reader = stream.pipeThrough(new DecompressionStream('gzip')).getReader()
1718
let offset = 0
18-
while (offset < nbytes) {
19-
const { value, done } = await reader.read()
20-
if (done) {
21-
break
19+
try {
20+
while (offset < nbytes) {
21+
const { value, done } = await reader.read()
22+
if (done || !value) {
23+
break
24+
}
25+
result.set(value.subarray(0, Math.min(value.length, nbytes - offset)), offset)
26+
offset += value.length
2227
}
23-
result.set(value.subarray(0, Math.min(value.length, nbytes - offset)), offset)
24-
offset += value.length
28+
} finally {
29+
await reader.cancel()
2530
}
26-
await reader.cancel()
27-
return result
31+
return result.subarray(0, offset)
2832
}
2933

3034
export async function loadHeader(file: BIDSFile): Promise<NiftiHeader> {

0 commit comments

Comments
 (0)