Skip to content

Commit cccf981

Browse files
Merge commit '405c43e' into michaelrfairhurst/bisect-performance-issue-pre-2.22.4
2 parents 85e105a + 405c43e commit cccf981

71 files changed

Lines changed: 667 additions & 136 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

c/cert/src/rules/CON30-C/CleanUpThreadSpecificStorage.ql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919

2020
import cpp
2121
import codingstandards.c.cert
22-
import codingstandards.cpp.Concurrency
23-
import semmle.code.cpp.dataflow.DataFlow
22+
import codingstandards.cpp.ConcurrencyNew
23+
import semmle.code.cpp.dataflow.new.DataFlow
2424

2525
module TssCreateToTssDeleteConfig implements DataFlow::ConfigSig {
2626
predicate isSource(DataFlow::Node node) {

c/cert/src/rules/CON33-C/RaceConditionsWhenUsingLibraryFunctions.ql

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

1919
import cpp
2020
import codingstandards.c.cert
21-
import codingstandards.cpp.Concurrency
21+
import codingstandards.cpp.ConcurrencyNew
2222

2323
from ThreadedCFN node
2424
where

c/cert/src/rules/CON34-C/AppropriateThreadObjectStorageDurations.ql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import cpp
2121
import codingstandards.c.cert
2222
import codingstandards.c.Objects
23-
import codingstandards.cpp.Concurrency
24-
import semmle.code.cpp.dataflow.DataFlow
23+
import codingstandards.cpp.ConcurrencyNew
24+
import semmle.code.cpp.dataflow.new.DataFlow
2525
import semmle.code.cpp.commons.Alloc
2626

2727
from C11ThreadCreateCall tcc, Expr arg
@@ -53,6 +53,7 @@ where
5353
not exists(TSSSetFunctionCall tss, DataFlow::Node src |
5454
// there should be dataflow from somewhere (the same somewhere)
5555
// into each of the first arguments
56+
exists(Expr e | e = src.asDefinition() or e = src.asDefiningArgument()) and
5657
DataFlow::localFlow(src, DataFlow::exprNode(tsg.getArgument(0))) and
5758
DataFlow::localFlow(src, DataFlow::exprNode(tss.getArgument(0)))
5859
)

c/cert/src/rules/CON34-C/ThreadObjectStorageDurationsNotInitialized.ql

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
import cpp
2222
import codingstandards.c.cert
23-
import codingstandards.cpp.Concurrency
24-
import semmle.code.cpp.dataflow.DataFlow
23+
import codingstandards.cpp.ConcurrencyNew
24+
import semmle.code.cpp.dataflow.new.DataFlow
2525

2626
from TSSGetFunctionCall tsg, ThreadedFunction tf
2727
where
@@ -31,7 +31,8 @@ where
3131
// however, there does not exist a proper sequencing.
3232
not exists(TSSSetFunctionCall tss, DataFlow::Node src |
3333
// there should be dataflow from somewhere (the same somewhere)
34-
// into each of the first arguments
34+
// into each of the first argument
35+
exists(Expr e | e = src.asDefinition() or e = src.asDefiningArgument()) and
3536
DataFlow::localFlow(src, DataFlow::exprNode(tsg.getArgument(0))) and
3637
DataFlow::localFlow(src, DataFlow::exprNode(tss.getArgument(0)))
3738
)

c/cert/src/rules/CON37-C/DoNotCallSignalInMultithreadedProgram.ql

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

2020
import cpp
2121
import codingstandards.c.cert
22-
import codingstandards.cpp.Concurrency
22+
import codingstandards.cpp.ConcurrencyNew
2323

2424
from FunctionCall fc
2525
// This should only be applied in the context of a multi-threaded program (since

c/cert/src/rules/CON40-C/AtomicVariableTwiceInExpression.ql

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

2020
import cpp
2121
import codingstandards.c.cert
22-
import codingstandards.cpp.Concurrency
22+
import codingstandards.cpp.ConcurrencyNew
2323

2424
from MacroInvocation mi, Variable v, Locatable whereFound
2525
where

c/cert/src/rules/CON41-C/WrapFunctionsThatCanFailSpuriouslyInLoop.ql

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

2020
import cpp
2121
import codingstandards.c.cert
22-
import codingstandards.cpp.Concurrency
22+
import codingstandards.cpp.ConcurrencyNew
2323

2424
from AtomicCompareExchange ace
2525
where

c/cert/src/rules/FIO37-C/SuccessfulFgetsOrFgetwsMayReturnAnEmptyString.ql

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

2424
/*
2525
* CFG nodes that follows a successful call to `fgets`

c/cert/src/rules/FIO40-C/ResetStringsOnFgetsOrFgetwsFailure.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import cpp
2121
import codingstandards.cpp.FgetsErrorManagement
2222
import codingstandards.cpp.Dereferenced
2323
import codingstandards.c.cert
24-
import semmle.code.cpp.dataflow.DataFlow
24+
import semmle.code.cpp.dataflow.new.DataFlow
2525

2626
/*
2727
* Models calls to `memcpy` `strcpy` `strncpy` and their wrappers

c/cert/src/rules/MSC33-C/DoNotPassInvalidDataToTheAsctimeFunction.ql

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import cpp
2121
import codingstandards.c.cert
22-
import semmle.code.cpp.dataflow.DataFlow
22+
import semmle.code.cpp.dataflow.new.DataFlow
2323

2424
/**
2525
* The argument of a call to `asctime`
@@ -29,6 +29,8 @@ class AsctimeArg extends Expr {
2929
this =
3030
any(FunctionCall f | f.getTarget().hasGlobalName(["asctime", "asctime_r"])).getArgument(0)
3131
}
32+
33+
DataFlow::Node asSink() { this = result.asIndirectExpr() }
3234
}
3335

3436
/**
@@ -37,20 +39,20 @@ class AsctimeArg extends Expr {
3739
*/
3840
module TmStructSafeConfig implements DataFlow::ConfigSig {
3941
predicate isSource(DataFlow::Node src) {
40-
src.asExpr()
42+
src.asIndirectExpr()
4143
.(FunctionCall)
4244
.getTarget()
4345
.hasGlobalName(["localtime", "localtime_r", "localtime_s", "gmtime", "gmtime_r", "gmtime_s"])
4446
}
4547

46-
predicate isSink(DataFlow::Node sink) { sink.asExpr() instanceof AsctimeArg }
48+
predicate isSink(DataFlow::Node sink) { exists(AsctimeArg arg | arg.asSink() = sink) }
4749
}
4850

4951
module TmStructSafeFlow = DataFlow::Global<TmStructSafeConfig>;
5052

5153
from AsctimeArg fc
5254
where
5355
not isExcluded(fc, Contracts7Package::doNotPassInvalidDataToTheAsctimeFunctionQuery()) and
54-
not TmStructSafeFlow::flowToExpr(fc)
56+
not TmStructSafeFlow::flowTo(fc.asSink())
5557
select fc,
5658
"The function `asctime` and `asctime_r` should be discouraged. Unsanitized input can overflow the output buffer."

0 commit comments

Comments
 (0)