mcsParser: _bit_length/buffer size / addr sanity check

This commit is contained in:
Gwenhael Goavec-Merou 2025-03-17 07:19:19 +01:00
parent f86037231a
commit 2ee72c0556
1 changed files with 9 additions and 0 deletions

View File

@ -74,6 +74,9 @@ int McsParser::parse()
case 0:
loc_addr = _base_addr + addr;
ptr = (char *)&str[DATA_BASE];
if ((loc_addr + byteLen) > _bit_data.size())
_bit_data.resize(loc_addr + byteLen);
for (int i = 0; i < byteLen; i++, ptr += 2) {
sscanf(ptr, "%2hx", &tmp);
_bit_data[loc_addr + i] = (_reverseOrder)? reverseByte(tmp):tmp;
@ -82,11 +85,17 @@ int McsParser::parse()
_bit_length += (byteLen * 8);
break;
case 1:
if (_bit_data.size()*8 != _bit_length)
_bit_length = _bit_data.size() * 8;
return EXIT_SUCCESS;
break;
case 4:
sscanf((char*)&str[DATA_BASE], "%4x", &loc_addr);
_base_addr = (loc_addr << 16);
if (_base_addr > _bit_data.size())
_bit_data.resize(_base_addr);
if (_base_addr * 8 > _bit_length)
_bit_length = _base_addr * 8;
sum += (loc_addr & 0xff) + ((loc_addr >> 8) & 0xff);
break;
default: