mcsParser: _bit_length/buffer size / addr sanity check
This commit is contained in:
parent
f86037231a
commit
2ee72c0556
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue