Skip to content

Commit 1c222ae

Browse files
authored
Merge pull request #927 from jketema/jketema/dataflow-2
Convert more dataflow queries to the new dataflow library
2 parents 405c43e + 88ff741 commit 1c222ae

File tree

35 files changed

+152
-156
lines changed

35 files changed

+152
-156
lines changed

c/cert/src/rules/ARR32-C/VariableLengthArraySizeNotInValidRange.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import cpp
2121
import codingstandards.c.cert
2222
import codingstandards.cpp.Overflow
23-
import semmle.code.cpp.dataflow.TaintTracking
23+
import semmle.code.cpp.dataflow.new.TaintTracking
2424

2525
/**
2626
* Gets the maximum size (in bytes) a variable-length array

c/cert/src/rules/DCL30-C/AppropriateStorageDurationsFunctionReturn.ql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import cpp
2020
import codingstandards.c.cert
2121
import codingstandards.c.Objects
22-
import semmle.code.cpp.dataflow.DataFlow
22+
import semmle.code.cpp.dataflow.new.DataFlow
2323

2424
class Source extends Expr {
2525
ObjectIdentity rootObject;
@@ -34,7 +34,7 @@ class Sink extends DataFlow::Node {
3434
Sink() {
3535
//output parameter
3636
exists(Parameter f |
37-
f.getAnAccess() = this.(DataFlow::PostUpdateNode).getPreUpdateNode().asExpr() and
37+
this.isFinalValueOfParameter(f) and
3838
f.getUnderlyingType() instanceof PointerType
3939
)
4040
or

c/cert/src/rules/ERR32-C/DoNotRelyOnIndeterminateValuesOfErrno.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import codingstandards.c.cert
2020
import codingstandards.c.Errno
2121
import codingstandards.c.Signal
2222
import semmle.code.cpp.controlflow.Guards
23-
import semmle.code.cpp.dataflow.DataFlow
23+
import semmle.code.cpp.dataflow.new.DataFlow
2424

2525
/**
2626
* A check on `signal` call return value

c/cert/src/rules/ERR33-C/DetectAndHandleStandardLibraryErrors.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import cpp
2020
import codingstandards.c.cert
2121
import semmle.code.cpp.commons.NULL
2222
import codingstandards.cpp.ReadErrorsAndEOF
23-
import semmle.code.cpp.dataflow.DataFlow
23+
import semmle.code.cpp.dataflow.new.DataFlow
2424

2525
ComparisonOperation getAValidComparison(string spec) {
2626
spec = "=0" and result.(EqualityOperation).getAnOperand().getValue() = "0"

c/cert/src/rules/EXP37-C/DoNotCallFunctionPointerWithIncompatibleType.ql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import cpp
2020
import codingstandards.c.cert
21-
import semmle.code.cpp.dataflow.DataFlow
21+
import semmle.code.cpp.dataflow.new.DataFlow
2222
import SuspectFunctionPointerToCallFlow::PathGraph
2323

2424
/**
@@ -61,7 +61,8 @@ where
6161
not isExcluded(src.getNode().asExpr(),
6262
ExpressionsPackage::doNotCallFunctionPointerWithIncompatibleTypeQuery()) and
6363
access = src.getNode().asExpr() and
64-
SuspectFunctionPointerToCallFlow::flowPath(src, sink)
64+
SuspectFunctionPointerToCallFlow::flowPath(src, sink) and
65+
not access.getType() = sink.getNode().asExpr().getFullyConverted().getType()
6566
select src, src, sink,
6667
"Incompatible function $@ assigned to function pointer is eventually called through the pointer.",
6768
access.getTarget(), access.getTarget().getName()

c/cert/src/rules/EXP40-C/DoNotModifyConstantObjects.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import cpp
1919
import codingstandards.c.cert
20-
import semmle.code.cpp.dataflow.DataFlow
20+
import semmle.code.cpp.dataflow.new.DataFlow
2121
import CastFlow::PathGraph
2222
import codingstandards.cpp.SideEffect
2323

c/cert/src/rules/FIO44-C/OnlyUseValuesForFsetposThatAreReturnedFromFgetpos.ql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import cpp
1919
import codingstandards.c.cert
20-
import semmle.code.cpp.dataflow.DataFlow
20+
import semmle.code.cpp.dataflow.new.DataFlow
2121

2222
class FgetposCall extends FunctionCall {
2323
FgetposCall() { this.getTarget().hasGlobalOrStdName("fgetpos") }
@@ -30,12 +30,12 @@ class FsetposCall extends FunctionCall {
3030
module FposDFConfig implements DataFlow::ConfigSig {
3131
predicate isSource(DataFlow::Node source) {
3232
// source must be the second parameter of a FgetposCall call
33-
source = DataFlow::definitionByReferenceNodeFromArgument(any(FgetposCall c).getArgument(1))
33+
source.asDefiningArgument() = any(FgetposCall c).getArgument(1)
3434
}
3535

3636
predicate isSink(DataFlow::Node sink) {
3737
// sink must be the second parameter of a FsetposCall call
38-
sink.asExpr() = any(FsetposCall c).getArgument(1)
38+
sink.asIndirectExpr() = any(FsetposCall c).getArgument(1)
3939
}
4040
}
4141

@@ -45,6 +45,6 @@ from FsetposCall fsetpos
4545
where
4646
not isExcluded(fsetpos.getArgument(1),
4747
IO2Package::onlyUseValuesForFsetposThatAreReturnedFromFgetposQuery()) and
48-
not FposDFFlow::flowToExpr(fsetpos.getArgument(1))
48+
not exists(DataFlow::Node n | n.asIndirectExpr() = fsetpos.getArgument(1) | FposDFFlow::flowTo(n))
4949
select fsetpos.getArgument(1),
5050
"The position argument of a call to `fsetpos()` should be obtained from a call to `fgetpos()`."

c/cert/src/rules/MEM35-C/InsufficientMemoryAllocatedForObject.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import cpp
2121
import codingstandards.c.cert
2222
import codingstandards.cpp.Overflow
2323
import semmle.code.cpp.controlflow.Guards
24-
import semmle.code.cpp.dataflow.TaintTracking
24+
import semmle.code.cpp.dataflow.new.TaintTracking
2525
import semmle.code.cpp.models.Models
2626

2727
/**

c/cert/src/rules/MEM36-C/DoNotModifyAlignmentOfMemoryWithRealloc.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import cpp
2121
import codingstandards.c.cert
2222
import codingstandards.cpp.Alignment
23-
import semmle.code.cpp.dataflow.DataFlow
23+
import semmle.code.cpp.dataflow.new.DataFlow
2424
import AlignedAllocToReallocFlow::PathGraph
2525

2626
int getStatedValue(Expr e) {

c/cert/src/rules/SIG30-C/CallOnlyAsyncSafeFunctionsWithinSignalHandlers.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import cpp
2020
import codingstandards.c.cert
2121
import codingstandards.c.Signal
22-
import semmle.code.cpp.dataflow.DataFlow
22+
import semmle.code.cpp.dataflow.new.DataFlow
2323

2424
/**
2525
* Does not access an external variable except

0 commit comments

Comments
 (0)