Skip to content

Commit c09528c

Browse files
author
Eugene Bochilo
committed
Fix bug with IndexOutOfBounds exception in type3 font
DEVSIX-6103
1 parent b57af5f commit c09528c

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

kernel/src/main/java/com/itextpdf/kernel/font/PdfType3Font.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,8 @@ private void addGlyphsFromDifferences(PdfArray differences, PdfDictionary charPr
444444
PdfObject obj = differences.get(k);
445445
if (obj.isNumber()) {
446446
currentNumber = ((PdfNumber) obj).intValue();
447+
} else if (currentNumber > SIMPLE_FONT_MAX_CHAR_CODE_VALUE) {
448+
// Skip glyphs with id greater than 255
447449
} else {
448450
String glyphName = ((PdfName) obj).getValue();
449451
int unicode = fontEncoding.getUnicode(currentNumber);

kernel/src/test/java/com/itextpdf/kernel/pdf/canvas/parser/TextExtractIllegalDifferencesTest.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ This file is part of the iText (R) project.
4545
import com.itextpdf.io.logs.IoLogMessageConstant;
4646
import com.itextpdf.kernel.pdf.PdfDocument;
4747
import com.itextpdf.kernel.pdf.PdfReader;
48+
import com.itextpdf.test.AssertUtil;
4849
import com.itextpdf.test.ExtendedITextTest;
4950
import com.itextpdf.test.annotations.LogMessage;
5051
import com.itextpdf.test.annotations.LogMessages;
@@ -59,10 +60,20 @@ This file is part of the iText (R) project.
5960
public class TextExtractIllegalDifferencesTest extends ExtendedITextTest {
6061

6162
private static final String sourceFolder = "./src/test/resources/com/itextpdf/kernel/parser/TextExtractIllegalDifferencesTest/";
63+
6264
@Test
63-
@LogMessages(messages = @LogMessage(messageTemplate = IoLogMessageConstant.DOCFONT_HAS_ILLEGAL_DIFFERENCES, count = 1))
65+
@LogMessages(messages = @LogMessage(messageTemplate = IoLogMessageConstant.DOCFONT_HAS_ILLEGAL_DIFFERENCES))
6466
public void illegalDifference() throws IOException {
65-
PdfDocument pdf = new PdfDocument(new PdfReader(sourceFolder + "illegalDifference.pdf"));
66-
PdfTextExtractor.getTextFromPage(pdf.getFirstPage());
67+
try (PdfDocument pdf = new PdfDocument(new PdfReader(sourceFolder + "illegalDifference.pdf"))) {
68+
AssertUtil.doesNotThrow(() -> PdfTextExtractor.getTextFromPage(pdf.getFirstPage()));
69+
}
70+
}
71+
72+
@Test
73+
@LogMessages(messages = @LogMessage(messageTemplate = IoLogMessageConstant.DOCFONT_HAS_ILLEGAL_DIFFERENCES, count = 2))
74+
public void illegalDifferenceType3Font() throws IOException {
75+
try (PdfDocument pdf = new PdfDocument(new PdfReader(sourceFolder + "illegalDifferenceType3Font.pdf"))) {
76+
AssertUtil.doesNotThrow(() -> PdfTextExtractor.getTextFromPage(pdf.getFirstPage()));
77+
}
6778
}
6879
}

0 commit comments

Comments
 (0)