Repository: spark
Updated Branches:
  refs/heads/branch-1.1 386fc46bc -> 80dde80a6


[SPARK-4075] [Deploy] Jar url validation is not enough for Jar file

In deploy.ClientArguments.isValidJarUrl, the url is checked as follows.

    def isValidJarUrl(s: String): Boolean = s.matches("(.+):(.+)jar")

So, it allows like 'hdfs:file.jar' (no authority).

Author: Kousuke Saruta <[email protected]>

Closes #2925 from sarutak/uri-syntax-check-improvement and squashes the 
following commits:

cf06173 [Kousuke Saruta] Improved URI syntax checking

(cherry picked from commit 098f83c7ccd7dad9f9228596da69fe5f55711a52)
Signed-off-by: Andrew Or <[email protected]>


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

Branch: refs/heads/branch-1.1
Commit: 80dde80a6d4f07d521dfeb471c425a67811504d9
Parents: 386fc46
Author: Kousuke Saruta <[email protected]>
Authored: Fri Oct 24 13:08:21 2014 -0700
Committer: Andrew Or <[email protected]>
Committed: Fri Oct 24 13:09:08 2014 -0700

----------------------------------------------------------------------
 .../scala/org/apache/spark/deploy/ClientArguments.scala  | 11 ++++++++++-
 .../test/scala/org/apache/spark/deploy/ClientSuite.scala |  6 ++++++
 2 files changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/80dde80a/core/src/main/scala/org/apache/spark/deploy/ClientArguments.scala
----------------------------------------------------------------------
diff --git a/core/src/main/scala/org/apache/spark/deploy/ClientArguments.scala 
b/core/src/main/scala/org/apache/spark/deploy/ClientArguments.scala
index 39150de..4e802e0 100644
--- a/core/src/main/scala/org/apache/spark/deploy/ClientArguments.scala
+++ b/core/src/main/scala/org/apache/spark/deploy/ClientArguments.scala
@@ -17,6 +17,8 @@
 
 package org.apache.spark.deploy
 
+import java.net.{URI, URISyntaxException}
+
 import scala.collection.mutable.ListBuffer
 
 import org.apache.log4j.Level
@@ -114,5 +116,12 @@ private[spark] class ClientArguments(args: Array[String]) {
 }
 
 object ClientArguments {
-  def isValidJarUrl(s: String): Boolean = s.matches("(.+):(.+)jar")
+  def isValidJarUrl(s: String): Boolean = {
+    try {
+      val uri = new URI(s)
+      uri.getScheme != null && uri.getAuthority != null && s.endsWith("jar")
+    } catch {
+      case _: URISyntaxException => false
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/spark/blob/80dde80a/core/src/test/scala/org/apache/spark/deploy/ClientSuite.scala
----------------------------------------------------------------------
diff --git a/core/src/test/scala/org/apache/spark/deploy/ClientSuite.scala 
b/core/src/test/scala/org/apache/spark/deploy/ClientSuite.scala
index 4161aed..94a2bdd 100644
--- a/core/src/test/scala/org/apache/spark/deploy/ClientSuite.scala
+++ b/core/src/test/scala/org/apache/spark/deploy/ClientSuite.scala
@@ -29,6 +29,12 @@ class ClientSuite extends FunSuite with Matchers {
     ClientArguments.isValidJarUrl("hdfs://someHost:1234/foo") should be (false)
     ClientArguments.isValidJarUrl("/missing/a/protocol/jarfile.jar") should be 
(false)
     ClientArguments.isValidJarUrl("not-even-a-path.jar") should be (false)
+
+    // No authority
+    ClientArguments.isValidJarUrl("hdfs:someHost:1234/jarfile.jar") should be 
(false)
+
+    // Invalid syntax
+    ClientArguments.isValidJarUrl("hdfs:") should be (false)
   }
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to