commit cb9f53840ce84710f2da783c0f4efc3a96479ba2 from: Oliver Lowe date: Sat Aug 17 00:41:03 2024 UTC mpegts: let callers handle packet length errors explicitly commit - 7c79b0547941d5c8539ca8c8206cefdf0f4f74aa commit + cb9f53840ce84710f2da783c0f4efc3a96479ba2 blob - 63c2de52e09c900b8dd7f33d74fb475c0fd7b2f5 blob + 029ceca35b82657bd756542a6ef0674e036f7a4f --- mpegts/codec.go +++ mpegts/codec.go @@ -2,10 +2,14 @@ package mpegts import ( "encoding/binary" + "errors" "fmt" "io" ) +var ErrLongPacket = errors.New("long packet") +var ErrShortPacket = errors.New("short packet") + func Unmarshal(buf []byte, p *Packet) error { if len(buf) != PacketSize { return fmt.Errorf("need exactly %d bytes, have %d", PacketSize, len(buf)) @@ -253,8 +257,10 @@ func Encode(w io.Writer, p *Packet) error { if p.Payload != nil { buf = append(buf, p.Payload...) } - if len(buf) != PacketSize { - return fmt.Errorf("bad encoded packet length %d", len(buf)) + if len(buf) > PacketSize { + return fmt.Errorf("%w: %d bytes", ErrLongPacket, len(buf)) + } else if len(buf) < PacketSize { + return fmt.Errorf("%w: %d bytes", ErrShortPacket, len(buf)) } _, err := w.Write(buf) return err