SQOOP-2290: java.lang.ArrayIndexOutOfBoundsException thrown when malformed column mapping is provided
(Venkat Ranganathan via Gwen Shapira)
(cherry picked from commit 292fd08b7e1f64756fd132f790e11605bfea9ea1)
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 @@
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]);
}
}
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 @@
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 @@
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);