Hi,
I'm getting an OutOfMemoryError from PDFBox when parsing a certain PDF
using the Apache Tika App v 1.17 - which uses PDFBox 2.0.8 internally.
This is reproducible even with 8GB heap.
The OutOfMemoryError happens in
org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState#getLineDashPattern,
which contains this piece of suspicious code:
COSArray dp = (COSArray) dict.getDictionaryObject( COSName.D );
if( dp != null )
{
COSArray array = new COSArray();
dp.addAll(dp);
The last line seems to wrong? It appends all elements from 'dp' to 'dp'
again, effectively duplicating the elements in the list. Maybe it should
be 'array.addAll(dp)' or something like that?
Can you confirm this being a bug? Should I open a JIRA ticket for this
problem?
Do you know a workaround to avoid the crash, e.g. an option to skip some
parts of the file for text extraction?
Here's the stacktrace:
[Full GC (Allocation Failure) 4225609K->4224664K(5989888K), 32,9544686
secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.addAll(ArrayList.java:579)
at org.apache.pdfbox.cos.COSArray.addAll(COSArray.java:124)
at
org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState.getLineDashPattern(PDExtendedGraphicsState.java:280)
at
org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState.copyIntoGraphicsState(PDExtendedGraphicsState.java:89)
at
org.apache.pdfbox.contentstream.operator.state.SetGraphicsStateParameters.process(SetGraphicsStateParameters.java:61)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:838)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:495)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:469)
at
org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:150)
at
org.apache.pdfbox.text.LegacyPDFStreamEngine.processPage(LegacyPDFStreamEngine.java:139)
at
org.apache.pdfbox.text.PDFTextStripper.processPage(PDFTextStripper.java:391)
at org.apache.tika.parser.pdf.PDF2XHTML.processPage(PDF2XHTML.java:147)
at
org.apache.pdfbox.text.PDFTextStripper.processPages(PDFTextStripper.java:319)
at
org.apache.pdfbox.text.PDFTextStripper.writeText(PDFTextStripper.java:266)
at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:117)
at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:168)
at
org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
at
org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
at
org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:143)
at org.apache.tika.cli.TikaCLI$OutputType.process(TikaCLI.java:205)
at org.apache.tika.cli.TikaCLI.process(TikaCLI.java:486)
at org.apache.tika.cli.TikaCLI.main(TikaCLI.java:145)
I'm not yet sure if I can share the PDF. If needed, I can check that.
Best regards,
Andreas
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]