mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-15 21:45:19 +00:00
Defensive Coding
This commit is contained in:
parent
21fbe0d033
commit
fd07f15edc
@ -727,27 +727,57 @@ public final class PostboxDecoder {
|
||||
case .Double:
|
||||
offset += 8
|
||||
case .String:
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, bytes + offset, 4)
|
||||
offset += 4 + Int(length)
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var valueLength: Int32 = 0
|
||||
memcpy(&valueLength, bytes + offset, 4)
|
||||
offset += 4 + Int(valueLength)
|
||||
case .Object:
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, bytes + (offset + 4), 4)
|
||||
offset += 8 + Int(length)
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var valueLength: Int32 = 0
|
||||
memcpy(&valueLength, bytes + (offset + 4), 4)
|
||||
offset += 8 + Int(valueLength)
|
||||
case .Int32Array:
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, bytes + offset, 4)
|
||||
offset += 4 + Int(length) * 4
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var valueLength: Int32 = 0
|
||||
memcpy(&valueLength, bytes + offset, 4)
|
||||
offset += 4 + Int(valueLength) * 4
|
||||
case .Int64Array:
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, bytes + offset, 4)
|
||||
offset += 4 + Int(length) * 8
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var valueLength: Int32 = 0
|
||||
memcpy(&valueLength, bytes + offset, 4)
|
||||
offset += 4 + Int(valueLength) * 8
|
||||
case .ObjectArray:
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var subLength: Int32 = 0
|
||||
memcpy(&subLength, bytes + offset, 4)
|
||||
offset += 4
|
||||
var i: Int32 = 0
|
||||
while i < subLength {
|
||||
if offset + 4 + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var objectLength: Int32 = 0
|
||||
memcpy(&objectLength, bytes + (offset + 4), 4)
|
||||
offset += 8 + Int(objectLength)
|
||||
@ -759,32 +789,62 @@ public final class PostboxDecoder {
|
||||
}
|
||||
return true
|
||||
case .ObjectDictionary:
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, bytes + offset, 4)
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var valueLength: Int32 = 0
|
||||
memcpy(&valueLength, bytes + offset, 4)
|
||||
offset += 4
|
||||
var i: Int32 = 0
|
||||
while i < length {
|
||||
while i < valueLength {
|
||||
if offset + 4 + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var keyLength: Int32 = 0
|
||||
memcpy(&keyLength, bytes + (offset + 4), 4)
|
||||
offset += 8 + Int(keyLength)
|
||||
|
||||
if offset + 4 + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var valueLength: Int32 = 0
|
||||
memcpy(&valueLength, bytes + (offset + 4), 4)
|
||||
offset += 8 + Int(valueLength)
|
||||
i += 1
|
||||
}
|
||||
case .Bytes:
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, bytes + offset, 4)
|
||||
offset += 4 + Int(length)
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var valueLength: Int32 = 0
|
||||
memcpy(&valueLength, bytes + offset, 4)
|
||||
offset += 4 + Int(valueLength)
|
||||
case .Nil:
|
||||
break
|
||||
case .StringArray, .BytesArray:
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, bytes + offset, 4)
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var valueLength: Int32 = 0
|
||||
memcpy(&valueLength, bytes + offset, 4)
|
||||
offset += 4
|
||||
var i: Int32 = 0
|
||||
while i < length {
|
||||
if offset + 4 > length {
|
||||
offset = 0
|
||||
return false
|
||||
}
|
||||
|
||||
var stringLength: Int32 = 0
|
||||
memcpy(&stringLength, bytes + offset, 4)
|
||||
offset += 4 + Int(stringLength)
|
||||
|
Loading…
x
Reference in New Issue
Block a user