Skip to content

Commit 4c420c5

Browse files
committed
Java: Switch from ssaDefAssigns/ssaDefInitializesParam to ssaDefHasSource.
1 parent 1ded4df commit 4c420c5

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,27 @@ private predicate deadcode(Expr e) {
2626
module SsaFlow {
2727
module Impl = SsaImpl::DataFlowIntegration;
2828

29+
private predicate ssaDefAssigns(SsaExplicitUpdate def, Expr value) {
30+
exists(VariableUpdate upd | upd = def.getDefiningExpr() |
31+
value = upd.(VariableAssign).getSource() or
32+
value = upd.(AssignOp) or
33+
value = upd.(RecordBindingVariableExpr)
34+
)
35+
}
36+
2937
Impl::Node asNode(Node n) {
3038
n = TSsaNode(result)
3139
or
3240
result.(Impl::ExprNode).getExpr() = n.asExpr()
3341
or
3442
result.(Impl::ExprPostUpdateNode).getExpr() = n.(PostUpdateNode).getPreUpdateNode().asExpr()
3543
or
36-
TExplicitParameterNode(result.(Impl::ParameterNode).getParameter()) = n
44+
exists(Parameter p |
45+
n = TExplicitParameterNode(p) and
46+
result.(Impl::WriteDefSourceNode).getDefinition().(SsaImplicitInit).isParameterDefinition(p)
47+
)
48+
or
49+
ssaDefAssigns(result.(Impl::WriteDefSourceNode).getDefinition(), n.asExpr())
3750
}
3851

3952
predicate localFlowStep(SsaSourceVariable v, Node nodeFrom, Node nodeTo, boolean isUseStep) {

java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -649,21 +649,13 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
649649

650650
class Parameter = J::Parameter;
651651

652-
predicate ssaDefAssigns(Impl::WriteDefinition def, Expr value) {
653-
exists(VariableUpdate upd | upd = def.(SsaExplicitUpdate).getDefiningExpr() |
654-
value = upd.(VariableAssign).getSource() or
655-
value = upd.(AssignOp) or
656-
value = upd.(RecordBindingVariableExpr)
657-
)
652+
predicate ssaDefHasSource(WriteDefinition def) {
653+
def instanceof SsaExplicitUpdate or def.(SsaImplicitInit).isParameterDefinition(_)
658654
}
659655

660-
predicate ssaDefInitializesParam(Impl::WriteDefinition def, Parameter p) {
661-
def.(SsaImplicitInit).getSourceVariable() =
662-
any(SsaSourceVariable v |
663-
v.getVariable() = p and
664-
v.getEnclosingCallable() = p.getCallable()
665-
)
666-
}
656+
predicate ssaDefAssigns(Impl::WriteDefinition def, Expr value) { none() }
657+
658+
predicate ssaDefInitializesParam(Impl::WriteDefinition def, Parameter p) { none() }
667659

668660
predicate allowFlowIntoUncertainDef(UncertainWriteDefinition def) {
669661
def instanceof SsaUncertainImplicitUpdate

0 commit comments

Comments
 (0)