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

ASF GitHub Bot commented on TS-4312:
------------------------------------

Github user jpeach commented on a diff in the pull request:

    https://github.com/apache/trafficserver/pull/541#discussion_r57665721
  
    --- Diff: proxy/hdrs/URL.cc ---
    @@ -1158,9 +1158,51 @@ url_parse_scheme(HdrHeap *heap, URLImpl *url, const 
char **start, const char *en
       return PARSE_ERROR; // no non-whitespace found
     }
     
    +static bool
    +url_init_non_encoded_char_array(char *non_encoded_char, size_t size)
    +{
    +  const char *allowed_char = ":/?#[]@"                     // gen-delims
    +                              "!$&'()*+,;="                // sub-delims
    +                              "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // ALPHA
    +                              "abcdefghijklmnopqrstuvwxyz"
    +                              "0123456789"                 // DIGIT
    +                              "-._~"                       // other 
unreserved
    +                              "%";                         // '%' should 
also not be encoded
    +
    +  memset(non_encoded_char, 0, size);
    +  for (size_t i = 0; i < strlen(allowed_char); ++i) {
    +    ink_assert((unsigned char)allowed_char[i] < size);
    +    non_encoded_char[(unsigned char)allowed_char[i]] = 1;
    +  }
    +
    +  return true;
    +}
    +
    +static char non_encoded_char[256];
    +static bool url_init_non_encoded_char_array_done = 
url_init_non_encoded_char_array(non_encoded_char, sizeof(non_encoded_char));
    +
    +/**
    + *  This method will return TRUE if the uri is strictly compliant with
    + *  RFC 3986 and it will return FALSE if not.
    + */
    +static bool
    +url_is_strictly_compliant(const char *start, const char *end)
    +{
    +  for (const char *i = start; i < end; ++i) {
    +    if (!non_encoded_char[(unsigned char)*i]) {
    +      Debug("http", "Non-RFC compliant character [0x%.2X] found in URL\n", 
(unsigned char)*i);
    --- End diff --
    
    ``Debug`` doesn't need a ``\n``.


> Adding config to parse urls according to RFC
> --------------------------------------------
>
>                 Key: TS-4312
>                 URL: https://issues.apache.org/jira/browse/TS-4312
>             Project: Traffic Server
>          Issue Type: Bug
>            Reporter: Shen Zhang
>            Assignee: Brian Geffon
>
> Adding a config option "proxy.config.http.strict_uri_parsing" to sends http 
> status code 400 back to client if the URL includes non-RFC 3986 compliant 
> character



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to