Jonas Jensen
b13535ac7d
C++: Implement DataFlow::BarrierGuard for AST+IR
...
The change note is copied from the Java change note.
2019-10-28 16:22:23 +01:00
Jonas Jensen
5d7a0b8dd5
Merge remote-tracking branch 'upstream/master' into dataflow-ref-parameter
...
I've accepted the new test output, which shows that this branch fixes
two false negatives in the test cases from #2088 .
2019-10-08 13:09:20 +02:00
Jonas Jensen
19f642fc8d
Merge commit '7434702' into dataflow-ref-parameter
...
This merges #1735 into this branch to resolve the semantic merge
conflicts between them.
2019-10-08 12:55:47 +02:00
Geoffrey White
050d99fa87
CPP: Add test cases.
2019-10-04 17:44:27 +01:00
Jonas Jensen
7c319efb8b
C++: Data flow through reference parameters
2019-10-01 10:43:49 +02:00
Jonas Jensen
b2df18ab78
C++: Document tests better
...
This addresses PR comments by @rdmarsh2.
2019-09-17 13:17:25 +02:00
Jonas Jensen
ef601cf78e
C++: Annotate changes in struct_init.c test
2019-09-17 13:16:36 +02:00
Jonas Jensen
fd6d06fe6f
C++: Data flow through address-of operator (&)
...
The data flow library conflates pointers and their objects in some
places but not others. For example, a member function call `x.f()` will
cause flow from `x` of type `T` to `this` of type `T*` inside `f`. It
might be ideal to avoid that conflation, but that's not realistic
without using the IR.
We've had good experience in the taint tracking library with conflating
pointers and objects, and it improves results for field flow, so perhaps
it's time to try it out for all data flow.
2019-09-17 13:16:34 +02:00
Anders Schack-Mulligen
61e4e61087
C++: Adjust qltest expected output.
2019-09-12 11:00:49 +02:00
Jonas Jensen
d6fba0ef46
C++: Don't create partial defs for calls to const
...
These partial defs don't do any harm, but they could hurt performance.
In typical C++ snapshots, between 5% and 20% of all calls are to `const`
functions.
2019-09-10 09:49:16 +02:00
Jonas Jensen
fd3615d120
C++: Show that there are too many partial defs
2019-09-10 09:44:07 +02:00
Geoffrey White
4283a1508d
Merge pull request #1870 from jbj/autoformat-all
...
C++: Autoformat everything
2019-09-09 16:05:32 +01:00
Geoffrey White
22e1715368
Merge pull request #1900 from jbj/dataflow-this-by-ref
...
C++: Fix flow out of `this` by reference
2019-09-09 11:15:32 +01:00
Jonas Jensen
4ef5c9af62
C++: Autoformat everything
...
Some files that will change in #1736 have been spared.
./build -j4 target/jars/qlformat
find ql/cpp/ql -name "*.ql" -print0 | xargs -0 target/jars/qlformat --input
find ql/cpp/ql -name "*.qll" -print0 | xargs -0 target/jars/qlformat --input
(cd ql && git checkout 'cpp/ql/src/semmle/code/cpp/ir/implementation/**/*SSA*.qll')
buildutils-internal/scripts/pr-checks/sync-identical-files.py --latest
2019-09-09 11:25:53 +02:00
Jonas Jensen
ea3d066661
C++: Add D.cpp, ported from D.java
...
The original port of the Java field-flow tests did not include this
file. It's added here for completeness, and the results are the same as
for Java.
2019-09-09 10:45:06 +02:00
Jonas Jensen
10b69358ae
C++: Fix flow from this by ref.
2019-09-09 10:36:58 +02:00
Jonas Jensen
08b63d4342
C++: Test to show lack of flow from this by ref.
...
The `test_nonMemberSetA` also shows how the lack of flow through `&` is
a problem for non-member getters, but that's addressed on a separate
branch.
2019-09-09 10:36:11 +02:00
Jonas Jensen
d51e5212fb
Merge remote-tracking branch 'upstream/master' into dataflow-TTwo
...
Conflicts:
cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll
cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll
cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll
cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll
cpp/ql/src/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll
cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll
cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll
cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll
cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll
cpp/ql/test/library-tests/dataflow/fields/flow.expected
csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll
csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll
csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll
csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll
csharp/ql/src/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll
java/ql/src/semmle/code/java/dataflow/internal/DataFlowImpl.qll
java/ql/src/semmle/code/java/dataflow/internal/DataFlowImpl2.qll
java/ql/src/semmle/code/java/dataflow/internal/DataFlowImpl3.qll
java/ql/src/semmle/code/java/dataflow/internal/DataFlowImpl4.qll
java/ql/src/semmle/code/java/dataflow/internal/DataFlowImpl5.qll
2019-09-08 21:08:43 +02:00
Robert Marsh
94c625f03f
Merge pull request #1777 from jbj/ast-field-flow-defbyref
...
C++: Don't use definitionByReference for data flow
2019-09-05 10:23:28 -07:00
Ian Lynagh
1d56407c72
C++: Pull some of library-tests/dataflow/dataflow-tests into clang.cpp
...
g++ doesn't support this code:
sorry, unimplemented: non-trivial designated initializers not supported
twoIntFields sSwapped = { .m2 = source(), .m1 = 0 };
so we need to build it in clang mode.
2019-09-05 15:12:17 +01:00
Jonas Jensen
114c2fe0d4
Merge remote-tracking branch 'upstream/master' into ast-field-flow-defbyref
2019-09-05 09:33:45 +02:00
Jonas Jensen
8579d7d1cf
C++: Tests for aliasing of nested structs
...
This test shows that local pointers into structs do propagate data flow
like pass-by-reference does in calls.
2019-09-04 10:26:49 +02:00
Jonas Jensen
0e54709d47
Merge pull request #1859 from geoffw0/qldocpartialdef
...
CPP: Document PartialDefinitions
2019-09-04 09:54:55 +02:00
Jonas Jensen
067c55adb9
C++: Fix ConditionDeclExpr data flow
...
Data flow probably never worked when a variable declared in a
`ConditionDeclExpr` was modeled with `BlockVar`. That combination did
not come up in testing before the last commit.
2019-09-04 09:33:00 +02:00
Nick Rolfe
641232a9d7
Merge pull request #1855 from mgrettondann/cpp-343-lambda-names-simplification
...
C++: Update tests for lambda description changes
2019-09-03 11:45:50 +01:00
Jonas Jensen
d7681bf122
C++: Don't use definitionByReference for data flow
...
The data flow library conflates pointers and objects enough for the
`definitionByReference` predicate to be too strict in some cases. It was
too permissive in other cases that are now (or will be) handled better
by field flow.
See also the change note entry.
2019-09-03 11:49:01 +02:00
Geoffrey White
84da3e3431
CPP: Effect of 'Support nested field flow'.
2019-09-03 09:27:50 +01:00
Geoffrey White
8105d153b1
CPP: Add a test of PartialDefinitions.
2019-09-03 09:27:50 +01:00
Jonas Jensen
d3a6ae5657
C++: Support nested field flow
...
This is the C/C++ side of PR #1766 .
2019-09-03 08:50:15 +02:00
Matthew Gretton-Dann
03eb1ff785
C++: Update taint-tests for changed lambda support
2019-09-02 15:18:27 +01:00
Jonas Jensen
b1be123e31
C#/C++/Java: Prettier AccessPath.toString
...
The `ppReprType` predicate should now be `none()` instead of `result=""`
to signal that there is nothing to print. That seems clearer to me.
2019-09-02 13:14:20 +02:00
Jonas Jensen
9f0f2f7c04
C++: Accept test changes
2019-09-02 13:14:17 +02:00
Jonas Jensen
e9a029cba3
C++: Local field flow using global library
...
This commit removes fields from the responsibilities of `FlowVar.qll`.
The treatment of fields in that file was slow and imprecise.
It then adds another copy of the shared global data flow library, used
only to find local field flow, and it exposes that local field flow
through `localFlow` and `localFlowStep`.
This has a performance cost. It adds two cached stages to any query that
uses `localFlow`: the stage from `DataFlowImplCommon`, which is shared
with all queries that use global data flow, and a new stage just for
`localFlowStep`.
2019-09-02 11:17:27 +02:00
Jonas Jensen
4f57f37b31
C++: Test to show false flow through object copy
2019-09-02 11:16:48 +02:00
Dave Bartolomeo
8a9528b1a8
C++: Accept test output after fixes for PointerAdd element sizes
2019-08-22 10:43:31 -07:00
Geoffrey White
a70975f95f
CPP: Update test comments.
2019-08-22 15:40:38 +01:00
Jonas Jensen
d38dbf0f63
C++: Workaround for lambda expression locations
...
See CPP-427.
2019-08-22 11:52:56 +02:00
Jonas Jensen
2f4ed45dac
C++: No taint between field and struct
...
To compensate for the lack of field flow, the taint tracking library has
previously considered taint to flow from fields to their containing
structs and back again from the structs to any of their fields. This
leads to false flow between unrelated fields and is not needed now that
we have proper flow through fields.
2019-08-21 11:57:12 +02:00
Jonas Jensen
d388be7d3b
C++: Use pyrameterized modules for TaintTracking
2019-08-20 13:45:37 +02:00
Geoffrey White
4ea999872b
Merge pull request #1746 from jbj/ast-field-flow-ctor
...
C++: Field flow through ConstructorFieldInit
2019-08-19 09:14:02 +01:00
Jonas Jensen
84adeda167
C++: Support flow through LambdaExpression
...
I've checked with a temporary workaround for the locations problem that
my annotations in the test cpp files are on the correct lines.
2019-08-16 16:20:22 +02:00
Geoffrey White
eb39346d85
Merge pull request #1744 from jbj/ast-field-flow-aggregate-init
...
C++: Field flow through ClassAggregateLiteral
2019-08-16 09:56:11 +01:00
Jonas Jensen
503cbf13bb
C++: Flow from parameters to ConstructorFieldInit
...
Because `ConstructorFieldInit` (member initializer lists) are not part
of the control flow graph, there was no data flow from the initial value
of parameters to their uses in member initializers. This commit adds the
necessary flow under the assumption that parameters are not overwritten
in member initializers.
2019-08-16 09:10:31 +02:00
Jonas Jensen
45eefdb218
C++: Field flow through ConstructorFieldInit
...
This allows a member initializer list to be seen as a sequence of field
assignments. For example, the constructor
C() : a(taint()) { }
now has data flow similar to
C() { this.a = taint(); }
2019-08-16 09:10:17 +02:00
Jonas Jensen
f3f89ffe3f
Merge pull request #1742 from geoffw0/lambdataint
...
CPP: Tests for taint through lambdas
2019-08-16 08:45:14 +02:00
Geoffrey White
a6902bdb37
CPP: Test dataflow through lambdas.
2019-08-15 19:43:24 +01:00
Dave Bartolomeo
f1bbc9bb7e
Merge pull request #1745 from jbj/ast-field-flow-ABC
...
C++: Annotate field-flow tests in [ABC].cpp
2019-08-15 09:13:26 -07:00
Geoffrey White
1bd4aeebad
CPP: Effects of #1715 .
2019-08-15 14:05:09 +01:00
Geoffrey White
02e1edd640
CPP: Test taint through lambdas.
2019-08-15 14:00:45 +01:00
Jonas Jensen
1b4b352316
C++: Field flow through ClassAggregateLiteral
2019-08-15 12:01:42 +02:00