[ 
https://issues.apache.org/jira/browse/VALIDATOR-467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17166648#comment-17166648
 ] 

Ivan Larionov commented on VALIDATOR-467:
-----------------------------------------

This bug was a huge blocker for us. I'm glad it was fixed pretty fast. but are 
there any plans for a new release of {{commons-validator}}?

> URL validator fails if path starts with double slash and has underscores
> ------------------------------------------------------------------------
>
>                 Key: VALIDATOR-467
>                 URL: https://issues.apache.org/jira/browse/VALIDATOR-467
>             Project: Commons Validator
>          Issue Type: Bug
>          Components: Routines
>    Affects Versions: 1.6
>            Reporter: Ivan Larionov
>            Priority: Major
>             Fix For: 1.7
>
>
> {code:java}
> import org.apache.commons.validator.routines.UrlValidator;
> ...
> private static final String[] schemes = {"http", "https"};
> private static final UrlValidator urlValidator = new UrlValidator(schemes,
>         UrlValidator.ALLOW_LOCAL_URLS + UrlValidator.ALLOW_2_SLASHES);
> ...
> urlValidator.isValid("https://example.com//some_path/path/";)
> {code}
> This returns {{false}}. However such URL is valid if authority is not 
> {{null}}.
> The reason it returns {{false}} is this code in the validator:
> https://github.com/apache/commons-validator/blob/a3771313c9f1833abf32c7c294ad1de4810e532d/src/main/java/org/apache/commons/validator/routines/UrlValidator.java#L452-L461
> {code:java}
>         try {
>             URI uri = new URI(null,null,path,null);
>             String norm = uri.normalize().getPath();
>             if (norm.startsWith("/../") // Trying to go via the parent dir 
>              || norm.equals("/..")) {   // Trying to go to the parent dir
>                 return false;
>             }
>         } catch (URISyntaxException e) {
>             return false;
>         }
> {code}
> As far as I understand {{URI uri = new URI(null,null,path,null);}} throws 
> {{URISyntaxException}} if authority is {{null}} and path starts with {{//}}.
> I tried running {{new URI(null, "example.com", path, null);}} and it worked.
> I didn't read RFC but from some googling around I got the following:
> {{//some_path}} is invalid if authority is null
> {{//some_path}} is valid if authority is not null
> *Update:*
> Another thing I noticed while testing is that the following actually passes 
> the validation – {{"https://example.com//test"}}
> And that {{"https://example.com//test_test"}} fails the validation but 
> {{URISyntaxException}} is thrown due to {{Illegal character in hostname}} and 
> not due to {{//}} at the start.
> So my original theory behind the failure looks incorrect now, however I still 
> consider this bug as a valid one.
> I guess better description would be "URL validator incorrectly uses URI uri = 
> new URI(null,null,path,null); check. Due to these nulls in arguments path is 
> validated as a hostname".
> And the simplest URL to test is 
> {{https://example.com//test_double_slash_and_underscore}}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to