server: fix crash in case of requests with nil URL (#458)

---------

Co-authored-by: aler9 <46489434+aler9@users.noreply.github.com>
This commit is contained in:
database64128
2023-11-07 23:50:57 +08:00
committed by GitHub
parent 0933bf9975
commit b8838ca595
2 changed files with 40 additions and 2 deletions

View File

@@ -208,10 +208,15 @@ func (sc *ServerConn) handleRequestInner(req *base.Request) (*base.Response, err
if cseq, ok := req.Header["CSeq"]; !ok || len(cseq) != 1 {
return &base.Response{
StatusCode: base.StatusBadRequest,
Header: base.Header{},
}, liberrors.ErrServerCSeqMissing{}
}
if req.Method != base.Options && req.URL == nil {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, liberrors.ErrServerInvalidPath{}
}
sxID := getSessionID(req.Header)
var path string

View File

@@ -311,7 +311,40 @@ func TestServerErrorCSeqMissing(t *testing.T) {
res, err := writeReqReadRes(conn, base.Request{
Method: base.Options,
URL: mustParseURL("rtsp://localhost:8554/"),
Header: base.Header{},
})
require.NoError(t, err)
require.Equal(t, base.StatusBadRequest, res.StatusCode)
<-nconnClosed
}
func TestServerErrorNilURL(t *testing.T) {
nconnClosed := make(chan struct{})
s := &Server{
Handler: &testServerHandler{
onConnClose: func(ctx *ServerHandlerOnConnCloseCtx) {
require.EqualError(t, ctx.Error, "invalid path")
close(nconnClosed)
},
},
RTSPAddress: "localhost:8554",
}
err := s.Start()
require.NoError(t, err)
defer s.Close()
nconn, err := net.Dial("tcp", "localhost:8554")
require.NoError(t, err)
defer nconn.Close()
conn := conn.NewConn(nconn)
res, err := writeReqReadRes(conn, base.Request{
Method: base.Describe,
URL: nil,
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
},
})
require.NoError(t, err)
require.Equal(t, base.StatusBadRequest, res.StatusCode)