return error in OnDecodeError when there are oversized UDP packets

This commit is contained in:
aler9
2022-10-31 15:38:23 +01:00
parent 5a5f454814
commit b1f72f9392
8 changed files with 93 additions and 20 deletions

View File

@@ -1,6 +1,7 @@
package gortsplib
import (
"bytes"
"crypto/tls"
"net"
"testing"
@@ -1477,9 +1478,11 @@ func TestServerPublishUDPChangeConn(t *testing.T) {
func TestServerPublishDecodeErrors(t *testing.T) {
for _, ca := range []string{
"invalid rtp",
"invalid rtcp",
"rtp invalid",
"rtcp invalid",
"packets lost",
"rtp too big",
"rtcp too big",
} {
t.Run(ca, func(t *testing.T) {
errorRecv := make(chan struct{})
@@ -1503,12 +1506,16 @@ func TestServerPublishDecodeErrors(t *testing.T) {
},
onDecodeError: func(ctx *ServerHandlerOnDecodeErrorCtx) {
switch ca {
case "invalid rtp":
case "rtp invalid":
require.EqualError(t, ctx.Error, "RTP header size insufficient: 2 < 4")
case "invalid rtcp":
case "rtcp invalid":
require.EqualError(t, ctx.Error, "rtcp: packet too short")
case "packets lost":
require.EqualError(t, ctx.Error, "69 RTP packet(s) lost")
case "rtp too big":
require.EqualError(t, ctx.Error, "RTP packet is too big to be read with UDP")
case "rtcp too big":
require.EqualError(t, ctx.Error, "RTCP packet is too big to be read with UDP")
}
close(errorRecv)
},
@@ -1598,13 +1605,13 @@ func TestServerPublishDecodeErrors(t *testing.T) {
require.Equal(t, base.StatusOK, res.StatusCode)
switch ca { //nolint:dupl
case "invalid rtp":
case "rtp invalid":
l1.WriteTo([]byte{0x01, 0x02}, &net.UDPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: resTH.ServerPorts[0],
})
case "invalid rtcp":
case "rtcp invalid":
l2.WriteTo([]byte{0x01, 0x02}, &net.UDPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: resTH.ServerPorts[1],
@@ -1630,6 +1637,18 @@ func TestServerPublishDecodeErrors(t *testing.T) {
IP: net.ParseIP("127.0.0.1"),
Port: resTH.ServerPorts[0],
})
case "rtp too big":
l1.WriteTo(bytes.Repeat([]byte{0x01, 0x02}, 2000/2), &net.UDPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: resTH.ServerPorts[0],
})
case "rtcp too big":
l2.WriteTo(bytes.Repeat([]byte{0x01, 0x02}, 2000/2), &net.UDPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: resTH.ServerPorts[1],
})
}
<-errorRecv