Details
-
Type: Bug
-
Status: Open
-
Priority: Major
-
Resolution: Unresolved
-
Affects Version/s: 6.3.2
-
Fix Version/s: None
-
Component/s: Core/Parsing
-
Labels:None
-
Environment:Windows 7 64 bit, Oracle JDK 8u60
Description
It seems like ICEpdf 6.3.2 introduced a regression, because with ICEpdf 6.2.2 everything works fine.
If I try to load a PDF document via byte array using org.icepdf.core.pobjects.Document.setByteArray(byte[], int, int, String), it throws IOException with the following stack trace:
============================================
java.io.IOException: java.lang.String cannot be cast to java.lang.Number
at org.icepdf.core.pobjects.Document.setInputStream(Document.java:499)
at org.icepdf.core.pobjects.Document.setByteArray(Document.java:365)
at com.example.App.testPdf(App.java:13)
...
============================================
And the following appears in standard error output stream:
============================================
Dec 07, 2019 12:20:38 AM org.icepdf.core.pobjects.Catalog <clinit>
INFO: ICEsoft ICEpdf Core 6.3.2
Dec 07, 2019 12:20:38 AM org.icepdf.core.pobjects.Document setInputStream
WARNING: Cross reference deferred loading failed, will fall back to linear reading.
Dec 07, 2019 12:20:38 AM org.icepdf.core.pobjects.Document setInputStream
SEVERE: Error loading PDF Document.
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
at org.icepdf.core.util.Parser.getObject(Parser.java:150)
at org.icepdf.core.pobjects.Document.loadDocumentViaLinearTraversal(Document.java:629)
at org.icepdf.core.pobjects.Document.setInputStream(Document.java:478)
at org.icepdf.core.pobjects.Document.setByteArray(Document.java:365)
at com.example.App.testPdf(App.java:13)
...
============================================
Here is the code snippet which I use to reproduce:
============================================
package com.example;
import org.icepdf.core.pobjects.Document;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public void testPdf(String pdfPath) throws Exception {
byte[] bytes = Files.readAllBytes(Paths.get(pdfPath));
Document document = new Document();
document.setByteArray(bytes, 0, bytes.length, null);
document.dispose();
}
}
============================================
To test it, call this:
new App().testPdf("/full/path/to/pdf/file.pdf");
If needed, I can provide PDF documents, which cause this issue, via email channel.
If I try to load a PDF document via byte array using org.icepdf.core.pobjects.Document.setByteArray(byte[], int, int, String), it throws IOException with the following stack trace:
============================================
java.io.IOException: java.lang.String cannot be cast to java.lang.Number
at org.icepdf.core.pobjects.Document.setInputStream(Document.java:499)
at org.icepdf.core.pobjects.Document.setByteArray(Document.java:365)
at com.example.App.testPdf(App.java:13)
...
============================================
And the following appears in standard error output stream:
============================================
Dec 07, 2019 12:20:38 AM org.icepdf.core.pobjects.Catalog <clinit>
INFO: ICEsoft ICEpdf Core 6.3.2
Dec 07, 2019 12:20:38 AM org.icepdf.core.pobjects.Document setInputStream
WARNING: Cross reference deferred loading failed, will fall back to linear reading.
Dec 07, 2019 12:20:38 AM org.icepdf.core.pobjects.Document setInputStream
SEVERE: Error loading PDF Document.
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
at org.icepdf.core.util.Parser.getObject(Parser.java:150)
at org.icepdf.core.pobjects.Document.loadDocumentViaLinearTraversal(Document.java:629)
at org.icepdf.core.pobjects.Document.setInputStream(Document.java:478)
at org.icepdf.core.pobjects.Document.setByteArray(Document.java:365)
at com.example.App.testPdf(App.java:13)
...
============================================
Here is the code snippet which I use to reproduce:
============================================
package com.example;
import org.icepdf.core.pobjects.Document;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public void testPdf(String pdfPath) throws Exception {
byte[] bytes = Files.readAllBytes(Paths.get(pdfPath));
Document document = new Document();
document.setByteArray(bytes, 0, bytes.length, null);
document.dispose();
}
}
============================================
To test it, call this:
new App().testPdf("/full/path/to/pdf/file.pdf");
If needed, I can provide PDF documents, which cause this issue, via email channel.
I removed some empty lines in code snippet while I was creating this ticket. So,
in stack traces should be read as