diff --git a/src/core/parser.js b/src/core/parser.js index eb26e12e9..6fb64dc39 100644 --- a/src/core/parser.js +++ b/src/core/parser.js @@ -1013,6 +1013,11 @@ var Lexer = (function LexerClosure() { this.nextChar(); return Cmd.get('}'); case 0x29: // ')' + // Consume the current character in order to avoid permanently hanging + // the worker thread if `Lexer.getObject` is called from within a loop + // containing try-catch statements, since we would otherwise attempt + // to parse the *same* character over and over (fixes issue8061.pdf). + this.nextChar(); error('Illegal character: ' + ch); break; } diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 3353c9679..0fb9bec5c 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -45,6 +45,7 @@ !issue7855.pdf !issue7872.pdf !issue7901.pdf +!issue8061.pdf !bad-PageLabels.pdf !filled-background.pdf !ArabicCIDTrueType.pdf diff --git a/test/pdfs/issue8061.pdf b/test/pdfs/issue8061.pdf new file mode 100644 index 000000000..093e1f920 Binary files /dev/null and b/test/pdfs/issue8061.pdf differ diff --git a/test/test_manifest.json b/test/test_manifest.json index 6ac223b44..eb8b27a0a 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1712,6 +1712,13 @@ "link": false, "type": "eq" }, + { "id": "issue8061", + "file": "pdfs/issue8061.pdf", + "md5": "d61fe1dcdcd55bca00b351b2fc2c6dc7", + "rounds": 1, + "link": false, + "type": "eq" + }, { "id": "issue7580-eq", "file": "pdfs/issue7580.pdf", "md5": "44dd5a9b4373fcab9890cf567722a766",