diff --git a/scripts/prd.gd b/scripts/prd.gd index 4ad59d2..d09a66f 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -323,7 +323,5 @@ func update_fs_state(ecms): ## Проверяет ниличие директории, если их нет, создаёт func check_dir(): var dir = DirAccess.open(yemsconsts.emsg_files_folder) - if dir: - return - else: - DirAccess.make_dir_absolute(yemsconsts.emsg_files_folder) + if dir: return + else: DirAccess.make_dir_absolute(yemsconsts.emsg_files_folder) diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 8476f95..75665a2 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -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