You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by ce...@apache.org on 2017/09/10 01:33:35 UTC

metron git commit: METRON-1171: Better validation for the SUBSTRING stellar function closes apache/incubator-metron#745

Repository: metron
Updated Branches:
  refs/heads/master 269d42e92 -> 382816062


METRON-1171: Better validation for the SUBSTRING stellar function closes apache/incubator-metron#745


Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/38281606
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/38281606
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/38281606

Branch: refs/heads/master
Commit: 3828160625c6617db99d9a640fdb6b84d4f91f4f
Parents: 269d42e
Author: cstella <ce...@gmail.com>
Authored: Sat Sep 9 21:33:13 2017 -0400
Committer: cstella <ce...@gmail.com>
Committed: Sat Sep 9 21:33:13 2017 -0400

----------------------------------------------------------------------
 .../stellar/dsl/functions/StringFunctions.java  | 20 ++++++++++++++++----
 .../dsl/functions/StringFunctionsTest.java      | 20 +++++++++++++++++++-
 2 files changed, 35 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metron/blob/38281606/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java
----------------------------------------------------------------------
diff --git a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java
index 99c8fe7..7f4f396 100644
--- a/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java
+++ b/metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java
@@ -336,13 +336,25 @@ public class StringFunctions {
     public Object apply(List<Object> strings) {
 
       if(strings == null || strings.size() < 2 ) {
-        throw new IllegalArgumentException("[SUBSTRING] required 2 arguments: the input and the start position (inclusive)");
+        throw new IllegalArgumentException("SUBSTRING requires (at least) 2 arguments: the input and the start position (inclusive)");
       }
-      String var = strings.get(0) == null?null: (String) strings.get(0);
-      Integer start = strings.get(1) == null?null:(Integer)strings.get(1);
+      Object varObj = strings.get(0);
+      if(varObj != null && !(varObj instanceof String)) {
+        throw new IllegalArgumentException("SUBSTRING input must be a String");
+      }
+      String var = varObj == null?null: (String) varObj;
+      Object startObj = strings.get(1);
+      if(startObj != null && !(startObj instanceof Number)) {
+        throw new IllegalArgumentException("SUBSTRING start must be an Number");
+      }
+      Integer start = startObj == null?null:((Number)startObj).intValue();
       Integer end = null;
       if(strings.size() > 2) {
-         end = strings.get(2) == null ? null : (Integer) strings.get(2);
+        Object endObj = strings.get(2);
+        if(endObj != null && !(endObj instanceof Number)) {
+          throw new IllegalArgumentException("SUBSTRING end must be an Number");
+        }
+        end = endObj == null ? null : ((Number) endObj).intValue();
       }
       if(var == null || start == null) {
         return null;

http://git-wip-us.apache.org/repos/asf/metron/blob/38281606/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java
----------------------------------------------------------------------
diff --git a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java
index 2b1115e..cb33eaa 100644
--- a/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java
+++ b/metron-stellar/stellar-common/src/test/java/org/apache/metron/stellar/dsl/functions/StringFunctionsTest.java
@@ -422,7 +422,25 @@ public class StringFunctionsTest {
 
   @Test(expected=ParseException.class)
   public void testSubstring_invalidEmpty() throws Exception {
-    Assert.assertEquals("metron", (String) run("SUBSTRING()", new HashMap<>()));
+    Assert.assertEquals("metron", run("SUBSTRING()", new HashMap<>()));
+  }
+
+  @Test(expected=ParseException.class)
+  public void testSubstring_invalidWrongTypeStart() throws Exception {
+    Map<String, Object> variables = ImmutableMap.of("s", "apache metron");
+    Assert.assertEquals("metron", (String) run("SUBSTRING(s, '7')", variables));
+  }
+
+  @Test(expected=ParseException.class)
+  public void testSubstring_invalidWrongTypeEnd() throws Exception {
+    Map<String, Object> variables = ImmutableMap.of("s", "apache metron");
+    Assert.assertEquals("metron", (String) run("SUBSTRING(s, 7, '9')", variables));
+  }
+
+  @Test(expected=ParseException.class)
+  public void testSubstring_invalidWrongTypeInput() throws Exception {
+    Map<String, Object> variables = ImmutableMap.of("s", 7);
+    Assert.assertEquals("metron", (String) run("SUBSTRING(s, 7, '9')", variables));
   }
 
   /**