Fix handling error on invalid URL

This commit is contained in:
Ingo Oppermann 2023-05-05 09:48:25 +02:00
parent 9636023787
commit fde0595744

View File

@ -178,6 +178,7 @@ func (self *Server) Serve(listener net.Listener) error {
if Debug { if Debug {
fmt.Println("rtmp: server: client closed err:", err) fmt.Println("rtmp: server: client closed err:", err)
} }
conn.Close()
}() }()
} }
} }
@ -190,6 +191,7 @@ func (self *Server) Close() {
close(self.doneChan) close(self.doneChan)
self.listener.Close() self.listener.Close()
self.listener = nil
} }
const ( const (
@ -398,7 +400,7 @@ func getTcUrl(u *url.URL) string {
return nu.String() return nu.String()
} }
func createURL(tcurl, app, play string) (u *url.URL) { func createURL(tcurl, app, play string) (*url.URL, error) {
ps := strings.Split(app+"/"+play, "/") ps := strings.Split(app+"/"+play, "/")
out := []string{""} out := []string{""}
for _, s := range ps { for _, s := range ps {
@ -410,7 +412,11 @@ func createURL(tcurl, app, play string) (u *url.URL) {
out = append(out, "") out = append(out, "")
} }
path := strings.Join(out, "/") path := strings.Join(out, "/")
u, _ = url.ParseRequestURI(path)
u, err := url.ParseRequestURI(path)
if err != nil {
return nil, err
}
if tcurl != "" { if tcurl != "" {
tu, _ := url.Parse(tcurl) tu, _ := url.Parse(tcurl)
@ -419,7 +425,8 @@ func createURL(tcurl, app, play string) (u *url.URL) {
u.Scheme = tu.Scheme u.Scheme = tu.Scheme
} }
} }
return
return u, nil
} }
var CodecTypes = flv.CodecTypes var CodecTypes = flv.CodecTypes
@ -553,7 +560,13 @@ func (self *Conn) readConnect() (err error) {
return return
} }
self.URL = createURL(tcurl, connectpath, publishpath) u, uerr := createURL(tcurl, connectpath, publishpath)
if uerr != nil {
err = fmt.Errorf("invalid URL: %w", uerr)
return
}
self.URL = u
self.publishing = true self.publishing = true
self.reading = true self.reading = true
self.stage++ self.stage++
@ -599,7 +612,13 @@ func (self *Conn) readConnect() (err error) {
return return
} }
self.URL = createURL(tcurl, connectpath, playpath) u, uerr := createURL(tcurl, connectpath, playpath)
if uerr != nil {
err = fmt.Errorf("invalid URL: %w", uerr)
return
}
self.URL = u
self.playing = true self.playing = true
self.writing = true self.writing = true
self.stage++ self.stage++