1
0
mirror of https://github.com/garraflavatra/go-fmp.git synced 2025-06-28 04:25:11 +00:00

Stop timely

This commit is contained in:
2025-06-12 08:58:23 +02:00
parent 7fdc3377ca
commit 659ad61300
2 changed files with 8 additions and 3 deletions

View File

@ -167,19 +167,21 @@ func (ctx *FmpFile) readChunk(payload []byte) (*FmpChunk, error) {
if payload[0] == 0x07 { if payload[0] == 0x07 {
length := binary.BigEndian.Uint16(payload[2 : 2+2]) length := binary.BigEndian.Uint16(payload[2 : 2+2])
payloadLimit := min(4+length, uint16(len(payload)))
return &FmpChunk{ return &FmpChunk{
Type: FMP_CHUNK_SEGMENTED_DATA, Type: FMP_CHUNK_SEGMENTED_DATA,
Index: uint32(payload[1]), Index: uint32(payload[1]),
Value: payload[4 : 4+length], Value: payload[4:payloadLimit],
Length: 4 + uint32(length), Length: 4 + uint32(length),
}, nil }, nil
} }
if payload[0] == 0x0F { if payload[0] == 0x0F {
length := uint32(binary.BigEndian.Uint16(payload[3 : 3+2])) length := uint32(binary.BigEndian.Uint16(payload[3 : 3+2]))
payloadLimit := min(5+length, uint32(len(payload)))
return &FmpChunk{ return &FmpChunk{
Type: FMP_CHUNK_SEGMENTED_DATA, Type: FMP_CHUNK_SEGMENTED_DATA,
Index: uint32(binary.BigEndian.Uint16(payload[1 : 1+2])), Index: uint32(binary.BigEndian.Uint16(payload[1 : 1+2])),
Value: payload[5 : 5+length], Value: payload[5:payloadLimit],
Length: 5 + length, Length: 5 + length,
}, nil }, nil
} }

View File

@ -137,7 +137,10 @@ func (ctx *FmpFile) readSector() (*FmpSector, error) {
if chunk.Length == 0 { if chunk.Length == 0 {
panic("chunk length not set") panic("chunk length not set")
} }
payload = payload[chunk.Length:] payload = payload[min(chunk.Length, uint32(len(payload))):]
if len(payload) == 0 {
break
}
} }
return sector, nil return sector, nil