Author: sebb
Date: Mon Nov  9 17:48:28 2015
New Revision: 1713488

URL: http://svn.apache.org/viewvc?rev=1713488&view=rev
Log:
VALIDATOR-353 UrlValidator does not allow for optional userinfo in the authority

Modified:
    commons/proper/validator/trunk/src/changes/changes.xml
    
commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java
    commons/proper/validator/trunk/src/site/xdoc/download_validator.xml
    
commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java

Modified: commons/proper/validator/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/changes/changes.xml?rev=1713488&r1=1713487&r2=1713488&view=diff
==============================================================================
--- commons/proper/validator/trunk/src/changes/changes.xml (original)
+++ commons/proper/validator/trunk/src/changes/changes.xml Mon Nov  9 17:48:28 
2015
@@ -90,6 +90,9 @@ The dependencies for Validator have not
 For the current list of dependencies, please see
 http://commons.apache.org/validator/dependencies.html
   ">
+    <action issue="VALIDATOR-353" type="update" dev="sebb">
+    UrlValidator does not allow for optional userinfo in the authority
+    </action>
     <action issue="VALIDATOR-321" type="add" dev="sebb">
     ISSN validator and converter to EAN-13
     </action>

Modified: 
commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java
URL: 
http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java?rev=1713488&r1=1713487&r2=1713488&view=diff
==============================================================================
--- 
commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java
 (original)
+++ 
commons/proper/validator/trunk/src/main/java/org/apache/commons/validator/routines/UrlValidator.java
 Mon Nov  9 17:48:28 2015
@@ -136,9 +136,18 @@ public class UrlValidator implements Ser
     private static final String AUTHORITY_CHARS_REGEX = "\\p{Alnum}\\-\\."; // 
allows for IPV4 but not IPV6
     private static final String IPV6_REGEX = "[0-9a-fA-F:]+"; // do this as 
separate match because : could cause ambiguity with port prefix
 
+    // userinfo    = *( unreserved / pct-encoded / sub-delims / ":" )
+    // unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+    // sub-delims    = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / 
";" / "="
+    // We assume that password has the same valid chars as user info
+    private static final String USERINFO_CHARS_REGEX = 
"[a-zA-Z0-9%-._~!$&'()*+,;=]";
+    // since neither ':' nor '@' are allowed chars, we don't need to use 
non-greedy matching
+    private static final String USERINFO_FIELD_REGEX =
+            USERINFO_CHARS_REGEX + "+:" + // At least one character for the 
name
+            USERINFO_CHARS_REGEX + "*@"; // password may be absent
     private static final String AUTHORITY_REGEX =
-            "^(?:\\[("+IPV6_REGEX+")\\]|([" + AUTHORITY_CHARS_REGEX + 
"]*))(:\\d*)?(.*)?";
-    //                   1                              2                3     
  4
+            "^(?:\\[("+IPV6_REGEX+")\\]|(?:(?:"+USERINFO_FIELD_REGEX+")?([" + 
AUTHORITY_CHARS_REGEX + "]*)))(:\\d*)?(.*)?";
+    //                   1                 e.g. user:pass@                     
    2                         3       4
     private static final Pattern AUTHORITY_PATTERN = 
Pattern.compile(AUTHORITY_REGEX);
 
     private static final int PARSE_AUTHORITY_IPV6 = 1;

Modified: commons/proper/validator/trunk/src/site/xdoc/download_validator.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/site/xdoc/download_validator.xml?rev=1713488&r1=1713487&r2=1713488&view=diff
==============================================================================
--- commons/proper/validator/trunk/src/site/xdoc/download_validator.xml 
(original)
+++ commons/proper/validator/trunk/src/site/xdoc/download_validator.xml Mon Nov 
 9 17:48:28 2015
@@ -95,62 +95,62 @@ limitations under the License.
       </p>
     </subsection>
     </section>
-    <section name="Apache Commons Validator 1.4.1 (requires JDK 1.4)">
+    <section name="Apache Commons Validator 1.5.0 (requires JDK 1.6)">
       <subsection name="Binaries">
         <table>
           <tr>
-              <td><a 
href="[preferred]/commons/validator/binaries/commons-validator-1.4.1-bin.tar.gz">commons-validator-1.4.1-bin.tar.gz</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.4.1-bin.tar.gz.md5";>md5</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.4.1-bin.tar.gz.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/validator/binaries/commons-validator-1.5.0-bin.tar.gz">commons-validator-1.5.0-bin.tar.gz</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.5.0-bin.tar.gz.md5";>md5</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.5.0-bin.tar.gz.asc";>pgp</a></td>
           </tr>
           <tr>
-              <td><a 
href="[preferred]/commons/validator/binaries/commons-validator-1.4.1-bin.zip">commons-validator-1.4.1-bin.zip</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.4.1-bin.zip.md5";>md5</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.4.1-bin.zip.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/validator/binaries/commons-validator-1.5.0-bin.zip">commons-validator-1.5.0-bin.zip</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.5.0-bin.zip.md5";>md5</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.5.0-bin.zip.asc";>pgp</a></td>
           </tr>
         </table>
       </subsection>
       <subsection name="Source">
         <table>
           <tr>
-              <td><a 
href="[preferred]/commons/validator/source/commons-validator-1.4.1-src.tar.gz">commons-validator-1.4.1-src.tar.gz</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.4.1-src.tar.gz.md5";>md5</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.4.1-src.tar.gz.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/validator/source/commons-validator-1.5.0-src.tar.gz">commons-validator-1.5.0-src.tar.gz</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.5.0-src.tar.gz.md5";>md5</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.5.0-src.tar.gz.asc";>pgp</a></td>
           </tr>
           <tr>
-              <td><a 
href="[preferred]/commons/validator/source/commons-validator-1.4.1-src.zip">commons-validator-1.4.1-src.zip</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.4.1-src.zip.md5";>md5</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.4.1-src.zip.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/validator/source/commons-validator-1.5.0-src.zip">commons-validator-1.5.0-src.zip</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.5.0-src.zip.md5";>md5</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.5.0-src.zip.asc";>pgp</a></td>
           </tr>
         </table>
       </subsection>
     </section>
-    <section name="Apache Commons Validator 1.3.1 (requires JDK 1.3)">
+    <section name="Apache Commons Validator 1.4.1 (requires JDK 1.4)">
       <subsection name="Binaries">
         <table>
           <tr>
-              <td><a 
href="[preferred]/commons/validator/binaries/commons-validator-1.3.1.tar.gz">commons-validator-1.3.1.tar.gz</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.3.1.tar.gz.md5";>md5</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.3.1.tar.gz.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/validator/binaries/commons-validator-1.4.1.tar.gz">commons-validator-1.4.1.tar.gz</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.4.1.tar.gz.md5";>md5</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.4.1.tar.gz.asc";>pgp</a></td>
           </tr>
           <tr>
-              <td><a 
href="[preferred]/commons/validator/binaries/commons-validator-1.3.1.zip">commons-validator-1.3.1.zip</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.3.1.zip.md5";>md5</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.3.1.zip.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/validator/binaries/commons-validator-1.4.1.zip">commons-validator-1.4.1.zip</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.4.1.zip.md5";>md5</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/binaries/commons-validator-1.4.1.zip.asc";>pgp</a></td>
           </tr>
         </table>
       </subsection>
       <subsection name="Source">
         <table>
           <tr>
-              <td><a 
href="[preferred]/commons/validator/source/commons-validator-1.3.1-src.tar.gz">commons-validator-1.3.1-src.tar.gz</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.3.1-src.tar.gz.md5";>md5</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.3.1-src.tar.gz.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/validator/source/commons-validator-1.4.1-src.tar.gz">commons-validator-1.4.1-src.tar.gz</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.4.1-src.tar.gz.md5";>md5</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.4.1-src.tar.gz.asc";>pgp</a></td>
           </tr>
           <tr>
-              <td><a 
href="[preferred]/commons/validator/source/commons-validator-1.3.1-src.zip">commons-validator-1.3.1-src.zip</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.3.1-src.zip.md5";>md5</a></td>
-              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.3.1-src.zip.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/validator/source/commons-validator-1.4.1-src.zip">commons-validator-1.4.1-src.zip</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.4.1-src.zip.md5";>md5</a></td>
+              <td><a 
href="http://www.apache.org/dist/commons/validator/source/commons-validator-1.4.1-src.zip.asc";>pgp</a></td>
           </tr>
         </table>
       </subsection>

Modified: 
commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java?rev=1713488&r1=1713487&r2=1713488&view=diff
==============================================================================
--- 
commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java
 (original)
+++ 
commons/proper/validator/trunk/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java
 Mon Nov  9 17:48:28 2015
@@ -16,10 +16,10 @@
  */
 package org.apache.commons.validator.routines;
 
-import junit.framework.TestCase;
-
 import org.apache.commons.validator.ResultPair;
 
+import junit.framework.TestCase;
+
 /**
  * Performs Validation Test for url validations.
  *
@@ -424,7 +424,19 @@ public class UrlValidatorTest extends Te
        assertFalse("IPv6 address without [] should not validate: " + url, 
validator.isValid(url));
     }
 
-   
+
+   public void testValidator353() { // userinfo
+       UrlValidator validator = new UrlValidator();
+       assertTrue(validator.isValid("http://www.apache.org:80/path";));
+       
assertTrue(validator.isValid("http://user:p...@www.apache.org:80/path";));
+       assertTrue(validator.isValid("http://user:@www.apache.org:80/path";));
+       
assertTrue(validator.isValid("http://us%00er:-._~!$&;'()*+,;=@www.apache.org:80/path"));
+       assertFalse(validator.isValid("http://:p...@www.apache.org:80/path";));
+       assertFalse(validator.isValid("http://:@www.apache.org:80/path";));
+       
assertFalse(validator.isValid("http://user:pa:s...@www.apache.org/path";));
+       
assertFalse(validator.isValid("http://user:pa@s...@www.apache.org/path";));
+   }
+
    /**
     * Only used to debug the unit tests.
     * @param argv


Reply via email to