Skip to content

Commit 7a55b76

Browse files
fix: avoid bounds out of range
> #28
1 parent d712e72 commit 7a55b76

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

pkg/libimobiledevice/client_dtxmessage.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,29 @@ func (c *dtxMessageClient) ReceiveDTXMessage() (result *DTXMessageResult, err er
175175
}
176176

177177
payloadSize := uint32(unsafe.Sizeof(*payload))
178-
objOffset := payloadSize + payload.AuxiliaryLength
178+
objOffset := uint64(payloadSize + payload.AuxiliaryLength)
179179

180-
aux := rawPayload[payloadSize : payloadSize+payload.AuxiliaryLength]
181-
obj := rawPayload[objOffset : uint64(objOffset)+(payload.TotalLength-uint64(payload.AuxiliaryLength))]
180+
var aux, obj []byte
181+
182+
// see https://github.com/electricbubble/gidevice/issues/28
183+
if r, l := payloadSize+payload.AuxiliaryLength, len(rawPayload); int(r) <= l {
184+
aux = rawPayload[payloadSize:r]
185+
} else {
186+
debugLog(fmt.Sprintf("<-- DTXMessage %s\n%s\n"+
187+
"[aux] bounds out of range [:%d] with capacity %d",
188+
header.String(), payload.String(),
189+
r, l,
190+
))
191+
}
192+
if r, l := objOffset+(payload.TotalLength-uint64(payload.AuxiliaryLength)), len(rawPayload); int(r) <= l {
193+
obj = rawPayload[objOffset:r]
194+
} else {
195+
debugLog(fmt.Sprintf("<-- DTXMessage %s\n%s\n"+
196+
"[obj] bounds out of range [:%d] with capacity %d",
197+
header.String(), payload.String(),
198+
r, l,
199+
))
200+
}
182201

183202
debugLog(fmt.Sprintf(
184203
"<-- DTXMessage %s\n%s\n"+

0 commit comments

Comments
 (0)