[ONOS-8000] Use passed length for Data payload

Current code can broke a packet during serialization due to bug in
the "Data.deserialize" call. According to the IEEE Std 802.3 standard
an ethernet frame can not have the payload less then 46 bytes. When
the ethernet frame have shorter payload it padded with zeros.

We observed that for short UDP packets deserialize methods for both
the IPv4 and UDP packets calculate length correctly, but the Data
payload deserialization method ignores passed length and takess all
data up to end of the buffer with ethernet frame.

Suggested changes change the Data deserialization method to use only
passed "length" bytes instead of whole remaining "data" buffer.

Change-Id: I6b93458a8925a0924f3830e3a5d5763369e8ea92
diff --git a/utils/misc/src/main/java/org/onlab/packet/Data.java b/utils/misc/src/main/java/org/onlab/packet/Data.java
index 2d405ca..6f15afd 100644
--- a/utils/misc/src/main/java/org/onlab/packet/Data.java
+++ b/utils/misc/src/main/java/org/onlab/packet/Data.java
@@ -117,7 +117,7 @@
 
             Data dataObject = new Data();
 
-            dataObject.data = Arrays.copyOfRange(data, offset, data.length);
+            dataObject.data = Arrays.copyOfRange(data, offset, offset + length);
 
             return dataObject;
         };
diff --git a/utils/misc/src/test/java/org/onlab/packet/DataTest.java b/utils/misc/src/test/java/org/onlab/packet/DataTest.java
new file mode 100644
index 0000000..d934f7a
--- /dev/null
+++ b/utils/misc/src/test/java/org/onlab/packet/DataTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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 org.onlab.packet;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit tests for the Data class.
+ */
+public class DataTest {
+
+    private static final int DATA_BUFFER_SIZE = 10;
+    private static final int DATA_LENGTH = 5;
+    private static byte[] dataBuffer = new byte[DATA_BUFFER_SIZE];
+
+    private Deserializer<Data> deserializer;
+
+    @Before
+    public void setUp() {
+        deserializer = Data.deserializer();
+    }
+
+    @Test
+    public void testDeserializePartOfBuffer() throws Exception {
+        Data data = deserializer.deserialize(dataBuffer, 0, DATA_LENGTH);
+
+        assertEquals(DATA_LENGTH, data.getData().length);
+    }
+
+}