fix race condition in WritePacketRTP() (#334)

This commit is contained in:
Alessandro Ros
2023-07-28 23:40:31 +02:00
committed by GitHub
parent ed536f1d63
commit 320a2b99af
2 changed files with 25 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ package gortsplib
import (
"fmt"
"io"
"time"
"github.com/pion/rtcp"
@@ -14,6 +15,28 @@ import (
"github.com/bluenviron/gortsplib/v3/pkg/rtpreorderer"
)
// workaround until this gets tagged:
// https://github.com/pion/rtp/pull/234
func rtpPacketMarshalToSafe(p *rtp.Packet, buf []byte) (n int, err error) {
n, err = p.Header.MarshalTo(buf)
if err != nil {
return 0, err
}
// Make sure the buffer is large enough to hold the packet.
if n+len(p.Payload)+int(p.PaddingSize) > len(buf) {
return 0, io.ErrShortBuffer
}
m := copy(buf[n:], p.Payload)
if p.Header.Padding {
buf[n+m+int(p.PaddingSize-1)] = p.PaddingSize
}
return n + m + int(p.PaddingSize), nil
}
type clientFormat struct {
c *Client
cm *clientMedia
@@ -76,7 +99,7 @@ func (ct *clientFormat) stop() {
func (ct *clientFormat) writePacketRTPWithNTP(pkt *rtp.Packet, ntp time.Time) error {
byts := make([]byte, udpMaxPayloadSize)
n, err := pkt.MarshalTo(byts)
n, err := rtpPacketMarshalToSafe(pkt, byts)
if err != nil {
return err
}

View File

@@ -69,7 +69,7 @@ func (sm *serverStreamMedia) allocateMulticastHandler(s *Server) error {
func (sm *serverStreamMedia) WritePacketRTPWithNTP(ss *ServerStream, pkt *rtp.Packet, ntp time.Time) {
byts := make([]byte, udpMaxPayloadSize)
n, err := pkt.MarshalTo(byts)
n, err := rtpPacketMarshalToSafe(pkt, byts)
if err != nil {
return
}