mirror of
https://github.com/github/codeql.git
synced 2026-04-30 03:05:15 +02:00
Merge from master and resolve conflicts
This commit is contained in:
@@ -9,12 +9,12 @@ import cpp
|
||||
import semmle.code.cpp.controlflow.SSA
|
||||
|
||||
/*
|
||||
* Count of number of uses of a LocalScopeVariable where no corresponding SSA definition exists,
|
||||
* Count of number of uses of a StackVariable where no corresponding SSA definition exists,
|
||||
* but at least one SSA definition for that variable can reach that use.
|
||||
* Should always be zero *regardless* of the input
|
||||
*/
|
||||
|
||||
select count(LocalScopeVariable v, Expr use |
|
||||
select count(StackVariable v, Expr use |
|
||||
exists(SsaDefinition def, BasicBlock db, BasicBlock ub |
|
||||
def.getAUse(v) = use and db.contains(def.getDefinition()) and ub.contains(use)
|
||||
|
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.controlflow.SSA
|
||||
|
||||
from SsaDefinition def, LocalScopeVariable var, Expr use
|
||||
from SsaDefinition def, StackVariable var, Expr use
|
||||
where def.getAUse(var) = use
|
||||
select def, def.toString(var), use
|
||||
|
||||
@@ -12,7 +12,7 @@ import semmle.code.cpp.controlflow.SSA
|
||||
* Should always be zero *regardless* of the input
|
||||
*/
|
||||
|
||||
select count(SsaDefinition d, LocalScopeVariable v, Expr u |
|
||||
select count(SsaDefinition d, StackVariable v, Expr u |
|
||||
d.getAUse(v) = u and
|
||||
not exists(BasicBlock bd, BasicBlock bu |
|
||||
bd.contains(mkElement(d).(ControlFlowNode)) and bu.contains(u)
|
||||
|
||||
@@ -8,7 +8,7 @@ import cpp
|
||||
import semmle.code.cpp.controlflow.SSA
|
||||
import semmle.code.cpp.controlflow.Guards
|
||||
|
||||
from GuardedSsa def, LocalScopeVariable var, Expr other, int k, int start, int end, string op
|
||||
from GuardedSsa def, StackVariable var, Expr other, int k, int start, int end, string op
|
||||
where
|
||||
exists(BasicBlock block |
|
||||
def.isLt(var, other, k, block, true) and op = "<"
|
||||
|
||||
@@ -8,8 +8,7 @@ import cpp
|
||||
import semmle.code.cpp.controlflow.SSA
|
||||
|
||||
from
|
||||
File file, SsaDefinition phi, LocalScopeVariable var, SsaDefinition input, int philine,
|
||||
int inputline
|
||||
File file, SsaDefinition phi, StackVariable var, SsaDefinition input, int philine, int inputline
|
||||
where
|
||||
phi.getAPhiInput(var) = input and
|
||||
file = phi.getLocation().getFile() and
|
||||
|
||||
@@ -12,7 +12,7 @@ import semmle.code.cpp.controlflow.SSA
|
||||
* Should always be zero *regardless* of the input
|
||||
*/
|
||||
|
||||
select count(SsaDefinition d1, SsaDefinition d2, Expr u, LocalScopeVariable v |
|
||||
select count(SsaDefinition d1, SsaDefinition d2, Expr u, StackVariable v |
|
||||
d1.getAUse(v) = u and
|
||||
d2.getAUse(v) = u and
|
||||
not d1 = d2
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.controlflow.SSA
|
||||
|
||||
from SsaDefinition def, LocalScopeVariable var, Expr use
|
||||
from SsaDefinition def, StackVariable var, Expr use
|
||||
where def.getAUse(var) = use
|
||||
select def, def.toString(var), use
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import semmle.code.cpp.dataflow.internal.FlowVar
|
||||
|
||||
from LocalScopeVariable var, VariableAccess va
|
||||
from Variable var, VariableAccess va
|
||||
where FlowVar_internal::mayBeUsedUninitialized(var, va)
|
||||
select var, va
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import semmle.code.cpp.dataflow.internal.FlowVar
|
||||
|
||||
from LocalScopeVariable var, VariableAccess va
|
||||
from Variable var, VariableAccess va
|
||||
where FlowVar_internal::mayBeUsedUninitialized(var, va)
|
||||
select var, va
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import cpp
|
||||
|
||||
from LocalScopeVariable v, ControlFlowNode d
|
||||
from StackVariable v, ControlFlowNode d
|
||||
where definition(v, d)
|
||||
select v, d
|
||||
|
||||
@@ -1,24 +1,22 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.controlflow.LocalScopeVariableReachability
|
||||
import semmle.code.cpp.controlflow.StackVariableReachability
|
||||
|
||||
// Test that def/use algorithm is an instance of LocalScopeVariableReachability
|
||||
class MyDefOrUse extends LocalScopeVariableReachability {
|
||||
// Test that def/use algorithm is an instance of StackVariableReachability
|
||||
class MyDefOrUse extends StackVariableReachability {
|
||||
MyDefOrUse() { this = "MyDefUse" }
|
||||
|
||||
override predicate isSource(ControlFlowNode node, LocalScopeVariable v) { definition(v, node) }
|
||||
override predicate isSource(ControlFlowNode node, StackVariable v) { definition(v, node) }
|
||||
|
||||
override predicate isSink(ControlFlowNode node, LocalScopeVariable v) { useOfVar(v, node) }
|
||||
override predicate isSink(ControlFlowNode node, StackVariable v) { useOfVar(v, node) }
|
||||
|
||||
override predicate isBarrier(ControlFlowNode node, LocalScopeVariable v) {
|
||||
definitionBarrier(v, node)
|
||||
}
|
||||
override predicate isBarrier(ControlFlowNode node, StackVariable v) { definitionBarrier(v, node) }
|
||||
}
|
||||
|
||||
predicate equivalence() {
|
||||
forall(LocalScopeVariable v, Expr first, Expr second | definitionUsePair(v, first, second) |
|
||||
forall(StackVariable v, Expr first, Expr second | definitionUsePair(v, first, second) |
|
||||
exists(MyDefOrUse x | x.reaches(first, v, second))
|
||||
) and
|
||||
forall(LocalScopeVariable v, Expr first, Expr second |
|
||||
forall(StackVariable v, Expr first, Expr second |
|
||||
exists(MyDefOrUse x | x.reaches(first, v, second))
|
||||
|
|
||||
definitionUsePair(v, first, second)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import cpp
|
||||
|
||||
from LocalScopeVariable v, ControlFlowNode def, Expr e
|
||||
from StackVariable v, ControlFlowNode def, Expr e
|
||||
where exprDefinition(v, def, e)
|
||||
select v, def, e
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import cpp
|
||||
|
||||
from LocalScopeVariable v, VariableAccess use
|
||||
from StackVariable v, VariableAccess use
|
||||
where useOfVar(v, use)
|
||||
select v, use
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import cpp
|
||||
|
||||
from LocalScopeVariable v, VariableAccess use
|
||||
from StackVariable v, VariableAccess use
|
||||
where
|
||||
useOfVarActual(v, use) and
|
||||
// Also check that `useOfVarActual` is a subset of `useOfVar`; if not
|
||||
// the query will not return any results
|
||||
forall(LocalScopeVariable v0, VariableAccess use0 | useOfVarActual(v0, use0) | useOfVar(v0, use0))
|
||||
forall(StackVariable v0, VariableAccess use0 | useOfVarActual(v0, use0) | useOfVar(v0, use0))
|
||||
select v, use
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
import cpp
|
||||
|
||||
from LocalScopeVariable v, ControlFlowNode def, Expr e
|
||||
from StackVariable v, ControlFlowNode def, Expr e
|
||||
where exprDefinition(v, def, e)
|
||||
select v, def, e
|
||||
|
||||
@@ -10,12 +10,12 @@ import cpp
|
||||
import semmle.code.cpp.rangeanalysis.RangeSSA
|
||||
|
||||
/*
|
||||
* Count of number of uses of a LocalScopeVariable where no corresponding SSA definition exists,
|
||||
* Count of number of uses of a StackVariable where no corresponding SSA definition exists,
|
||||
* but at least one SSA definition for that variable can reach that use.
|
||||
* Should always be zero *regardless* of the input
|
||||
*/
|
||||
|
||||
select count(LocalScopeVariable v, Expr use |
|
||||
select count(StackVariable v, Expr use |
|
||||
exists(RangeSsaDefinition def, BasicBlock db, BasicBlock ub |
|
||||
def.getAUse(v) = use and db.contains(def.getDefinition()) and ub.contains(use)
|
||||
|
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.rangeanalysis.RangeSSA
|
||||
|
||||
from RangeSsaDefinition def, LocalScopeVariable var, Expr use
|
||||
from RangeSsaDefinition def, StackVariable var, Expr use
|
||||
where def.getAUse(var) = use
|
||||
select def, def.toString(var), use
|
||||
|
||||
@@ -12,7 +12,7 @@ import semmle.code.cpp.rangeanalysis.RangeSSA
|
||||
* Should always be zero *regardless* of the input
|
||||
*/
|
||||
|
||||
select count(RangeSsaDefinition d, LocalScopeVariable v, Expr u |
|
||||
select count(RangeSsaDefinition d, StackVariable v, Expr u |
|
||||
d.getAUse(v) = u and
|
||||
not exists(BasicBlock bd, BasicBlock bu |
|
||||
bd.contains(mkElement(d).(ControlFlowNode)) and bu.contains(u)
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.rangeanalysis.RangeSSA
|
||||
|
||||
from
|
||||
RangeSsaDefinition phi, LocalScopeVariable var, RangeSsaDefinition input, int philine,
|
||||
int inputline
|
||||
from RangeSsaDefinition phi, StackVariable var, RangeSsaDefinition input, int philine, int inputline
|
||||
where
|
||||
phi.getAPhiInput(var) = input and
|
||||
philine = phi.getLocation().getStartLine() and
|
||||
|
||||
@@ -12,7 +12,7 @@ import semmle.code.cpp.rangeanalysis.RangeSSA
|
||||
* Should always be zero *regardless* of the input
|
||||
*/
|
||||
|
||||
select count(RangeSsaDefinition d1, RangeSsaDefinition d2, Expr u, LocalScopeVariable v |
|
||||
select count(RangeSsaDefinition d1, RangeSsaDefinition d2, Expr u, StackVariable v |
|
||||
d1.getAUse(v) = u and
|
||||
d2.getAUse(v) = u and
|
||||
not d1 = d2
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,13 +2,9 @@
|
||||
| file://:0:0:0:0 | gp_offset | file://:0:0:0:0 | unsigned int | Field | | |
|
||||
| file://:0:0:0:0 | overflow_arg_area | file://:0:0:0:0 | void * | Field | | |
|
||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && | SemanticStackVariable | | |
|
||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && | StackVariable | | |
|
||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | address && | SemanticStackVariable | | |
|
||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | address && | StackVariable | | |
|
||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | SemanticStackVariable | | |
|
||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | StackVariable | | |
|
||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const address & | SemanticStackVariable | | |
|
||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const address & | StackVariable | | |
|
||||
| file://:0:0:0:0 | reg_save_area | file://:0:0:0:0 | void * | Field | | |
|
||||
| variables.cpp:1:12:1:12 | i | file://:0:0:0:0 | int | GlobalVariable | | |
|
||||
| variables.cpp:2:12:2:12 | i | file://:0:0:0:0 | int | GlobalVariable | | |
|
||||
@@ -38,11 +34,10 @@
|
||||
| variables.cpp:37:6:37:8 | ap3 | file://:0:0:0:0 | int * | GlobalVariable | | |
|
||||
| variables.cpp:41:7:41:11 | local | file://:0:0:0:0 | char[] | LocalVariable | | |
|
||||
| variables.cpp:41:7:41:11 | local | file://:0:0:0:0 | char[] | SemanticStackVariable | | |
|
||||
| variables.cpp:41:7:41:11 | local | file://:0:0:0:0 | char[] | StackVariable | | |
|
||||
| variables.cpp:43:14:43:18 | local | file://:0:0:0:0 | int | LocalVariable | | static |
|
||||
| variables.cpp:43:14:43:18 | local | file://:0:0:0:0 | int | StackVariable | | static |
|
||||
| variables.cpp:48:9:48:12 | name | file://:0:0:0:0 | char * | Field | | |
|
||||
| variables.cpp:49:12:49:17 | number | file://:0:0:0:0 | long | Field | | |
|
||||
| variables.cpp:50:9:50:14 | street | file://:0:0:0:0 | char * | Field | | |
|
||||
| variables.cpp:51:9:51:12 | town | file://:0:0:0:0 | char * | Field | | |
|
||||
| variables.cpp:52:16:52:22 | country | file://:0:0:0:0 | char * | MemberVariable | | static |
|
||||
| variables.cpp:56:14:56:29 | externInFunction | file://:0:0:0:0 | int | GlobalVariable | | |
|
||||
|
||||
@@ -51,3 +51,7 @@ struct address {
|
||||
char* town;
|
||||
static char* country;
|
||||
};
|
||||
|
||||
void hasExtern() {
|
||||
extern int externInFunction;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user