mirror of
https://github.com/octoleo/syncthing.git
synced 2024-11-08 22:31:04 +00:00
Properly handle absolute URLs when parsing UPnP service control URLs
Fixes #1187
This commit is contained in:
parent
7d39d1a925
commit
af96f7a0cd
@ -448,19 +448,27 @@ func getIGDServices(rootURL string, device upnpDevice, wanDeviceURN string, wanC
|
||||
}
|
||||
|
||||
func replaceRawPath(u *url.URL, rp string) {
|
||||
var p, q string
|
||||
fs := strings.Split(rp, "?")
|
||||
p = fs[0]
|
||||
if len(fs) > 1 {
|
||||
q = fs[1]
|
||||
}
|
||||
|
||||
if p[0] == '/' {
|
||||
u.Path = p
|
||||
asURL, err := url.Parse(rp)
|
||||
if err != nil {
|
||||
return
|
||||
} else if asURL.IsAbs() {
|
||||
u.Path = asURL.Path
|
||||
u.RawQuery = asURL.RawQuery
|
||||
} else {
|
||||
u.Path += p
|
||||
var p, q string
|
||||
fs := strings.Split(rp, "?")
|
||||
p = fs[0]
|
||||
if len(fs) > 1 {
|
||||
q = fs[1]
|
||||
}
|
||||
|
||||
if p[0] == '/' {
|
||||
u.Path = p
|
||||
} else {
|
||||
u.Path += p
|
||||
}
|
||||
u.RawQuery = q
|
||||
}
|
||||
u.RawQuery = q
|
||||
}
|
||||
|
||||
func soapRequest(url, service, function, message string) ([]byte, error) {
|
||||
|
@ -17,6 +17,7 @@ package upnp
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"net/url"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@ -40,3 +41,25 @@ func TestExternalIPParsing(t *testing.T) {
|
||||
t.Error("Parse of SOAP request failed.")
|
||||
}
|
||||
}
|
||||
|
||||
func TestControlURLParsing(t *testing.T) {
|
||||
rootURL := "http://192.168.243.1:80/igd.xml"
|
||||
|
||||
u, _ := url.Parse(rootURL)
|
||||
subject := "/upnp?control=WANCommonIFC1"
|
||||
expected := "http://192.168.243.1:80/upnp?control=WANCommonIFC1"
|
||||
replaceRawPath(u, subject)
|
||||
|
||||
if u.String() != expected {
|
||||
t.Error("URL normalization of", subject, "failed; expected", expected, "got", u.String())
|
||||
}
|
||||
|
||||
u, _ = url.Parse(rootURL)
|
||||
subject = "http://192.168.243.1:80/upnp?control=WANCommonIFC1"
|
||||
expected = "http://192.168.243.1:80/upnp?control=WANCommonIFC1"
|
||||
replaceRawPath(u, subject)
|
||||
|
||||
if u.String() != expected {
|
||||
t.Error("URL normalization of", subject, "failed; expected", expected, "got", u.String())
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user