Skip to content

Commit af15ad4

Browse files
authored
all: make URL scheme handling case-insensitive (#3521)
1 parent 4d1f585 commit af15ad4

File tree

1 file changed

+5
-7
lines changed

1 file changed

+5
-7
lines changed

internal/openurl/openurl.go

+5-7
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
)
2424

2525
// SchemeMap maps URL schemes to values. The zero value is an empty map, ready for use.
26+
// All schemes are stored and compared case-insensitively.
2627
type SchemeMap struct {
2728
api string
2829
m map[string]any
@@ -46,6 +47,7 @@ func (m *SchemeMap) Register(api, typ, scheme string, value any) {
4647
} else if m.api != api {
4748
panic(fmt.Errorf("previously registered using api %q (now %q)", m.api, api))
4849
}
50+
scheme = strings.ToLower(scheme)
4951
if _, exists := m.m[scheme]; exists {
5052
panic(fmt.Errorf("scheme %q already registered for %s.%s", scheme, api, typ))
5153
}
@@ -67,7 +69,7 @@ func (m *SchemeMap) FromString(typ, urlstr string) (any, *url.URL, error) {
6769

6870
// FromURL looks up the value for u's scheme.
6971
func (m *SchemeMap) FromURL(typ string, u *url.URL) (any, error) {
70-
scheme := u.Scheme
72+
scheme := strings.ToLower(u.Scheme)
7173
if scheme == "" {
7274
return nil, fmt.Errorf("open %s.%s: no scheme in URL %q", m.api, typ, u)
7375
}
@@ -96,10 +98,6 @@ func (m *SchemeMap) Schemes() []string {
9698

9799
// ValidScheme returns true iff scheme has been registered.
98100
func (m *SchemeMap) ValidScheme(scheme string) bool {
99-
for s := range m.m {
100-
if scheme == s {
101-
return true
102-
}
103-
}
104-
return false
101+
_, exists := m.m[strings.ToLower(scheme)]
102+
return exists
105103
}

0 commit comments

Comments
 (0)