mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 10:19:23 +02:00
GP-2082 Guarantee only a single switch edge is labeled default
This commit is contained in:
parent
f5a5bbf7fc
commit
987b524193
2 changed files with 13 additions and 1 deletions
|
@ -301,6 +301,18 @@ void FlowBlock::setGotoBranch(int4 i)
|
|||
outofthis[i].point->flags |= f_interior_gotoin;
|
||||
}
|
||||
|
||||
/// The switch can have exactly 1 default edge, so we make sure other edges are not marked.
|
||||
/// \param pos is the index of the \e out edge that should be the default
|
||||
void FlowBlock::setDefaultSwitch(int4 pos)
|
||||
|
||||
{
|
||||
for(int4 i=0;i<outofthis.size();++i) {
|
||||
if (isDefaultBranch(i))
|
||||
clearOutEdgeFlag(i, f_defaultswitch_edge); // Clear any previous flag
|
||||
}
|
||||
setOutEdgeFlag(pos,f_defaultswitch_edge);
|
||||
}
|
||||
|
||||
/// \b return \b true if block is the target of a jump
|
||||
bool FlowBlock::isJumpTarget(void) const
|
||||
|
||||
|
|
|
@ -190,7 +190,7 @@ public:
|
|||
void setVisitCount(int4 i) { visitcount = i; } ///< Set the number of times this block has been visited
|
||||
int4 getVisitCount(void) const { return visitcount; } ///< Get the count of visits
|
||||
void setGotoBranch(int4 i); ///< Mark a \e goto branch
|
||||
void setDefaultSwitch(int4 i) { setOutEdgeFlag(i,f_defaultswitch_edge); } ///< Mark an edge as the switch default
|
||||
void setDefaultSwitch(int4 pos); ///< Mark an edge as the switch default
|
||||
bool isMark(void) const { return ((flags&f_mark)!=0); } ///< Return \b true if \b this block has been marked
|
||||
void setMark(void) { flags |= f_mark; } ///< Mark \b this block
|
||||
void clearMark(void) { flags &= ~f_mark; } ///< Clear any mark on \b this block
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue