HIGUCHI Yuta
Committed by Gerrit Code Review

Add some serializer related sanity check

Change-Id: I5ebdde41f5528b5bad0c704b11c191afed45691e
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 */ 15 */
16 package org.onosproject.store.serializers; 16 package org.onosproject.store.serializers;
17 17
18 +import static com.google.common.base.Preconditions.checkArgument;
19 +
18 import org.onlab.packet.Ip4Address; 20 import org.onlab.packet.Ip4Address;
19 import com.esotericsoftware.kryo.Kryo; 21 import com.esotericsoftware.kryo.Kryo;
20 import com.esotericsoftware.kryo.Serializer; 22 import com.esotericsoftware.kryo.Serializer;
...@@ -45,6 +47,7 @@ public class Ip4AddressSerializer extends Serializer<Ip4Address> { ...@@ -45,6 +47,7 @@ public class Ip4AddressSerializer extends Serializer<Ip4Address> {
45 @Override 47 @Override
46 public Ip4Address read(Kryo kryo, Input input, Class<Ip4Address> type) { 48 public Ip4Address read(Kryo kryo, Input input, Class<Ip4Address> type) {
47 final int octLen = input.readInt(); 49 final int octLen = input.readInt();
50 + checkArgument(octLen == Ip4Address.BYTE_LENGTH);
48 byte[] octs = new byte[octLen]; 51 byte[] octs = new byte[octLen];
49 input.readBytes(octs); 52 input.readBytes(octs);
50 return Ip4Address.valueOf(octs); 53 return Ip4Address.valueOf(octs);
......
...@@ -15,8 +15,10 @@ ...@@ -15,8 +15,10 @@
15 */ 15 */
16 package org.onosproject.store.serializers; 16 package org.onosproject.store.serializers;
17 17
18 -import org.onlab.packet.Ip4Prefix; 18 +import static com.google.common.base.Preconditions.checkArgument;
19 19
20 +import org.onlab.packet.Ip4Address;
21 +import org.onlab.packet.Ip4Prefix;
20 import com.esotericsoftware.kryo.Kryo; 22 import com.esotericsoftware.kryo.Kryo;
21 import com.esotericsoftware.kryo.Serializer; 23 import com.esotericsoftware.kryo.Serializer;
22 import com.esotericsoftware.kryo.io.Input; 24 import com.esotericsoftware.kryo.io.Input;
...@@ -49,6 +51,7 @@ public final class Ip4PrefixSerializer extends Serializer<Ip4Prefix> { ...@@ -49,6 +51,7 @@ public final class Ip4PrefixSerializer extends Serializer<Ip4Prefix> {
49 public Ip4Prefix read(Kryo kryo, Input input, 51 public Ip4Prefix read(Kryo kryo, Input input,
50 Class<Ip4Prefix> type) { 52 Class<Ip4Prefix> type) {
51 int octLen = input.readInt(); 53 int octLen = input.readInt();
54 + checkArgument(octLen <= Ip4Address.BYTE_LENGTH);
52 byte[] octs = new byte[octLen]; 55 byte[] octs = new byte[octLen];
53 input.readBytes(octs); 56 input.readBytes(octs);
54 int prefLen = input.readInt(); 57 int prefLen = input.readInt();
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 */ 15 */
16 package org.onosproject.store.serializers; 16 package org.onosproject.store.serializers;
17 17
18 +import static com.google.common.base.Preconditions.checkArgument;
19 +
18 import org.onlab.packet.Ip6Address; 20 import org.onlab.packet.Ip6Address;
19 import com.esotericsoftware.kryo.Kryo; 21 import com.esotericsoftware.kryo.Kryo;
20 import com.esotericsoftware.kryo.Serializer; 22 import com.esotericsoftware.kryo.Serializer;
...@@ -45,6 +47,7 @@ public class Ip6AddressSerializer extends Serializer<Ip6Address> { ...@@ -45,6 +47,7 @@ public class Ip6AddressSerializer extends Serializer<Ip6Address> {
45 @Override 47 @Override
46 public Ip6Address read(Kryo kryo, Input input, Class<Ip6Address> type) { 48 public Ip6Address read(Kryo kryo, Input input, Class<Ip6Address> type) {
47 final int octLen = input.readInt(); 49 final int octLen = input.readInt();
50 + checkArgument(octLen == Ip6Address.BYTE_LENGTH);
48 byte[] octs = new byte[octLen]; 51 byte[] octs = new byte[octLen];
49 input.readBytes(octs); 52 input.readBytes(octs);
50 return Ip6Address.valueOf(octs); 53 return Ip6Address.valueOf(octs);
......
...@@ -15,8 +15,10 @@ ...@@ -15,8 +15,10 @@
15 */ 15 */
16 package org.onosproject.store.serializers; 16 package org.onosproject.store.serializers;
17 17
18 -import org.onlab.packet.Ip6Prefix; 18 +import static com.google.common.base.Preconditions.checkArgument;
19 19
20 +import org.onlab.packet.Ip6Address;
21 +import org.onlab.packet.Ip6Prefix;
20 import com.esotericsoftware.kryo.Kryo; 22 import com.esotericsoftware.kryo.Kryo;
21 import com.esotericsoftware.kryo.Serializer; 23 import com.esotericsoftware.kryo.Serializer;
22 import com.esotericsoftware.kryo.io.Input; 24 import com.esotericsoftware.kryo.io.Input;
...@@ -49,6 +51,7 @@ public final class Ip6PrefixSerializer extends Serializer<Ip6Prefix> { ...@@ -49,6 +51,7 @@ public final class Ip6PrefixSerializer extends Serializer<Ip6Prefix> {
49 public Ip6Prefix read(Kryo kryo, Input input, 51 public Ip6Prefix read(Kryo kryo, Input input,
50 Class<Ip6Prefix> type) { 52 Class<Ip6Prefix> type) {
51 int octLen = input.readInt(); 53 int octLen = input.readInt();
54 + checkArgument(octLen <= Ip6Address.BYTE_LENGTH);
52 byte[] octs = new byte[octLen]; 55 byte[] octs = new byte[octLen];
53 input.readBytes(octs); 56 input.readBytes(octs);
54 int prefLen = input.readInt(); 57 int prefLen = input.readInt();
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 */ 15 */
16 package org.onosproject.store.serializers; 16 package org.onosproject.store.serializers;
17 17
18 +import static com.google.common.base.Preconditions.checkArgument;
19 +
18 import org.onlab.packet.IpAddress; 20 import org.onlab.packet.IpAddress;
19 import com.esotericsoftware.kryo.Kryo; 21 import com.esotericsoftware.kryo.Kryo;
20 import com.esotericsoftware.kryo.Serializer; 22 import com.esotericsoftware.kryo.Serializer;
...@@ -44,6 +46,7 @@ public class IpAddressSerializer extends Serializer<IpAddress> { ...@@ -44,6 +46,7 @@ public class IpAddressSerializer extends Serializer<IpAddress> {
44 @Override 46 @Override
45 public IpAddress read(Kryo kryo, Input input, Class<IpAddress> type) { 47 public IpAddress read(Kryo kryo, Input input, Class<IpAddress> type) {
46 final int octLen = input.readInt(); 48 final int octLen = input.readInt();
49 + checkArgument(octLen <= IpAddress.INET6_BYTE_LENGTH);
47 byte[] octs = new byte[octLen]; 50 byte[] octs = new byte[octLen];
48 input.readBytes(octs); 51 input.readBytes(octs);
49 // Use the address size to decide whether it is IPv4 or IPv6 address 52 // Use the address size to decide whether it is IPv4 or IPv6 address
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 */ 15 */
16 package org.onosproject.store.serializers; 16 package org.onosproject.store.serializers;
17 17
18 +import static com.google.common.base.Preconditions.checkArgument;
19 +
18 import org.onlab.packet.IpAddress; 20 import org.onlab.packet.IpAddress;
19 import org.onlab.packet.IpPrefix; 21 import org.onlab.packet.IpPrefix;
20 22
...@@ -49,6 +51,7 @@ public final class IpPrefixSerializer extends Serializer<IpPrefix> { ...@@ -49,6 +51,7 @@ public final class IpPrefixSerializer extends Serializer<IpPrefix> {
49 public IpPrefix read(Kryo kryo, Input input, 51 public IpPrefix read(Kryo kryo, Input input,
50 Class<IpPrefix> type) { 52 Class<IpPrefix> type) {
51 int octLen = input.readInt(); 53 int octLen = input.readInt();
54 + checkArgument(octLen <= IpAddress.INET6_BYTE_LENGTH);
52 byte[] octs = new byte[octLen]; 55 byte[] octs = new byte[octLen];
53 input.readBytes(octs); 56 input.readBytes(octs);
54 int prefLen = input.readInt(); 57 int prefLen = input.readInt();
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 */ 15 */
16 package org.onlab.util; 16 package org.onlab.util;
17 17
18 +import static org.slf4j.LoggerFactory.getLogger;
19 +
18 import java.io.InputStream; 20 import java.io.InputStream;
19 import java.io.OutputStream; 21 import java.io.OutputStream;
20 import java.nio.ByteBuffer; 22 import java.nio.ByteBuffer;
...@@ -22,6 +24,7 @@ import java.util.ArrayList; ...@@ -22,6 +24,7 @@ import java.util.ArrayList;
22 import java.util.List; 24 import java.util.List;
23 25
24 import org.apache.commons.lang3.tuple.Pair; 26 import org.apache.commons.lang3.tuple.Pair;
27 +import org.slf4j.Logger;
25 28
26 import com.esotericsoftware.kryo.Kryo; 29 import com.esotericsoftware.kryo.Kryo;
27 import com.esotericsoftware.kryo.Serializer; 30 import com.esotericsoftware.kryo.Serializer;
...@@ -58,6 +61,8 @@ public final class KryoNamespace implements KryoFactory, KryoPool { ...@@ -58,6 +61,8 @@ public final class KryoNamespace implements KryoFactory, KryoPool {
58 */ 61 */
59 public static final int INITIAL_ID = 11; 62 public static final int INITIAL_ID = 11;
60 63
64 + private static final Logger log = getLogger(KryoNamespace.class);
65 +
61 66
62 private final KryoPool pool = new KryoPool.Builder(this) 67 private final KryoPool pool = new KryoPool.Builder(this)
63 .softReferences() 68 .softReferences()
...@@ -101,6 +106,12 @@ public final class KryoNamespace implements KryoFactory, KryoPool { ...@@ -101,6 +106,12 @@ public final class KryoNamespace implements KryoFactory, KryoPool {
101 */ 106 */
102 public Builder nextId(final int id) { 107 public Builder nextId(final int id) {
103 if (!types.isEmpty()) { 108 if (!types.isEmpty()) {
109 + if (id != FLOATING_ID && id < blockHeadId + types.size()) {
110 +
111 + log.warn("requested nextId {} could potentially overlap" +
112 + "with existing registrations {}+{} ",
113 + id, blockHeadId, types.size());
114 + }
104 blocks.add(new RegistrationBlock(this.blockHeadId, types)); 115 blocks.add(new RegistrationBlock(this.blockHeadId, types));
105 types = new ArrayList<>(); 116 types = new ArrayList<>();
106 } 117 }
......