-
Bug
-
Resolution: Unresolved
-
P4
-
8, 11, 17, 24
-
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
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