You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by vo...@apache.org on 2019/12/17 15:30:06 UTC
[drill] branch master updated: DRILL-7485: NPE on PCAP Batch Reader
This is an automated email from the ASF dual-hosted git repository.
volodymyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git
The following commit(s) were added to refs/heads/master by this push:
new ecd8c81 DRILL-7485: NPE on PCAP Batch Reader
ecd8c81 is described below
commit ecd8c81e039a7e9aa0590ffd8e705782f3b998c8
Author: Charles Givre <cg...@apache.org>
AuthorDate: Mon Dec 16 08:16:53 2019 -0500
DRILL-7485: NPE on PCAP Batch Reader
closes #1932
---
.../apache/drill/exec/store/pcap/PcapBatchReader.java | 15 +++++++++++++--
.../apache/drill/exec/store/pcap/decoder/Packet.java | 18 ++++++++++++++++++
.../drill/exec/store/pcap/TestPcapEVFReader.java | 18 +++++++++++++++++-
.../src/test/resources/store/pcap/arpWithNullIP.pcap | Bin 0 -> 42924 bytes
4 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapBatchReader.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapBatchReader.java
index 5e4a46c..4aeff2f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapBatchReader.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/PcapBatchReader.java
@@ -406,8 +406,19 @@ public class PcapBatchReader implements ManagedReader<FileSchemaNegotiator> {
srcMacAddressWriter.setString(packet.getEthernetSource());
dstMacAddressWriter.setString(packet.getEthernetDestination());
- dstIPWriter.setString(packet.getDst_ip().getHostAddress());
- srcIPWriter.setString(packet.getSrc_ip().getHostAddress());
+ String destinationIp = packet.getDestinationIpAddressString();
+ if (destinationIp == null) {
+ dstIPWriter.setNull();
+ } else {
+ dstIPWriter.setString(destinationIp);
+ }
+
+ String sourceIp = packet.getSourceIpAddressString();
+ if (sourceIp == null) {
+ srcIPWriter.setNull();
+ } else {
+ srcIPWriter.setString(sourceIp);
+ }
srcPortWriter.setInt(packet.getSrc_port());
dstPortWriter.setInt(packet.getDst_port());
packetLengthWriter.setInt(packet.getPacketLength());
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java
index 7d49699..148f94f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/pcap/decoder/Packet.java
@@ -183,6 +183,24 @@ public class Packet implements Comparable<Packet> {
return getIPAddress(false);
}
+ public String getSourceIpAddressString() {
+ InetAddress address = getSrc_ip();
+ if (address == null) {
+ return null;
+ } else {
+ return address.getHostAddress();
+ }
+ }
+
+ public String getDestinationIpAddressString() {
+ InetAddress address = getDst_ip();
+ if (address == null) {
+ return null;
+ } else {
+ return address.getHostAddress();
+ }
+ }
+
public String getEthernetSource() {
return getEthernetAddress(PacketConstants.ETHER_SRC_OFFSET);
}
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapEVFReader.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapEVFReader.java
index 5b07423..3b878c3 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapEVFReader.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/pcap/TestPcapEVFReader.java
@@ -99,4 +99,20 @@ public class TestPcapEVFReader extends ClusterTest {
.baselineValues(true, 16L)
.go();
}
-}
\ No newline at end of file
+
+ @Test
+ public void testArpPcapFile() throws Exception {
+ String sql = "SELECT src_ip, dst_ip FROM cp.`store/pcap/arpWithNullIP.pcap` WHERE src_port=1";
+ testBuilder()
+ .sqlQuery(sql)
+ .ordered()
+ .baselineColumns("src_ip", "dst_ip")
+ .baselineValues((String)null, (String)null)
+ .baselineValues((String)null, (String)null)
+ .baselineValues((String)null, (String)null)
+ .baselineValues((String)null, (String)null)
+ .baselineValues((String)null, (String)null)
+ .baselineValues((String)null, (String)null)
+ .go();
+ }
+}
diff --git a/exec/java-exec/src/test/resources/store/pcap/arpWithNullIP.pcap b/exec/java-exec/src/test/resources/store/pcap/arpWithNullIP.pcap
new file mode 100644
index 0000000..1485811
Binary files /dev/null and b/exec/java-exec/src/test/resources/store/pcap/arpWithNullIP.pcap differ