diff --git a/src/core/chunked_stream.js b/src/core/chunked_stream.js index 920fc9af0..0be3140b0 100644 --- a/src/core/chunked_stream.js +++ b/src/core/chunked_stream.js @@ -234,7 +234,20 @@ class ChunkedStream { } makeSubStream(start, length, dict) { - this.ensureRange(start, start + length); + if (length) { + this.ensureRange(start, start + length); + } else { + // When the `length` is undefined you do *not*, under any circumstances, + // want to fallback on calling `this.ensureRange(start, this.end)` since + // that would force the *entire* PDF file to be loaded, thus completely + // breaking the whole purpose of using streaming and/or range requests. + // + // However, not doing any checking here could very easily lead to wasted + // time/resources during e.g. parsing, since `MissingDataException`s will + // require data to be re-parsed, which we attempt to minimize by at least + // checking that the *beginning* of the data is available here. + this.ensureByte(start); + } function ChunkedStreamSubstream() {} ChunkedStreamSubstream.prototype = Object.create(this);