Skip to content

Commit 53e3421

Browse files
apelisseyouyuanwu
authored andcommitted
Normalize non-encoded utf-8 URL
Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
1 parent 424d68c commit 53e3421

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

internal/normalize_url.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,16 @@ var rxDupSlashes = regexp.MustCompile(`/{2,}`)
2626
// - FlagLowercaseHost
2727
// - FlagRemoveDefaultPort
2828
// - FlagRemoveDuplicateSlashes (and this was mixed in with the |)
29+
//
30+
// This also normalizes the URL into its urlencoded form by removing RawPath and RawFragment.
2931
func NormalizeURL(u *url.URL) {
3032
lowercaseScheme(u)
3133
lowercaseHost(u)
3234
removeDefaultPort(u)
3335
removeDuplicateSlashes(u)
36+
37+
u.RawPath = ""
38+
u.RawFragment = ""
3439
}
3540

3641
func lowercaseScheme(u *url.URL) {

reference_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
package jsonreference
2727

2828
import (
29+
"reflect"
2930
"testing"
3031

3132
"github.com/go-openapi/jsonpointer"
@@ -421,3 +422,17 @@ func TestReferenceResolution(t *testing.T) {
421422
}
422423
}
423424
}
425+
426+
func TestIdenticalURLEncoded(t *testing.T) {
427+
expected, err := New("https://localhost/🌭#/🍔")
428+
if err != nil {
429+
t.Fatalf("Failed to create jsonreference: %v", err)
430+
}
431+
actual, err := New("https://localhost/%F0%9F%8C%AD#/%F0%9F%8D%94")
432+
if err != nil {
433+
t.Fatalf("Failed to create jsonreference: %v", err)
434+
}
435+
if !reflect.DeepEqual(expected, actual) {
436+
t.Fatalf("expected %v (URL: %#v), got %v (URL: %#v)", expected.String(), expected.referenceURL, actual.String(), actual.referenceURL)
437+
}
438+
}

0 commit comments

Comments
 (0)