Dave Bartolomeo
6c12b59f0f
C++/C#: Allow non-Phi memory operands to have no definition
2020-05-14 17:22:23 -04:00
Mathias Vorreiter Pedersen
fe682556bf
Merge pull request #3475 from jbj/field-conflation-memcpy
...
C++: Test field conflation with array in struct
2020-05-14 17:53:32 +02:00
Dave Bartolomeo
efa133f0db
Merge pull request #3463 from MathiasVP/fix-field-flow-annotation
...
C++: Annotate field flow tests
2020-05-14 10:49:27 -04:00
Jonas Jensen
49ebb3197a
Merge pull request #3472 from geoffw0/paramstring
...
C++: Improve getParameterString().
2020-05-14 16:48:07 +02:00
Jonas Jensen
a380dc113f
C++: Test field conflation with array in struct
2020-05-14 16:29:39 +02:00
Jonas Jensen
3cd377e299
C++: Fixup forgotten test annotation
...
This should have been removed in 038bea2f52 .
2020-05-14 15:57:47 +02:00
Mathias Vorreiter Pedersen
1c2b8563ae
C++: Remove 'flow' value from testcases
2020-05-14 15:33:02 +02:00
Geoffrey White
da83f826b9
C++: Solve duplication in getParameterString().
2020-05-14 14:21:06 +01:00
Geoffrey White
ca0d23fd72
C++: Add a test case.
2020-05-14 14:20:02 +01:00
Mathias Vorreiter Pedersen
5f9b96cde9
C++: Fix off-by-one in test annotation
2020-05-14 15:12:00 +02:00
Geoffrey White
78f098f37a
C++: Test Function.getParameterString().
2020-05-14 13:05:39 +01:00
Mathias Vorreiter Pedersen
f414b277ba
C++: Modify complex.cpp test to account for longer access paths in the dataflow library
2020-05-14 13:58:04 +02:00
Geoffrey White
53a53fb633
C++: Modernize the Functions test.
2020-05-14 12:50:57 +01:00
Mathias Vorreiter Pedersen
f5f3405ec3
C++: Modify IR field flow tests to use InlineExpectationsTest.qll
2020-05-14 11:11:21 +02:00
Mathias Vorreiter Pedersen
34314d0cb6
C++: Annotation field flow tests with [IR] and [AST]
2020-05-13 15:16:02 +02:00
Dave Bartolomeo
b0f7e9c6a7
C++: Accept test output
2020-05-13 08:02:17 -04:00
Jonas Jensen
1018eaff09
Merge remote-tracking branch 'upstream/master' into dataflow-indirect-args
...
Conflicts:
cpp/ql/test/library-tests/dataflow/fields/ir-flow.expected
2020-05-13 12:05:58 +02:00
Jonas Jensen
038bea2f52
C++: Add type check to prevent field conflation
2020-05-13 09:25:24 +02:00
Jonas Jensen
250e12a323
C++: Demonstrate new field conflation
2020-05-13 09:24:36 +02:00
Dave Bartolomeo
5d3f25211d
C++/C#: Remove UnmodeledUse instruction
2020-05-13 01:06:40 -04:00
Jonas Jensen
451ae7b762
Merge pull request #3444 from dbartol/codeql-c-analysis-team/68
...
Rename `sanity` -> `consistency`
2020-05-12 12:33:08 +02:00
Mathias Vorreiter Pedersen
df6abdc074
Merge pull request #3389 from jbj/dataflow-defbyref-to-field
...
C++: Post-update flow through &, *, +, ...
2020-05-12 08:30:33 +02:00
Dave Bartolomeo
09d1da2f7a
C++/C#: Rename sanity -> consistency
...
I did both of these languages together because they share some of the changed code via `identical-files.json`.
2020-05-11 13:29:52 -04:00
Jonas Jensen
3a89f43cd6
Merge remote-tracking branch 'upstream/master' into dataflow-indirect-args
...
Conflicts:
cpp/ql/src/semmle/code/cpp/ir/dataflow/DefaultTaintTracking.qll
cpp/ql/src/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll
cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/defaulttainttracking.cpp
cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/tainted.expected
cpp/ql/test/library-tests/dataflow/DefaultTaintTracking/test_diff.expected
cpp/ql/test/library-tests/dataflow/dataflow-tests/test_ir.expected
2020-05-11 14:44:17 +02:00
Jonas Jensen
71c21e6eca
C++: Accept test changes forgotten in 32e04b403
...
Adding a new test case leads to changes in all `.expected` files in its
directory.
The new results show that the `DefinitionsAndUses` library does not
model `std::addressof` correctly, but that library is not intended to be
used for new code.
2020-05-11 08:17:13 +02:00
Jonas Jensen
88eeca39fb
Merge commit '52d8acc1a198c5ea29c1dddceda1d6c0fb75de14' into dataflow-defbyref-to-field
...
This is a partial merge from master. In particular, it takes in #3382
and #3385 .
2020-05-07 16:46:11 +02:00
Jonas Jensen
32e04b4033
C++: Support std::addressof
...
I didn't add this support in `AddressConstantExpression.qll` since I
think it would require extra work and testing to get the constexprness
right. My long-term plan for `AddressConstantExpression.qll` is to move
its functionality to the extractor.
2020-05-07 16:30:44 +02:00
Mathias Vorreiter Pedersen
594f3b1807
C++: Add testcase for #3110
2020-05-07 14:39:53 +02:00
Geoffrey White
3e2e69c06a
C++: Autoformat.
2020-05-05 16:55:15 +01:00
Geoffrey White
2940f4794e
C++: Fix isfromtemplateinstantiation test.
2020-05-05 13:12:44 +01:00
Geoffrey White
511d7c9199
C++: Improve solution for UsingDeclarationEntry.
2020-05-04 18:01:29 +01:00
Geoffrey White
3d431607e7
C++: Combine the usings tests and add detail about classes.
2020-05-04 17:48:42 +01:00
Geoffrey White
9fc37d174e
C++: Update the 'usings' tests.
2020-05-04 17:46:26 +01:00
Nick Rolfe
ae913fbf56
C++: update expected output to include field attribute
2020-05-04 16:17:59 +01:00
Nick Rolfe
124ea86d65
C++: add test for attributes on fields
2020-05-04 15:12:49 +01:00
Nick Rolfe
4ce896b856
Merge pull request #3378 from matt-gretton-dann/codeql-c-extractor/49-consteval
...
Add support for C++20's consteval specifier
2020-05-01 17:56:56 +01:00
Mathias Vorreiter Pedersen
2e3463740d
Merge pull request #3382 from jbj/escape-qualifier
...
C++: Addresses may escape through call qualifiers
2020-05-01 16:23:46 +02:00
Jonas Jensen
1b1095ee75
C++: Post-update flow through &, *, +, ...
...
Flow from a definition by reference of a field into its object was
working inconsistently and in a very syntax-dependent way. For a
function `f` receiving a reference, `f(a->x)` could propagate data back
to `a` via the _reverse read_ mechanism in the shared data-flow library,
but for a function `g` receiving a pointer, `g(&a->x)` would not work.
And `f((*a).x)` would not work either.
In all cases, the issue was that the shared data-flow library propagates
data backwards between `PostUpdateNode`s only, but there is no
`PostUpdateNode` for `a->x` in `g(&a->x)`. This pull request inserts
such post-update nodes where appropriate and links them to their
neighbors. In this exapmle, flow back from the output parameter of `g`
passes first to the `PostUpdateNode` of `&`, then to the (new)
`PostUpdateNode` of `a->x`, and finally, as a _reverse read_ with the
appropriate field projection, to `a`.
2020-05-01 15:40:19 +02:00
Jonas Jensen
9b9f5248af
C++: Accept test changes
...
Lambda invocations are apparently const. This was exposed by the fix in
the previous commit.
2020-05-01 15:23:00 +02:00
Jonas Jensen
36bdcfa42d
C++: Remove an unneeded local-flow case
...
This case was added in dccc0f4db . The surrounding code has changed a lot
since then, and the case no longer seems to have an effect except to
create some dead ends and possibly cycles in the local flow graph.
2020-05-01 15:08:15 +02:00
Jonas Jensen
5f74c24d4d
C++: Test definitions through &, *, ...
2020-05-01 11:04:49 +02:00
Jonas Jensen
4ddf12119d
C++: Don't suppress consistency checks for calls
...
See https://github.com/github/codeql/pull/3162#discussion_r400849713 .
2020-05-01 11:04:42 +02:00
Jonas Jensen
8ffa124bf9
C++: Addresses may escape through call qualifiers
...
Also clarify the docs on `Call` to decrease the likelyhood of such an
omission happening again.
The updated test reflects that `f1.operator()` lets the address of `f1`
escape from the caller.
2020-04-30 14:27:40 +02:00
Matthew Gretton-Dann
7d605095a5
C++: Update expected test results
2020-04-29 14:31:35 +01:00
Nick Rolfe
55301b4b2f
Merge pull request #3074 from matt-gretton-dann/codeql-c-extractor/50-char8_t
...
Add support for C++20's char8_t type.
2020-04-29 12:15:25 +01:00
Mathias Vorreiter Pedersen
8a1d96b313
Merge pull request #3374 from jbj/PartialDefinition-refactor
...
C++: Refactor `PartialDefinition` charpred
2020-04-29 13:03:40 +02:00
Matthew Gretton-Dann
52670dd956
C++: Update expected test output.
2020-04-29 10:18:13 +01:00
Jonas Jensen
796041af72
C++: Refactor PartialDefinition charpred
...
This class used `newtype` for seemingly no reason. The new code is
shorter and should be faster as well.
2020-04-28 17:10:25 +02:00
Cornelius Riemenschneider
3f7d68178c
Use stripTopLevelSpecifiers() to get the allocated element type for malloc().
2020-04-27 12:46:14 +02:00
Cornelius Riemenschneider
92e8604fa1
Provide getAllocatedElementType predicate for AllocationExprs.
...
This predicate tries to determine the type of the allocated elements of an allocation expression.
2020-04-27 12:41:19 +02:00