[ https://issues.apache.org/jira/browse/PDFBOX-1586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13646687#comment-13646687 ]
Fredrik Kjellberg commented on PDFBOX-1586: ------------------------------------------- I also get a similar stack trace when creating an image of a PDF page. I'm unable to reproduce the issue in a unit test since it works most of the time but once in a while creates stack traces like these in production: java.lang.IndexOutOfBoundsException: Index: 5, Size: 0 at java.util.ArrayList.get(ArrayList.java:352) at org.apache.pdfbox.io.RandomAccessBuffer.seek(RandomAccessBuffer.java:84) at org.apache.pdfbox.io.RandomAccessFileInputStream.read(RandomAccessFileInputStream.java:96) at java.io.BufferedInputStream.read1(BufferedInputStream.java:267) at java.io.BufferedInputStream.read(BufferedInputStream.java:328) at java.io.BufferedInputStream.fill(BufferedInputStream.java:229) at java.io.BufferedInputStream.read(BufferedInputStream.java:248) at java.io.FilterInputStream.read(FilterInputStream.java:77) at java.io.PushbackInputStream.read(PushbackInputStream.java:133) at org.apache.pdfbox.io.PushBackInputStream.read(PushBackInputStream.java:91) at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:1221) at org.apache.pdfbox.pdfparser.BaseParser.parseCOSArray(BaseParser.java:1036) at org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:266) at org.apache.pdfbox.pdfparser.PDFStreamParser.access$000(PDFStreamParser.java:46) at org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:182) at org.apache.pdfbox.pdfparser.PDFStreamParser$1.hasNext(PDFStreamParser.java:194) at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:255) at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:235) at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:215) at org.apache.pdfbox.pdfviewer.PageDrawer.drawPage(PageDrawer.java:125) at org.apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.java:769) java.lang.IndexOutOfBoundsException: Index: 3, Size: 0 at java.util.ArrayList.get(ArrayList.java:352) at org.apache.pdfbox.io.RandomAccessBuffer.seek(RandomAccessBuffer.java:84) at org.apache.pdfbox.io.RandomAccessFileInputStream.read(RandomAccessFileInputStream.java:96) at java.io.BufferedInputStream.fill(BufferedInputStream.java:229) at java.io.BufferedInputStream.read1(BufferedInputStream.java:269) at java.io.BufferedInputStream.read(BufferedInputStream.java:328) at java.io.FilterInputStream.read(FilterInputStream.java:101) at org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.removeAllFiltersButDCT(PDJpeg.java:305) at org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.getRGBImage(PDJpeg.java:223) at org.apache.pdfbox.util.operator.pagedrawer.Invoke.process(Invoke.java:83) at org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:554) at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:268) at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:235) at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:215) at org.apache.pdfbox.pdfviewer.PageDrawer.drawPage(PageDrawer.java:125) at org.apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.java:769) The code: InputStream pdfInputStream = new ByteArrayInputStream(...); PDDocument document = PDDocument.load(pdfInputStream); List<?> pages = document.getDocumentCatalog().getAllPages(); PDPage page = (PDPage)pages.get(0); BufferedImage image = page.convertToImage(BufferedImage.TYPE_INT_RGB, 72); document.close(); I agree with Andreas that the scratch file needs to be closed somewhere. The returned PDDocument holds a reference to the underlying COSDocument so why is it being GC'd? It looks like the scratch file is supposed to be closed by PDDocument.close() that calls COSDocument.close(). Are there several COSDocument created in the process of parsing and creating an image? > IndexOutOfBoundsException when saving a document (at random) > ------------------------------------------------------------ > > Key: PDFBOX-1586 > URL: https://issues.apache.org/jira/browse/PDFBOX-1586 > Project: PDFBox > Issue Type: Bug > Affects Versions: 1.8.1 > Reporter: James Green > Priority: Critical > > Getting the following stacktrace: > org.apache.pdfbox.exceptions.COSVisitorException: > java.lang.IndexOutOfBoundsException: Index: 28, Size: 0 > at > org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1245) > at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:201) > at org.apache.pdfbox.cos.COSObject.accept(COSObject.java:206) > at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:524) > at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:434) > at > org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1056) > at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:496) > at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1392) > at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1157) > at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1138) > ... > Caused by: java.lang.IndexOutOfBoundsException: Index: 28, Size: 0 > at java.util.ArrayList.rangeCheck(ArrayList.java:604) > at java.util.ArrayList.get(ArrayList.java:382) > at > org.apache.pdfbox.io.RandomAccessBuffer.seek(RandomAccessBuffer.java:84) > at > org.apache.pdfbox.io.RandomAccessFileInputStream.read(RandomAccessFileInputStream.java:96) > at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) > at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) > at java.io.BufferedInputStream.read(BufferedInputStream.java:334) > at > org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1232) > I'll add some context. We have a "data pipeline" in which a Windows Print > Monitor sends postscript into a servlet which then uses GhostScript 9.05 to > convert in-memory to PDF. This PDF is then loaded into PDFBox using > PDDocument.load(). > At this point we split the original PDF into multiple smaller ones each of > which is saved to a ByteArrayOutputStream. At the point of save() we are > having serious reliability issues. > Taking an original PDF from Ghostscript we have saved this into a unit test > to replicate the problem without success. If we attempt to re-execute the > pipeline to take the original PDF and split it, we get apparently random > percentages of saved documents. > For instance, on a 990 page document (text, no images), to be split into 990 > 1-page documents using Tomcat 7 with -Xmx=512m: > Pass 1: 50% were saved, 50% ended with stack traces > Pass 2: 100% were saved > Pass 3: 100% were saved > The same test with -Xmx=128m ended several times with just 1 document saved, > the rest were stack traces. > We have also seen this randomly hit a sample document consisting of four > pages to be split into two two-page documents so it does not appear to be > memory related. We also added code to catch the IndexOutOfBoundsException and > make up to ten attempts to repeat, but it seems the save() either works the > first time or not at all. > We're thinking there are environmental factors here but we're now focused on > getting this nailed. Any advice or assistance will be welcomed. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira