Add some serializer related sanity check

Change-Id: I5ebdde41f5528b5bad0c704b11c191afed45691e
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4AddressSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4AddressSerializer.java
index 2370ad9..b33a204 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4AddressSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4AddressSerializer.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.store.serializers;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import org.onlab.packet.Ip4Address;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
@@ -45,6 +47,7 @@
     @Override
     public Ip4Address read(Kryo kryo, Input input, Class<Ip4Address> type) {
         final int octLen = input.readInt();
+        checkArgument(octLen == Ip4Address.BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         return Ip4Address.valueOf(octs);
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4PrefixSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4PrefixSerializer.java
index 029ffb1..134b6cb 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4PrefixSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip4PrefixSerializer.java
@@ -15,8 +15,10 @@
  */
 package org.onosproject.store.serializers;
 
-import org.onlab.packet.Ip4Prefix;
+import static com.google.common.base.Preconditions.checkArgument;
 
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.Ip4Prefix;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
 import com.esotericsoftware.kryo.io.Input;
@@ -49,6 +51,7 @@
     public Ip4Prefix read(Kryo kryo, Input input,
             Class<Ip4Prefix> type) {
         int octLen = input.readInt();
+        checkArgument(octLen <= Ip4Address.BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         int prefLen = input.readInt();
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6AddressSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6AddressSerializer.java
index f8101f9..6cccd01e 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6AddressSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6AddressSerializer.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.store.serializers;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import org.onlab.packet.Ip6Address;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
@@ -45,6 +47,7 @@
     @Override
     public Ip6Address read(Kryo kryo, Input input, Class<Ip6Address> type) {
         final int octLen = input.readInt();
+        checkArgument(octLen == Ip6Address.BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         return Ip6Address.valueOf(octs);
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6PrefixSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6PrefixSerializer.java
index 91ba5a2..89c301a 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6PrefixSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/Ip6PrefixSerializer.java
@@ -15,8 +15,10 @@
  */
 package org.onosproject.store.serializers;
 
-import org.onlab.packet.Ip6Prefix;
+import static com.google.common.base.Preconditions.checkArgument;
 
+import org.onlab.packet.Ip6Address;
+import org.onlab.packet.Ip6Prefix;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
 import com.esotericsoftware.kryo.io.Input;
@@ -49,6 +51,7 @@
     public Ip6Prefix read(Kryo kryo, Input input,
             Class<Ip6Prefix> type) {
         int octLen = input.readInt();
+        checkArgument(octLen <= Ip6Address.BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         int prefLen = input.readInt();
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpAddressSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpAddressSerializer.java
index cb85fec..864d107 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpAddressSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpAddressSerializer.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.store.serializers;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import org.onlab.packet.IpAddress;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
@@ -44,6 +46,7 @@
     @Override
     public IpAddress read(Kryo kryo, Input input, Class<IpAddress> type) {
         final int octLen = input.readInt();
+        checkArgument(octLen <= IpAddress.INET6_BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         // Use the address size to decide whether it is IPv4 or IPv6 address
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpPrefixSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpPrefixSerializer.java
index cf0a20b..8e9a0e8 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpPrefixSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/IpPrefixSerializer.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.store.serializers;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
 
@@ -49,6 +51,7 @@
     public IpPrefix read(Kryo kryo, Input input,
             Class<IpPrefix> type) {
         int octLen = input.readInt();
+        checkArgument(octLen <= IpAddress.INET6_BYTE_LENGTH);
         byte[] octs = new byte[octLen];
         input.readBytes(octs);
         int prefLen = input.readInt();
diff --git a/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java b/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java
index 9977e35..f5d2f9b 100644
--- a/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java
+++ b/utils/misc/src/main/java/org/onlab/util/KryoNamespace.java
@@ -15,6 +15,8 @@
  */
 package org.onlab.util;
 
+import static org.slf4j.LoggerFactory.getLogger;
+
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
@@ -22,6 +24,7 @@
 import java.util.List;
 
 import org.apache.commons.lang3.tuple.Pair;
+import org.slf4j.Logger;
 
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
@@ -58,6 +61,8 @@
      */
     public static final int INITIAL_ID = 11;
 
+    private static final Logger log = getLogger(KryoNamespace.class);
+
 
     private final KryoPool pool = new KryoPool.Builder(this)
                                         .softReferences()
@@ -101,6 +106,12 @@
          */
         public Builder nextId(final int id) {
             if (!types.isEmpty()) {
+                if (id != FLOATING_ID && id < blockHeadId + types.size()) {
+
+                    log.warn("requested nextId {} could potentially overlap" +
+                             "with existing registrations {}+{} ",
+                             id, blockHeadId, types.size());
+                }
                 blocks.add(new RegistrationBlock(this.blockHeadId, types));
                 types = new ArrayList<>();
             }