Merge pull request #11398 from Snuffleupagus/issue-5887

Attempt to improve the `PDFDocument` error message for empty files (issue 5887)
This commit is contained in:
Tim van der Meij 2019-12-09 22:08:08 +01:00 committed by GitHub
commit af4ba75f68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 7 deletions

View File

@ -15,9 +15,9 @@
/* eslint no-var: error */
import {
assert, bytesToString, FormatError, info, isArrayBuffer, isArrayEqual, isBool,
isNum, isSpace, isString, OPS, shadow, stringToBytes, stringToPDFString, Util,
warn
assert, bytesToString, FormatError, info, InvalidPDFException, isArrayBuffer,
isArrayEqual, isBool, isNum, isSpace, isString, OPS, shadow, stringToBytes,
stringToPDFString, Util, warn
} from '../shared/util';
import { Catalog, ObjectLoader, XRef } from './obj';
import { Dict, isDict, isName, isStream, Ref } from './primitives';
@ -375,7 +375,8 @@ class PDFDocument {
throw new Error('PDFDocument: Unknown argument type');
}
if (stream.length <= 0) {
throw new Error('PDFDocument: Stream must have data');
throw new InvalidPDFException(
'The PDF file is empty, i.e. its size is zero bytes.');
}
this.pdfManager = pdfManager;

View File

@ -1519,7 +1519,7 @@ var XRef = (function XRefClosure() {
return trailerDict;
}
// nothing helps
throw new InvalidPDFException('Invalid PDF structure');
throw new InvalidPDFException('Invalid PDF structure.');
},
readXRef: function XRef_readXRef(recoveryMode) {

View File

@ -148,8 +148,10 @@ describe('api', function() {
var loadingTask = getDocument(buildGetDocumentParams('bug1020226.pdf'));
loadingTask.promise.then(function () {
done.fail('shall fail loading');
}).catch(function (error) {
expect(error instanceof InvalidPDFException).toEqual(true);
}).catch(function(reason) {
expect(reason instanceof InvalidPDFException).toEqual(true);
expect(reason.message).toEqual('Invalid PDF structure.');
loadingTask.destroy().then(done);
});
});
@ -292,6 +294,20 @@ describe('api', function() {
done();
}).catch(done.fail);
});
it('creates pdf doc from empty typed array', function(done) {
const loadingTask = getDocument(new Uint8Array(0));
loadingTask.promise.then(function() {
done.fail('shall not open empty file');
}, function(reason) {
expect(reason instanceof InvalidPDFException);
expect(reason.message).toEqual(
'The PDF file is empty, i.e. its size is zero bytes.');
loadingTask.destroy().then(done);
});
});
});
describe('PDFWorker', function() {