Skip to content

Commit b3e230e

Browse files
committed
Fixup max safe integer check for open ended byteranges with nonzero start
1 parent 2f80070 commit b3e230e

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

src/loader/fragment-preloader.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,10 @@ export default class FragmentPreloader extends FragmentLoader {
9898
this.abort();
9999
}
100100

101-
this.log(
102-
`[${this.getStateString()}] create request for [${frag.type}] ${
103-
frag.sn
104-
}:${part?.index}`,
105-
);
106-
107101
let loadPromise;
108102
if (part !== undefined) {
109103
// TODO: Use fetch loader to progressively load open-ended byterange requests
110-
if (part.byteRangeEndOffset === 2 ** 53 - 1) {
104+
if (part?.byteRangeEndOffset === Number.MAX_SAFE_INTEGER) {
111105
return;
112106
} else {
113107
loadPromise = this.loadPart(frag, part, noop);
@@ -116,6 +110,12 @@ export default class FragmentPreloader extends FragmentLoader {
116110
loadPromise = this.load(frag, noop);
117111
}
118112

113+
this.log(
114+
`[${this.getStateString()}] create request for [${frag.type}] ${
115+
frag.sn
116+
}:${part?.index}`,
117+
);
118+
119119
const request = {
120120
frag,
121121
part,

src/loader/fragment.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,13 @@ export class BaseSegment {
5858
} else {
5959
start = parseInt(params[1]);
6060
}
61-
this._byteRange = [start, parseInt(params[0]) + start];
61+
const bytelength = parseInt(params[0]);
62+
const offsetEnd =
63+
Number.isSafeInteger(bytelength) && bytelength !== Number.MAX_SAFE_INTEGER
64+
? start + bytelength
65+
: Number.MAX_SAFE_INTEGER;
66+
67+
this._byteRange = [start, offsetEnd];
6268
}
6369

6470
get byteRange(): [number, number] | [] {

src/loader/m3u8-parser.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -698,11 +698,12 @@ export default class M3U8Parser {
698698
preloadHintAttrs['BYTERANGE-LENGTH']
699699
) {
700700
const byteRangeStartOffset = preloadHintAttrs['BYTERANGE-START'];
701-
let byteRangeLength = preloadHintAttrs['BYTERANGE-LENGTH'];
702-
if (byteRangeLength <= 0) {
703-
byteRangeLength = 2 ** 53 - 1;
704-
}
705-
if (isFinite(byteRangeLength) && isFinite(byteRangeStartOffset)) {
701+
702+
if (isFinite(byteRangeStartOffset)) {
703+
let byteRangeLength = preloadHintAttrs['BYTERANGE-LENGTH'];
704+
if (!isFinite(byteRangeLength) || byteRangeLength <= 0) {
705+
byteRangeLength = Number.MAX_SAFE_INTEGER;
706+
}
706707
byteRange = `${byteRangeLength}@${byteRangeStartOffset}`;
707708
}
708709
}

0 commit comments

Comments
 (0)