Skip to content

Commit

Permalink
preserve url.Parse behaviour before go1.19
Browse files Browse the repository at this point in the history
Closes: #157

Signed-off-by: Shengjing Zhu <zhsj@debian.org>
  • Loading branch information
zhsj committed Aug 12, 2022
1 parent 1005cfb commit 7fdbabe
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 11 deletions.
11 changes: 5 additions & 6 deletions normalizer.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ const fileScheme = "file"
//
// The base path argument is assumed to be canonicalized (e.g. using normalizeBase()).
func normalizeURI(refPath, base string) string {
refURL, err := url.Parse(refPath)
refURL, err := parseURL(refPath)
if err != nil {
specLogger.Printf("warning: invalid URI in $ref %q: %v", refPath, err)
refURL, refPath = repairURI(refPath)
Expand All @@ -58,7 +58,7 @@ func normalizeURI(refPath, base string) string {
return refURL.String()
}

baseURL, _ := url.Parse(base)
baseURL, _ := parseURL(base)
if path.IsAbs(refURL.Path) {
baseURL.Path = refURL.Path
} else if refURL.Path != "" {
Expand All @@ -84,7 +84,6 @@ func normalizeURI(refPath, base string) string {
// There is a special case for schemas that are anchored with an "id":
// in that case, the rebasing is performed // against the id only if this is an anchor for the initial root document.
// All other intermediate "id"'s found along the way are ignored for the purpose of rebasing.
//
func denormalizeRef(ref *Ref, originalRelativeBase, id string) Ref {
debugLog("denormalizeRef called:\n$ref: %q\noriginal: %s\nroot ID:%s", ref.String(), originalRelativeBase, id)

Expand All @@ -94,7 +93,7 @@ func denormalizeRef(ref *Ref, originalRelativeBase, id string) Ref {
}

if id != "" {
idBaseURL, err := url.Parse(id)
idBaseURL, err := parseURL(id)
if err == nil { // if the schema id is not usable as a URI, ignore it
if ref, ok := rebase(ref, idBaseURL, true); ok { // rebase, but keep references to root unchaged (do not want $ref: "")
// $ref relative to the ID of the schema in the root document
Expand All @@ -103,7 +102,7 @@ func denormalizeRef(ref *Ref, originalRelativeBase, id string) Ref {
}
}

originalRelativeBaseURL, _ := url.Parse(originalRelativeBase)
originalRelativeBaseURL, _ := parseURL(originalRelativeBase)

r, _ := rebase(ref, originalRelativeBaseURL, false)

Expand Down Expand Up @@ -168,7 +167,7 @@ func normalizeRef(ref *Ref, relativeBase string) *Ref {
//
// See also: https://en.wikipedia.org/wiki/File_URI_scheme
func normalizeBase(in string) string {
u, err := url.Parse(in)
u, err := parseURL(in)
if err != nil {
specLogger.Printf("warning: invalid URI in RelativeBase %q: %v", in, err)
u, in = repairURI(in)
Expand Down
3 changes: 2 additions & 1 deletion normalizer_nonwindows.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//go:build !windows
// +build !windows

// Copyright 2015 go-swagger maintainers
Expand Down Expand Up @@ -34,7 +35,7 @@ func absPath(in string) string {
}

func repairURI(in string) (*url.URL, string) {
u, _ := url.Parse("")
u, _ := parseURL("")
debugLog("repaired URI: original: %q, repaired: %q", in, "")
return u, ""
}
Expand Down
4 changes: 2 additions & 2 deletions normalizer_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ func repairURI(in string) (*url.URL, string) {
const prefix = fileScheme + "://"
if !strings.HasPrefix(in, prefix) {
// giving up: resolve to empty path
u, _ := url.Parse("")
u, _ := parseURL("")

return u, ""
}

// attempt the repair, stripping the scheme should be sufficient
u, _ := url.Parse(strings.TrimPrefix(in, prefix))
u, _ := parseURL(strings.TrimPrefix(in, prefix))
debugLog("repaired URI: original: %q, repaired: %q", in, u.String())

return u, u.String()
Expand Down
3 changes: 1 addition & 2 deletions schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ package spec
import (
"encoding/json"
"fmt"
"net/url"
"strings"

"github.com/go-openapi/jsonpointer"
Expand Down Expand Up @@ -145,7 +144,7 @@ func (r *SchemaURL) fromMap(v map[string]interface{}) error {
}
if vv, ok := v["$schema"]; ok {
if str, ok := vv.(string); ok {
u, err := url.Parse(str)
u, err := parseURL(str)
if err != nil {
return err
}
Expand Down
8 changes: 8 additions & 0 deletions url_go18.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
//go:build !go1.19
// +build !go1.19

package spec

import "net/url"

var parseURL = url.Parse
14 changes: 14 additions & 0 deletions url_go19.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//go:build go1.19
// +build go1.19

package spec

import "net/url"

func parseURL(s string) (*url.URL, error) {
u, err := url.Parse(s)
if err == nil {
u.OmitHost = false
}
return u, err
}

0 comments on commit 7fdbabe

Please sign in to comment.