diff --git a/clientapi/routing/sso.go b/clientapi/routing/sso.go index 3b809092e..08b701ab0 100644 --- a/clientapi/routing/sso.go +++ b/clientapi/routing/sso.go @@ -63,7 +63,7 @@ func SSORedirect( Code: http.StatusBadRequest, JSON: jsonerror.InvalidArgumentValue("Invalid redirectURL: " + err.Error()), } - } else if ru.Scheme == "" || ru.Host == "" || ru.Path == "" { + } else if ru.Scheme == "" || ru.Host == "" { return util.JSONResponse{ Code: http.StatusBadRequest, JSON: jsonerror.InvalidArgumentValue("Invalid redirectURL: " + redirectURL), diff --git a/clientapi/routing/sso_test.go b/clientapi/routing/sso_test.go index c6ac3637e..dfcc9408e 100644 --- a/clientapi/routing/sso_test.go +++ b/clientapi/routing/sso_test.go @@ -78,6 +78,21 @@ func TestSSORedirect(t *testing.T) { WantLocationRE: `http://auth.example.com/authorize\?callbackURL=http.*%3Fprovider%3Dsomeprovider&nonce=.+&providerID=someprovider`, WantSetCookieRE: "sso_nonce=[^;].*Path=/_matrix/v4/login/sso", }, + { + Name: "redirectEmptyredirectPath", + Req: http.Request{ + Host: "matrix.example.com", + URL: &url.URL{ + Path: "/_matrix/v4/login/sso/redirect", + RawQuery: url.Values{ + "redirectUrl": []string{"http://example.com"}, + }.Encode(), + }, + }, + IDPID: "someprovider", + WantLocationRE: `http://auth.example.com/authorize\?callbackURL=http.*%3Fprovider%3Dsomeprovider&nonce=.+&providerID=someprovider`, + WantSetCookieRE: "sso_nonce=[^;].*Path=/_matrix/v4/login/sso", + }, } for _, tst := range tsts { t.Run(tst.Name, func(t *testing.T) {