diff --git a/data_pes.go b/data_pes.go index 4d0f6b9..ccf1c86 100644 --- a/data_pes.go +++ b/data_pes.go @@ -129,6 +129,12 @@ func parsePESData(i *astikit.BytesIterator) (d *PESData, err error) { return } + var dataAvailable = i.Len() - dataStart + if int(d.Header.PacketLength) > dataAvailable { + dataEnd = dataAvailable + dataStart + d.Header.PacketLength = uint16(dataAvailable) + } + // Validation if dataEnd < dataStart { err = fmt.Errorf("astits: data end %d is before data start %d", dataEnd, dataStart) diff --git a/data_pes_test.go b/data_pes_test.go index 4b32c71..2ddfb3d 100644 --- a/data_pes_test.go +++ b/data_pes_test.go @@ -383,6 +383,7 @@ func pesWithHeaderBytes() []byte { pesTestCases[1].headerBytesFunc(w, true, true) pesTestCases[1].optionalHeaderBytesFunc(w, true, true) pesTestCases[1].bytesFunc(w, true, true) + buf.Write(make([]byte, 100)) // Add some extra bytes return buf.Bytes() } @@ -399,6 +400,7 @@ func TestParsePESData(t *testing.T) { tc.headerBytesFunc(w, true, true) tc.optionalHeaderBytesFunc(w, true, true) tc.bytesFunc(w, true, true) + buf.Write(make([]byte, 100)) // Add some extra bytes d, err := parsePESData(astikit.NewBytesIterator(buf.Bytes())) assert.NoError(t, err) assert.Equal(t, tc.pesData, d)