From 1bbc694ac3ce7d949f1ad520abed40bdbd0fe04b Mon Sep 17 00:00:00 2001
From: Jonas Jenwald <jonas.jenwald@gmail.com>
Date: Mon, 13 Jun 2016 13:29:32 +0200
Subject: [PATCH 1/2] Assign the `quantizationTables` after parsing the entire
 JPEG image, to prevent issues when the DQT (Define Quantization Tables)
 marker is encountered after SOF{n} (Start of Frame) markers (issue 7406)

This is a tentative patch that fixes 7406.
---
 src/core/jpg.js | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/core/jpg.js b/src/core/jpg.js
index be6840479..4bb326635 100644
--- a/src/core/jpg.js
+++ b/src/core/jpg.js
@@ -387,6 +387,10 @@ var JpegImage = (function jpegImage() {
     var p0, p1, p2, p3, p4, p5, p6, p7;
     var t;
 
+    if (!qt) {
+      throw 'missing required Quantization Table.';
+    }
+
     // inverse DCT on rows
     for (var row = 0; row < 64; row += 8) {
       // gather block data
@@ -738,7 +742,8 @@ var JpegImage = (function jpegImage() {
               l = frame.components.push({
                 h: h,
                 v: v,
-                quantizationTable: quantizationTables[qId]
+                quantizationId: qId,
+                quantizationTable: null, // See comment below.
               });
               frame.componentIds[componentId] = l - 1;
               offset += 3;
@@ -822,6 +827,15 @@ var JpegImage = (function jpegImage() {
       this.components = [];
       for (i = 0; i < frame.components.length; i++) {
         component = frame.components[i];
+
+        // Prevent errors when DQT markers are placed after SOF{n} markers,
+        // by assigning the `quantizationTable` entry after the entire image
+        // has been parsed (fixes issue7406.pdf).
+        var quantizationTable = quantizationTables[component.quantizationId];
+        if (quantizationTable) {
+          component.quantizationTable = quantizationTable;
+        }
+
         this.components.push({
           output: buildComponentData(frame, component),
           scaleX: component.h / frame.maxH,

From 3ac23200ba346840364311f7df241fbc67171ef8 Mon Sep 17 00:00:00 2001
From: Jonas Jenwald <jonas.jenwald@gmail.com>
Date: Sat, 23 Jul 2016 13:04:27 +0200
Subject: [PATCH 2/2] Add a reduced test-case for issue 7406

The PDF file contains an image that we're allowed to use, since it's just the PDF.js logo.
The logo image was simply inverted (so that it requires a /Decode entry in the image dictionary that triggers the use of `jpg.js` instead of the browser), converted to JPEG, and finally edited by hand to change the order of the DQT/SOF{n} markers.
---
 test/pdfs/.gitignore    |   1 +
 test/pdfs/issue7406.pdf | Bin 0 -> 7468 bytes
 test/test_manifest.json |   7 +++++++
 3 files changed, 8 insertions(+)
 create mode 100644 test/pdfs/issue7406.pdf

diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore
index ff1f009f9..72c0ca28c 100644
--- a/test/pdfs/.gitignore
+++ b/test/pdfs/.gitignore
@@ -30,6 +30,7 @@
 !issue7200.pdf
 !issue7229.pdf
 !issue7403.pdf
+!issue7406.pdf
 !issue7426.pdf
 !issue7439.pdf
 !issue7446.pdf
diff --git a/test/pdfs/issue7406.pdf b/test/pdfs/issue7406.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..1c1d07d8275611a9100c5e4a291dc40042980788
GIT binary patch
literal 7468
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

literal 0
HcmV?d00001

diff --git a/test/test_manifest.json b/test/test_manifest.json
index dc0498774..579189daa 100644
--- a/test/test_manifest.json
+++ b/test/test_manifest.json
@@ -976,6 +976,13 @@
        "rounds": 1,
        "type": "eq"
     },
+    {  "id": "issue7406",
+       "file": "pdfs/issue7406.pdf",
+       "md5": "7a3d322d7c595a36b4470cfb6a54a2b7",
+       "link": false,
+       "rounds": 1,
+       "type": "eq"
+    },
     {  "id": "protectip",
        "file": "pdfs/protectip.pdf",
        "md5": "676e7a7b8f96d04825361832b1838a93",