Fix Thumb disassembler memory corruption with IT sequence (issue #385)

This commit is contained in:
Nikolay Igotti 2015-06-03 15:38:45 +02:00
parent b1d12e50d4
commit 1bcb7d6cc6
1 changed files with 5 additions and 2 deletions

View File

@ -44,6 +44,10 @@
static bool ITStatus_push_back(ARM_ITStatus *it, char v)
{
if (it->size >= sizeof(it->ITStates)) {
// TODO: consider warning user.
it->size = 0;
}
it->ITStates[it->size] = v;
it->size++;
@ -730,8 +734,7 @@ static DecodeStatus _Thumb_getInstruction(cs_struct *ud, MCInst *MI, const uint8
// Nested IT blocks are UNPREDICTABLE. Must be checked before we add
// the Thumb predicate.
if (MCInst_getOpcode(MI) == ARM_t2IT && ITStatus_instrInITBlock(&(ud->ITBlock)))
result = MCDisassembler_SoftFail;
return MCDisassembler_SoftFail;
Check(&result, AddThumbPredicate(ud, MI));
// If we find an IT instruction, we need to parse its condition