Add basic validation of the 'Root' dictionary in XRef.parse
and try to recover when possible
Note that the `Catalog` constructor, and some of its methods, are already enforcing that the 'Root' dictionary is valid/well-formed. However, by doing additional validation already in `XRef.parse` there's a slightly larger chance that corrupt PDF files could be successfully parsed/rendered.
This commit is contained in:
parent
e84813e7cc
commit
346810e02a
@ -877,8 +877,22 @@ var XRef = (function XRefClosure() {
|
|||||||
this.pdfManager.password);
|
this.pdfManager.password);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the root dictionary (catalog) object
|
// Get the root dictionary (catalog) object, and do some basic validation.
|
||||||
if (!(this.root = trailerDict.get('Root'))) {
|
let root;
|
||||||
|
try {
|
||||||
|
root = trailerDict.get('Root');
|
||||||
|
} catch (ex) {
|
||||||
|
if (ex instanceof MissingDataException) {
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
warn(`XRef.parse - Invalid "Root" reference: "${ex}".`);
|
||||||
|
}
|
||||||
|
if (isDict(root) && root.has('Pages')) {
|
||||||
|
this.root = root;
|
||||||
|
} else {
|
||||||
|
if (!recoveryMode) {
|
||||||
|
throw new XRefParseException();
|
||||||
|
}
|
||||||
throw new FormatError('Invalid root reference');
|
throw new FormatError('Invalid root reference');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user