Skip to content

Commit 1e26ff7

Browse files
committed
fix: enhance byte range validation by checking metadata size before processing requests
1 parent 7bc861b commit 1e26ff7

File tree

1 file changed

+9
-6
lines changed
  • services/file-retriever/src/http/controllers

1 file changed

+9
-6
lines changed

services/file-retriever/src/http/controllers/file.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ fileRouter.get(
6262
uniqueHeaderValue(req.headers['x-origin-control'])?.toLowerCase() ===
6363
'no-cache'
6464

65+
const metadata = await dsnFetcher.fetchNodeMetadata(cid)
66+
if (byteRange) {
67+
if (byteRange[0] > Number(metadata.size)) {
68+
res.set('Content-Range', `bytes */${metadata.size}`)
69+
res.sendStatus(416)
70+
return
71+
}
72+
}
73+
6574
const [fromCache, file] = await fileComposer.get(cid, {
6675
ignoreCache,
6776
byteRange,
@@ -88,12 +97,6 @@ fileRouter.get(
8897
if (byteRange && file.size != null) {
8998
const fileSizeNumber = Number(file.size)
9099
const startIndex = byteRange[0]
91-
// If the range start is beyond EOF, respond 416
92-
if (startIndex >= fileSizeNumber) {
93-
res.set('Content-Range', `bytes */${fileSizeNumber}`)
94-
res.sendStatus(416)
95-
return
96-
}
97100

98101
const effectiveEnd = Math.min(
99102
byteRange[1] != null ? byteRange[1] : fileSizeNumber - 1,

0 commit comments

Comments
 (0)