Доработка. Проверки длинны массива в ЯУ-07.
This commit is contained in:
@@ -218,6 +218,8 @@ class YaU07 extends unit.Unit:
|
||||
var i: = 0
|
||||
while i < ports_count:
|
||||
var shift: = i * 4
|
||||
if rx_data.size() < (data_pos + shift):
|
||||
return false
|
||||
var isa_addr = rx_data.decode_u16(addr_pos + shift) # Адрес порта ISA яу-07
|
||||
var isa_data = rx_data.decode_u16(data_pos + shift) # Данные порта ISA яу-07
|
||||
isa_ports[isa_addr] = isa_data
|
||||
@@ -229,20 +231,28 @@ class YaU07 extends unit.Unit:
|
||||
var ports_count_pos = status_len + 7 # Положение в приёмном буфере количества портов
|
||||
if rx_data.size() < ports_count_pos:
|
||||
return false
|
||||
if rx_data.size() < (ports_count_pos + 5):
|
||||
return false
|
||||
var block_len = rx_data.decode_u16(ports_count_pos + 3)
|
||||
var block_adr = rx_data.decode_u16(ports_count_pos + 5)
|
||||
var block_data = []
|
||||
for i in block_len:
|
||||
var shift: int = i * 2
|
||||
if rx_data.size() < (ports_count_pos + 7 + shift):
|
||||
return false
|
||||
block_data.append(rx_data.decode_u16(ports_count_pos + 7 + shift))
|
||||
isa_block[block_adr] = block_data
|
||||
return true
|
||||
|
||||
func parse_flash(rx_data: PackedByteArray, status_len, cmd_code) -> bool:
|
||||
if cmd_code == CmdCode.READ_FLASH:
|
||||
if rx_data.size() < (status_len + 14):
|
||||
return false
|
||||
flash_len = rx_data.decode_u16(status_len + 12)
|
||||
flash_data = rx_data.slice(status_len + 14)
|
||||
if cmd_code == CmdCode.READ_FLASH_MP550:
|
||||
if rx_data.size() < (status_len + 15):
|
||||
return false
|
||||
flash_len = rx_data.decode_u16(status_len + 13)
|
||||
flash_data = rx_data.slice(status_len + 15)
|
||||
return true
|
||||
|
||||
Reference in New Issue
Block a user