Actually compare the cropBox and mediaBox correctly in the Page.view getter

The current code will only consider the `cropBox` and `mediaBox` as equal when they both point to the *same* underlying Array. In the case where a PDF file actually specifies both boxes independently, with the exact same values in each, the comparison will currently fail and lead to an unneeded intersection computation.
This commit is contained in:
Jonas Jenwald 2019-08-07 17:04:26 +02:00
parent bb5e98195d
commit e9b7996f2f

View File

@ -15,8 +15,9 @@
/* eslint no-var: error */
import {
assert, bytesToString, FormatError, info, isArrayBuffer, isBool, isNum,
isSpace, isString, OPS, shadow, stringToBytes, stringToPDFString, Util, warn
assert, bytesToString, FormatError, info, 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';
@ -127,8 +128,8 @@ class Page {
// "The crop, bleed, trim, and art boxes should not ordinarily
// extend beyond the boundaries of the media box. If they do, they are
// effectively reduced to their intersection with the media box."
const mediaBox = this.mediaBox, cropBox = this.cropBox;
if (mediaBox === cropBox) {
const { cropBox, mediaBox, } = this;
if (cropBox === mediaBox || isArrayEqual(cropBox, mediaBox)) {
return shadow(this, 'view', mediaBox);
}