Skip to content

Commit ac8d80a

Browse files
committed
Fix infinite loop in JBIG2 decoder with >4 referred-to segments and add regression test
1 parent e7288dc commit ac8d80a

File tree

4 files changed

+11
-3
lines changed

4 files changed

+11
-3
lines changed

src/core/jbig2.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,15 +1165,15 @@ function readSegmentHeader(data, start) {
11651165
let referredToCount = (referredFlags >> 5) & 7;
11661166
const retainBits = [referredFlags & 31];
11671167
let position = start + 6;
1168-
if (referredFlags === 7) {
1168+
if (referredToCount === 7) {
11691169
referredToCount = readUint32(data, position - 1) & 0x1fffffff;
11701170
position += 3;
1171-
let bytes = (referredToCount + 7) >> 3;
1171+
let bytes = (referredToCount + 8) >> 3;
11721172
retainBits[0] = data[position++];
11731173
while (--bytes > 0) {
11741174
retainBits.push(data[position++]);
11751175
}
1176-
} else if (referredFlags === 5 || referredFlags === 6) {
1176+
} else if (referredToCount === 5 || referredToCount === 6) {
11771177
throw new Jbig2Error("invalid referred-to flags");
11781178
}
11791179

test/pdfs/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,7 @@
749749
!comments.pdf
750750
!issue20319_1.pdf
751751
!issue20319_2.pdf
752+
!issue20439.pdf
752753
!bug1992868.pdf
753754
!bug1937438_af_from_latex.pdf
754755
!bug1937438_from_word.pdf

test/pdfs/issue20439.pdf

1.27 KB
Binary file not shown.

test/test_manifest.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2809,6 +2809,13 @@
28092809
"rounds": 1,
28102810
"type": "eq"
28112811
},
2812+
{
2813+
"id": "issue20439",
2814+
"file": "pdfs/issue20439.pdf",
2815+
"md5": "3c7e888b26ff00943ec1610d93235efc",
2816+
"rounds": 1,
2817+
"type": "eq"
2818+
},
28122819
{
28132820
"id": "issue15942",
28142821
"file": "pdfs/issue15942.pdf",

0 commit comments

Comments
 (0)