Skip to content

Commit 0967ee9

Browse files
committed
Fix RTP padding length validation
Added validation of RTP padding length in received packets. Also check for zero padding length when marshaling.
1 parent bc5124c commit 0967ee9

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

error.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ var (
2121
errRFC8285TwoByteHeaderSize = errors.New("header extension payload must be 255bytes or less for RFC 5285 two byte extensions")
2222

2323
errRFC3550HeaderIDRange = errors.New("header extension id must be 0 for non-RFC 5285 extensions")
24+
25+
errInvalidRTPPadding = errors.New("invalid RTP padding")
2426
)

packet.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ func (p *Packet) Unmarshal(buf []byte) error {
215215

216216
end := len(buf)
217217
if p.Header.Padding {
218+
if end <= n {
219+
return errTooSmall
220+
}
218221
p.PaddingSize = buf[end-1]
219222
end -= int(p.PaddingSize)
220223
}
@@ -475,6 +478,10 @@ func (p Packet) Marshal() (buf []byte, err error) {
475478

476479
// MarshalTo serializes the packet and writes to the buffer.
477480
func (p *Packet) MarshalTo(buf []byte) (n int, err error) {
481+
if p.Header.Padding && p.PaddingSize == 0 {
482+
return 0, errInvalidRTPPadding
483+
}
484+
478485
n, err = p.Header.MarshalTo(buf)
479486
if err != nil {
480487
return 0, err

0 commit comments

Comments
 (0)