From 5128603f64ff8053194050bd732900f282f76149 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 20 Aug 2015 23:01:48 +0200 Subject: [PATCH] Also check `maybeLength` when deciding if a stream is empty in `Parser_makeFilter` (issue 6360) The problem with the PDF files in the issue, besides the obviously broken XRef tables which we're able to recover from, is that many/most of the streams have Dictionaries where the `Length` entry is set to `0`. This causes us to return `NullStream`, instead of the appropriate one in `Parser_makeFilter`. Fixes 6360. --- src/core/parser.js | 2 +- test/pdfs/issue6360.pdf.link | 1 + test/test_manifest.json | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 test/pdfs/issue6360.pdf.link diff --git a/src/core/parser.js b/src/core/parser.js index 62a2482d4..dbc02e33e 100644 --- a/src/core/parser.js +++ b/src/core/parser.js @@ -524,7 +524,7 @@ var Parser = (function ParserClosure() { return stream; }, makeFilter: function Parser_makeFilter(stream, name, maybeLength, params) { - if (stream.dict.get('Length') === 0) { + if (stream.dict.get('Length') === 0 && !maybeLength) { return new NullStream(stream); } try { diff --git a/test/pdfs/issue6360.pdf.link b/test/pdfs/issue6360.pdf.link new file mode 100644 index 000000000..69a59d5c0 --- /dev/null +++ b/test/pdfs/issue6360.pdf.link @@ -0,0 +1 @@ +http://web.archive.org/web/20150820205437/https://s3-eu-west-1.amazonaws.com/document-api-images-prod/docs/KNJfiZ5NV_Nb8d9VJmbvnWQ-5tlAir_arkwCEN_4EnA/application-pdf?AWSAccessKeyId=ASIAJUC4JIACNAMOVPXQ&Expires=1440104129&Signature=ItgaKidUAi70YSE%2F4E1Fbp8XSP0%3D&x-amz-security-token=AQoDYXdzEJH%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEa4AMvYGaEfeu06eu1RFUPRoTnDKITutvSW8T1REdKtxHHq41ZRI%2FQL5hbzkEsy7gamqnktaoSpft5PBdrv5btUERD8LOA2tnbrOCCbodE3JubVkzMp4FIuZ%2F%2Fkpb%2F%2Be3dfG36VjpMvLWTKkitAsrFCEy5MFTp9RY3aAF0fNT%2Buhfz797O4WKH4qRm6juVRnMhX1gBjiPg0ipftdg5ZyKcHa1hBq4C%2FNoDeU2aX5XM3HboVBlsaY5NkfJyk%2Bjj6tfJVMY8scNyzQumediNb6CyWSlAEg3QJ2MzdWplBvsye%2BRMn7uC0d1Zw8uc7jYPl9jtY4Ix2%2Fnzv9rrxUSOTzXWqnxTHc%2BfTrrgMhWmSUxff80vhaIk4RAHfPu3F38BomBWcE%2B71vn7I5NwLEwg6DQeytuWuz0fVpQ4W1qudqurZ%2F5rPhyyFK0UoXDSAc%2B14TMBpgBbsj0qSZLQl%2FSMPAcKEKwug9CAhlyyech5l8VraSIdrw3N0u%2F5TMsX5VJNFH3xXKcXdljMNWRmR8eTSpExdJRgjODlKR2VEn56gaLDTPFvpR2f4N7%2FCcun%2FbeYgt2g6wTOXTmEkRr8loMEJxQBXS86ulvIvAbjsc8dPbWKcRjfH4dLTtKA7SWRzP2hs9SJc5EgxfzXrgU%3D diff --git a/test/test_manifest.json b/test/test_manifest.json index e19959987..9b6a9e8eb 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1062,6 +1062,15 @@ "link": true, "type": "eq" }, + { "id": "issue6360", + "file": "pdfs/issue6360.pdf", + "md5": "58c5455ffd84b1c07ad2d0fa90cd5e26", + "rounds": 1, + "link": true, + "firstPage": 1, + "lastPage": 1, + "type": "eq" + }, { "id": "issue2931", "file": "pdfs/issue2931.pdf", "md5": "ea40940eaf3541b312bda9329167da11",