Ensure scheme not lowercased if URI variable
Closes gh-33699
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.web.util;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
@@ -508,7 +509,8 @@ abstract class RfcUriParser {
|
||||
}
|
||||
|
||||
public InternalParser captureScheme() {
|
||||
this.scheme = captureComponent("scheme").toLowerCase();
|
||||
String scheme = captureComponent("scheme");
|
||||
this.scheme = (!scheme.startsWith("{") ? scheme.toLowerCase(Locale.ROOT) : scheme);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -633,8 +635,11 @@ abstract class RfcUriParser {
|
||||
return true;
|
||||
}
|
||||
else if (c == '}') {
|
||||
this.openCurlyBracketCount--;
|
||||
return true;
|
||||
if (this.openCurlyBracketCount > 0) {
|
||||
this.openCurlyBracketCount--;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return (this.openCurlyBracketCount > 0);
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ final class WhatWgUrlParser {
|
||||
logger.trace("Changing state from " + this.state + " to " + newState + " (cur: " + c + ")");
|
||||
}
|
||||
this.state = newState;
|
||||
this.openCurlyBracketCount = 0;
|
||||
this.openCurlyBracketCount = (this.buffer.toString().equals("{") ? this.openCurlyBracketCount : 0);
|
||||
}
|
||||
|
||||
private boolean processCurlyBrackets(int c) {
|
||||
@@ -244,8 +244,11 @@ final class WhatWgUrlParser {
|
||||
return true;
|
||||
}
|
||||
if (c == '}') {
|
||||
this.openCurlyBracketCount--;
|
||||
return true;
|
||||
if (this.openCurlyBracketCount > 0) {
|
||||
this.openCurlyBracketCount--;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return (this.openCurlyBracketCount > 0 && c != EOF);
|
||||
}
|
||||
@@ -756,7 +759,7 @@ final class WhatWgUrlParser {
|
||||
public void handle(int c, UrlRecord url, WhatWgUrlParser p) {
|
||||
// If c is an ASCII alpha, append c, lowercased, to buffer, and set state to scheme state.
|
||||
if (isAsciiAlpha(c)) {
|
||||
p.append(Character.toLowerCase((char) c));
|
||||
p.append(p.openCurlyBracketCount == 0 ? Character.toLowerCase((char) c) : c);
|
||||
p.setState(SCHEME);
|
||||
}
|
||||
// EXTRA: if c is '{', append to buffer and continue as SCHEME
|
||||
@@ -782,7 +785,7 @@ final class WhatWgUrlParser {
|
||||
public void handle(int c, UrlRecord url, WhatWgUrlParser p) {
|
||||
// If c is an ASCII alphanumeric, U+002B (+), U+002D (-), or U+002E (.), append c, lowercased, to buffer.
|
||||
if (isAsciiAlphaNumeric(c) || (c == '+' || c == '-' || c == '.')) {
|
||||
p.append(Character.toLowerCase((char) c));
|
||||
p.append(p.openCurlyBracketCount == 0 ? Character.toLowerCase((char) c) : c);
|
||||
}
|
||||
// Otherwise, if c is U+003A (:), then:
|
||||
else if (c == ':') {
|
||||
|
||||
Reference in New Issue
Block a user