mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 02:09:44 +02:00
GP-5869 Fix for some out of bounds array indices and shift amounts
This commit is contained in:
parent
7426d4b685
commit
943ccd322d
17 changed files with 98 additions and 50 deletions
|
@ -610,11 +610,17 @@ void Funcdata::setHighLevel(void)
|
|||
/// Properties like boolean flags and \e consume bits are copied as appropriate.
|
||||
/// \param vn is the existing Varnode
|
||||
/// \param newVn is the new Varnode that has its properties set
|
||||
/// \param lsbOffset is the significance offset of the new Varnode within the exising
|
||||
/// \param lsbOffset is the significance offset of the new Varnode within the existing Varnode
|
||||
void Funcdata::transferVarnodeProperties(Varnode *vn,Varnode *newVn,int4 lsbOffset)
|
||||
|
||||
{
|
||||
uintb newConsume = (vn->getConsume() >> 8*lsbOffset) & calc_mask(newVn->getSize());
|
||||
uintb newConsume = ~((uintb)0); // Make sure any bits shifted in above the precision of Varnode::consume are set
|
||||
if (lsbOffset < sizeof(uintb)) {
|
||||
uintb fillBits = 0;
|
||||
if (lsbOffset != 0)
|
||||
fillBits = newConsume << 8*(sizeof(uintb) - lsbOffset);
|
||||
newConsume = ((vn->getConsume() >> 8*lsbOffset) | fillBits) & calc_mask(newVn->getSize());
|
||||
}
|
||||
|
||||
uint4 vnFlags = vn->getFlags() & (Varnode::directwrite|Varnode::addrforce);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue