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",