diff --git a/src/display/fetch_stream.js b/src/display/fetch_stream.js index aa139612e..479225d4f 100644 --- a/src/display/fetch_stream.js +++ b/src/display/fetch_stream.js @@ -13,7 +13,9 @@ * limitations under the License. */ -import { assert, createPromiseCapability } from '../shared/util'; +import { + AbortException, assert, createPromiseCapability +} from '../shared/util'; import { createResponseStatusError, validateRangeRequestCapabilities, validateResponseStatus @@ -95,8 +97,8 @@ class PDFFetchStreamReader { if (!validateResponseStatus(response.status, this._stream.isHttp)) { throw createResponseStatusError(response.status, url); } - this._headersCapability.resolve(); this._reader = response.body.getReader(); + this._headersCapability.resolve(); let { allowRangeRequests, suggestedLength, } = validateRangeRequestCapabilities({ @@ -110,6 +112,12 @@ class PDFFetchStreamReader { this._contentLength = suggestedLength; this._isRangeSupported = allowRangeRequests; + + // We need to stop reading when range is supported and streaming is + // disabled. + if (!this._isStreamingSupported && this._isRangeSupported) { + this.cancel(new AbortException('streaming is disabled')); + } }).catch(this._headersCapability.reject); this.onProgress = null; diff --git a/src/display/node_stream.js b/src/display/node_stream.js index aca82a902..443989363 100644 --- a/src/display/node_stream.js +++ b/src/display/node_stream.js @@ -19,7 +19,9 @@ let http = __non_webpack_require__('http'); let https = __non_webpack_require__('https'); let url = __non_webpack_require__('url'); -import { assert, createPromiseCapability } from '../shared/util'; +import { + AbortException, assert, createPromiseCapability +} from '../shared/util'; import { validateRangeRequestCapabilities } from './network_utils'; class PDFNodeStream { @@ -165,6 +167,12 @@ class BaseFullReader { this._error(reason); }); + // We need to stop reading when range is supported and streaming is + // disabled. + if (!this._isStreamingSupported && this._isRangeSupported) { + this._error(new AbortException('streaming is disabled')); + } + // Destroy ReadableStream if already in errored state. if (this._errored) { this._readableStream.destroy(this._reason); @@ -353,8 +361,6 @@ class PDFNodeStreamFsFullReader extends BaseFullReader { constructor(stream) { super(stream); - this._setReadableStream(fs.createReadStream(this._url.path)); - fs.lstat(this._url.path, (error, stat) => { if (error) { this._errored = true; @@ -364,6 +370,8 @@ class PDFNodeStreamFsFullReader extends BaseFullReader { } // Setting right content length. this._contentLength = stat.size; + + this._setReadableStream(fs.createReadStream(this._url.path)); this._headersCapability.resolve(); }); }