You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "krishnan (Jira)" <ji...@apache.org> on 2022/01/06 11:21:00 UTC

[jira] [Updated] (PDFBOX-5357) java.lang.IndexOutOfBoundsException

     [ https://issues.apache.org/jira/browse/PDFBOX-5357?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

krishnan updated PDFBOX-5357:
-----------------------------
        Fix Version/s:     (was: 3.0.0 PDFBox)
                           (was: 2.0.23)
    Affects Version/s: 3.0.0 PDFBox
          Description: 
Caused by: java.lang.IndexOutOfBoundsException: Index: 111, Size: 111
    at java.util.ArrayList.rangeCheck(ArrayList.java:657)
    at java.util.ArrayList.get(ArrayList.java:433)
    at org.apache.pdfbox.cos.COSArray.getObject(COSArray.java:188)
    at org.apache.pdfbox.pdmodel.common.PDNameTreeNode.getNames(PDNameTreeNode.java:272)
    at org.apache.pdfbox.multipdf.PDFMergerUtility.getIDTreeAsMap(PDFMergerUtility.java:1036)
    at org.apache.pdfbox.multipdf.PDFMergerUtility.getIDTreeAsMap(PDFMergerUtility.java:1051)
    at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeIDTree(PDFMergerUtility.java:1008)
    at org.apache.pdfbox.multipdf.PDFMergerUtility.appendDocument(PDFMergerUtility.java:877)
    at org.apache.pdfbox.multipdf.PDFMergerUtility.legacyMergeDocuments(PDFMergerUtility.java:459)
    at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:346)
    at com.vuram.plugins.pdfutilities.MergePDF.runSmartService(MergePDF.java:46)
    at com.vuram.plugins.pdfutilities.AbstractPDFDocumentGeneration.run(AbstractPDFDocumentGeneration.java:66)
    ... 16 more

 

We are facing the above error on merging certain types of pdf documents unfortunately we will not be sharing the files.

Please find the snippet below,

PDFMergerUtility mergePdf = new PDFMergerUtility();

        for (Long filename : documents) {
            documentPath = cs.getInternalFilename(filename);
            mergePdf.addSource(new File(documentPath));

        }

        mergePdf.setDestinationFileName(cs.getInternalFilename(docId));
        mergePdf.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());

 

We found the suggested solution in the below ticket but still issue is persist.

URL : https://issues.apache.org/jira/browse/PDFBOX-5072

 

  was:
I'm having a similar issue that have been fixed in PDFBOX-4969.

In my case, the IndexOutOfBoundsException occurs inside PDNameTreeNode, and not inside PDNumberTreeNode.
{code:java}
java.lang.IndexOutOfBoundsException: Index: 81, Size: 81 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.get(ArrayList.java:429) at org.apache.pdfbox.cos.COSArray.getObject(COSArray.java:188) at org.apache.pdfbox.pdmodel.common.PDNameTreeNode.getNames(PDNameTreeNode.java:272) at org.apache.pdfbox.multipdf.PDFMergerUtility.getIDTreeAsMap(PDFMergerUtility.java:1036) at org.apache.pdfbox.multipdf.PDFMergerUtility.getIDTreeAsMap(PDFMergerUtility.java:1051) at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeIDTree(PDFMergerUtility.java:1008) at org.apache.pdfbox.multipdf.PDFMergerUtility.appendDocument(PDFMergerUtility.java:877) at org.apache.pdfbox.multipdf.PDFMergerUtility.legacyMergeDocuments(PDFMergerUtility.java:459) at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:346)
{code}
Unfortunately, I can't share the document that reproduce the issue.

I tried the same approach to fix it :
{code:java}
public Map<String, T> getNames() throws IOException
{
   COSArray namesArray = node.getCOSArray(COSName.NAMES);
   if( namesArray != null )
   {
     Map<String, T> names = new LinkedHashMap<String, T>();
     if (namesArray.size() % 2 != 0)
     {
       LOG.warn("Numbers array has odd size: " + namesArray.size());
     }
     for (int i = 0; i + 1 < namesArray.size(); i += 2)
     {
       COSBase base = namesArray.getObject(i);
       if (!(base instanceof COSString))
       {
          throw new IOException("Expected string, found " + base + " in name tree at index " + i);
....{code}
But I'm getting the IOException :
{code:java}
Caused by: java.io.IOException: Expected string, found COSDictionary{[...] in name tree at index 0
{code}
And indeed, _namesArray_ contains a COSObject at first index :

!image-2021-01-06-14-56-41-433.png!

 


>  java.lang.IndexOutOfBoundsException
> ------------------------------------
>
>                 Key: PDFBOX-5357
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-5357
>             Project: PDFBox
>          Issue Type: Bug
>          Components: PDModel, Utilities
>    Affects Versions: 2.0.22, 3.0.0 PDFBox
>            Reporter: krishnan
>            Assignee: Tilman Hausherr
>            Priority: Critical
>
> Caused by: java.lang.IndexOutOfBoundsException: Index: 111, Size: 111
>     at java.util.ArrayList.rangeCheck(ArrayList.java:657)
>     at java.util.ArrayList.get(ArrayList.java:433)
>     at org.apache.pdfbox.cos.COSArray.getObject(COSArray.java:188)
>     at org.apache.pdfbox.pdmodel.common.PDNameTreeNode.getNames(PDNameTreeNode.java:272)
>     at org.apache.pdfbox.multipdf.PDFMergerUtility.getIDTreeAsMap(PDFMergerUtility.java:1036)
>     at org.apache.pdfbox.multipdf.PDFMergerUtility.getIDTreeAsMap(PDFMergerUtility.java:1051)
>     at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeIDTree(PDFMergerUtility.java:1008)
>     at org.apache.pdfbox.multipdf.PDFMergerUtility.appendDocument(PDFMergerUtility.java:877)
>     at org.apache.pdfbox.multipdf.PDFMergerUtility.legacyMergeDocuments(PDFMergerUtility.java:459)
>     at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:346)
>     at com.vuram.plugins.pdfutilities.MergePDF.runSmartService(MergePDF.java:46)
>     at com.vuram.plugins.pdfutilities.AbstractPDFDocumentGeneration.run(AbstractPDFDocumentGeneration.java:66)
>     ... 16 more
>  
> We are facing the above error on merging certain types of pdf documents unfortunately we will not be sharing the files.
> Please find the snippet below,
> PDFMergerUtility mergePdf = new PDFMergerUtility();
>         for (Long filename : documents) {
>             documentPath = cs.getInternalFilename(filename);
>             mergePdf.addSource(new File(documentPath));
>         }
>         mergePdf.setDestinationFileName(cs.getInternalFilename(docId));
>         mergePdf.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());
>  
> We found the suggested solution in the below ticket but still issue is persist.
> URL : https://issues.apache.org/jira/browse/PDFBOX-5072
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org