From af79224e3055d1f95d76ba4edfbb62f6a6179967 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Thu, 29 Feb 2024 10:25:52 +0530 Subject: [PATCH] Check on copy. (#2525) Should not happen, but just being defensive. --- pkg/sfu/downtrack.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index a4d0b1be5..18589517e 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -89,9 +89,9 @@ var ( ErrOutOfOrderSequenceNumberCacheMiss = errors.New("out-of-order sequence number not found in cache") ErrPaddingOnlyPacket = errors.New("padding only packet that need not be forwarded") ErrDuplicatePacket = errors.New("duplicate packet") - ErrSequenceNumberOffsetNotFound = errors.New("sequence number offset not found") ErrPaddingNotOnFrameBoundary = errors.New("padding cannot send on non-frame boundary") ErrDownTrackAlreadyBound = errors.New("already bound") + ErrPayloadOverflow = errors.New("payload overflow") ) var ( @@ -694,8 +694,13 @@ func (d *DownTrack) WriteRTP(extPkt *buffer.ExtPacket, layer int32) error { PacketFactory.Put(poolEntity) return err } - copy(payload[outgoingHeaderSize:], extPkt.Packet.Payload[incomingHeaderSize:]) - payload = payload[:outgoingHeaderSize+len(extPkt.Packet.Payload)-incomingHeaderSize] + n := copy(payload[outgoingHeaderSize:], extPkt.Packet.Payload[incomingHeaderSize:]) + if n != len(extPkt.Packet.Payload[incomingHeaderSize:]) { + d.params.Logger.Errorw("payload overflow", nil, "want", len(extPkt.Packet.Payload[incomingHeaderSize:]), "have", n) + PacketFactory.Put(poolEntity) + return ErrPayloadOverflow + } + payload = payload[:outgoingHeaderSize+n] hdr, err := d.getTranslatedRTPHeader(extPkt, &tp) if err != nil {