[CORD-2064] When parsing InterfaceID buffer size is insufficient
Change-Id: I92966a6e59e4ba0319eef025f87193651f5918b1
diff --git a/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java b/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
index 883bf2f..0de95f0 100644
--- a/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
+++ b/apps/dhcprelay/src/test/java/org/onosproject/dhcprelay/DhcpRelayManagerTest.java
@@ -119,6 +119,8 @@
import static org.onosproject.dhcprelay.DhcpRelayManager.DHCP_SELECTORS;
public class DhcpRelayManagerTest {
+ private static final short VLAN_LEN = 2;
+ private static final short SEPARATOR_LEN = 1;
private static final String CONFIG_FILE_PATH = "dhcp-relay.json";
private static final DeviceId DEV_1_ID = DeviceId.deviceId("of:0000000000000001");
private static final DeviceId DEV_2_ID = DeviceId.deviceId("of:0000000000000002");
@@ -1247,10 +1249,12 @@
interfaceId.setData(interfaceIdBytes);
interfaceId.setLength((short) interfaceIdBytes.length);
Dhcp6InterfaceIdOption interfaceIdOption = new Dhcp6InterfaceIdOption(interfaceId);
+ byte[] optionData = interfaceIdOption.getData();
ByteBuffer bb = ByteBuffer.wrap(interfaceIdBytes);
byte[] macAddr = new byte[MacAddress.MAC_ADDRESS_LENGTH];
- byte[] port = new byte[21];
+ byte[] port = new byte[optionData.length - MacAddress.MAC_ADDRESS_LENGTH -
+ VLAN_LEN - SEPARATOR_LEN * 2];
short vlan;
bb.get(macAddr);
bb.get(); // separator
diff --git a/utils/misc/src/main/java/org/onlab/packet/dhcp/Dhcp6InterfaceIdOption.java b/utils/misc/src/main/java/org/onlab/packet/dhcp/Dhcp6InterfaceIdOption.java
index 0270032..2bd47e1 100644
--- a/utils/misc/src/main/java/org/onlab/packet/dhcp/Dhcp6InterfaceIdOption.java
+++ b/utils/misc/src/main/java/org/onlab/packet/dhcp/Dhcp6InterfaceIdOption.java
@@ -31,6 +31,8 @@
* Based on RFC-3315.
*/
public final class Dhcp6InterfaceIdOption extends Dhcp6Option {
+ private static final short VLAN_LEN = 2;
+ private static final short SEPARATOR_LEN = 1;
private MacAddress peerMacAddr;
private byte[] inPort;
private short vlanId;
@@ -138,7 +140,8 @@
ByteBuffer bb = ByteBuffer.wrap(optionData);
byte[] macAddr = new byte[MacAddress.MAC_ADDRESS_LENGTH];
- byte[] port = new byte[21];
+ byte[] port = new byte[optionData.length - MacAddress.MAC_ADDRESS_LENGTH -
+ VLAN_LEN - SEPARATOR_LEN * 2];
short vlan;
bb.get(macAddr);
bb.get(); // separator "-"