Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8336302

When doing a PUT the error URI Syntax Exception: Illegal character in hostname

XMLWordPrintable

    • generic
    • generic

      ADDITIONAL SYSTEM INFORMATION :
      We're seeing this when running ORDS, on Tomcat 9 running on Java 17.0.11 on RHEL8

      A DESCRIPTION OF THE PROBLEM :
      GETs work fine it's only when doing a PUT with a bearer token do we see the URI Syntax Exception: Illegal character in hostname error message

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Do a GET to get a new bearer token
      Do a PUT using the bearer token to the URL with an underscore in

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Successful PUT
      ACTUAL -
       in a PUT after getting a successful bearer token in a pr

      CUSTOMER SUBMITTED WORKAROUND :
      diff --git a/src/java.base/share/classes/java/net/URI.java b/src/java.base/share/classes/java/net/URI.java
      index 644fc05bdc1..2b6996ee12a 100644
      --- a/src/java.base/share/classes/java/net/URI.java
      +++ b/src/java.base/share/classes/java/net/URI.java
      @@ -2717,6 +2717,10 @@ public final class URI
           private static final long L_DASH = 0x200000000000L; // lowMask("-");
           private static final long H_DASH = 0x0L; // highMask("-");

      + // Underscore, for use in hostnames
      + private static final long L_UNDERSCORE = 0L; // lowMask("_");
      + private static final long H_UNDERSCORE = 0x80000000; // highMask("_");
      +
           // Dot, for use in hostnames
           private static final long L_DOT = 0x400000000000L; // lowMask(".");
           private static final long H_DOT = 0x0L; // highMask(".");
      @@ -3511,7 +3515,7 @@ public final class URI
                       l = p;
                       if (q > p) {
                           p = q;
      - q = scan(p, n, L_ALPHANUM | L_DASH, H_ALPHANUM | H_DASH);
      + q = scan(p, n, L_ALPHANUM | L_DASH | L_UNDERSCORE, H_ALPHANUM | H_DASH | H_UNDERSCORE);
                           if (q > p) {
                               if (input.charAt(q - 1) == '-')
                                   fail("Illegal character in hostname", q - 1);

      I'm not 100% sure how scan works, it this just allows underscores or also allows other characters too

      FREQUENCY : always


            dfuchs Daniel Fuchs
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated: