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