mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-26 10:08:06 +02:00
Always prefer abbreviated keys, over full ones, when doing any dictionary lookups (issue 14256)
Note that issue 14256 was specifically about *inline* images, please refer to: - https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf#G7.1852045 - https://www.pdfa.org/safedocs-unearths-pdf-inline-image-issue/ - https://pdf-issues.pdfa.org/32000-2-2020/clause08.html#H8.9.7 However, during review of the initial PR in https://github.com/mozilla/pdf.js/pull/14257#issuecomment-964469710, it was suggested that we instead do this *unconditionally for all* dictionary lookups. In addition to re-ordering the existing call-sites in the `src/core`-code, and adding non-PRODUCTION/TESTING asserts to catch future errors, for consistency a number of existing `if`/`switch`-blocks were re-factored to also check the abbreviated keys first.
This commit is contained in:
parent
4ee906adf4
commit
ea1c348c67
12 changed files with 730 additions and 104 deletions
|
@ -90,8 +90,22 @@ class Dict {
|
|||
get(key1, key2, key3) {
|
||||
let value = this._map[key1];
|
||||
if (value === undefined && key2 !== undefined) {
|
||||
if (
|
||||
(typeof PDFJSDev === "undefined" ||
|
||||
PDFJSDev.test("!PRODUCTION || TESTING")) &&
|
||||
key2.length < key1.length
|
||||
) {
|
||||
unreachable("Dict.get: Expected keys to be ordered by length.");
|
||||
}
|
||||
value = this._map[key2];
|
||||
if (value === undefined && key3 !== undefined) {
|
||||
if (
|
||||
(typeof PDFJSDev === "undefined" ||
|
||||
PDFJSDev.test("!PRODUCTION || TESTING")) &&
|
||||
key3.length < key2.length
|
||||
) {
|
||||
unreachable("Dict.get: Expected keys to be ordered by length.");
|
||||
}
|
||||
value = this._map[key3];
|
||||
}
|
||||
}
|
||||
|
@ -105,8 +119,22 @@ class Dict {
|
|||
async getAsync(key1, key2, key3) {
|
||||
let value = this._map[key1];
|
||||
if (value === undefined && key2 !== undefined) {
|
||||
if (
|
||||
(typeof PDFJSDev === "undefined" ||
|
||||
PDFJSDev.test("!PRODUCTION || TESTING")) &&
|
||||
key2.length < key1.length
|
||||
) {
|
||||
unreachable("Dict.getAsync: Expected keys to be ordered by length.");
|
||||
}
|
||||
value = this._map[key2];
|
||||
if (value === undefined && key3 !== undefined) {
|
||||
if (
|
||||
(typeof PDFJSDev === "undefined" ||
|
||||
PDFJSDev.test("!PRODUCTION || TESTING")) &&
|
||||
key3.length < key2.length
|
||||
) {
|
||||
unreachable("Dict.getAsync: Expected keys to be ordered by length.");
|
||||
}
|
||||
value = this._map[key3];
|
||||
}
|
||||
}
|
||||
|
@ -120,8 +148,22 @@ class Dict {
|
|||
getArray(key1, key2, key3) {
|
||||
let value = this._map[key1];
|
||||
if (value === undefined && key2 !== undefined) {
|
||||
if (
|
||||
(typeof PDFJSDev === "undefined" ||
|
||||
PDFJSDev.test("!PRODUCTION || TESTING")) &&
|
||||
key2.length < key1.length
|
||||
) {
|
||||
unreachable("Dict.getArray: Expected keys to be ordered by length.");
|
||||
}
|
||||
value = this._map[key2];
|
||||
if (value === undefined && key3 !== undefined) {
|
||||
if (
|
||||
(typeof PDFJSDev === "undefined" ||
|
||||
PDFJSDev.test("!PRODUCTION || TESTING")) &&
|
||||
key3.length < key2.length
|
||||
) {
|
||||
unreachable("Dict.getArray: Expected keys to be ordered by length.");
|
||||
}
|
||||
value = this._map[key3];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue