mirror of
https://github.com/caddyserver/caddy.git
synced 2025-03-22 13:29:27 +01:00
Fix slice bounds when getting key of address (fixes #2706)
This commit is contained in:
parent
28e1f7c562
commit
a08ab0c007
2 changed files with 30 additions and 13 deletions
|
@ -490,12 +490,11 @@ func (a Address) Key() string {
|
||||||
if a.Host != "" {
|
if a.Host != "" {
|
||||||
res += a.Host
|
res += a.Host
|
||||||
}
|
}
|
||||||
if a.Port != "" {
|
|
||||||
if strings.HasPrefix(a.Original[len(res):], ":"+a.Port) {
|
|
||||||
// insert port only if the original has its own explicit port
|
// insert port only if the original has its own explicit port
|
||||||
|
if a.Port != "" && len(a.Original) >= len(res) &&
|
||||||
|
strings.HasPrefix(a.Original[len(res):], ":"+a.Port) {
|
||||||
res += ":" + a.Port
|
res += ":" + a.Port
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if a.Path != "" {
|
if a.Path != "" {
|
||||||
res += a.Path
|
res += a.Path
|
||||||
}
|
}
|
||||||
|
@ -553,11 +552,13 @@ func standardizeAddress(str string) (Address, error) {
|
||||||
|
|
||||||
// standardize http and https ports to their respective port numbers
|
// standardize http and https ports to their respective port numbers
|
||||||
// (this behavior changed in Go 1.12.8)
|
// (this behavior changed in Go 1.12.8)
|
||||||
|
if u.Scheme == "" {
|
||||||
if port == httpPort {
|
if port == httpPort {
|
||||||
u.Scheme = "http"
|
u.Scheme = "http"
|
||||||
} else if port == httpsPort {
|
} else if port == httpsPort {
|
||||||
u.Scheme = "https"
|
u.Scheme = "https"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Address{Original: input, Scheme: u.Scheme, Host: host, Port: port, Path: u.Path}, nil
|
return Address{Original: input, Scheme: u.Scheme, Host: host, Port: port, Path: u.Path}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,8 +43,8 @@ func TestStandardizeAddress(t *testing.T) {
|
||||||
{`:`, "", "", "", "", false},
|
{`:`, "", "", "", "", false},
|
||||||
{`localhost:http`, "http", "localhost", "80", "", false},
|
{`localhost:http`, "http", "localhost", "80", "", false},
|
||||||
{`localhost:https`, "https", "localhost", "443", "", false},
|
{`localhost:https`, "https", "localhost", "443", "", false},
|
||||||
{`:http`, "http", "", "80", "", false},
|
{`:http`, "http", "", "80", "", false}, // as of Go 1.12.8, service name in port is no longer supported
|
||||||
{`:https`, "https", "", "443", "", false},
|
{`:https`, "https", "", "443", "", false}, // as of Go 1.12.8, service name in port is no longer supported
|
||||||
{`http://localhost:https`, "", "", "", "", true}, // conflict
|
{`http://localhost:https`, "", "", "", "", true}, // conflict
|
||||||
{`http://localhost:http`, "http", "localhost", "80", "", false}, // repeated scheme -- test adjusted for Go 1.12.8 (expect no error)
|
{`http://localhost:http`, "http", "localhost", "80", "", false}, // repeated scheme -- test adjusted for Go 1.12.8 (expect no error)
|
||||||
{`http://localhost:443`, "", "", "", "", true}, // not conventional
|
{`http://localhost:443`, "", "", "", "", true}, // not conventional
|
||||||
|
@ -212,6 +212,10 @@ func TestKeyNormalization(t *testing.T) {
|
||||||
orig string
|
orig string
|
||||||
res string
|
res string
|
||||||
}{
|
}{
|
||||||
|
{
|
||||||
|
orig: "http://host:1234/path",
|
||||||
|
res: "http://host:1234/path",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
orig: "HTTP://A/ABCDEF",
|
orig: "HTTP://A/ABCDEF",
|
||||||
res: "http://a/ABCDEF",
|
res: "http://a/ABCDEF",
|
||||||
|
@ -221,8 +225,20 @@ func TestKeyNormalization(t *testing.T) {
|
||||||
res: "a/ABCDEF",
|
res: "a/ABCDEF",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
orig: "A:2015/Port",
|
orig: "A:2015/Path",
|
||||||
res: "a:2015/Port",
|
res: "a:2015/Path",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
orig: ":80",
|
||||||
|
res: "http://",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
orig: ":443",
|
||||||
|
res: "https://",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
orig: ":1234",
|
||||||
|
res: ":1234",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, item := range caseSensitiveData {
|
for _, item := range caseSensitiveData {
|
||||||
|
|
Loading…
Reference in a new issue