improve check on H264 padding (#559)

This commit is contained in:
Alessandro Ros
2024-05-05 11:19:35 +02:00
committed by GitHub
parent 1888996801
commit 8c26f5f00a
3 changed files with 14 additions and 6 deletions

View File

@@ -29,6 +29,15 @@ func joinFragments(fragments [][]byte, size int) []byte {
return ret
}
func isAllZero(buf []byte) bool {
for _, b := range buf {
if b != 0 {
return false
}
}
return true
}
// Decoder is a RTP/H264 decoder.
// Specification: https://datatracker.ietf.org/doc/html/rfc6184
type Decoder struct {
@@ -125,8 +134,8 @@ func (d *Decoder) decodeNALUs(pkt *rtp.Packet) ([][]byte, error) {
size := uint16(payload[0])<<8 | uint16(payload[1])
payload = payload[2:]
// avoid final padding
if size == 0 {
// discard padding
if size == 0 && isAllZero(payload) {
break
}

View File

@@ -0,0 +1,3 @@
go test fuzz v1
[]byte("0")
[]byte("8\x00\x000")

View File

@@ -75,10 +75,6 @@ func (d *Decoder) decodeNALUs(pkt *rtp.Packet) ([][]byte, error) {
size := uint16(payload[0])<<8 | uint16(payload[1])
payload = payload[2:]
if size == 0 {
break
}
if int(size) > len(payload) {
return nil, fmt.Errorf("invalid aggregation unit (invalid size)")
}