Committed by
Gerrit Code Review
Add some serializer related sanity check
Change-Id: I5ebdde41f5528b5bad0c704b11c191afed45691e
Showing
7 changed files
with
31 additions
and
2 deletions
... | @@ -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 | } | ... | ... |
-
Please register or login to post a comment