Repository: sqoop Updated Branches: refs/heads/branch-1.4.6 739733853 -> 73081a561
SQOOP-2290: java.lang.ArrayIndexOutOfBoundsException thrown when malformed column mapping is provided (Venkat Ranganathan via Gwen Shapira) (cherry picked from commit 292fd08b7e1f64756fd132f790e11605bfea9ea1) Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/73081a56 Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/73081a56 Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/73081a56 Branch: refs/heads/branch-1.4.6 Commit: 73081a5614fc330345fbe10c6b772c5a6eab4b76 Parents: 7397338 Author: Gwen Shapira <[email protected]> Authored: Thu Apr 9 07:58:02 2015 -0700 Committer: Gwen Shapira <[email protected]> Committed: Thu Apr 9 07:59:47 2015 -0700 ---------------------------------------------------------------------- src/java/org/apache/sqoop/SqoopOptions.java | 4 ++++ .../com/cloudera/sqoop/TestSqoopOptions.java | 24 ++++++++++++++++++++ 2 files changed, 28 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/73081a56/src/java/org/apache/sqoop/SqoopOptions.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/sqoop/SqoopOptions.java b/src/java/org/apache/sqoop/SqoopOptions.java index e4eb2f2..ef6e0ce 100644 --- a/src/java/org/apache/sqoop/SqoopOptions.java +++ b/src/java/org/apache/sqoop/SqoopOptions.java @@ -1217,6 +1217,10 @@ public class SqoopOptions implements Cloneable { String[] maps = mapping.split(","); for(String map : maps) { String[] details = map.split("="); + if (details.length != 2) { + throw new IllegalArgumentException("Malformed mapping. " + + "Column mapping should be the form key=value[,key=value]*"); + } output.put(details[0], details[1]); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/73081a56/src/test/com/cloudera/sqoop/TestSqoopOptions.java ---------------------------------------------------------------------- diff --git a/src/test/com/cloudera/sqoop/TestSqoopOptions.java b/src/test/com/cloudera/sqoop/TestSqoopOptions.java index 4ae583d..f4660e5 100644 --- a/src/test/com/cloudera/sqoop/TestSqoopOptions.java +++ b/src/test/com/cloudera/sqoop/TestSqoopOptions.java @@ -269,6 +269,18 @@ public class TestSqoopOptions extends TestCase { assertEquals("STRING", mapping.get("id")); } + public void testMalformedMapColumnHiveParams() throws Exception { + String[] args = { + "--map-column-hive", "id", + }; + try { + SqoopOptions opts = parse(args); + fail("Malformed hive mapping does not throw exception"); + } catch (Exception e) { + // Caught exception as expected + } + } + public void testMapColumnJavaParams() throws Exception { String[] args = { "--map-column-java", "id=String", @@ -280,6 +292,18 @@ public class TestSqoopOptions extends TestCase { assertEquals("String", mapping.get("id")); } + public void testMalfromedMapColumnJavaParams() throws Exception { + String[] args = { + "--map-column-java", "id", + }; + try { + SqoopOptions opts = parse(args); + fail("Malformed java mapping does not throw exception"); + } catch (Exception e) { + // Caught exception as expected + } + } + public void testSkipDistCacheOption() throws Exception { String[] args = {"--skip-dist-cache"}; SqoopOptions opts = parse(args);
