Better handling of IfExp (ternary) #179
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Reduces false positives.
As an example:
result = "a" if TAINT else "c"
In AST, the assignment value is
IfExp(test=TAINT, body="a", orelse="c")
.Even though
TAINT
is inside the assignment ofresult
, it can'tactually taint
result
as it is part of the boolean test expression.Previously,
result
would have been tainted, which was a falsepositive.
We don't want to completely ignore the test though in case it contains a
sink function.
Therefore, if the test contains expressions we transform it as so:
result = "a" if b(c) + 2 else "d"
to the multi line:
This way if
b
is a sink andc
is tainted we see a vulnerability, buteven if
c
is tainted we don't taintresult
.