From 21c197a57bfb8882d764e378990697853e371450 Mon Sep 17 00:00:00 2001 From: Alois Klink Date: Thu, 4 Feb 2021 10:58:42 +0000 Subject: [PATCH] Limit maximum HTTP Range header to fileSize Some HTTP servers (e.g. Aliyun OSS) do not support Range requests when the Range header is longer than the actual length of the file. --- src/source.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/source.js b/src/source.js index 0d914ed5..72a11295 100644 --- a/src/source.js +++ b/src/source.js @@ -234,7 +234,13 @@ class BlockedSource { } async requestData(requestedOffset, requestedLength) { - const response = await this.retrievalFunction(requestedOffset, requestedLength); + let actualLengthToRequest = requestedLength; + if (this.fileSize !== null && requestedOffset + requestedLength > this.fileSize) { + // some HTTP servers (e.g. Aliyun OSS) do not support Range requests + // when the Range header is longer than the actual file length + actualLengthToRequest = this.fileSize - requestedOffset; + } + const response = await this.retrievalFunction(requestedOffset, actualLengthToRequest); if (!response.length) { response.length = response.data.byteLength; } else if (response.length !== response.data.byteLength) {