diff --git a/java/fury-core/src/main/java/io/fury/Fury.java b/java/fury-core/src/main/java/io/fury/Fury.java index f6911f91b9..0cead7c686 100644 --- a/java/fury-core/src/main/java/io/fury/Fury.java +++ b/java/fury-core/src/main/java/io/fury/Fury.java @@ -691,6 +691,7 @@ public Object deserialize(InputStream inputStream, Iterable outOfB int read = inputStream.read(buffer.getHeapMemory(), 0, 4); Preconditions.checkArgument(read == 4); int size = buffer.readInt(); + buffer.ensure(size + 4); read = inputStream.read(buffer.getHeapMemory(), 4, size); Preconditions.checkArgument(read == size); return deserialize(buffer, outOfBandBuffers); @@ -1109,6 +1110,7 @@ private Object deserializeFromStream( int read = inputStream.read(buffer.getHeapMemory(), 0, 4); Preconditions.checkArgument(read == 4); int size = buffer.readInt(); + buffer.ensure(4 + size); read = inputStream.read(buffer.getHeapMemory(), 4, size); Preconditions.checkArgument(read == size); } diff --git a/java/fury-core/src/test/java/io/fury/FuryTest.java b/java/fury-core/src/test/java/io/fury/FuryTest.java index 8d7df7a446..82a0ded473 100644 --- a/java/fury-core/src/test/java/io/fury/FuryTest.java +++ b/java/fury-core/src/test/java/io/fury/FuryTest.java @@ -438,6 +438,14 @@ public void testOutputStream() throws IOException { assertEquals(newObj, beanA); newObj = fury.deserialize(bis); assertEquals(newObj, beanA); + + fury = Fury.builder().requireClassRegistration(false).build(); + // test reader buffer grow + bis = new ByteArrayInputStream(bas.toByteArray()); + newObj = fury.deserialize(bis); + assertEquals(newObj, beanA); + newObj = fury.deserialize(bis); + assertEquals(newObj, beanA); } @Test @@ -465,6 +473,14 @@ public void testJavaOutputStream() throws IOException { assertEquals(newObj, beanA); newObj = fury.deserializeJavaObjectAndClass(bis); assertEquals(newObj, beanA); + + fury = Fury.builder().requireClassRegistration(false).build(); + // test reader buffer grow + bis = new ByteArrayInputStream(bas.toByteArray()); + newObj = fury.deserializeJavaObjectAndClass(bis); + assertEquals(newObj, beanA); + newObj = fury.deserializeJavaObjectAndClass(bis); + assertEquals(newObj, beanA); } } }