diff --git a/pkg/base/url.go b/pkg/base/url.go index a840ca96..73c19c24 100644 --- a/pkg/base/url.go +++ b/pkg/base/url.go @@ -32,6 +32,14 @@ func ParseURL(s string) (*URL, error) { return nil, fmt.Errorf("unsupported scheme '%s'", u.Scheme) } + if u.Opaque != "" { + return nil, fmt.Errorf("URLs with opaque data are not supported") + } + + if u.Fragment != "" { + return nil, fmt.Errorf("URLs with fragments are not supported") + } + return (*URL)(u), nil } @@ -53,7 +61,6 @@ func (u *URL) String() string { func (u *URL) Clone() *URL { return (*URL)(&url.URL{ Scheme: u.Scheme, - Opaque: u.Opaque, User: u.User, Host: u.Host, Path: u.Path, @@ -67,7 +74,6 @@ func (u *URL) Clone() *URL { func (u *URL) CloneWithoutCredentials() *URL { return (*URL)(&url.URL{ Scheme: u.Scheme, - Opaque: u.Opaque, Host: u.Host, Path: u.Path, RawPath: u.RawPath, diff --git a/pkg/base/url_test.go b/pkg/base/url_test.go index 11c8e977..6d336fb3 100644 --- a/pkg/base/url_test.go +++ b/pkg/base/url_test.go @@ -6,6 +6,27 @@ import ( "github.com/stretchr/testify/require" ) +func TestURLInvalid(t *testing.T) { + for _, ca := range []struct { + name string + enc string + }{ + { + "with opaque data", + "rtsp:opaque?query", + }, + { + "with fragment", + "rtsp://localhost:8554/teststream#fragment", + }, + } { + t.Run(ca.name, func(t *testing.T) { + _, err := ParseURL(ca.enc) + require.Error(t, err) + }) + } +} + func TestURLRTSPPath(t *testing.T) { for _, ca := range []struct { u *URL