From 37df638cc341256b6578e2555440f4700293ce3a Mon Sep 17 00:00:00 2001 From: Winters Lu Date: Thu, 7 Jan 2021 17:23:54 -0800 Subject: [PATCH] @W-8522881@ Invalidate input URL if it contains special characters (#534) * encoding url with uri in text * fixing test * address review feedback * fix indent and compile error * Change strategy to returning None if special chars in url domain * cleanup --- .../main/scala/com/salesforce/op/features/types/Text.scala | 4 +++- .../test/scala/com/salesforce/op/features/types/URLTest.scala | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/features/src/main/scala/com/salesforce/op/features/types/Text.scala b/features/src/main/scala/com/salesforce/op/features/types/Text.scala index 5f308fe9eb..670b918fcd 100644 --- a/features/src/main/scala/com/salesforce/op/features/types/Text.scala +++ b/features/src/main/scala/com/salesforce/op/features/types/Text.scala @@ -38,6 +38,8 @@ import com.twitter.chill.Base64.{InputStream => Base64InputStream} import org.apache.commons.io.input.CharSequenceInputStream import org.apache.commons.validator.routines.UrlValidator +import scala.util.Try + /** * Text value representation * @@ -171,7 +173,7 @@ class URL(value: Option[String]) extends Text(value){ * RFC2396 (http://www.ietf.org/rfc/rfc2396.txt) * Default valid protocols are: http, https, ftp. */ - def isValid: Boolean = value.exists(UrlValidator.getInstance().isValid) + def isValid: Boolean = value.exists(v => UrlValidator.getInstance().isValid(v) && Try(new java.net.URL(v)).isSuccess) /** * Verifies if the url is of correct form of "Uniform Resource Identifiers (URI): Generic Syntax" * RFC2396 (http://www.ietf.org/rfc/rfc2396.txt) diff --git a/features/src/test/scala/com/salesforce/op/features/types/URLTest.scala b/features/src/test/scala/com/salesforce/op/features/types/URLTest.scala index ac5ca2736a..8f916a9eeb 100644 --- a/features/src/test/scala/com/salesforce/op/features/types/URLTest.scala +++ b/features/src/test/scala/com/salesforce/op/features/types/URLTest.scala @@ -48,7 +48,8 @@ class URLTest extends PropSpec with PropertyChecks with TestCommon { Some("ftp://.codomain"), Some("https://.codomain"), Some("//domain.nambia"), - Some("http://\u00ff\u0080\u007f\u0000.com") // scalastyle:off + Some("http://\u00ff\u0080\u007f\u0000.com"), // scalastyle:off + Some("http://specialchars.@.com") ) val goodOnes = Table("good ones",