MistypedExponentiation: Add a heuristic to reduce FPs

This commit is contained in:
Sauyon Lee
2020-03-12 07:38:30 -07:00
parent b64a43f578
commit 6e681f829b
2 changed files with 6 additions and 0 deletions

View File

@@ -32,6 +32,10 @@ where
exists(Ident id | id = xe.getRightOperand() |
id.getName().regexpMatch("(?i)_*((exp(onent)?)|pow(er)?)")
)
) and
// exclude the right hand side of assignments to variables that have "mask" in their name
not exists(Assignment assign | assign.getRhs() = xe.getParent*() |
assign.getLhs().getAChild*().(Ident).getName().regexpMatch(".*(^m|M)ask($|\\p{Lu}).*")
)
select xe,
"This expression uses the bitwise exclusive-or operator when exponentiation was likely meant."

View File

@@ -20,6 +20,8 @@ func main() {
fmt.Println(253 ^ expectingResponse) // OK
fmt.Println(2 ^ power) // Not OK
mask := (((1 << 10) - 1) ^ 7) // OK
// This is not ok, but isn't detected because the multiplication binds tighter
// than the xor operator and so the query doesn't see a constant on the left
// hand side of ^.