Skip to content

Commit 02e0c8a

Browse files
Eugene BochiloiText-CI
authored andcommitted
Fix bug with IndexOutOfBounds exception in type3 font
DEVSIX-6103 Autoported commit. Original commit hash: [c09528c66]
1 parent 4ca2776 commit 02e0c8a

File tree

4 files changed

+26
-12
lines changed

4 files changed

+26
-12
lines changed

itext.tests/itext.kernel.tests/itext/kernel/pdf/canvas/parser/TextExtractIllegalDifferencesTest.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,19 @@ public class TextExtractIllegalDifferencesTest : ExtendedITextTest {
5151
.CurrentContext.TestDirectory) + "/resources/itext/kernel/parser/TextExtractIllegalDifferencesTest/";
5252

5353
[NUnit.Framework.Test]
54-
[LogMessage(iText.IO.Logs.IoLogMessageConstant.DOCFONT_HAS_ILLEGAL_DIFFERENCES, Count = 1)]
54+
[LogMessage(iText.IO.Logs.IoLogMessageConstant.DOCFONT_HAS_ILLEGAL_DIFFERENCES)]
5555
public virtual void IllegalDifference() {
56-
PdfDocument pdf = new PdfDocument(new PdfReader(sourceFolder + "illegalDifference.pdf"));
57-
PdfTextExtractor.GetTextFromPage(pdf.GetFirstPage());
56+
using (PdfDocument pdf = new PdfDocument(new PdfReader(sourceFolder + "illegalDifference.pdf"))) {
57+
NUnit.Framework.Assert.DoesNotThrow(() => PdfTextExtractor.GetTextFromPage(pdf.GetFirstPage()));
58+
}
59+
}
60+
61+
[NUnit.Framework.Test]
62+
[LogMessage(iText.IO.Logs.IoLogMessageConstant.DOCFONT_HAS_ILLEGAL_DIFFERENCES, Count = 2)]
63+
public virtual void IllegalDifferenceType3Font() {
64+
using (PdfDocument pdf = new PdfDocument(new PdfReader(sourceFolder + "illegalDifferenceType3Font.pdf"))) {
65+
NUnit.Framework.Assert.DoesNotThrow(() => PdfTextExtractor.GetTextFromPage(pdf.GetFirstPage()));
66+
}
5867
}
5968
}
6069
}

itext/itext.kernel/itext/kernel/font/PdfType3Font.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -408,15 +408,20 @@ private void AddGlyphsFromDifferences(PdfArray differences, PdfDictionary charPr
408408
currentNumber = ((PdfNumber)obj).IntValue();
409409
}
410410
else {
411-
String glyphName = ((PdfName)obj).GetValue();
412-
int unicode = fontEncoding.GetUnicode(currentNumber);
413-
if (GetFontProgram().GetGlyphByCode(currentNumber) == null && charProcsDic.ContainsKey(new PdfName(glyphName
414-
))) {
415-
fontEncoding.SetDifference(currentNumber, glyphName);
416-
((Type3Font)GetFontProgram()).AddGlyph(currentNumber, unicode, widths[currentNumber], null, new Type3Glyph
417-
(charProcsDic.GetAsStream(new PdfName(glyphName)), GetDocument()));
411+
if (currentNumber > SIMPLE_FONT_MAX_CHAR_CODE_VALUE) {
412+
}
413+
else {
414+
// Skip glyphs with id greater than 255
415+
String glyphName = ((PdfName)obj).GetValue();
416+
int unicode = fontEncoding.GetUnicode(currentNumber);
417+
if (GetFontProgram().GetGlyphByCode(currentNumber) == null && charProcsDic.ContainsKey(new PdfName(glyphName
418+
))) {
419+
fontEncoding.SetDifference(currentNumber, glyphName);
420+
((Type3Font)GetFontProgram()).AddGlyph(currentNumber, unicode, widths[currentNumber], null, new Type3Glyph
421+
(charProcsDic.GetAsStream(new PdfName(glyphName)), GetDocument()));
422+
}
423+
currentNumber++;
418424
}
419-
currentNumber++;
420425
}
421426
}
422427
}

port-hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
b57af5ffa23b49bfb3dc4c740bc5d67d04692c60
1+
c09528c66d2bb0e1b95bed9b284d9aeba778faaf

0 commit comments

Comments
 (0)