diff --git a/src/com/esotericsoftware/kryo/serializers/CompatibleFieldSerializer.java b/src/com/esotericsoftware/kryo/serializers/CompatibleFieldSerializer.java index 0296febb1..3c58e2d3d 100644 --- a/src/com/esotericsoftware/kryo/serializers/CompatibleFieldSerializer.java +++ b/src/com/esotericsoftware/kryo/serializers/CompatibleFieldSerializer.java @@ -216,7 +216,7 @@ private CachedField[] readFields (Kryo kryo, Input input) { } } else { int low, mid, high, compare; - int lastFieldIndex = allFields.length; + int lastFieldIndex = allFields.length - 1; outer: for (int i = 0; i < length; i++) { String schemaName = names[i]; diff --git a/test/com/esotericsoftware/kryo/serializers/CompatibleFieldSerializerTest.java b/test/com/esotericsoftware/kryo/serializers/CompatibleFieldSerializerTest.java index b266eaf99..adaab492c 100644 --- a/test/com/esotericsoftware/kryo/serializers/CompatibleFieldSerializerTest.java +++ b/test/com/esotericsoftware/kryo/serializers/CompatibleFieldSerializerTest.java @@ -416,6 +416,22 @@ private void testRemovedMultipleFieldsFromClassWithManyFields (int length, boole assertEquals(object1, object2); } + @Test + void testRemoveAllFieldsFromClassWithManyFields () { + CompatibleFieldSerializer serializer = new CompatibleFieldSerializer<>(kryo, ClassWithManyFields.class); + kryo.register(ClassWithManyFields.class, serializer); + + ClassWithManyFields object1 = new ClassWithManyFields(); + roundTrip(118, object1); + + for (FieldSerializer.CachedField field : serializer.getFields()) { + serializer.removeField(field.getName()); + } + + ClassWithManyFields object2 = (ClassWithManyFields)kryo.readClassAndObject(input); + assertEquals(object1, object2); + } + @Test void testExtendedClass () { testExtendedClass(270, false, false);