NullPointerException while reading a compressed file
MarcoBerlot opened this issue · 6 comments
Describe the bug
Null pointer exception being thrown while attempting to read lz4 file.
java.lang.NullPointerException
at net.jpountz.lz4.LZ4FrameInputStream.read(LZ4FrameInputStream.java:295)
at java.base/java.io.FilterInputStream.read(Unknown Source)
Expected behavior
The file should be properly uncompressed and read.
To Reproduce
Unfortunately I can't provide steps to reproduce since this has happened in our production environment. Here's the function that is reading the lz4 files
private byte[] readCompressedFile(File file) throws IOException {
LZ4FrameInputStream gis = new LZ4FrameInputStream(new FileInputStream(file));
ByteArrayOutputStream fos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = gis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.close();
gis.close();
return fos.toByteArray();
}
System (please complete the following information):
- OS: CentOS Linux release 7.8.2003 (Core)
- Compiler: OpenJ9
- Build System [e.g. Makefile]
- Other hardware specs [e.g Core 2 duo...]
Thanks for reporting this. What version of lz4-java are you using?
Java version: 10.0.1 (build 10.0.1+10) x 86_64
openjdk 11.0.9 2020-10-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9+11-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9+11-LTS, mixed mode, sharing)
Thanks @odaira
One way that I was able to reproduce this is by passing an empty file. In this case nextFrameInfo();
will return early and ByteBuffer buffer
won't be initialized and when it tries to read the file it will encounter a NPE.
I believe a more explicit exception might help in this case, or make sure that the buffer gets initialized also in the case of an empty file.
@MarcoBerlot These are the versions of your Java runtime, but I would like to know the version of lz4-java you are using.
Java version: 10.0.1 (build 10.0.1+10) x 86_64
openjdk 11.0.9 2020-10-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.9+11-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9+11-LTS, mixed mode, sharing)
Doesn't your application include a jar file named lz4-java-x.y.z.jar, like lz4-java-1.7.1.jar? Then x.y.z is the version of lz4-java.
@odaira sorry, I did not read it correctly. I'm using version 1.4