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:
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user