From 78a002b53db429297d8ec739ff2df47c55100ef2 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Thu, 25 Oct 2018 05:28:48 +1000 Subject: [PATCH] [MINOR] Fix bounds check in PacketType. (#132) --- .../p2p/discovery/internal/PacketType.java | 2 +- .../discovery/internal/PacketTypeTest.java | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 ethereum/p2p/src/test/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/PacketTypeTest.java diff --git a/ethereum/p2p/src/main/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/PacketType.java b/ethereum/p2p/src/main/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/PacketType.java index 7b36ee8804..f6e81965a7 100644 --- a/ethereum/p2p/src/main/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/PacketType.java +++ b/ethereum/p2p/src/main/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/PacketType.java @@ -39,7 +39,7 @@ public enum PacketType { private final Deserializer deserializer; public static Optional forByte(final byte b) { - return b > MAX_VALUE ? Optional.empty() : Optional.ofNullable(INDEX[b]); + return b >= MAX_VALUE || b < 0 ? Optional.empty() : Optional.ofNullable(INDEX[b]); } PacketType(final int value, final Deserializer deserializer) { diff --git a/ethereum/p2p/src/test/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/PacketTypeTest.java b/ethereum/p2p/src/test/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/PacketTypeTest.java new file mode 100644 index 0000000000..907476f049 --- /dev/null +++ b/ethereum/p2p/src/test/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/PacketTypeTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 2018 ConsenSys AG. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package tech.pegasys.pantheon.ethereum.p2p.discovery.internal; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class PacketTypeTest { + + @Test + public void shouldReturnEmptyPacketTypeForNegativeByte() { + assertThat(PacketType.forByte((byte) -1)).isEmpty(); + } + + @Test + public void shouldReturnEmptyPacketTypeForByteAboveMaxValue() { + assertThat(PacketType.forByte(Byte.MAX_VALUE)).isEmpty(); + } + + @Test + public void shouldWorkForEveryPossibleByteValue() { + for (int b = Byte.MIN_VALUE; b <= Byte.MAX_VALUE; b++) { + assertThat(PacketType.forByte((byte) b)).isNotNull(); + } + } + + @Test + public void shouldReturnEachPacketTypeByByte() { + for (final PacketType packetType : PacketType.values()) { + assertThat(PacketType.forByte(packetType.getValue())).contains(packetType); + } + } +}