diff --git a/src/core.js b/src/core.js index 765a239b7..a9c5b15a2 100644 --- a/src/core.js +++ b/src/core.js @@ -196,6 +196,9 @@ var Page = (function PageClosure() { for (i = 0; i < n; ++i) content[i] = xref.fetchIfRef(content[i]); content = new StreamsSequenceStream(content); + } else if (!content) { + // replacing non-existent page content with empty one + content = new Stream(new Uint8Array(0)); } var pe = this.pe = new PartialEvaluator( diff --git a/test/driver.js b/test/driver.js index 85d25658a..5a3263bda 100644 --- a/test/driver.js +++ b/test/driver.js @@ -78,6 +78,14 @@ function cleanup() { } } +function exceptionToString(e) { + if (typeof e !== 'object') + return String(e); + if (!('message' in e)) + return JSON.stringify(e); + return e.message + ('stack' in e ? ' at ' + e.stack.split('\n')[0] : ''); +} + function nextTask() { cleanup(); @@ -95,7 +103,7 @@ function nextTask() { try { task.pdfDoc = new PDFJS.PDFDoc(data); } catch (e) { - failure = 'load PDF doc : ' + e.toString(); + failure = 'load PDF doc : ' + exceptionToString(e); } task.pageNum = task.firstPage || 1; nextPage(task, failure); @@ -185,7 +193,7 @@ function nextPage(task, loadError) { textLayerBuilder ); } catch (e) { - failure = 'page setup : ' + e.toString(); + failure = 'page setup : ' + exceptionToString(e); } } diff --git a/test/pdfs/liveprogramming.pdf.link b/test/pdfs/liveprogramming.pdf.link new file mode 100644 index 000000000..390da08ed --- /dev/null +++ b/test/pdfs/liveprogramming.pdf.link @@ -0,0 +1 @@ +http://blog.lassus.se/files/liveprogramming.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index 6e3a3e52b..8598e4bc8 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -395,5 +395,13 @@ "rounds": 1, "link": true, "type": "eq" + }, + { "id": "liveprogramming", + "file": "pdfs/liveprogramming.pdf", + "md5": "7bd4dad1188232ef597d36fd72c33e52", + "rounds": 1, + "pageLimit": 3, + "link": true, + "type": "load" } ]