fory deserialize lock alltime
Question
we use threadpool submit fory deserialize task but sometime it will lock,we dump thread : at java.util.zip.Inflater.inflateBytes(Native Method) at java.util.zip.Inflater.inflate(Inflater.java:259) - locked java.util.zip.ZStreamRef@60072934 at java.util.zip.Inflater.inflate(Inflater.java:280) at org.apache.fory.meta.DeflaterMetaCompressor.decompress(DeflaterMetaCompressor.java:51) at org.apache.fory.meta.ClassDefDecoder.decodeClassDefBuf(ClassDefDecoder.java:62) at org.apache.fory.meta.ClassDefDecoder.decodeClassDef(ClassDefDecoder.java:68) at org.apache.fory.meta.ClassDef.readClassDef(ClassDef.java:231) at org.apache.fory.resolver.ClassResolver.readClassDef(ClassResolver.java:1738) at org.apache.fory.resolver.ClassResolver.readClassDefs(ClassResolver.java:1730) at org.apache.fory.Fory.readClassDefs(Fory.java:1557) at org.apache.fory.Fory.deserialize(Fory.java:877) at org.apache.fory.Fory.deserialize(Fory.java:906) at org.apache.fory.Fory.deserialize(Fory.java:899)
Is this a bug in java.util.zip.Inflater.inflate?
The decomrpess in fory is pretty simple:
@Override
public byte[] decompress(byte[] input, int offset, int size) {
Inflater inflater = new Inflater();
inflater.setInput(input, offset, size);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[128];
try {
while (!inflater.finished()) {
int decompressedSize = inflater.inflate(buffer);
outputStream.write(buffer, 0, decompressedSize);
}
} catch (DataFormatException e) {
throw new RuntimeException(e);
}
return outputStream.toByteArray();
}
I don't see any wrong usage issue here
The decomrpess in fory is pretty simple:
@Override public byte[] decompress(byte[] input, int offset, int size) { Inflater inflater = new Inflater(); inflater.setInput(input, offset, size); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[128]; try { while (!inflater.finished()) { int decompressedSize = inflater.inflate(buffer); outputStream.write(buffer, 0, decompressedSize); } } catch (DataFormatException e) { throw new RuntimeException(e); } return outputStream.toByteArray(); } I don't see any wrong usage issue here
maybe can i avoid use this util to decompress?
maybe error byte data can cause this bug,i fix it by check byte data correct