Compare commits

..

1919 Commits

Author SHA1 Message Date
Asger F
7e4fbe2f14 Merge pull request #18326 from asgerf/js/shared-dataflow-bump
JS: Merge 'main' into shared dataflow branch
2025-01-03 11:24:37 +01:00
Asger F
942ba189f7 JS: Minor test output change in nodes/edges
I suspect this is due to some fixes in the DeduplicatePathGraph module
2024-12-19 15:25:49 +01:00
Asger F
f8dc7eb25b JS: Update output from tests that changed on main 2024-12-19 15:25:47 +01:00
Asger F
4a6030c592 JS: Update expected with some absent result sets 2024-12-19 15:25:46 +01:00
Asger F
cd6ebb103e JS: Make test not assume implicit through for maps 2024-12-19 15:25:45 +01:00
Asger F
dc2f39c399 JS: Add model of Map#groupBy 2024-12-19 15:25:43 +01:00
Asger F
de5e6ddeed JS: Update with changes in TaintTracking test 2024-12-19 15:25:42 +01:00
Asger F
c204527c08 JS: Update Array test output (new tests added on main) 2024-12-19 15:25:41 +01:00
Asger F
33e8bd5032 JS: Update testUtilities import 2024-12-19 15:25:39 +01:00
Asger F
3acd4814de Merge branch 'main' into js/shared-dataflow-merge-main 2024-12-19 10:14:38 +01:00
Paolo Tranquilli
b392391138 Merge pull request #18319 from github/redsun82/rust-fetch-ungram
Rust: fetch ungram and rust-analyzer code instead of checking it in
2024-12-19 08:16:09 +01:00
Paolo Tranquilli
c4a7abda0a Bazel: resync 3rd party dependencies and skip buildifier on them 2024-12-18 17:33:39 +01:00
Paolo Tranquilli
d6b8d42936 Bazel: fix 3rdparty update script 2024-12-18 17:20:05 +01:00
Paolo Tranquilli
290a1043b1 Rust: fetch ungram and rust-analyzer code instead of checking it in
* The ungram file is now taken from the rust-analyzer dependencies
  pulled in by bazel
* the grammar parsing code is not published, so it must be taken
  directly from rust-analyzer code. That part should be less prone to be
  updated than the ungram file, so it does not necessarily need to be
  in sync with the rust-analyzer version is used elsewhere.
* both need some patches. The former is patched during build, the latter
  during loading in `MODULE.bazel`.
2024-12-18 16:37:24 +01:00
Arthur Baars
023f48ff1c Merge pull request #18295 from github/aibaars/update-rust-ungram
Rust: update rust-analyzer
2024-12-18 16:01:50 +01:00
Simon Friis Vindum
508c7e6e85 Merge pull request #18314 from paldepind/rust-tuple-ref-patterns
Rust: Add read steps for tuple and reference patterns
2024-12-18 14:13:08 +01:00
Asger F
be939dca29 Merge pull request #14350 from asgerf/shared/deduplicate-path-graph
Shared: Add DataFlow::DeduplicatePathGraph
2024-12-18 14:04:29 +01:00
Tom Hvitved
00688ebd79 Merge pull request #18312 from hvitved/rust/operator-overloading-test
Rust: Add data flow tests for operator overloading
2024-12-18 13:58:39 +01:00
Simon Friis Vindum
09fd27af80 Rust: Add read steps for tuple and reference patterns 2024-12-18 13:22:05 +01:00
Mathias Vorreiter Pedersen
927d359cfa Merge pull request #18310 from MathiasVP/fix-recursion-through-forex-in-sign-analysis
C++: Fix `forex` recursion in sign analysis
2024-12-18 12:19:33 +00:00
Simon Friis Vindum
b5b8af3aa2 Rust: Add data flow tests for borrows 2024-12-18 13:00:38 +01:00
Arthur Baars
a6ec51a951 Rust: update expected output 2024-12-18 13:00:14 +01:00
Arthur Baars
71959f5faa Rust: address clippy warnings 2024-12-18 13:00:13 +01:00
Tom Hvitved
3a63dbcd5d Apply suggestions from code review
Co-authored-by: Simon Friis Vindum <paldepind@github.com>
2024-12-18 12:46:11 +01:00
Mathias Vorreiter Pedersen
4ffe70dd3b C++: Respond to review comments. 2024-12-18 11:26:41 +00:00
Simon Friis Vindum
87b9e6001d Merge pull request #18291 from paldepind/rust-data-flow-models
Rust: Data flow improvements to unlock flow in sqlx test
2024-12-18 11:53:26 +01:00
Michael Nebel
ef2215dd53 Merge pull request #18303 from michaelnebel/refactorlibrarylocations
C#: Move external api declarations to the library pack.
2024-12-18 11:43:35 +01:00
Simon Friis Vindum
049fab4c72 Rust: Remove taint steps 2024-12-18 11:22:56 +01:00
Jeroen Ketema
66b2b5df8d Merge pull request #18308 from jketema/template-parameters
C++: Introduce a new base class for template parameters
2024-12-18 10:38:03 +01:00
Jeroen Ketema
ccd3681f83 C++: Expand QLDoc of TemplateParameterBase 2024-12-18 09:45:51 +01:00
Tom Hvitved
025a67384f Rust: Add data flow tests for operator overloading 2024-12-18 09:26:17 +01:00
Mathias Vorreiter Pedersen
0b2b341283 C++: Work around suboptimal codegen for recursive 'forex'. 2024-12-17 23:58:57 +00:00
Jeroen Ketema
b7d1da8741 C++: Introduce a new base class for template parameters
This will enable us to support non-type template parameters, which we
currently do not support, and error template parameters, which might
become relevant in the `build-mode: none` context.
2024-12-17 20:25:41 +01:00
Mathias Vorreiter Pedersen
dfb34832fd Merge pull request #18307 from MathiasVP/fix-more-join-orders-in-dataflow
C++: Fix two more dataflow-related joins
2024-12-17 18:56:12 +00:00
Mathias Vorreiter Pedersen
2cc6ffbd28 C++: Fix ql-for-ql findings. 2024-12-17 16:55:52 +00:00
Simon Friis Vindum
c1e21974c6 Rust: Address review comments 2024-12-17 17:24:42 +01:00
Mathias Vorreiter Pedersen
5ed0222b1a C++: Sync identical files. 2024-12-17 15:28:04 +00:00
Mathias Vorreiter Pedersen
f351558547 C++: While here, let's avoid materializing 'ensuresEq' and 'ensuresLt' when computing unreachable nodes in dataflow. 2024-12-17 15:27:54 +00:00
Mathias Vorreiter Pedersen
9b6f39c1fe C++: Apply similar join order fixes to the other cases. 2024-12-17 15:26:49 +00:00
Mathias Vorreiter Pedersen
eea7804b62 C++: Join with value number only after joining with 'controls'. 2024-12-17 15:25:16 +00:00
Simon Friis Vindum
d8c301a96b Merge branch 'main' into rust-data-flow-models 2024-12-17 16:09:59 +01:00
Michael Nebel
1ef5b595ae C#: Add change-note. 2024-12-17 15:11:27 +01:00
Michael Nebel
bd9f656be2 C#: Add ql doc to TestLibrary. 2024-12-17 14:40:01 +01:00
Michael Nebel
a91c1dc715 C#: Move external api declarations to the library pack. 2024-12-17 14:39:59 +01:00
Asger F
729efff6a4 Merge pull request #18265 from asgerf/jss/flow-labels2
JS: Migrate all queries to proper flow states and deprecate FlowLabel
2024-12-17 14:37:11 +01:00
Arthur Baars
23e6a825aa Rust: fix QL code 2024-12-17 14:07:48 +01:00
Arthur Baars
029e2604a3 Rust: //rust/codegen 2024-12-17 14:07:44 +01:00
Arthur Baars
c13e173681 Rust: fix codegeneration for AsmOptions 2024-12-17 14:05:53 +01:00
Arthur Baars
93972fcb2e Run: misc/bazel/3rdparty/update_cargo_deps.sh 2024-12-17 14:05:51 +01:00
Arthur Baars
8e7eedc172 Update codegen/grammar 2024-12-17 14:05:50 +01:00
Arthur Baars
3928efe05f Rust: update rust.ungram 2024-12-17 14:05:12 +01:00
Tom Hvitved
8efd870192 Merge pull request #18292 from hvitved/rust/never-skip-lhs
Rust: Never skip assignment LHS in data flow
2024-12-17 13:18:17 +01:00
Tom Hvitved
d8c05b5388 Merge pull request #18290 from hvitved/rust/perf-fixes
Rust: Fix two bad joins
2024-12-17 13:18:05 +01:00
Simon Friis Vindum
ee87d4c948 Merge branch 'main' into rust-data-flow-models 2024-12-17 13:12:32 +01:00
Asger F
e34fbc8bd1 Shared: autoformat 2024-12-17 11:26:56 +01:00
Asger F
8340841d54 Shared: Fix propagation of call bit 2024-12-17 11:16:04 +01:00
Asger F
950ae44d03 Shared: Show test failures 2024-12-17 11:15:57 +01:00
Michael Nebel
132dbd7517 Merge pull request #18285 from github/workflow/coverage/update
Update CSV framework coverage reports
2024-12-17 09:17:33 +01:00
github-actions[bot]
f9d739c173 Add changed framework coverage reports 2024-12-17 00:22:24 +00:00
Jeroen Ketema
fa5cc90167 Merge pull request #18281 from jketema/changenote
C++: Add word missing from change note
2024-12-16 20:23:47 +01:00
Mathias Vorreiter Pedersen
a3ef0b94b9 Merge pull request #18207 from MathiasVP/fix-fp-in-missing-check-scanf-fixing-take-3
C++: Fix some FPs in cpp/missing-check-scanf (third attempt!)
2024-12-16 16:55:44 +00:00
Paolo Tranquilli
d6246707e4 Merge pull request #18294 from github/redsun82/extract-self-param-ref
Rust: extract `isRef` for `SelfParam`
2024-12-16 17:00:47 +01:00
Simon Friis Vindum
402d4e11c4 Rust: Re-add inline expectations query tags 2024-12-16 16:36:30 +01:00
Edward Minnix III
9a80c403a0 Merge pull request #18278 from egregius313/egregius313/csharp/markup-string
C#: Add `html-injection` sinks for Blazor `MarkupString`
2024-12-16 10:21:04 -05:00
Edward Minnix III
360398481b Merge pull request #18280 from egregius313/egregius313/csharp/blazor/runtime-helpers/typecheck
C#: Add summary for `Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelper::TypeCheck<T>`
2024-12-16 10:19:38 -05:00
Asger F
e5ae7e0231 JS: Fix bad join in isOptionallySanitizedEdgeInternal
This was previously called from isBarrier(node, state) but without restricting the state. The call was therefore moved to isBarrier(node), but this caused some optimisation changes resulting in a bad join.
2024-12-16 15:35:54 +01:00
Asger F
947b785d47 JS: Remove reference to deprecated step relation that's empty anyway 2024-12-16 15:35:53 +01:00
Asger F
0b2914ff13 JS: A few more deprecation updates 2024-12-16 15:35:50 +01:00
Asger F
db00dad033 JS: Avoid deprecation warnings in some tests 2024-12-16 15:35:49 +01:00
Asger F
cf6d166d29 JS: Also update tutorial code 2024-12-16 15:35:47 +01:00
Asger F
079294e55f JS: Mass rename to node1,state1,node2,state2 naming convention 2024-12-16 15:35:46 +01:00
Asger F
ac6da6c2b1 JS: Add some missing qldoc 2024-12-16 15:35:44 +01:00
Asger F
d993c888b1 JS: Deprecate the FlowLabel class 2024-12-16 15:35:43 +01:00
Asger F
69b361ae70 JS: Migrate a test to use flow state 2024-12-16 15:35:42 +01:00
Asger F
73af3f3536 JS: Migrate PrototypePollutingFunction 2024-12-16 15:35:40 +01:00
Asger F
ebe596f227 JS: Migrate CorsPermissiveConfiguration 2024-12-16 15:35:39 +01:00
Asger F
d83ddfabaa JS: Migrate an experimental CodeInjection query 2024-12-16 15:35:38 +01:00
Asger F
a398599bfb JS: Rename an experimental query
Having the same name as a standard query is just confusing
2024-12-16 15:35:36 +01:00
Asger F
c951a29e2a JS: Migrate UnvalidatedDynamicMethodCall 2024-12-16 15:35:34 +01:00
Paolo Tranquilli
a333453bd7 Merge pull request #18289 from github/redsun82/swift-remove-linux
Swift: improve diagnostics for OS incompatibility
2024-12-16 15:18:52 +01:00
Tom Hvitved
ddd05b5d1b Rust: Never skip match scrutinee/patterns in data flow 2024-12-16 15:12:16 +01:00
Tom Hvitved
9f2b436d35 Rust: Never skip assignment LHS in data flow 2024-12-16 15:12:15 +01:00
Paolo Tranquilli
54ba14d181 Merge pull request #18276 from github/redsun82/bazel-installer-as-test
Bazel: add a test wrapper around installation scripts
2024-12-16 15:07:19 +01:00
Paolo Tranquilli
4975e7b739 Merge branch 'main' into redsun82/extract-self-param-ref 2024-12-16 15:06:16 +01:00
Paolo Tranquilli
9f2b962fe8 Merge pull request #18297 from hvitved/rust/fix-semantic-merge
Rust: Fix semantic merge conflicts
2024-12-16 15:06:00 +01:00
Mathias Vorreiter Pedersen
913357b70d C++: Fix incorrect QLDoc. 2024-12-16 14:02:50 +00:00
Mathias Vorreiter Pedersen
5a90b25c45 C++: Remove the released change note and add a new change note. 2024-12-16 14:02:48 +00:00
Mathias Vorreiter Pedersen
5327847744 C++: No need to exclude static and global initializers now that we inline the predicates. 2024-12-16 14:02:46 +00:00
Mathias Vorreiter Pedersen
3bdfdd0573 C++: Change all the 'ensures' and (and most 'compares') predicates to be inlined to prevent explosions. Also remove the caching since this is't necessary now that the main recursion is cached. 2024-12-16 14:02:44 +00:00
Mathias Vorreiter Pedersen
404dd33498 C++: Move the main recursion into to a cached module. 2024-12-16 14:02:42 +00:00
Mathias Vorreiter Pedersen
6f73aa552d C++: Convert IRGuards to use final abstract classes. 2024-12-16 14:02:40 +00:00
Mathias Vorreiter Pedersen
20dfbdc5cc Revert "Merge pull request #18057 from jketema/codeql-cli-2.19.4"
This reverts commit ed922f6519, reversing
changes made to aa4cc72f30.
2024-12-16 14:02:38 +00:00
Tom Hvitved
5ed03e266a Rust: Fix semantic merge conflicts 2024-12-16 14:47:13 +01:00
Michael Nebel
32bfbb832b Merge pull request #18293 from michaelnebel/fixmain
Fix failing tests on main.
2024-12-16 14:26:25 +01:00
Jeroen Ketema
da3fcda4fc C++: Address review comments 2024-12-16 14:25:41 +01:00
Paolo Tranquilli
4c4a8d7619 Rust: extract isRef for SelfParam 2024-12-16 14:24:56 +01:00
Michael Nebel
d0e9c3bb70 Fix failing tests on main. 2024-12-16 14:16:47 +01:00
Paolo Tranquilli
e4eb2697eb Swift: fix typo in autobuild.cmd 2024-12-16 13:44:33 +01:00
Michael Nebel
aaf0cd5dee Merge pull request #17968 from michaelnebel/java/movetestutils
Move test utilities to the query pack.
2024-12-16 13:41:30 +01:00
Asger F
f2968f4e14 Shared: Ensure subpath-induced edges are handled properly
Argument-passing and flow-through edges are present in 'edges' in addition to 'subpaths', but the implementation didn't take this into account.
2024-12-16 13:21:43 +01:00
Simon Friis Vindum
cad4f39aee Rust: Database name capitalization 2024-12-16 13:15:42 +01:00
Asger F
0edb30638a Apply suggestions from code review
Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com>
2024-12-16 13:14:27 +01:00
Simon Friis Vindum
defbbb2a24 Rust: Add additional models for stdlib and sqlx 2024-12-16 11:46:57 +01:00
Simon Friis Vindum
aab3428bc7 Rust: Model address-of and dereference as stores and loads 2024-12-16 11:31:15 +01:00
Simon Friis Vindum
df0375103c Rust: Add data flow tests 2024-12-16 11:09:22 +01:00
Tom Hvitved
aabcc108dd Rust: Fix bad join
```
[2024-12-16 10:10:36] (247s) Tuple counts for DataFlowImpl::RustDataFlow::storeStep/3#98e80e57/3@0618fdm6 after 3m8s:
                      33711       ~0%        {3} r1 = SCAN `DataFlowImpl::VariableCapture::storeStep/3#cb0fdcf6` OUTPUT In.1, In.0 'node1', In.2 'node2'
                      33711       ~6%        {3}    | JOIN WITH DataFlowImpl::TSingletonContentSet#9b15eaba ON FIRST 1 OUTPUT Lhs.1 'node1', Rhs.1 'cs', Lhs.2 'node2'

                      0           ~0%        {3} r2 = JOIN `FlowSummaryImpl::Private::Steps::summaryStoreStep/3#2c853d0d` WITH DataFlowImpl::TFlowSummaryNode#2b28ecb7 ON FIRST 1 OUTPUT Lhs.2, Lhs.1 'cs', Rhs.1 'node1'
                      0           ~0%        {3}    | JOIN WITH DataFlowImpl::TFlowSummaryNode#2b28ecb7 ON FIRST 1 OUTPUT Lhs.2 'node1', Lhs.1 'cs', Rhs.1 'node1'

                      1554        ~0%        {3} r3 = JOIN _DataFlowImpl::TExprNode#83a34c2e__DataFlowImpl::TArrayElement#b9fb9b7b_DataFlowImpl::TSingletonCont__#shared WITH `CfgNodes::ArrayRepeatExprCfgNode.getRepeatOperand/0#dispred#b264e402_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2 'node1'
                      1554        ~0%        {3}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Lhs.2 'node1', Lhs.1 'cs', Rhs.1 'node2'

                      870         ~2%        {3} r4 = SCAN `DataFlowImpl::RustDataFlow::tupleAssignment/3#bf3c8690` OUTPUT In.2, In.0 'node1', In.1
                      870         ~0%        {3}    | JOIN WITH DataFlowImpl::TSingletonContentSet#9b15eaba ON FIRST 1 OUTPUT Lhs.2, Rhs.1 'cs', Lhs.1 'node1'
                      870         ~0%        {3}    | JOIN WITH `DataFlowImpl::Node::PostUpdateNode.getPreUpdateNode/0#dispred#53daedc2_10#join_rhs` ON FIRST 1 OUTPUT Lhs.2 'node1', Lhs.1 'cs', Rhs.1 'node2'

                      40037       ~4%        {3} r5 = JOIN _DataFlowImpl::TExprNode#83a34c2e__DataFlowImpl::TArrayElement#b9fb9b7b_DataFlowImpl::TSingletonCont__#shared WITH `CfgNodes::ArrayExprCfgNode.getAnExpr/0#dispred#9d00a6f1_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2 'node1'
                      36929       ~4%        {3}    | JOIN WITH CfgNodes::ArrayListExprCfgNode#07eee614 ON FIRST 1 OUTPUT Lhs.0, Lhs.1 'cs', Lhs.2 'node1'
                      36929       ~0%        {3}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Lhs.2 'node1', Lhs.1 'cs', Rhs.1 'node2'

                      14          ~0%        {2} r6 = JOIN DataFlowImpl::TTuplePositionContent#f1d90606_10#join_rhs WITH DataFlowImpl::TSingletonContentSet#9b15eaba ON FIRST 1 OUTPUT Lhs.1, Rhs.1 'cs'
                      47949       ~0%        {3}    | JOIN WITH `CfgNodes::TupleExprCfgNode.getField/1#dispred#9f7c9c63_102#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Rhs.2
                      47949       ~0%        {3}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Lhs.2, Lhs.1 'cs', Rhs.1 'node2'
                      47949       ~2%        {3}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Rhs.1 'node2', Lhs.1 'cs', Lhs.2 'node2'

                      59801       ~0%        {3} r7 = JOIN _DataFlowImpl::TSingletonContentSet#9b15eaba_DataFlowImpl::TVariantPositionContent#ca6baca0_201#join__#shared WITH `DataFlowImpl::RustDataFlow::tupleVariantConstruction/2#10613c55_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2
                      45509       ~0%        {3}    | JOIN WITH CfgNodes::CallExprCfgNode#9c2a4686_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2
                      45509       ~2%        {4}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Lhs.0, Lhs.2, Lhs.1 'cs', Rhs.1 'node2'
                      45509       ~0%        {3}    | JOIN WITH `CfgNodes::CallExprBaseCfgNode.getArgument/1#dispred#9ebb27c0` ON FIRST 2 OUTPUT Rhs.2, Lhs.2 'cs', Lhs.3 'node2'
                      45509       ~0%        {3}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Rhs.1 'node2', Lhs.1 'cs', Lhs.2 'node2'

                      75147       ~1%        {3} r8 = JOIN _DataFlowImpl::TSingletonContentSet#9b15eaba_DataFlowImpl::TStructFieldContent#1d6d7b05_201#join_rhs#shared WITH `DataFlowImpl::RustDataFlow::structConstruction/2#a9656db0_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2
                      59186       ~3%        {3}    | JOIN WITH `CfgNodes::RecordExprCfgNode.getRecordExpr/0#dispred#659ad1af_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2

                      5641        ~2%        {3} r9 = JOIN _DataFlowImpl::TSingletonContentSet#9b15eaba_DataFlowImpl::TVariantFieldContent#4e05bcf1_201#join_rh__#shared WITH `DataFlowImpl::RustDataFlow::recordVariantConstruction/2#34b016f6_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2
                      5268        ~0%        {3}    | JOIN WITH `CfgNodes::RecordExprCfgNode.getRecordExpr/0#dispred#659ad1af_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2

                      64454       ~1%        {3} r10 = r8 UNION r9
                      64454       ~0%        {4}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Lhs.0, Lhs.2, Lhs.1 'cs', Rhs.1 'node2'
                      25923       ~0%        {3}    | JOIN WITH `CfgNodes::RecordExprCfgNode.getFieldExpr/1#d72dca6e` ON FIRST 2 OUTPUT Rhs.2, Lhs.2 'cs', Lhs.3 'node2'
                      25923       ~0%        {3}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Rhs.1 'node2', Lhs.1 'cs', Lhs.2 'node2'

                      67759289500 ~251%      {4} r11 = JOIN DataFlowImpl::TSingletonContentSet#9b15eaba WITH DataFlowImpl::TExprNode#83a34c2e CARTESIAN PRODUCT OUTPUT Lhs.0, Lhs.1 'cs', Rhs.0, Rhs.1 'node2'
                      3568000     ~1488%     {3}    | JOIN WITH DataFlowImpl::TArrayElement#b9fb9b7b ON FIRST 1 OUTPUT Lhs.3, Lhs.1 'cs', Lhs.2
                      1223000     ~1291%     {3}    | JOIN WITH `DataFlowImpl::Node::PostUpdateNode.getPreUpdateNode/0#dispred#53daedc2_10#join_rhs` ON FIRST 1 OUTPUT Lhs.2, Lhs.1 'cs', Rhs.1 'node2'
                      11500       ~0%        {3}    | JOIN WITH `CfgNodes::IndexExprCfgNode.getBase/0#dispred#19aba7d8_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2 'node2'
                      1000        ~3%        {3}    | JOIN WITH `CfgNodes::BinaryExprCfgNode.getLhs/0#dispred#bd1c02e7_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2 'node2'
                      500         ~3%        {3}    | JOIN WITH CfgNodes::AssignmentExprCfgNode#a9a5c022 ON FIRST 1 OUTPUT Lhs.0, Lhs.1 'cs', Lhs.2 'node2'
                      0           ~0%        {3}    | JOIN WITH `CfgNodes::BinaryExprCfgNode.getRhs/0#dispred#4a1146e4` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'cs', Lhs.2 'node2'
                      0           ~0%        {3}    | JOIN WITH DataFlowImpl::TExprNode#83a34c2e ON FIRST 1 OUTPUT Rhs.1 'node2', Lhs.1 'cs', Lhs.2 'node2'

                      192445      ~1%        {3} r12 = r1 UNION r2 UNION r3 UNION r4 UNION r5 UNION r6 UNION r7 UNION r10 UNION r11
                                             return r12
```
2024-12-16 10:20:30 +01:00
Tom Hvitved
2d16b5276d Rust: Fix bad join
```
Evaluated relational algebra for predicate DataFlowImpl::RustDataFlow::pathResolveToVariantCanonicalPath/2#dc73aca0@34414869 with tuple counts:
          422639   ~3%    {3} r1 = JOIN `DataFlowImpl::resolveExtendedCanonicalPath/3#0454a346` WITH Synth::Synth::TPathAstNode#a7913307 ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2
        73033499   ~7%    {6}    | JOIN WITH DataFlowImpl::MkVariantCanonicalPath#ab1ecb00 ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Rhs.3, _, Rhs.1, Rhs.2
                          {4}    | REWRITE WITH Tmp.3 := "::", Out.3 := (In.4 ++ Tmp.3 ++ In.5), TEST Out.3 = InOut.1 KEEPING 4
          170993   ~1%    {2}    | SCAN OUTPUT In.0, In.2
                          return r1
```
2024-12-16 10:20:01 +01:00
Paolo Tranquilli
8efd127010 Swift: improve diagnostics for OS incompatibility
* do not mention any more that one might make analysis happen on Linux with
  advanced setup
* say that outright Swift analysis is only supported on macOS, not just
  autobuild.
* emit the error diagnostics even for traced builds, not only for autobuilds
  (by using a dummy `extractor` executable).
2024-12-16 10:12:31 +01:00
Simon Friis Vindum
31717524f0 Merge pull request #18270 from paldepind/rust-captured-variables
Rust: Flow through captured variables
2024-12-16 10:08:53 +01:00
Simon Friis Vindum
9da5d7128b Rust: Add test with data flow inconsistency 2024-12-16 09:40:13 +01:00
Owen Mansel-Chan
7ab06fca2f Merge pull request #18275 from owen-mc/go/mad/variadic-params-sources
Go: Make models-as-data source models for variadic parameters work
2024-12-15 13:22:21 +00:00
Paolo Tranquilli
0c5e260ae6 Merge pull request #18282 from github/redsun82/swift-remove-linux
Swift: remove linux from standard pack
2024-12-13 22:44:44 +01:00
Owen Mansel-Chan
906c51733c Merge pull request #18266 from owen-mc/misc/prepare-db-upgrade-improvement
Misc: Look up remote name instead of using `origin` in `misc/prepare-db-upgrade.sh`
2024-12-13 21:42:18 +00:00
Edward Minnix III
9948f6e255 Merge pull request #18284 from egregius313/egregius313/go/dataflow/sources/commandargs/os-args
Go: Model `os.Args` as a `commandargs` source
2024-12-13 16:33:45 -05:00
Ed Minnix
7852c8666c Update provenance in test results 2024-12-13 15:22:17 -05:00
Ed Minnix
88256e269a Convert model from QL to MaD 2024-12-13 14:59:32 -05:00
Edward Minnix III
f844105722 Fix test result 2024-12-13 14:53:58 -05:00
Ed Minnix
129388c78a Fix change note 2024-12-13 12:48:01 -05:00
Ed Minnix
4ee60138b7 Fix test results 2024-12-13 12:44:57 -05:00
Ed Minnix
f8cfa39492 Change note 2024-12-13 12:42:02 -05:00
Ed Minnix
3f9af5bfe4 Tests 2024-12-13 12:42:01 -05:00
Ed Minnix
63a3054aeb os.Args variable read 2024-12-13 12:41:59 -05:00
Paolo Tranquilli
a8238b1896 Swift: fix pack 2024-12-13 17:39:16 +01:00
Paolo Tranquilli
a75f5fac15 Swift: remove linux from standard pack
This still defines a pack with linux included for development.
`//swift:install` will still also include linux.
2024-12-13 17:01:22 +01:00
Owen Mansel-Chan
e9dcd69cc0 Add readStep back to local taint flow 2024-12-13 13:30:18 +00:00
Owen Mansel-Chan
3a3e053f12 Only add taint steps for implicit varargs slice post-update nodes 2024-12-13 13:17:44 +00:00
Paolo Tranquilli
2cbb072668 Merge pull request #17699 from github/redsun82/swift-6
Swift: make extractor compilable with Swift 6
2024-12-13 12:27:35 +01:00
Asger F
820f81fc10 JS: Migrate UnsafeDynamicMethodAccess 2024-12-13 11:32:25 +01:00
Asger F
a9e89ed8e3 JS: Migrate PrototypePollutingAssignment 2024-12-13 11:23:31 +01:00
Asger F
bcc1669f4c JS: Migrate InsecureDownload 2024-12-13 11:10:14 +01:00
Asger F
4e25036cdc JS: Follow naming convention in InsecureModuleFlow module 2024-12-13 11:09:59 +01:00
Asger F
d381ab1260 JS: Migrate IncompleteHtmlAttributeSanitization 2024-12-13 10:55:00 +01:00
Jeroen Ketema
d6964ff755 C++: Add word missing from change note 2024-12-13 10:48:46 +01:00
Asger F
2112ecc44d JS: Migrate HardcodedDataInterpretedAsCode 2024-12-13 10:48:43 +01:00
Asger F
dc3d7a0159 Update ExceptionXssCustomizations.qll 2024-12-13 10:47:04 +01:00
Asger F
42a7208704 JS: Migrate ExceptionXss 2024-12-13 10:29:32 +01:00
Asger F
d9a43dbd85 JS: Migrate UnsafeHtmlConstruction 2024-12-13 10:08:17 +01:00
Asger F
8907252814 JS: Migrate TemplateObjectInjection 2024-12-13 10:08:16 +01:00
Asger F
3573f0b065 JS: Migrate SecondOrderCommandInjection 2024-12-13 10:08:15 +01:00
Asger F
355f7cdd54 JS: Migrate PrototypePollutingMergeCall 2024-12-13 10:08:13 +01:00
Asger F
c38e3a23eb JS: Migrate NoSqlInjection 2024-12-13 10:08:12 +01:00
Asger F
8e8de5cf23 JS: Migrate LoopBoundInjection 2024-12-13 10:08:11 +01:00
Asger F
daddff0dc6 JS: Avoid deprecation warning in XssThroughDom 2024-12-13 10:08:10 +01:00
Asger F
15d999a9dc JS: Migrate DeepObjectResourceExhaustion 2024-12-13 10:08:09 +01:00
Asger F
5f42a715f6 JS: Migrate TaintedObject to a CommonFlowState 2024-12-13 10:08:08 +01:00
Asger F
14ca1c134b JS: Update TaintedUrlSuffix test 2024-12-13 10:08:07 +01:00
Asger F
12289d4c39 JS: Migrate DomBasedXssQuery to FlowState 2024-12-13 10:08:06 +01:00
Asger F
114d4a141a JS: Move FlowState definition into CommonFlowState
Needed for migrating the XSS query
2024-12-13 10:08:05 +01:00
Asger F
3cf14d8506 JS: Migrate ClientSideUrlRedirect to flow state 2024-12-13 10:08:03 +01:00
Asger F
cca980298f JS: Use flow state in barrier and step relations 2024-12-13 10:08:02 +01:00
Asger F
a8fdd759f9 JS: Add FlowState class to TaintedUrlSuffix 2024-12-13 10:08:01 +01:00
Paolo Tranquilli
92ec7e89ab Merge branch 'main' into redsun82/swift-6 2024-12-13 09:38:15 +01:00
Ed Minnix
68e2f27180 Add summary Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers::TypeCheck<T> 2024-12-12 22:10:15 -05:00
Ed Minnix
8e37a5cd55 Fix test case 2024-12-12 22:05:26 -05:00
Owen Mansel-Chan
b58e6ebade Address review comments for localTaintStep 2024-12-12 22:07:15 +00:00
Ed Minnix
0a967325e7 Change note 2024-12-12 16:22:09 -05:00
Ed Minnix
40ea5f582c MarkupString models 2024-12-12 16:18:29 -05:00
Jeroen Ketema
792504434a Merge pull request #18277 from jketema/printast
C++: Fix small PrintAST and PrintIR issue
2024-12-12 19:17:43 +01:00
Jeroen Ketema
8e458f4651 C++: Simplify local variable names 2024-12-12 17:13:02 +01:00
Jeroen Ketema
f9bfd969a9 C++: Address review comments 2024-12-12 16:49:24 +01:00
Simon Friis Vindum
1d8e7fd9ea Rust: Accept differences 2024-12-12 16:47:51 +01:00
Simon Friis Vindum
0fa40fcdcc Rust: Fix captured variable data flow inconsistency 2024-12-12 16:28:19 +01:00
Asger F
a53d294d91 Merge pull request #18203 from asgerf/jss/document-url
JS: Use TaintedUrlSuffix in ClientSideUrlRedirect
2024-12-12 15:47:51 +01:00
Tom Hvitved
20db548fef Merge pull request #18263 from hvitved/dataflow/remove-column
Data flow: Remove unused column from `flowThroughOutOfCall`
2024-12-12 15:41:20 +01:00
Geoffrey White
03f962ed86 Merge pull request #18226 from geoffw0/badcrypto
Rust: Weak encryption algorithm query.
2024-12-12 14:21:16 +00:00
Michael Nebel
a52a549945 Merge pull request #18246 from michaelnebel/csharp/fixwarnings
C#: Fix some new compiler warnings
2024-12-12 15:07:23 +01:00
Michael Nebel
0bfc1b6ea8 Also move the postprocessing queries to the library pack. 2024-12-12 15:03:03 +01:00
Michael Nebel
941b0abbf6 Move modules to the library packs. 2024-12-12 15:03:01 +01:00
Michael Nebel
864c34fc03 Rust: Update all test util paths to point to the new location. 2024-12-12 15:02:59 +01:00
Tom Hvitved
5d18e23979 Merge pull request #18269 from hvitved/csharp/dataflow-reflection-call
C#: Remove false-positive reflection calls in dataflow
2024-12-12 14:43:13 +01:00
Owen Mansel-Chan
26b52078c0 Add change note 2024-12-12 13:41:35 +00:00
Owen Mansel-Chan
8703e21f62 Merge pull request #17996 from owen-mc/java/lightweight-IR-layer-classes
Java: Make separate classes for different control flow node kinds
2024-12-12 13:36:54 +00:00
Geoffrey White
44a0ad2942 Update data-flow -> data flow in all versions of ConceptsShared.qll. 2024-12-12 13:36:26 +00:00
Michael Nebel
9c0dddb4d8 Merge pull request #18267 from michaelnebel/csharp/updateglobaljson
C#: Update global.json for cshtml_standalone_flowsteps.
2024-12-12 13:55:03 +01:00
Michael Nebel
cbae2cf7fa Rust: Move test utilities into the query pack. 2024-12-12 13:54:42 +01:00
Michael Nebel
9ecacddf79 Swift: Update all test util paths to point to the new location. 2024-12-12 13:54:40 +01:00
Michael Nebel
ca66153a3b Swift: Move test utilities into the query pack. 2024-12-12 13:54:38 +01:00
Michael Nebel
138e294dae Ruby: Update all test util paths to point to the new location. 2024-12-12 13:54:37 +01:00
Michael Nebel
157afff135 Ruby: Move test utilities into the query pack. 2024-12-12 13:54:35 +01:00
Michael Nebel
2ca6147932 QL: Update all test util paths to point to the new location. 2024-12-12 13:54:33 +01:00
Michael Nebel
dd06d50b7f QL: Move test utilities into the src folder. 2024-12-12 13:54:32 +01:00
Michael Nebel
2321ca59f6 Python: Update all test util paths to point to the new location. 2024-12-12 13:54:30 +01:00
Michael Nebel
1490400ab0 Python: Move test utilities into the query pack. 2024-12-12 13:54:28 +01:00
Michael Nebel
c3fe3e468c Javascript: Update all test util paths to point to the new location. 2024-12-12 13:54:25 +01:00
Michael Nebel
0f146f1486 Javascript: Move test utilities into the query pack. 2024-12-12 13:54:23 +01:00
Michael Nebel
96fe1449f8 Go: Update all test util paths to point to the new location. 2024-12-12 13:54:21 +01:00
Jeroen Ketema
35403d4299 C++: Fix IR printing when multiple edges point to the same block 2024-12-12 13:46:45 +01:00
Jeroen Ketema
e43f7fbb48 C++: Fix AST printing for OverloadedArrayExpr 2024-12-12 13:44:24 +01:00
Jeroen Ketema
0a7ed159a4 C++: Add test that show that PrintAST is broekn for OverloadedArrayExpr 2024-12-12 13:40:22 +01:00
Owen Mansel-Chan
8e11789186 Restore asStmt, asExpr and asCall to Node
It doesn't really make sense to define them in terms of dispatch.
2024-12-12 12:30:01 +00:00
Michael Nebel
f8e0c4799d Go: Move test utilities into the query pack. 2024-12-12 13:21:35 +01:00
Michael Nebel
12008b4b4e C++: Update all test util paths to point to the new location. 2024-12-12 13:21:34 +01:00
Michael Nebel
47813e17c9 C++: Move test utilities into the query pack. 2024-12-12 13:21:32 +01:00
Michael Nebel
82f8a796e1 C#: Update all test util paths to point to the new location. 2024-12-12 13:21:31 +01:00
Michael Nebel
c4b4be9372 C#: Move test utilities into the query pack. 2024-12-12 13:21:29 +01:00
Michael Nebel
c7c3f6bd80 C#: Update inline-tests query paths. 2024-12-12 13:21:28 +01:00
Michael Nebel
8fbd4a2cd5 C#: Move inline-tests into the utils test folder. 2024-12-12 13:21:26 +01:00
Michael Nebel
0a1d2d0bbb Java: Update all test util paths to point to the new location. 2024-12-12 13:21:25 +01:00
Michael Nebel
91cfb30513 Java: Move test utilities to the java query pack. 2024-12-12 13:21:22 +01:00
Asger F
97b78e752b JS: Added more qldoc 2024-12-12 13:10:52 +01:00
Paolo Tranquilli
173d11d544 Bazel: add a test wrapper around installation scripts
This hack is meant to be an optimization when using install for tests,
where the install step is skipped if nothing changed. If the
installation directory is somehow messed up, `bazel run` can be used to
force install.

This is added as a `<name>-installer-as-test` target, which we can now
use in our internal pytest integration to skip the installation step if
nothing changed on the CLI + language packs side.
2024-12-12 13:08:58 +01:00
Owen Mansel-Chan
3f7c37e1ed Treat container flow as taint flow in global taint flow 2024-12-12 11:41:32 +00:00
Geoffrey White
611d04e221 Rust: Revert stylistic change in shared file. 2024-12-12 11:30:23 +00:00
Geoffrey White
1d72b750b7 Rust: data-flow -> data flow. 2024-12-12 11:29:23 +00:00
Paolo Tranquilli
5ca89eaede Merge branch 'main' into redsun82/swift-6 2024-12-12 12:28:47 +01:00
Geoffrey White
d2cfcb4c9e Update rust/ql/lib/codeql/rust/internal/ConceptsShared.qll
Co-authored-by: Simon Friis Vindum <paldepind@github.com>
2024-12-12 11:28:04 +00:00
Owen Mansel-Chan
e13c4b7550 Treat container flow as taint flow in localTaintStep 2024-12-12 10:41:23 +00:00
Simon Friis Vindum
16dcc5c278 Rust: Add variable capture consistency query 2024-12-12 11:23:22 +01:00
Simon Friis Vindum
9fe7bb3e2b Rust: Address PR comments 2024-12-12 11:19:14 +01:00
Simon Friis Vindum
2cf043cfbc Rust: Address PR comments 2024-12-12 10:19:53 +01:00
Simon Friis Vindum
59f3f1f1e9 Apply suggestions from code review
Co-authored-by: intrigus-lgtm <60750685+intrigus-lgtm@users.noreply.github.com>
2024-12-12 08:58:35 +01:00
Owen Mansel-Chan
8d5759dbdf Update remote repository to github/codeql 2024-12-11 21:51:19 +00:00
Geoffrey White
591db05610 Rust: Formatting. 2024-12-11 16:49:29 +00:00
Geoffrey White
ad75906672 Apply suggestions from code review
Co-authored-by: Tom Hvitved <hvitved@github.com>
2024-12-11 16:44:00 +00:00
Owen Mansel-Chan
066db766ef Merge pull request #18153 from owen-mc/java/resttemplate-getforobject
Java: add SSRF sink model for the third parameter of `RestTemplate.getForObject`
2024-12-11 16:37:35 +00:00
Jami
538dee81b6 Merge pull request #18214 from jcogs33/jcogs33/java/file-getname-path-sanitizer
Java: add File.getName as a path injection sanitizer
2024-12-11 10:18:02 -05:00
Simon Friis Vindum
94b037fad1 Rust: Instantiate variable capture library for data flow 2024-12-11 15:44:17 +01:00
Owen Mansel-Chan
1420bce36a Move import statement in SpringWebClient.qll 2024-12-11 14:19:24 +00:00
Simon Friis Vindum
e8357a648d Rust: Add additional data flow tests 2024-12-11 14:56:16 +01:00
Tom Hvitved
40d9460698 Data flow: Remove unused column from flowThroughOutOfCall 2024-12-11 14:35:32 +01:00
Anders Schack-Mulligen
066cfa31d2 Merge pull request #18258 from aschackmull/dataflow/simplify-apapprox3
Dataflow: Simplify references to access paths from prior stage.
2024-12-11 14:23:31 +01:00
Owen Mansel-Chan
4f8645b4dd Merge pull request #18235 from owen-mc/go/varargs-out-param
Go: Improve data flow out of variadic parameter
2024-12-11 13:18:29 +00:00
Tom Hvitved
fc70024f52 C#: Remove false-positive reflection calls in dataflow 2024-12-11 14:15:58 +01:00
Tom Hvitved
22aaf74184 Merge pull request #18231 from hvitved/rust/models-as-data-summaries
Rust: Models-as-data for flow summaries
2024-12-11 13:37:09 +01:00
Asger F
f8abc5afee Merge pull request #18204 from asgerf/jss/flow-labels
JS: Migrate away from FlowLabel class in TaintedPath
2024-12-11 13:20:48 +01:00
Asger F
889100a243 Java: update test output with provenance 2024-12-11 13:19:47 +01:00
Asger F
afdbf2c3c6 Java: update test to account for key,val 2024-12-11 13:19:36 +01:00
Asger F
736388809d Java: MethodAccess -> MethodCall 2024-12-11 13:19:25 +01:00
Ian Lynagh
34aefb4bc5 Merge pull request #18268 from igfoo/igfoo/kot-tests-ignore
Kotlin: git-ignore .testproj directories in tests
2024-12-11 12:08:44 +00:00
Ian Lynagh
699734611e Kotlin: git-ignore .testproj directories in tests 2024-12-11 12:00:23 +00:00
Michael Nebel
f7ad150636 C#: Update global.json for cshtml_standalone_flowsteps. 2024-12-11 12:57:42 +01:00
Owen Mansel-Chan
ec5d655d7f Look up remote name instead of using origin 2024-12-11 11:02:45 +00:00
Asger F
f9c0ba3826 Ruby: use DeduplicatePathGraph in CodeInjection query 2024-12-11 11:48:15 +01:00
Asger F
815581dc11 JS: Update to account for key,val pairs on edges 2024-12-11 11:48:13 +01:00
Owen Mansel-Chan
aaa4361120 Rearrange member predicates in ControlFlow::Node
Put all the ones which might need to be overrridden by subclasses
together for ease of reading.
2024-12-11 10:34:18 +00:00
Owen Mansel-Chan
79f4f78fc2 Make separate classes for control flow node kinds
This puts all the logic of a particular control flow node kind into one
place and makes it easier to add new kinds.
2024-12-11 10:34:16 +00:00
Asger F
5aa1242117 Shared: use a call bit when tracking reachability to/from a discriminator 2024-12-11 11:29:14 +01:00
Asger F
0eb543e0a9 Java: add test for spurious flow from path graph deduplication 2024-12-11 11:29:13 +01:00
Asger F
8efdc2df7b Shared: change note 2024-12-11 11:29:11 +01:00
Asger F
cba7b98f7a Shared: Add DataFlow::DeduplicatePathGraph 2024-12-11 11:29:10 +01:00
Anders Schack-Mulligen
cac131df37 Dataflow: Rename a couple of predicates. 2024-12-11 11:22:42 +01:00
Anders Schack-Mulligen
d6a4080baf Dataflow: Address review comment. 2024-12-11 11:18:57 +01:00
Cornelius Riemenschneider
f0971684e3 Merge pull request #18257 from github/criemen/bazel-8-00
Upgrade bazel to 8.0.0.
2024-12-11 11:14:41 +01:00
Paolo Tranquilli
a36d226d0c Merge pull request #18247 from github/redsun82/executable-scripts
Make scripts executable
2024-12-11 10:42:57 +01:00
Tom Hvitved
baf186fed7 Address review comments 2024-12-11 10:28:32 +01:00
Owen Mansel-Chan
ba9d21ec98 Merge pull request #17970 from owen-mc/java/lightweight-IR-layer
Java: IPA the CFG (second try)
2024-12-10 23:57:52 +00:00
Owen Mansel-Chan
5b575113c3 Update test-kotlin2 2024-12-10 15:56:15 +00:00
Owen Mansel-Chan
4978a6eb37 Fix getasuccessor kotlin
The change in results shows that there are now fewer control flow nodes.
We have removed precisely those with no successor or predecessor.
2024-12-10 15:26:20 +00:00
Owen Mansel-Chan
5e0c3ab715 Fix kotlin tests 2024-12-10 15:26:19 +00:00
Owen Mansel-Chan
3f5886ef7a Accept another review suggestion 2024-12-10 15:26:17 +00:00
Owen Mansel-Chan
2da9bfb1a6 Finish renaming getCFGNode to getCfgNode 2024-12-10 15:26:16 +00:00
Owen Mansel-Chan
274281f61e Apply all suggestions from code review
Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com>
2024-12-10 15:26:14 +00:00
Owen Mansel-Chan
d06dfe0ca3 Add change note 2024-12-10 15:26:13 +00:00
Owen Mansel-Chan
0f3dd6d8f1 Java: IPA the CFG 2024-12-10 15:26:11 +00:00
Anders Schack-Mulligen
da179705c3 Java: Accept expected file changes. 2024-12-10 14:52:06 +01:00
Mathias Vorreiter Pedersen
0f5786e4e6 Merge pull request #18251 from MathiasVP/fix-uncertain-array-writes
C++: Consider writes to arrays as uncertain
2024-12-10 12:38:47 +00:00
Michael Nebel
828818d355 Merge pull request #18248 from michaelnebel/csharp/enabletests
C#: Enable Semmle.Util.Tests.
2024-12-10 13:30:15 +01:00
Anders Schack-Mulligen
40f7713678 Dataflow: Minor simplification. 2024-12-10 13:28:43 +01:00
Anders Schack-Mulligen
4e155f8542 Dataflow: Insert a few getApprox calls to remove ApApprox from fwdFlow. 2024-12-10 13:23:51 +01:00
Anders Schack-Mulligen
231bf9d1c9 Dataflow: Drop ApApprox join in fwdFlowStore. 2024-12-10 13:20:27 +01:00
Michael Nebel
684c80c31a C#: Address review comments. 2024-12-10 13:13:11 +01:00
Anders Schack-Mulligen
501cbdab3c Dataflow: Remove another ApApprox join and related columns. 2024-12-10 13:12:32 +01:00
Anders Schack-Mulligen
22e0636cba Dataflow: Insert a few getApprox calls to remove even more columns. 2024-12-10 13:09:38 +01:00
Anders Schack-Mulligen
a77adadd01 Dataflow: Remove more unused columns. 2024-12-10 12:57:24 +01:00
Anders Schack-Mulligen
882a985788 Dataflow: Remove useless join. 2024-12-10 12:53:30 +01:00
Anders Schack-Mulligen
262f64f037 Dataflow: Remove unused columns. 2024-12-10 12:53:29 +01:00
Anders Schack-Mulligen
d4044062c5 Dataflow: Remove ApApprox column in out-flow. 2024-12-10 12:53:29 +01:00
Anders Schack-Mulligen
7c888ebe06 Dataflow: Replace some allowsFieldFlow,apa pairs with emptyAp boolean. 2024-12-10 12:53:29 +01:00
Anders Schack-Mulligen
c8046fa8e0 Dataflow: Drop some ApApprox columns and joins. 2024-12-10 12:53:28 +01:00
Joe Farebrother
c41c2adf38 Merge pull request #17922 from joefarebrother/python-promote-template-injection
Python: Promote Template Injection query from experimental
2024-12-10 11:12:23 +00:00
Cornelius Riemenschneider
53ca5083a9 Upgrade bazel to 8.0.0.
Previously, we were using 8.0.0rc1.
In particular, this upgrade means we need to explicitly
import more rules, as they've been moved out of the core bazel repo.
2024-12-10 12:05:37 +01:00
Asger F
77f8e8ef4e JS: Use FlowState::fromFlowLabel instead of Label::toFlowState
This works better for other queries where we don't already have a module named Label
2024-12-10 11:57:18 +01:00
Asger F
38c9023dd9 JS: FlowLabel -> FlowState in ZipSlip 2024-12-10 11:16:07 +01:00
Asger F
0cd01cb96f JS: Use node1,state1,node2,state2 naming convention in tainted path 2024-12-10 11:16:05 +01:00
Asger F
0802107d9a JS: Flow label -> flow state in TaintedPath 2024-12-10 11:16:04 +01:00
Michael Nebel
86c6df5cbd C#: Log warning when chain or certificate is not provided in the validation. 2024-12-10 10:35:48 +01:00
Michael Nebel
547af6c3c9 C#: Introduce null checks in the NugetPackageRestorer. 2024-12-10 10:31:12 +01:00
Michael Nebel
083533a673 C#: Update paket dependencies lock file. 2024-12-10 10:31:11 +01:00
Michael Nebel
37982f5854 C#: Update paket dotnet tool. 2024-12-10 10:31:09 +01:00
Michael Nebel
4275813b87 C#: Make the path tests independent. 2024-12-10 09:58:14 +01:00
Michael Nebel
0580ad060b Merge pull request #18255 from github/workflow/coverage/update
Update CSV framework coverage reports
2024-12-10 09:12:10 +01:00
github-actions[bot]
8f5822e4c6 Add changed framework coverage reports 2024-12-10 00:22:53 +00:00
Joe Farebrother
f82fa20249 Update test outputs 2024-12-09 20:37:11 +00:00
Joe Farebrother
8a778da253 Apply suggestions from docs review
Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com>
2024-12-09 19:58:00 +00:00
Joe Farebrother
462be46be9 Update test output 2024-12-09 19:57:52 +00:00
Joe Farebrother
ef1d898b0d Add qldoc 2024-12-09 19:57:39 +00:00
Joe Farebrother
ebaab89933 Formatting updates 2024-12-09 19:57:25 +00:00
Joe Farebrother
dd8b7a4a8f Add additional test for safe case in documentation 2024-12-09 19:57:19 +00:00
Joe Farebrother
55557f8dd3 Use API graohs directly 2024-12-09 19:57:07 +00:00
Joe Farebrother
6e16ed52e8 Reveiw suggestions: Spelling/grammar fixes
Co-authored-by: Taus <tausbn@github.com>
2024-12-09 19:56:59 +00:00
Joe Farebrother
0f0c1e1609 Test update 2024-12-09 19:56:46 +00:00
Joe Farebrother
494d779541 Add changenote 2024-12-09 19:56:38 +00:00
Joe Farebrother
f0163894b6 fix link in qhelp refs 2024-12-09 19:56:25 +00:00
Joe Farebrother
4602c5c905 Remove experimental version + qhelp fixes 2024-12-09 19:56:18 +00:00
Joe Farebrother
e4e02ec674 Add security severity + fix qhelp 2024-12-09 19:56:03 +00:00
Joe Farebrother
02f395f5f8 Add qhelp 2024-12-09 19:55:57 +00:00
Joe Farebrother
cea196ec61 Add concepts tests + some fixes 2024-12-09 19:55:42 +00:00
Joe Farebrother
1cb01a286d Add tests for jinja 2024-12-09 19:55:36 +00:00
Joe Farebrother
71ab82dee0 Fix qldoc, formatting, and redundant import warnings 2024-12-09 19:55:21 +00:00
Joe Farebrother
b2c13fe351 Promote template injection sinks for each framework covered
`Cheetah` was excluded as it was last updated 15 years ago and its documentation links are dead.
2024-12-09 19:55:17 +00:00
Joe Farebrother
60d8a85a9c Promote jinja sinks 2024-12-09 19:54:57 +00:00
Joe Farebrother
8647073433 Copy template injection to standard pack + add jinja sinks 2024-12-09 19:47:06 +00:00
Mathias Vorreiter Pedersen
1266b244f5 Merge pull request #18136 from MathiasVP/model-active-template-library
C++: Model Microsoft's "Active Template Library"
2024-12-09 16:05:19 +00:00
Mathias Vorreiter Pedersen
0f49ba848d C++: Accept test changes. Nothing exciting to see here. 2024-12-09 16:04:46 +00:00
Mathias Vorreiter Pedersen
9bcdfb6d01 C++: VariableAddressInstructions with array types are not single-object types. 2024-12-09 15:06:22 +00:00
Asger F
66eb458134 JS: Handle match/matchAll and unknown regexps 2024-12-09 15:38:36 +01:00
Mathias Vorreiter Pedersen
8bdd10c0c2 C++: Fix spurious columns in 'CRegKey'. 2024-12-09 14:31:17 +00:00
Mathias Vorreiter Pedersen
5f33733b6e C++: Fix 'QueryValue' model. 2024-12-09 14:27:24 +00:00
Asger F
6e7c5a3707 JS: Slightly more general getRoot() 2024-12-09 15:05:45 +01:00
Asger F
be617cee4a JS: More precise handling of .exec() 2024-12-09 15:03:51 +01:00
Asger F
703cad9e95 Expand test case 2024-12-09 15:00:56 +01:00
Asger F
2a2a4d2b67 JS: Add TaintedUrlSuffixCustomizations
Importing TaintedUrlSuffix.qll causes the flow label to materialised in unrelated queries, so:

- Renames TaintedUrlSuffix.qll to TaintedUrlSuffixCustomizations.qll
- Make the flow label class abstract
- Adds a new TaintedUrlSuffix.qll that re-exports the above file and also materialises the flow label
- Import the *Customizations.qll file from contexts where we don't want to materialise the flow label
2024-12-09 14:59:29 +01:00
Asger F
d1694013ff JS: Update test showing accidental flow label materialisation
This wouldn't be an issue once FlowLabel is completely deprecated but it will cause perf issues in the interim, so this is fixed in the next commit
2024-12-09 14:59:28 +01:00
Asger F
8fe39bdd38 JS: Update query's own output after test changes 2024-12-09 14:59:27 +01:00
Asger F
71a6a47713 JS: Fix issue with new RegExp().exec() 2024-12-09 14:59:25 +01:00
Asger F
f6d0835c64 JS: Show problem with new RegExp().exec() 2024-12-09 14:59:24 +01:00
Asger F
ef833de60e JS: Replace DocumentUrl with TaintedUrlSuffix 2024-12-09 14:59:23 +01:00
Asger F
e2b2d1c9ab JS: Allow arbitrary comments in ConsistencyChecking
Because line comments cannot be used inside JSX elements
2024-12-09 14:59:21 +01:00
Asger F
712c69ebc8 JS: Fixup the test expectations 2024-12-09 14:59:19 +01:00
Asger F
f8ff504f5c JS: Add ClientSideUrlRedirect test consistency
Update Consistency.ql again
2024-12-09 14:59:18 +01:00
Cornelius Riemenschneider
7dd10f72cb Merge pull request #18243 from github/post-release-prep/codeql-cli-2.20.0
Post-release preparation for codeql-cli-2.20.0
2024-12-09 14:58:01 +01:00
Mathias Vorreiter Pedersen
184dfc24b9 C++: Fix 'QueryStringValue' model. 2024-12-09 13:42:39 +00:00
Mathias Vorreiter Pedersen
7f87a25768 C++: Fix 'QueryMultiStringValue' model. 2024-12-09 13:41:14 +00:00
Mathias Vorreiter Pedersen
674dbce36d C++: Add taint flow through 'CRegKey::Create'. 2024-12-09 13:38:37 +00:00
Mathias Vorreiter Pedersen
db86f6aaf9 C++: Fix annotation. 2024-12-09 13:32:22 +00:00
Cornelius Riemenschneider
badc927cf8 Merge branch 'main' into post-release-prep/codeql-cli-2.20.0 2024-12-09 14:30:53 +01:00
Mathias Vorreiter Pedersen
d3dc318ba1 C++: Make 'GetValueAt' a value-preserving step. 2024-12-09 13:26:46 +00:00
Mathias Vorreiter Pedersen
d735a1433b C++: Also flow to the return value of 'operator='. 2024-12-09 13:24:21 +00:00
Mathias Vorreiter Pedersen
dcc35a5724 Merge pull request #18221 from MathiasVP/add-microsoft-aspnetcore-mvc-model
C#: Add a MaD model for `Microsoft.AspNetCore.Mvc.Controller.View`
2024-12-09 13:24:02 +00:00
Michael Nebel
5624a77176 C#: Use TEST_TEMPDIR when set for test files. 2024-12-09 13:59:59 +01:00
Tom Hvitved
2f8b04b225 Rust: Models-as-data for flow summaries 2024-12-09 13:41:55 +01:00
Michael Nebel
baa248ce65 C#: Enable Semmle.Util.Tests. 2024-12-09 13:00:52 +01:00
Cornelius Riemenschneider
57053e8ba1 Merge pull request #18245 from github/criemen/csharp-win-tests
C#: Shorten test target names to make Windows happy.
2024-12-09 12:57:40 +01:00
Cornelius Riemenschneider
798b86f6af Disable semmle.util.tests again. 2024-12-09 12:27:49 +01:00
Cornelius Riemenschneider
526dbe5901 Address review, also run semmle-util tests. 2024-12-09 12:19:01 +01:00
Jeroen Ketema
fb5aa97077 Merge pull request #18239 from jketema/typo
C++: Fix word duplication in change note
2024-12-09 10:55:13 +01:00
Cornelius Riemenschneider
18560cde9d C#: Shorten test target names to make Windows happy. 2024-12-09 10:54:04 +01:00
Paolo Tranquilli
3bc822f021 Swift: add change note for Swift 6 upgrade 2024-12-09 10:31:15 +01:00
Paolo Tranquilli
f74dcc7036 Make scripts executable 2024-12-09 10:20:46 +01:00
Geoffrey White
97ab31ab00 Merge pull request #18229 from geoffw0/self
Rust: Fix unwanted 'self' results from rust/unused-variable
2024-12-09 08:50:03 +00:00
Michael Nebel
127518e91a Merge pull request #18234 from michaelnebel/csharp/projectdependencies
C#: Clean up dependencies Newtonsoft.Json.
2024-12-09 09:08:27 +01:00
Mathias Vorreiter Pedersen
41425b157f C++: Add test with missing flow. 2024-12-08 23:47:34 +00:00
Jami Cogswell
214da9e9ad Java: add change note 2024-12-06 19:59:40 -05:00
Angela P Wen
406ac15863 Merge branch 'main' into post-release-prep/codeql-cli-2.20.0 2024-12-06 14:51:56 -08:00
github-actions[bot]
dbe8f98e18 Post-release preparation for codeql-cli-2.20.0 2024-12-06 21:19:19 +00:00
Henry Mercer
3b2e55bc2a Merge pull request #18242 from github/release-prep/2.20.0
Release preparation for version 2.20.0
2024-12-06 19:41:03 +00:00
Simon Friis Vindum
70501008b0 Merge pull request #18232 from paldepind/rust-self-capture
Rust: Fix a bug where captured `self` parameters where not considered captured
2024-12-06 20:23:38 +01:00
Mathias Vorreiter Pedersen
8a6c52967d Merge pull request #18233 from MathiasVP/fix-join-order-in-barrier-guards
C++: Fix two bad joins in barrier guards
2024-12-06 19:13:51 +00:00
Henry Mercer
92d614dbcd Add periods for consistency 2024-12-06 19:13:05 +00:00
github-actions[bot]
8c64648520 Release preparation for version 2.20.0 2024-12-06 19:10:28 +00:00
Henry Mercer
f7174f6e4d Merge pull request #18240 from github/revert-18208-release-prep/2.20.0
Revert "Release preparation for version 2.20.0"
2024-12-06 19:04:23 +00:00
Henry Mercer
a6a4ad6400 Revert "Release preparation for version 2.20.0" 2024-12-06 19:00:27 +00:00
Jeroen Ketema
3a3eb001e3 C++: Fix word duplication in change note 2024-12-06 19:53:06 +01:00
Jeroen Ketema
ee8ce1c84d Merge pull request #18222 from github/calumgrant/bmn/badly-bounded-write
C++: Fix FPs in cpp/badly-bounded-write caused by extraction errors
2024-12-06 19:50:06 +01:00
Simon Friis Vindum
9b34615a64 Rust: Update test assertions to match results 2024-12-06 19:05:53 +01:00
Michael B. Gale
5a2a784ed5 Merge pull request #18238 from github/mbg/csharp/codeql-cli-2.20.0/set-proxy-cert-file 2024-12-06 17:57:32 +00:00
Calum Grant
fa123a7215 Merge pull request #18200 from github/calumgrant/bmn/wrong-type-format-args2
C++: Fix more FPs with extraction errors on cpp/wrong-type-format-arguments
2024-12-06 17:50:56 +00:00
Paolo Tranquilli
a555a44a20 Merge pull request #18236 from geoffw0/percent
Rust: Add % of files extracted without errors to summary stats.
2024-12-06 18:01:04 +01:00
Michael B. Gale
32d757f65c C#: Create certificate from string, rather than file 2024-12-06 16:41:31 +00:00
Michael B. Gale
0d206bd0bb C#: Explicitly close writer in DependabotProxy 2024-12-06 16:41:30 +00:00
Michael B. Gale
671e61f3b3 C#: Fix possible null dereference 2024-12-06 16:41:29 +00:00
Michael B. Gale
1569621605 C#: Don't initialise DependabotProxy on Windows or macOS 2024-12-06 16:41:28 +00:00
Michael B. Gale
2bb59e2850 C#: Apply suggestions from code review for DependabotProxy 2024-12-06 16:41:27 +00:00
Michael B. Gale
174cb7c0e2 C#: Load Dependabot Proxy certificate in DependabotProxy, and implement IDisposable 2024-12-06 16:41:26 +00:00
Michael B. Gale
8886292eec C#: Set up proxy for IsFeedReachable, if configured 2024-12-06 16:41:22 +00:00
Michael B. Gale
4d5c55e533 C#: Propagate DependabotProxy instance down from DependencyManager 2024-12-06 16:39:49 +00:00
Michael B. Gale
8b5050e427 C# Expose CertificatePath from DependabotProxy 2024-12-06 16:39:48 +00:00
Michael B. Gale
4a7413cf11 C#: Use Add for environment variables 2024-12-06 16:39:47 +00:00
Michael B. Gale
84d3532a05 C#: Add more logging to DependabotProxy 2024-12-06 16:39:46 +00:00
Michael B. Gale
d6fda1ae72 C#: Set environment variables for proxy for calls to dotnet 2024-12-06 16:39:46 +00:00
Michael B. Gale
c6f089585a C#: Initialise DependabotProxy in DotNetCliInvoker 2024-12-06 16:39:45 +00:00
Michael B. Gale
459b76ac3f C#: Add DependabotProxy class 2024-12-06 16:39:44 +00:00
Michael B. Gale
a0cb9c19fa C#: Add CODEQL_PROXY_* environment variable names 2024-12-06 16:39:43 +00:00
Mathias Vorreiter Pedersen
59f4b3c0db C++: Get rid of the model for 'Create'. 2024-12-06 15:58:07 +00:00
Geoffrey White
1ceee76919 Rust: Get the .expected values right this time. 2024-12-06 15:53:42 +00:00
Mathias Vorreiter Pedersen
3d0a2057f6 C++: Fix 'BSTRToArray' stub and MaD model. 2024-12-06 15:46:14 +00:00
Owen Mansel-Chan
7e5e634bc7 Update .expected files (no new results) 2024-12-06 15:41:28 +00:00
Calum Grant
e98129c402 Update cpp/ql/src/change-notes/2024-12-05-badly-bounded-write.md
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-06 15:36:24 +00:00
Calum Grant
5aa604b42c Update cpp/ql/src/change-notes/2024-12-05-wrong-type-format-args.md
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-06 15:34:57 +00:00
Mathias Vorreiter Pedersen
66de42c576 C++: Fix MaD row for 'operator&' on 'CComBSTR's. 2024-12-06 15:33:29 +00:00
Mathias Vorreiter Pedersen
6388a9af95 C++: Delete duplicated MaD row. 2024-12-06 15:31:33 +00:00
Mathias Vorreiter Pedersen
f7b55e05eb C++: 'Attach' is value-preserving. 2024-12-06 15:30:34 +00:00
Geoffrey White
4024968e46 Rust: Accept integration test changes. 2024-12-06 15:30:02 +00:00
Mathias Vorreiter Pedersen
904db38a5f C++: Add missing space between type name and '&'. 2024-12-06 15:29:13 +00:00
Paolo Tranquilli
198417c63a Swift: fix filename case for prebuilt artifacts 2024-12-06 16:28:04 +01:00
Mathias Vorreiter Pedersen
d0bf3b84e4 C++: Add missing MaD row for move constructor. 2024-12-06 15:27:17 +00:00
Mathias Vorreiter Pedersen
9f31116630 C#: Accept test changes. 2024-12-06 15:18:03 +00:00
Mathias Vorreiter Pedersen
c51153203b C++: Fix two bad joins that happen in 'UnboundedWrite' on #18207. 2024-12-06 15:10:08 +00:00
Owen Mansel-Chan
75331ea268 Add change note 2024-12-06 15:03:34 +00:00
Owen Mansel-Chan
67572712ea Fix flow out of varargs param with models-as-data
This still doesn't allow for a variadic out parameter to be defined as
a source using MaD. This is due to the lack of an implicit store step
at sources, to match implicit read steps at sinks.
2024-12-06 15:00:40 +00:00
Owen Mansel-Chan
8cc4cd58c6 Add failing test for flow out of varargs param with models-as-data 2024-12-06 15:00:37 +00:00
Owen Mansel-Chan
96c8af8943 Test flow out of varargs param with function models 2024-12-06 15:00:34 +00:00
Owen Mansel-Chan
1612a7a9a0 Delete accidentally committed binary 2024-12-06 15:00:33 +00:00
Owen Mansel-Chan
69f087a46d Fix pre-existing failing test in VarArgsWithFunctionModels
It was failing for a silly reason.
2024-12-06 15:00:31 +00:00
Owen Mansel-Chan
ec7cbf93d9 Add failing test for flow out of varargs parameter 2024-12-06 15:00:30 +00:00
Owen Mansel-Chan
1935c26b56 Trivial variable name fixes 2024-12-06 15:00:28 +00:00
Michael Nebel
4e079d34b9 C#: Clean up dependencies Newtonsoft.Json and dont override nowarn. 2024-12-06 15:55:30 +01:00
Geoffrey White
d7d4658aae Rust: Add % of files extractor without errors to summary stats. 2024-12-06 14:54:21 +00:00
Michael Nebel
9513b6c3a9 Merge pull request #18199 from michaelnebel/csharp/updateroslyn
C#: Update Roslyn nuget dependencies.
2024-12-06 15:41:23 +01:00
Paolo Tranquilli
926d65bcec Swift: update LFS artifacts and remove override 2024-12-06 15:28:22 +01:00
Paolo Tranquilli
263bd69636 Swift: fix artifact update infrastructure 2024-12-06 15:28:13 +01:00
Geoffrey White
4b93325914 Merge branch 'main' into badcrypto 2024-12-06 14:21:11 +00:00
Geoffrey White
f637b3b1f3 Apply suggestions from code review
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
2024-12-06 14:20:40 +00:00
Michael B. Gale
e16adda74d Merge pull request #18029 from github/mbg/csharp/set-proxy-cert-file 2024-12-06 14:03:43 +00:00
Paolo Tranquilli
a82d37e05c Swift: fix gracefully accepting missing ForEachStmt.iteratorVar 2024-12-06 14:45:24 +01:00
Paolo Tranquilli
a4f7981d93 Swift: accept test changes 2024-12-06 14:44:01 +01:00
Michael Nebel
af2234453b C#: Update dependencies (binlog package needs to be updated). 2024-12-06 14:30:51 +01:00
Michael Nebel
b9253222a6 C#: Add change-note. 2024-12-06 14:30:50 +01:00
Michael Nebel
d83f2215f6 C#: Update Parameters test to only inspect parameters from source code. 2024-12-06 14:30:49 +01:00
Michael Nebel
f94aaee53c C#: Update integration tests expected output. 2024-12-06 14:30:47 +01:00
Michael Nebel
61fa889190 C#: Update the format test expected output as the params keyword is now extracted correctly. 2024-12-06 14:30:46 +01:00
Michael Nebel
6a0d56a146 C#: Update DataQuality output. Roslyn now correctly finds the compile time target. 2024-12-06 14:30:45 +01:00
Michael Nebel
347fb1cfd9 C#: Update dependencies. 2024-12-06 14:30:44 +01:00
Michael Nebel
4013eeba8b C#: Use the newest version of packages instead of the minimum version. 2024-12-06 14:30:42 +01:00
Michael Nebel
2816234359 C#: Update Roslyn. 2024-12-06 14:30:41 +01:00
Michael B. Gale
c8ccfe40a5 C#: Create certificate from string, rather than file 2024-12-06 13:13:41 +00:00
Michael B. Gale
653d68ea94 C#: Explicitly close writer in DependabotProxy 2024-12-06 13:13:15 +00:00
Simon Friis Vindum
ed68423d6e Rust: Handle captured self parameter in variable implementation 2024-12-06 14:12:27 +01:00
Calum Grant
d38975bb99 C++: Use getType() instead of getUnderlyingType() 2024-12-06 13:07:58 +00:00
Simon Friis Vindum
43dd3ebf14 Rust: Add variables test with captured self parameter 2024-12-06 14:07:42 +01:00
Geoffrey White
281f8b1828 Rust: Fix the unwanted results. 2024-12-06 12:29:07 +00:00
Geoffrey White
e52e1b0c1f Rust: Add test case for 'self' in unused entities. 2024-12-06 12:24:11 +00:00
Mathias Vorreiter Pedersen
0d616ca7ef C#: Respond to PR comments. 2024-12-06 12:23:35 +00:00
Asger F
b8d652c5b2 Merge pull request #18132 from asgerf/jss/deprecation
JS: Deprecations and related refactorings
2024-12-06 13:23:26 +01:00
Tom Hvitved
3ba87de260 Merge pull request #18220 from hvitved/rust/cache-default-additional-taint-step
Rust: Cache `defaultAdditionalTaintStep`
2024-12-06 13:04:11 +01:00
Paolo Tranquilli
f81f30cc4d Swift: accept test changes 2024-12-06 12:47:54 +01:00
Paolo Tranquilli
bed638793c Swift: remove linux QL tests check 2024-12-06 12:36:19 +01:00
Paolo Tranquilli
7ee3bf9fc8 Swift: add update/downgrade scripts 2024-12-06 12:35:01 +01:00
Paolo Tranquilli
4ac602ccd7 Merge branch 'main' into redsun82/swift-6 2024-12-06 12:31:40 +01:00
Calum Grant
defa4cc19f Merge pull request #18194 from github/calumgrant/bmn/wrong-number-format-arguments2
C++: Fix a FP in cpp/wrong-number-format-arguments caused by an extraction error
2024-12-06 10:14:06 +00:00
Calum Grant
2cd4e1af9f C++: Use Expr.stripType() 2024-12-06 09:55:05 +00:00
Geoffrey White
129f21af29 Rust: Make a predicate private. 2024-12-06 09:37:41 +00:00
Calum Grant
2da3d36092 C++: Change note 2024-12-06 09:36:51 +00:00
Michael Nebel
9715ffd9a4 Merge pull request #18205 from michaelnebel/csharp/narrowpatterntypes
C#: Narrow pattern types
2024-12-06 10:33:13 +01:00
Paolo Tranquilli
f8976142f5 Merge pull request #18224 from github/redsun82/rust-tweaks
Rust: tweak/define more `toString` implementations
2024-12-06 09:27:40 +01:00
Paolo Tranquilli
b59b90ba6d Rust: accept test changes 2024-12-06 09:12:16 +01:00
Paolo Tranquilli
d0804ac726 Merge branch 'main' into redsun82/rust-tweaks 2024-12-06 09:11:58 +01:00
Geoffrey White
4e418d3d4d Rust: Update for latest main, and autoformat. 2024-12-05 19:09:40 +00:00
Geoffrey White
de042ea9d7 Merge branch 'main' into badcrypto 2024-12-05 18:36:47 +00:00
Jeroen Ketema
829a934ccb Merge pull request #18049 from microsoft/brodes/seh_flow_phase2_splitting_seh_edges
Brodes/seh flow phase2 splitting seh edges
2024-12-05 19:36:39 +01:00
Geoffrey White
dd0fa791aa Rust: Add qhelp. 2024-12-05 18:02:44 +00:00
Geoffrey White
6eb850c8cb Rust: Improve the model. 2024-12-05 16:49:27 +00:00
Geoffrey White
94dbad7c95 Rust: Model for cipher traits. 2024-12-05 16:49:19 +00:00
Paolo Tranquilli
720bfc8ff1 Rust: tweak/define more toString implementations 2024-12-05 17:43:47 +01:00
REDMOND\brodes
3619b01ace Merge branch 'brodes/seh_flow_phase2_splitting_seh_edges' of https://github.com/microsoft/codeql into brodes/seh_flow_phase2_splitting_seh_edges 2024-12-05 10:50:17 -05:00
REDMOND\brodes
48c86979f0 Deleting unused predicate. 2024-12-05 10:50:06 -05:00
Ben Rodes
3115833847 Update cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-05 10:49:33 -05:00
Ben Rodes
6cbaa73d58 Update cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-05 10:48:40 -05:00
Ben Rodes
1fbd75fee3 Update cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-05 10:48:34 -05:00
Ben Rodes
e9ccf37d4d Update cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-05 10:48:23 -05:00
Ben Rodes
008d58b425 Update cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-05 10:48:16 -05:00
Ben Rodes
ca6d3b0038 Update cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-12-05 10:48:00 -05:00
Calum Grant
12b4c0a2dd C++: Change note 2024-12-05 15:40:50 +00:00
Ben Rodes
befca9ba0e Merge branch 'main' into brodes/seh_flow_phase2_splitting_seh_edges 2024-12-05 10:34:08 -05:00
Mathias Vorreiter Pedersen
dce29dbbd0 Merge pull request #18218 from MathiasVP/final-alias-edge-kind
C++: Use a final alias for `EdgeKind`
2024-12-05 15:32:59 +00:00
Geoffrey White
eeeb142f0b Rust: Implement the query. 2024-12-05 15:22:10 +00:00
Geoffrey White
07e3421f6f Rust: Add shared ConceptsShared.qll, CryptoAlgorithms.qll and CryptoAlgorithmNames.qll to Rust. 2024-12-05 15:22:09 +00:00
Geoffrey White
6c4e0a99e2 Rust: A few more test cases. 2024-12-05 15:17:22 +00:00
Calum Grant
7aed4c3cbf C++: Change note 2024-12-05 15:13:38 +00:00
REDMOND\brodes
57fc3fbfe3 Switching from isSeh bools to sublcassed ExceptionEdge. 2024-12-05 10:10:56 -05:00
Mathias Vorreiter Pedersen
41f08d9b84 C#: Accept test changes. 2024-12-05 14:59:37 +00:00
Mathias Vorreiter Pedersen
4af18be70b C#: Add change note. 2024-12-05 14:42:59 +00:00
Calum Grant
b7f47f752b C++: Remove FPs from cpp/badly-bounded-write 2024-12-05 14:37:19 +00:00
REDMOND\brodes
defa8696d3 Merge remote-tracking branch 'mathiasvp/final-alias-edge-kind' into brodes/seh_flow_phase2_splitting_seh_edges
# Conflicts:
#	cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll
2024-12-05 09:35:13 -05:00
Tom Hvitved
ed4819aeab Rust: Cache defaultAdditionalTaintStep 2024-12-05 15:19:11 +01:00
Tom Hvitved
7eb3b40977 Merge pull request #18219 from hvitved/rust/update-inline-expectations
Rust: update inline expectations
2024-12-05 15:11:25 +01:00
yoff
81c8a702ff Merge pull request #18112 from github/tausbn/add-api-graph-support-for-parameter-annotations 2024-12-05 15:05:27 +01:00
Mathias Vorreiter Pedersen
5bebfdeb2a C#: Add a MaD model for the 'Microsoft.AspNetCore.Mvc.Controller.View' method. 2024-12-05 13:59:59 +00:00
Tom Hvitved
1c56692c02 Rust: update inline expectations 2024-12-05 14:43:39 +01:00
Geoffrey White
bdb2f3d091 Rust: Add placeholder query and tests for 'cipher' module. 2024-12-05 13:38:57 +00:00
Calum Grant
fd7469848e C++: Test case for cpp/badly-bounded-write 2024-12-05 13:16:59 +00:00
Mathias Vorreiter Pedersen
667abb19d7 C++: Expose a final alias instead of the abstract class. 2024-12-05 13:13:44 +00:00
Michael B. Gale
952488c2d8 C#: Fix possible null dereference 2024-12-05 12:32:55 +00:00
Michael B. Gale
7369d043ed C#: Don't initialise DependabotProxy on Windows or macOS 2024-12-05 12:25:45 +00:00
Michael B. Gale
2e80e09f52 C#: Apply suggestions from code review for DependabotProxy 2024-12-05 12:15:27 +00:00
Michael B. Gale
ee7f0b0f2a C#: Load Dependabot Proxy certificate in DependabotProxy, and implement IDisposable 2024-12-05 12:15:26 +00:00
Michael B. Gale
ca251fb840 C#: Set up proxy for IsFeedReachable, if configured 2024-12-05 12:15:23 +00:00
Michael B. Gale
984091d4a4 C#: Propagate DependabotProxy instance down from DependencyManager 2024-12-05 12:14:29 +00:00
Michael B. Gale
e999ec1ecf C# Expose CertificatePath from DependabotProxy 2024-12-05 12:14:28 +00:00
Michael B. Gale
87bd21e12c C#: Use Add for environment variables 2024-12-05 12:14:27 +00:00
Michael B. Gale
de415d68cf C#: Add more logging to DependabotProxy 2024-12-05 12:14:26 +00:00
Michael B. Gale
6cd5711313 C#: Set environment variables for proxy for calls to dotnet 2024-12-05 12:14:25 +00:00
Michael B. Gale
8ca75602d8 C#: Initialise DependabotProxy in DotNetCliInvoker 2024-12-05 12:14:25 +00:00
Michael B. Gale
232caa7185 C#: Add DependabotProxy class 2024-12-05 12:14:24 +00:00
Michael B. Gale
537601290b C#: Add CODEQL_PROXY_* environment variable names 2024-12-05 12:14:23 +00:00
Michael B. Gale
05f9a90fd7 Merge pull request #18216 from github/dependabot/go_modules/go/extractor/extractor-dependencies-288d2c81da
Bump golang.org/x/tools from 0.27.0 to 0.28.0 in /go/extractor in the extractor-dependencies group
2024-12-05 11:53:11 +00:00
Owen Mansel-Chan
347fd575a2 Refactor to avoid duplicated logic 2024-12-05 11:15:43 +00:00
Simon Friis Vindum
43e3f8406d Merge pull request #18188 from paldepind/rust-df-array
Rust: Basic data flow through arrays
2024-12-05 12:09:22 +01:00
Simon Friis Vindum
3061d4a516 Rust: Minor tweaks 2024-12-05 11:53:12 +01:00
Owen Mansel-Chan
b20b7c7572 Remove escaped "{" and "}" before counting placeholders 2024-12-05 10:43:13 +00:00
Simon Friis Vindum
1f4e7d1f37 Rust: Handle arrays in taint tracking 2024-12-05 11:41:32 +01:00
Simon Friis Vindum
44239cbf2e Rust: Add taint tests for arrays 2024-12-05 11:39:05 +01:00
Simon Friis Vindum
27de43fed8 Merge branch 'main' into rust-df-array 2024-12-05 11:08:54 +01:00
Michael Nebel
80be95dbf9 Merge pull request #18090 from michaelnebel/csharp/locks
C#: Use dedicated lock type where applicable.
2024-12-05 10:52:34 +01:00
Jeroen Ketema
65a4dc31c1 Merge pull request #18213 from MathiasVP/fix-join-order-in-guarded-free
C++: Fix a join-order problem that happens on #18207
2024-12-05 10:39:51 +01:00
Simon Friis Vindum
1dbcaa0ece Merge pull request #18202 from paldepind/rust-taint
Rust: Add default taint flow steps
2024-12-05 10:31:11 +01:00
Anders Schack-Mulligen
4bf63fedc9 Merge pull request #18179 from aschackmull/dataflow/accesspath-notypes
Dataflow: Remove tracked types from Access Paths, track tainted object type, and tweak type pruning.
2024-12-05 09:58:36 +01:00
Simon Friis Vindum
5b6ce3e0d0 Merge branch 'main' into rust-taint 2024-12-05 09:34:25 +01:00
Paolo Tranquilli
c4e53b842d Merge pull request #18165 from github/redsun82/rust-less-canonical-paths
Rust: restrict canonical path calculations
2024-12-05 08:57:41 +01:00
dependabot[bot]
d25045c936 Bump golang.org/x/tools
Bumps the extractor-dependencies group in /go/extractor with 1 update: [golang.org/x/tools](https://github.com/golang/tools).


Updates `golang.org/x/tools` from 0.27.0 to 0.28.0
- [Release notes](https://github.com/golang/tools/releases)
- [Commits](https://github.com/golang/tools/compare/v0.27.0...v0.28.0)

---
updated-dependencies:
- dependency-name: golang.org/x/tools
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: extractor-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-05 03:26:59 +00:00
Jami Cogswell
121780c55a Java: add File.getName as a path injection sanitizer 2024-12-04 18:57:51 -05:00
Henry Mercer
ccfb32e989 Merge pull request #18211 from github/post-release-prep/codeql-cli-2.20.0
Post-release preparation for codeql-cli-2.20.0
2024-12-04 20:45:07 +00:00
Andrew Eisenberg
515c65058e Merge pull request #18212 from github/aeisenberg/artifacts-v4
Update action.yml to use artifacts@v4
2024-12-04 12:26:41 -08:00
Mathias Vorreiter Pedersen
6fd9e19673 C++: Fix a join-order problem that happens on #18207. 2024-12-04 20:10:45 +00:00
Andrew Eisenberg
1ac6c3751b Update action.yml to use artifacts@v4
v3 is getting deprecated.
2024-12-04 11:41:40 -08:00
github-actions[bot]
cf71a1525b Post-release preparation for codeql-cli-2.20.0 2024-12-04 18:36:17 +00:00
Ben Rodes
779376e281 Merge branch 'main' into brodes/seh_flow_phase2_splitting_seh_edges 2024-12-04 13:30:21 -05:00
REDMOND\brodes
cc43bb1969 Merge branch 'brodes/seh_flow_phase1_throwing_models' into brodes/seh_flow_phase2_splitting_seh_edges 2024-12-04 13:28:21 -05:00
Henry Mercer
80bd129621 Merge pull request #18208 from github/release-prep/2.20.0
Release preparation for version 2.20.0
2024-12-04 16:06:17 +00:00
Henry Mercer
e0e82ad7ad Add periods for consistency 2024-12-04 16:05:15 +00:00
github-actions[bot]
96564b7128 Release preparation for version 2.20.0 2024-12-04 16:01:14 +00:00
Calum Grant
147d699133 C++: Add another test case 2024-12-04 15:45:17 +00:00
Simon Friis Vindum
d6ab7d2aff Merge branch 'main' into rust-taint 2024-12-04 15:28:30 +01:00
Owen Mansel-Chan
f56b2c912a Merge pull request #18201 from owen-mc/go/mad/improve-externalflowinheritance-tests
Go: Fix some spurious results in ExternalFlowInheritance tests
2024-12-04 14:24:30 +00:00
Henry Mercer
02752fa051 Merge pull request #18206 from github/henrymercer/merge-back-rc-3.16
Merge `rc/3.16` back to `main`
2024-12-04 14:20:49 +00:00
Mathias Vorreiter Pedersen
4f00e229e0 C++: Accept more test changes. 2024-12-04 13:49:07 +00:00
Michael Nebel
38e3913fa9 C#: Remove redundant using statements. 2024-12-04 14:46:15 +01:00
Michael Nebel
dde0281d25 C#: Use dedicated lock type where applicable. 2024-12-04 14:46:14 +01:00
Michael Nebel
57c3b571ab C#: Narrow types to SingleVariableDesignation syntax (to avoid future compiler warning). 2024-12-04 14:43:52 +01:00
Michael Nebel
c6d2bf2046 C#: Add extra flag to tracing debugging launch. 2024-12-04 14:43:51 +01:00
Michael Nebel
4a0875f78d Merge pull request #18091 from michaelnebel/csharp/net9-3
C#: Bazel build should target .NET9 framework.
2024-12-04 14:41:38 +01:00
Henry Mercer
963f084d87 Merge branch 'main' into henrymercer/merge-back-rc-3.16 2024-12-04 13:39:10 +00:00
Paolo Tranquilli
08de0b40ed Merge branch 'main' into redsun82/rust-less-canonical-paths 2024-12-04 14:35:10 +01:00
Paolo Tranquilli
80d466ffea Merge pull request #18116 from github/redsun82/rust-perf-measures
Rust: add some performance diagnostics
2024-12-04 14:31:06 +01:00
Simon Friis Vindum
3004639fca Rust: Add default taint flow steps 2024-12-04 14:11:05 +01:00
Simon Friis Vindum
a19f1d0b8b Rust: Remove store step for repeat operand in array expression 2024-12-04 14:01:53 +01:00
Simon Friis Vindum
c62b7d139f Merge branch 'main' into rust-df-array 2024-12-04 13:55:26 +01:00
Jeroen Ketema
9c4030ed45 Merge pull request #18014 from microsoft/brodes/seh_flow_phase1_throwing_models
Brodes/seh flow phase1 throwing models
2024-12-04 13:55:05 +01:00
Mathias Vorreiter Pedersen
279a30c7e8 C++: Make 'SetAt' a value-preserving step. 2024-12-04 12:52:41 +00:00
Mathias Vorreiter Pedersen
c7dee4b020 C++: Remove more taint to POSITIONs. 2024-12-04 12:52:13 +00:00
Mathias Vorreiter Pedersen
9dc3aecf67 C++: Remove more taint to POSITIONs. 2024-12-04 12:48:55 +00:00
Mathias Vorreiter Pedersen
de75e033be C++: Remove taint to POSITIONs. 2024-12-04 12:46:14 +00:00
Mathias Vorreiter Pedersen
8d035e61a3 C++: Fix test. 2024-12-04 12:33:02 +00:00
Simon Friis Vindum
70a296be89 Rust: Add string slice taint flow test 2024-12-04 13:24:15 +01:00
yoff
f2d457d083 Merge pull request #18145 from github/tausbn/python-add-guide-for-extending-the-parser
Python: Add guide describing how to extend the parser
2024-12-04 13:07:05 +01:00
Owen Mansel-Chan
ec0c0f1b35 Fix some spurious results in ExternalFlowInheritance tests
Several struct types were being considered as the same. The fix is to
give them unique fields.
2024-12-04 11:57:32 +00:00
Simon Friis Vindum
2ada999728 Rust: Include as expression in CFG nodes 2024-12-04 12:56:54 +01:00
Simon Friis Vindum
f10ffa39e4 Rust: Add tests for taint flow 2024-12-04 12:54:36 +01:00
Simon Friis Vindum
b7792d690c Merge pull request #18163 from paldepind/rust-df-try-expr
Rust: Add flow through `?` operator
2024-12-04 12:45:32 +01:00
Geoffrey White
b54d8dc6bd Merge pull request #18176 from geoffw0/ctor2
Rust: Improve rust/ctor-initialization
2024-12-04 11:07:51 +00:00
Calum Grant
28c5187a3c C++: Remove FPs in cpp/wrong-type-format-argument when string type is an error 2024-12-04 11:02:19 +00:00
Calum Grant
19424020c3 C++: Test for erroneous string types 2024-12-04 10:57:15 +00:00
Jeroen Ketema
10592bb1c4 Merge pull request #18192 from jketema/inline-rm
Remove deprecated `InlineExpectationsTest` class-based API
2024-12-04 11:34:39 +01:00
Simon Friis Vindum
ed6f873478 Merge branch 'main' into rust-df-try-expr 2024-12-04 11:33:41 +01:00
Anders Schack-Mulligen
03fdceb0fd Merge pull request #18191 from aschackmull/dataflow/remove-deprecated-lib
Dataflow: Delete the old configuration-class based api.
2024-12-04 11:31:46 +01:00
Paolo Tranquilli
7e107a4520 Merge branch 'main' into redsun82/rust-less-canonical-paths 2024-12-04 11:24:48 +01:00
Anders Schack-Mulligen
c187a7ad34 Dataflow: Address review comments. 2024-12-04 11:22:51 +01:00
Paolo Tranquilli
c0676f4269 Merge pull request #18198 from github/redsun82/rust-tuple-struct-pat-to-string
Rust: improve `TupleStructPat.toString`
2024-12-04 11:20:42 +01:00
Mathias Vorreiter Pedersen
eefa066d44 Merge pull request #18195 from MathiasVP/dynamic-property-field-flow
C#: Add field-flow for dynamic fields
2024-12-04 10:09:20 +00:00
Paolo Tranquilli
9da7e8a04f Merge pull request #18142 from github/redsun82/swift-6-for-each-vars
Swift: extract variables as children of `ForEachStmt`
2024-12-04 11:08:35 +01:00
Paolo Tranquilli
b6f0ae0460 Rust: accept test changes 2024-12-04 11:05:01 +01:00
Simon Friis Vindum
7092f13584 Merge branch 'main' into rust-df-try-expr 2024-12-04 10:59:07 +01:00
Jonas Jensen
5285fc0698 Merge pull request #18197 from github/cklin/restrict-alerts-to-all-or-none
AlertFiltering: prohibit partial filtering
2024-12-04 10:58:03 +01:00
Paolo Tranquilli
66e4acf53e Rust: accept test changes 2024-12-04 10:56:14 +01:00
Simon Friis Vindum
4371433eb6 Merge pull request #18160 from paldepind/rust-df-closure
Rust: Handle closures/lambdas in data flow
2024-12-04 10:53:45 +01:00
Paolo Tranquilli
31b9b3adaa Merge branch 'main' into redsun82/rust-perf-measures 2024-12-04 10:50:37 +01:00
Paolo Tranquilli
b9be002e01 Rust: improve TupleStructPat.toString 2024-12-04 10:47:41 +01:00
Paolo Tranquilli
59ea563d2a Merge branch 'main' into redsun82/rust-less-canonical-paths 2024-12-04 10:44:11 +01:00
Michael Nebel
7463c51026 Merge pull request #18189 from michaelnebel/csharp/updatemessagepack
C#: Update the MessagePack nuget dependency.
2024-12-04 10:37:38 +01:00
Simon Friis Vindum
33fe51da4e Update rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll
Co-authored-by: Tom Hvitved <hvitved@github.com>
2024-12-04 10:37:30 +01:00
Simon Friis Vindum
547e232d3b Merge pull request #18174 from github/redsun82/rust-tweaks
Rust: rename `TypeRef` and `*Type` to `*TypeRepr`, `ty` to `type_repr`, and expand some abbreviations in generated docs
2024-12-04 10:36:48 +01:00
Paolo Tranquilli
e30a429c3d Rust: revert TupleStructPat.toString improvements 2024-12-04 10:34:28 +01:00
Anders Schack-Mulligen
5042753b29 C#/Java: Add change notes. 2024-12-04 10:20:43 +01:00
Michael Nebel
c6e936f2c3 C#: Update generics test and expected output from other tests. 2024-12-04 09:56:12 +01:00
Michael Nebel
a1e2e920f4 C#: Run unit tests on bazel changes. 2024-12-04 09:56:11 +01:00
Michael Nebel
1aa6056bd8 C#: Bazel build should target .NET9 framework. 2024-12-04 09:56:09 +01:00
Michael Nebel
801f696bbb Merge pull request #18159 from michaelnebel/csharp/publicprotected
C#: Only extract public and protected members from metadata.
2024-12-04 09:48:36 +01:00
Paolo Tranquilli
53503002a1 Merge branch 'main' into redsun82/rust-tweaks 2024-12-04 09:35:01 +01:00
Paolo Tranquilli
4bf7bbb696 Merge pull request #18190 from github/redsun82/rust-array-expr
Rust: distinguish `[a, b]` from `[a; b]`
2024-12-04 09:30:19 +01:00
Simon Friis Vindum
bb015cf56d Merge branch 'main' into rust-df-closure 2024-12-04 09:25:18 +01:00
Simon Friis Vindum
f4aa3603ad Rust: Do not consider async blocks as lambda expressions 2024-12-04 09:23:12 +01:00
Chuan-kai Lin
63c8769323 AlertFiltering: prohibit partial filtering
This documentation-only commit clarifies that a query should either
ignore restrictAlertsTo completely or apply restrictAlertsTo filtering
to all alerts.  This update eliminates the ambiguity on whether a query
may choose to apply restrictAlertsTo filtering to only some alerts but
not others (it may not).
2024-12-03 12:26:35 -08:00
Mathias Vorreiter Pedersen
9885a1cad1 Update csharp/ql/lib/change-notes/2024-12-03-dynamic-field-flow.md 2024-12-03 19:58:22 +00:00
Mathias Vorreiter Pedersen
919405e586 C#: Support mixing dynamic properties and fields (instead of just properties) and accept test changes. 2024-12-03 19:36:42 +00:00
Mathias Vorreiter Pedersen
14c4d949d6 C#: Include tests with fields as well as properties. 2024-12-03 19:34:06 +00:00
Mathias Vorreiter Pedersen
c3086d4ecd C++: Fix models and accept test changes. 2024-12-03 19:13:00 +00:00
Anders Schack-Mulligen
8c99ad4fcb Ruby: Remove deprecated configuration classes referencing deleted api. 2024-12-03 20:08:46 +01:00
Anders Schack-Mulligen
8a5fc97b06 Python: Remove deprecated configuration classes referencing deleted api. 2024-12-03 20:08:45 +01:00
Anders Schack-Mulligen
f38602e9fe Java: Update references to deleted aliases. 2024-12-03 20:08:45 +01:00
Anders Schack-Mulligen
b12a1c078c Java: Delete deprecated extension points referencing deleted api. 2024-12-03 20:08:44 +01:00
Anders Schack-Mulligen
e846855bca Go: Remove deprecated configuration classes referencing deleted api. 2024-12-03 20:08:44 +01:00
Anders Schack-Mulligen
dbb260dfd2 C#: Remove reference to the deleted api. 2024-12-03 20:08:44 +01:00
Anders Schack-Mulligen
a66de28d8e C++: Remove references to the deleted api. 2024-12-03 20:08:32 +01:00
Mathias Vorreiter Pedersen
3abb9049bb C++: Fix testcase to reveal problematic models. 2024-12-03 19:06:20 +00:00
Anders Schack-Mulligen
cca27e4c77 Add change notes for all languages. 2024-12-03 19:42:33 +01:00
Jeroen Ketema
3d8493757e JS: Update expected test results 2024-12-03 19:19:01 +01:00
Jeroen Ketema
89d20fd086 Java: Update expected test results 2024-12-03 19:18:59 +01:00
Jeroen Ketema
c3ea883b11 Python: Update expected test results 2024-12-03 19:18:57 +01:00
Jeroen Ketema
1420f564a5 C++: Update expected test results 2024-12-03 19:18:55 +01:00
Jeroen Ketema
e89f37df1a Rust: Update expected test results 2024-12-03 19:18:52 +01:00
Jeroen Ketema
99cbeb7eb6 Go: Update expected test results 2024-12-03 19:18:50 +01:00
Jeroen Ketema
67052bf9e5 Swift: Update expected test results 2024-12-03 19:18:48 +01:00
Jeroen Ketema
ca40b60e62 Ruby: update expected test results 2024-12-03 19:18:46 +01:00
Jeroen Ketema
8271ad60c1 Remove deprecated InlineExpectationsTest class-based API 2024-12-03 19:18:37 +01:00
Mathias Vorreiter Pedersen
593e2233f8 C++: Update test changes after 0c8245f727. 2024-12-03 17:55:59 +00:00
Mathias Vorreiter Pedersen
0c8245f727 Update cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp
Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
2024-12-03 17:53:01 +00:00
Mathias Vorreiter Pedersen
2c58279137 C++: Add QLDoc to 'isClassConstructedFrom' and 'isFunctionConstructedFrom'. 2024-12-03 17:52:29 +00:00
Mathias Vorreiter Pedersen
da7bfb9297 C#: Add change note. 2024-12-03 17:38:26 +00:00
Mathias Vorreiter Pedersen
4a2c02543c C#: Accept test changes. 2024-12-03 17:34:57 +00:00
Mathias Vorreiter Pedersen
041df780c1 C#: Add field-flow through dynamic members. 2024-12-03 17:34:55 +00:00
Mathias Vorreiter Pedersen
d22ef44f44 C#: Add tests with missing flow through dynamic members. 2024-12-03 17:27:59 +00:00
Calum Grant
99efff2217 C++: Fix a FP in cpp/wrong-number-format-arguments caused by extraction error 2024-12-03 16:40:02 +00:00
Calum Grant
08859be07b C++: Test case for cpp/wrong-number-format-arguments 2024-12-03 16:33:40 +00:00
REDMOND\brodes
e6641e7630 Code and comment simplifications 2024-12-03 11:06:08 -05:00
Simon Friis Vindum
70c60868a6 Rust: Model ? as reading from Option and Result 2024-12-03 17:01:34 +01:00
Michael Nebel
395bdd0cec C#: Address more review comments. 2024-12-03 16:58:30 +01:00
Michael Nebel
6928f7d443 C#: Address review comment. 2024-12-03 16:36:16 +01:00
Michael Nebel
309202ef89 C#: Update the MessagePack nuget dependency. 2024-12-03 16:24:05 +01:00
Paolo Tranquilli
8a1136ddcb Merge branch 'main' into redsun82/rust-less-canonical-paths 2024-12-03 16:23:22 +01:00
Simon Friis Vindum
b50834aee8 Rust: Add data flow tests for question mark operator 2024-12-03 16:21:26 +01:00
Paolo Tranquilli
277c9f4087 Rust: add back getAttr to ArrayExpr 2024-12-03 16:12:56 +01:00
Anders Schack-Mulligen
8ea973f838 C++: Update use of deleted api. 2024-12-03 15:20:07 +01:00
Paolo Tranquilli
c113503b41 Rust: fix doc typo 2024-12-03 15:18:17 +01:00
Paolo Tranquilli
353f1cafe6 Rust: distinguish [a, b] from [a; b]
This splits the `ArrayExpr` class into `ArrayListExpr` and `ArrayRepeatExpr`.
This uses the `synth.from_class` machinery to integrate seamlessly into the
generated code, by hiding the extracted `ArrayExpr` behind an internal class
and replacing it with a hierarchy of those two classes under a new
`ArrayExpr` class.
2024-12-03 15:09:20 +01:00
Anders Schack-Mulligen
c654a05998 Dataflow: Remove identical-files entries for deleted api. 2024-12-03 14:52:30 +01:00
Anders Schack-Mulligen
371a11e6da C++: Delete deprecated data flow api. 2024-12-03 14:52:14 +01:00
Anders Schack-Mulligen
0d9e578857 C#: Delete deprecated data flow api. 2024-12-03 14:42:34 +01:00
Anders Schack-Mulligen
fbff4b6e21 Go: Delete deprecated data flow api. 2024-12-03 14:42:14 +01:00
Anders Schack-Mulligen
acc260cc3c Python: Delete deprecated data flow api. 2024-12-03 14:41:49 +01:00
Anders Schack-Mulligen
20f06abe6f Ruby: Delete deprecated data flow api. 2024-12-03 14:41:14 +01:00
Anders Schack-Mulligen
f07f2b0f4a Swift: Delete deprecated data flow api. 2024-12-03 14:40:43 +01:00
Asger F
3f0d0e3a05 JS: Deprecate DataFlow::BarrierGuardNode 2024-12-03 14:30:50 +01:00
Asger F
b3461989b1 JS: Remove use of SanitizerGuardNode in experimental SSRF query
Makes a quick effort attempt to restore the original behaviour, though
it is not exactly the same due to lack of recursion.
2024-12-03 14:30:36 +01:00
Asger F
0d79c7141c JS: Update two more uses of SanitizerGuardNode 2024-12-03 14:30:35 +01:00
Asger F
62c17d3f4e JS: Update SanitizerGuardNode use in BasicTaintTracking test 2024-12-03 14:30:34 +01:00
Asger F
f620191da4 JS: Deprecate SanitizerGuardNode 2024-12-03 14:30:33 +01:00
Asger F
2ae7386775 JS: Also apply new BarrierGuardLegacy pattern in Xss.qll 2024-12-03 14:30:32 +01:00
Asger F
2ef652da2c JS: Add more deprecation annotations in tests 2024-12-03 14:30:31 +01:00
Asger F
21494fbdff JS: Refactor BarrierGuardLegacy pattern to not depend on SanitizerGuardNode
Previously our barrier guard classes were direct descendents of SanitizerGuardNode which made it hard to deprecate that class.

Now our barrier guards are not descending from any shared class. Instead they are contributed to SanitizerGuardNode via a private helper class we can remove in the future.
2024-12-03 14:30:29 +01:00
Asger F
a574ff1669 JS: Remove use of MakeLegacyBarrierGuard in experimental SSRF 2024-12-03 14:30:28 +01:00
Asger F
08d25c122d JS: Deprecate more uses of ConsistencyConfiguration 2024-12-03 14:30:27 +01:00
Asger F
75ab4856b8 Remove unsupported features from PoI 2024-12-03 14:30:25 +01:00
Asger F
e6680dec8f JS: Avoid use of LabeledSanitizerGuardNode in TaintedObject
Drive-by bugfix: Rename sanitizes -> blocksExpr.
This fixes a bug that caused the sanitizer guard not to work in df2.

The test output reflects the fact that the barrier guard works now.
2024-12-03 14:30:24 +01:00
Asger F
0ce1fe767d JS: Deprecate ConsistencyChecking to avoid deprecation warnings 2024-12-03 14:30:23 +01:00
Asger F
04a3a6707f JS: Update a reference to AdditionalSanitizerGuardNode
Unlike most other references to this class, we're not subclassing it here, we're
just trying to reuse some standard barrier guards but with a different flow state.
2024-12-03 14:30:22 +01:00
Asger F
834d35bc42 JS: Port experimental DecompressionBombs to ConfigSig 2024-12-03 14:30:21 +01:00
Asger F
871bc3b84a JS: Port experimental CorsPermissiveConfiguration to ConfigSig
The tests show a new (source, sink) pair for an already-flagged sink.

Not sure why it was not flagged originally since the data flow path seems valid, given the steps provided by our models.
2024-12-03 14:30:20 +01:00
Asger F
f5a6485ef2 JS: Port experimental decodeJwtWithoutVerificationLocalSource 2024-12-03 14:30:19 +01:00
Asger F
72e522631d JS: Port experimental jwtDecodeWithoutVerification to ConfigSig 2024-12-03 14:30:18 +01:00
Asger F
7e162f5451 JS: Port experimental EnvValueInjection to ConfigSig 2024-12-03 14:30:17 +01:00
Asger F
4f839070a0 JS: Port experimental EnvValueAndKeyInjection to ConfigSig 2024-12-03 14:30:16 +01:00
Asger F
8887ca1722 JS: Port an experimental CodeInjection variant to ConfigSig 2024-12-03 14:30:15 +01:00
Asger F
1832e93766 JS: Port FormParsers test to ConfigSig 2024-12-03 14:30:14 +01:00
Asger F
4d7401a074 JS: Deprecate tests for deprecated APIs
Mainly adds 'deprecated' in front of a bunch of tests for deprecated APIs.
2024-12-03 14:30:12 +01:00
Asger F
3548544970 JS: Avoid some uses of deprecated guard classes in tests 2024-12-03 14:30:11 +01:00
Asger F
a568d8c086 JS: Port threat-model test to ConfigSig 2024-12-03 14:30:10 +01:00
Asger F
f758b67d30 JS: Openly recommend SummarizedCallable 2024-12-03 14:30:09 +01:00
Asger F
249104b8ae JS: Update comments referring to old Configuration style
Also avoid the term "analysis-specific" because it's not a term we use anywhere else.
2024-12-03 14:30:08 +01:00
Asger F
13ee597848 JS: Add some proper documentation to SummarizedCallable 2024-12-03 14:30:07 +01:00
Asger F
988fa9c0ef JS: Deprecate AdditionalSanitizerGuardNode
We're deprecating the class through an alias, but it is still the base class for a non-deprecated class, for backwards compatibility. For this reason we're also deprecating all of its member predicates so we can remove those in the future.
2024-12-03 14:30:06 +01:00
Asger F
0b1e859e70 JS: Remove uses of AdditionalSanitizerGuardNode 2024-12-03 14:30:05 +01:00
Asger F
c2abb0fbd0 JS: Remove reference to AdditionalSanitizerGuard from CachedStages 2024-12-03 14:30:04 +01:00
Asger F
82682d9a62 JS: Remove a non-deprecated reference to SanitizerGuardNode 2024-12-03 14:30:03 +01:00
Asger F
bc7753de29 JS: Remove non-deprecated reference to AdditionalBarrierGuardNode 2024-12-03 14:30:02 +01:00
Asger F
0cd2e3f9eb JS: Deprecate old data flow library, except some guard-related nodes 2024-12-03 14:30:01 +01:00
Asger F
071189a9e9 Merge pull request #18175 from asgerf/jss/documentation
JS: Update data flow documentation and tutorials for JavaScript
2024-12-03 14:23:29 +01:00
Simon Friis Vindum
cac4514eae Rust: Add basic data flow through arrays 2024-12-03 14:15:54 +01:00
Simon Friis Vindum
3346b64e96 Rust: Add variables and data flow array tests 2024-12-03 14:14:41 +01:00
Anders Schack-Mulligen
2c0baff76a Java: Delete deprecated data flow api. 2024-12-03 14:13:03 +01:00
Michael Nebel
4675426241 C#: Update change note with info on private fields. 2024-12-03 14:12:09 +01:00
Tom Hvitved
06b1d8e448 Merge pull request #18177 from hvitved/rust/dataflow-variant-canonical-path
Rust: Use canonical paths for variants in data flow
2024-12-03 14:01:28 +01:00
Anders Schack-Mulligen
9734cff15b Java/C#: Update expected files. 2024-12-03 12:57:44 +01:00
Asger F
e1aff15f29 Merge pull request #18125 from asgerf/jss/summary-type-tracker
JS: Derive type-tracking steps from flow summaries
2024-12-03 12:40:56 +01:00
Paolo Tranquilli
ebe38bca23 Merge branch 'main' into redsun82/rust-less-canonical-paths 2024-12-03 12:19:08 +01:00
Paolo Tranquilli
952f41e17e Rust: fix broken test 2024-12-03 12:06:39 +01:00
Asger F
27e61a1f3d JS: Also update cheat sheet 2024-12-03 12:00:30 +01:00
Asger F
89463d73f5 JS: Remove mention of isAdditionalTaintStep 2024-12-03 11:51:46 +01:00
Asger F
935e1c065a Update docs/codeql/codeql-language-guides/using-flow-labels-for-precise-data-flow-analysis.rst
Co-authored-by: Erik Krogh Kristensen <erik-krogh@github.com>
2024-12-03 11:49:45 +01:00
Asger F
89849fae87 Update docs/codeql/codeql-language-guides/using-flow-labels-for-precise-data-flow-analysis.rst
Co-authored-by: Erik Krogh Kristensen <erik-krogh@github.com>
2024-12-03 11:49:34 +01:00
Asger F
5e27257405 Update docs/codeql/codeql-language-guides/analyzing-data-flow-in-javascript-and-typescript.rst
Co-authored-by: Erik Krogh Kristensen <erik-krogh@github.com>
2024-12-03 11:49:22 +01:00
Michael Nebel
cc4382c785 Merge pull request #18186 from michaelnebel/csharp/removechangenote
C#: Remove change note.
2024-12-03 11:45:34 +01:00
Paolo Tranquilli
db18d1046b Rust: rename getTy -> getTypeRepr 2024-12-03 11:17:08 +01:00
Paolo Tranquilli
8287cdd7b3 Rust: accept test changes 2024-12-03 11:01:05 +01:00
Anders Schack-Mulligen
b65a4e45ab Dataflow: Postpone type pruning until stage 5. 2024-12-03 10:59:12 +01:00
Anders Schack-Mulligen
4933e803cf Dataflow: Track stored type. 2024-12-03 10:59:11 +01:00
Paolo Tranquilli
b99e234cdc Merge branch 'main' into redsun82/rust-tweaks 2024-12-03 10:47:03 +01:00
Tom Hvitved
3c767b086b Rust: Use canonical paths for variants in data flow 2024-12-03 10:19:33 +01:00
Michael Nebel
27d2f9e402 C#: Add change-note. 2024-12-03 10:14:22 +01:00
Tom Hvitved
0bebfa6e45 Merge pull request #18130 from hvitved/rust/flow-summary-impl
Rust: Adopt shared flow summaries library
2024-12-03 10:14:21 +01:00
Simon Friis Vindum
e377a0e05a Merge branch 'main' into rust-df-closure 2024-12-03 10:09:52 +01:00
Asger F
054558d7b5 JS: Include content properties in type-tracker properties
Reminder: we have two PropertyName classes because the one in Contents.qll can't depend on DataFlow::Node.
2024-12-03 09:58:54 +01:00
Asger F
8bca66493f JS: Add test showing lack of inclusion in PropertyName 2024-12-03 09:57:02 +01:00
Napalys Klicius
1e1674a08a Merge pull request #18089 from Napalys/napalys/regexp-unknown-flags
JS: RegExp unknown flags support and enhanced compatibility with RegExp objects
2024-12-03 09:43:13 +01:00
Tom Hvitved
6b7522fe77 Merge pull request #18178 from hvitved/csharp/unsafe-crypto-transform-from-source
C#: Restrict `cs/thread-unsafe-icryptotransform-field-in-class` to source fields
2024-12-03 09:30:28 +01:00
Tom Hvitved
52dc79eb7d Address review comments 2024-12-03 09:28:21 +01:00
Tom Hvitved
3e5f4b7f89 Rust: Add a model for unwrap 2024-12-03 09:12:01 +01:00
Tom Hvitved
fbeb6f3940 Shared: Move shared logic into FlowSummaryImpl.qll 2024-12-03 09:11:11 +01:00
Tom Hvitved
395901b8e0 Rust: Adopt shared flow summaries library 2024-12-03 09:11:06 +01:00
Michael Nebel
86515b0140 C#: Remove change note. 2024-12-03 08:55:04 +01:00
Owen Mansel-Chan
61cb03ea3f Merge pull request #18001 from owen-mc/go/fix/missing-promoted-fields
Go: Fix missing promoted fields due to name clash
2024-12-02 20:15:26 +00:00
Simon Friis Vindum
8e2beb7410 Merge pull request #18131 from paldepind/rust-field-flow
Rust: Data flow through tuple and struct fields
2024-12-02 20:44:37 +01:00
Paolo Tranquilli
e89cf303e7 Rust: rename TypeRef -> TypeRepr 2024-12-02 17:58:40 +01:00
Paolo Tranquilli
4bd5cc458b Rust: accept test changes 2024-12-02 16:07:00 +01:00
Paolo Tranquilli
c0e55a06e7 Merge branch 'main' into redsun82/rust-perf-measures 2024-12-02 15:20:42 +01:00
Paolo Tranquilli
b57a37479b Rust: make File usable in codegen 2024-12-02 15:15:46 +01:00
Geoffrey White
0865397e29 Rust: Address nit. 2024-12-02 14:06:00 +00:00
Tamás Vajk
8375c49ce1 Merge pull request #18166 from tamasvajk/fix/db-quality-query-2
C#: Fix calls with no target in DB quality query
2024-12-02 14:59:33 +01:00
Geoffrey White
ed22f49cdd Rust: Make ql-for-ql happy. 2024-12-02 13:58:06 +00:00
Paolo Tranquilli
0a93a31565 Rust: accept all test changes after merge 2024-12-02 14:48:40 +01:00
Simon Friis Vindum
e1c65aae90 Rust: Tuple writes target post update node 2024-12-02 14:48:20 +01:00
Paolo Tranquilli
43eba85589 Merge branch 'main' into redsun82/rust-tweaks 2024-12-02 14:48:03 +01:00
Geoffrey White
1e656a49b0 Rust: Rewrite the query to (1) include functions and (2) minimize output. 2024-12-02 13:37:44 +00:00
Tamas Vajk
b8fd20eb05 Add explanation todo comments in the missing call target test file 2024-12-02 13:52:46 +01:00
Tom Hvitved
972cd2b21a C#: Restrict cs/thread-unsafe-icryptotransform-field-in-class to source fields 2024-12-02 13:45:51 +01:00
Napalys Klicius
08ef0dc1f2 Update javascript/ql/lib/change-notes/2024-11-28-regexp-unknown-flags.md
Co-authored-by: Asger F <asgerf@github.com>
2024-12-02 13:35:52 +01:00
Napalys Klicius
f56e337a7f Merge pull request #18164 from Napalys/napalys/ql-validate-predicate-get-returns
Add query to ensure predicates starting with 'get' return a value
2024-12-02 13:32:38 +01:00
Anders Schack-Mulligen
e9bd1e5b79 Dataflow: Remove types from access paths. 2024-12-02 13:31:51 +01:00
Asger F
404b0f24f2 JS: Fix another stray reference to BarrierGuardNode/SanitizerGuardNode 2024-12-02 13:29:52 +01:00
Simon Friis Vindum
3420f1f43f Address review comments, store step for tuple indexing 2024-12-02 13:27:26 +01:00
Asger F
422c089a39 JS: Remove redundant base class in TruthinessCheck 2024-12-02 13:26:37 +01:00
Anders Schack-Mulligen
5d13d3b434 Dataflow: Refactor - deduplicate fwdFlowRead+consCand join. 2024-12-02 13:02:33 +01:00
Napalys
7db9b7d758 Now flag aliases with the 'get' or 'as' prefix that resolve to predicates lacking a return type.
Co-authored-by: asgerf <asgerf@github.com>
2024-12-02 12:50:46 +01:00
Anders Schack-Mulligen
70a8bc302c Dataflow: Rename typecheckStore. 2024-12-02 12:48:19 +01:00
Tom Hvitved
012ea4bbf1 Merge pull request #18113 from hvitved/dataflow/more-common
Data flow: Move more logic into `DataFlowImplCommon`
2024-12-02 12:38:39 +01:00
Paolo Tranquilli
2a7ce9a0ab Rust: accept all test changes 2024-12-02 12:06:51 +01:00
Tom Hvitved
7f9adbd371 Address review comments 2024-12-02 11:44:17 +01:00
Cornelius Riemenschneider
2e9f8574a3 Merge pull request #18133 from github/oscarsj/upgrade-codespaces-ubuntu-2404
Update codespaces default config to ubuntu 24
2024-12-02 11:38:50 +01:00
Tamas Vajk
b0d3c11885 Add a new test case 2024-12-02 11:03:53 +01:00
Geoffrey White
4f08fdd232 Rust: Make the two cases read more similarly. 2024-12-02 09:56:32 +00:00
Geoffrey White
3e0e374783 Rust: Remove unnecessary edges. 2024-12-02 09:54:18 +00:00
Simon Friis Vindum
10be890cab Merge pull request #18144 from paldepind/rust-df-inconsistency-no-location
Rust: Exclude data flow inconsistencies that stem from other inconsis…
2024-12-02 10:48:51 +01:00
Geoffrey White
4d0c53d493 Rust: Add support for transitive results via calls in the ctor query. 2024-12-02 09:46:40 +00:00
Geoffrey White
14c0bbf531 Rust: Add another test case, fix an annotation. 2024-12-02 09:34:47 +00:00
Asger F
628f60d2e3 JS: Update flow label tutorial 2024-12-02 10:34:02 +01:00
Paolo Tranquilli
e7ffddd52c Rust: rename all *Type to *TypeRef 2024-12-02 10:13:05 +01:00
Asger F
2db89c1b02 JS: Update query17 from intro tutorial 2024-12-02 10:04:09 +01:00
Asger F
2722c45737 JS: Update global data flow tutorial .rst file 2024-12-02 10:04:08 +01:00
Asger F
103a6ea8a6 JS: Port tutorial query5 2024-12-02 10:04:07 +01:00
Asger F
02c5e49de8 JS: Port tutorial query4 2024-12-02 10:04:05 +01:00
Asger F
1f6335f9ba JS: Port tutorial query3 2024-12-02 10:04:04 +01:00
Asger F
3319870d00 JS: Port tutorial query2 2024-12-02 10:04:02 +01:00
Asger F
32f020ee6f JS: Port tutorial query1 2024-12-02 10:04:00 +01:00
Paolo Tranquilli
99bd75c429 Rust: expand Ty in documentation 2024-12-02 09:51:15 +01:00
Paolo Tranquilli
5d3c9d050d Rust: expand Pat in documentation 2024-12-02 09:48:10 +01:00
Michael Nebel
824aab884a Merge pull request #18169 from github/workflow/coverage/update
Update CSV framework coverage reports
2024-12-02 09:42:19 +01:00
Paolo Tranquilli
d02f7971a3 Merge pull request #18173 from github/redsun82/rust-windows-flaky-test
Rust: elaborate on `path_to_file_id` comment
2024-12-02 09:39:23 +01:00
Napalys
67745e6332 Reused isGetPredicate to retrieve the prefix of the predicate 2024-12-02 09:10:54 +01:00
Michael Nebel
2a33539e01 Merge pull request #18162 from michaelnebel/csharp/launchtracing
C#: Add launch task for debugging the tracing extractor.
2024-12-02 09:08:55 +01:00
Paolo Tranquilli
6a8188f8eb Rust: fix QL compilation errors after merge from main 2024-12-02 08:30:16 +01:00
Paolo Tranquilli
31775e21b7 Merge branch 'main' into redsun82/rust-less-canonical-paths 2024-12-02 08:27:05 +01:00
Paolo Tranquilli
bb83641634 Rust: accept all test changes for now 2024-12-02 08:22:51 +01:00
Paolo Tranquilli
9486e8b734 Rust: elaborate on path_to_file_id comment
This is a follow up to https://github.com/github/codeql/pull/18167, addressing a
review comment from @paldepind.
2024-12-02 08:16:52 +01:00
github-actions[bot]
f87024c620 Add changed framework coverage reports 2024-12-02 00:23:11 +00:00
Paolo Tranquilli
7cd344caff Merge pull request #18167 from github/redsun82/rust-windows-flaky-test
Rust: fix windows flakiness
2024-11-29 22:04:20 +01:00
Geoffrey White
fbf7e0584f Merge pull request #18129 from geoffw0/sinkmodels
Rust: Sink models for rust/sql-injection
2024-11-29 19:11:27 +00:00
Geoffrey White
eeed2c22be Merge pull request #18154 from geoffw0/swift6models4
Swift: Fix for OptionSet and BinaryInteger models
2024-11-29 17:30:51 +00:00
Paolo Tranquilli
6cb0866d0f Revert "Rust: test running windows flaky test multiple times"
This reverts commit 90fa3ec4ed.
2024-11-29 17:41:49 +01:00
Napalys
7c1aa84459 Fixed bug where some predicates were flagged without return type even thought they had 2024-11-29 17:38:30 +01:00
Edward Minnix III
f7aab2e3e7 Merge pull request #18139 from egregius313/egregius313/csharp/uri-models
C#: `NavigationManager::Uri` and URI query-string parsing utilities
2024-11-29 11:37:56 -05:00
Paolo Tranquilli
488903280f Rust: tentative windows fix 2024-11-29 17:23:30 +01:00
Geoffrey White
e9deec7217 Rust: Autoformat. 2024-11-29 16:03:06 +00:00
Paolo Tranquilli
90fa3ec4ed Rust: test running windows flaky test multiple times 2024-11-29 16:46:41 +01:00
Tamas Vajk
11dedbef1b Exclude property call with object initializer r-value from DB quality query 2024-11-29 16:26:40 +01:00
Tamas Vajk
b3896df15c Exclude type parameter instantiations from DB quality query 2024-11-29 16:05:33 +01:00
Napalys
a462ec91f5 Now the error message reflects properly the prefix 2024-11-29 15:57:28 +01:00
Paolo Tranquilli
c46f44da5f Rust: fix QL compilation errors 2024-11-29 15:55:51 +01:00
Napalys
96c1086dfc Modified comments to reflect 'as' changes 2024-11-29 15:35:18 +01:00
Napalys
e33f7aa1c7 Added test cases for 'as' prefix 2024-11-29 15:23:06 +01:00
Napalys Klicius
029b567bb7 Update ql/ql/src/queries/style/ValidatePredicateGetReturns.ql
Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com>
2024-11-29 15:19:19 +01:00
Napalys Klicius
a5521b90fc Update ql/ql/src/queries/style/ValidatePredicateGetReturns.ql
Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com>
2024-11-29 15:18:06 +01:00
Tamas Vajk
5d79ed6a9e C#: WIP: Fix calls with no target in DB quality query 2024-11-29 15:08:33 +01:00
Napalys
a763dd7267 Fixed github-advanced-security bot warning 2024-11-29 14:58:22 +01:00
Paolo Tranquilli
9cf2420c3b Rust: restrict canonical path calculations 2024-11-29 14:43:51 +01:00
Napalys
986e1cb597 Add ValidatePredicateGetReturns query and tests 2024-11-29 14:33:40 +01:00
Asger F
cab8a40d00 JS: Fix accidental recursion 2024-11-29 14:23:57 +01:00
Asger F
9c6b6981e2 JS: Add test to restrict dependencies 2024-11-29 14:23:56 +01:00
Asger F
2f0c80a98b JS: Include summary steps in type tracking 2024-11-29 14:23:55 +01:00
Asger F
440cbb7f0a JS: Add inline-expectation test for type tracking 2024-11-29 14:23:54 +01:00
Asger F
6349903110 JS: Move FlowSummary/Summaries.qll into testUtilities 2024-11-29 14:23:52 +01:00
Asger F
e34064e3b5 JS: Initial instantiation of sumamry type tracking
Instantiates the library without using it yet.
2024-11-29 14:23:50 +01:00
Asger F
df12f255ac JS: Rename propagatesFlowExt -> propagatesFlow 2024-11-29 14:23:49 +01:00
Michael Nebel
a09262b4c6 C#: Update expected test output. 2024-11-29 13:49:25 +01:00
Michael Nebel
f7874c37c4 C#: Only extract Public and Protected members from reference assemblies. 2024-11-29 13:49:23 +01:00
Simon Friis Vindum
5b6a4e616c Rust: Update stats queries to use shared data flow consistency module 2024-11-29 13:42:30 +01:00
Alexander Eyers-Taylor
f63f80ab68 Merge pull request #18157 from github/post-release-prep/codeql-cli-2.19.4
Post-release preparation for codeql-cli-2.19.4
2024-11-29 12:40:12 +00:00
Michael Nebel
5020e36d0a C#: Add launch task for debugging the tracing extractor. 2024-11-29 13:06:20 +01:00
Óscar San José
647515bd84 Merge pull request #18138 from github/oscarsj/compile-queries-paths
Include paths on pull_request event trigger for compile-queries.yml workflow
2024-11-29 13:02:03 +01:00
Óscar San José
e93ce7c7d5 Add .devcontainer folder to CODEOWNERS 2024-11-29 12:55:11 +01:00
Paolo Tranquilli
7e0e5a3f4e Rust: move rust_sysroot_src to its own session fixture 2024-11-29 12:01:50 +01:00
Paolo Tranquilli
4bcc4254c6 Merge branch 'main' into redsun82/rust-perf-measures 2024-11-29 11:59:22 +01:00
Geoffrey White
f8af648524 Merge pull request #18097 from geoffw0/ctor
Rust: New query for bad 'ctor' initialization
2024-11-29 10:57:54 +00:00
Paolo Tranquilli
bd56a3564a Merge pull request #18147 from github/redsun82/rust-windows-semantics
Rust: add diagnostics queries to integration tests
2024-11-29 11:45:48 +01:00
Napalys
9d4e737bc2 JS: follow proper code standards for get predicates
Co-authored-by: asgerf <asgerf@github.com>
2024-11-29 11:32:10 +01:00
Napalys
3171f38cdd JS: fixed bad alert messages when it came to incomplete sanitization for new RegExp objects 2024-11-29 11:14:45 +01:00
Simon Friis Vindum
06746e540f Merge pull request #18140 from paldepind/rust-get-target
Rust: Add `getStaticTarget` to `CallExprBase`
2024-11-29 11:02:15 +01:00
Owen Mansel-Chan
2c061b0d56 Add QLDoc for HostnameSanitizingPrefix 2024-11-29 09:46:44 +00:00
Owen Mansel-Chan
7f8a1ae941 Add change note 2024-11-29 09:46:42 +00:00
Owen Mansel-Chan
7648d397f8 Improve model to remove some false positives 2024-11-29 09:46:41 +00:00
Owen Mansel-Chan
617f4f140e Make HostnameSanitizingPrefix public 2024-11-29 09:46:39 +00:00
Owen Mansel-Chan
ba3f9d6134 Convert model to QL 2024-11-29 09:46:38 +00:00
Jeroen Ketema
bcb7901758 Merge pull request #18111 from jketema/guarded-free
C++: Promote `cpp/guarded-free` out of experimental
2024-11-29 10:43:02 +01:00
Geoffrey White
49b569cc4b Rust: Update for changes on main. 2024-11-29 09:37:32 +00:00
Geoffrey White
0f3469313f Merge branch 'main' into ctor 2024-11-29 09:37:23 +00:00
Michael Nebel
47487cca0e Merge pull request #18158 from github/workflow/coverage/update
Update CSV framework coverage reports
2024-11-29 10:21:09 +01:00
Geoffrey White
a6f20a6ac1 Apply suggestions from code review
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
2024-11-29 09:09:59 +00:00
Simon Friis Vindum
b8d60cbb13 Rust: Implement predicates for lambdas/closures in the data flow library 2024-11-29 09:32:04 +01:00
Simon Friis Vindum
ad7480591b Rust: Add data flow tests involving closures 2024-11-29 09:30:26 +01:00
Tamás Vajk
5f41b6d3f2 Merge pull request #18141 from tamasvajk/fix/db-quality-query
C#: Exclude `get`-only property accesses from `CallTargetStats`
2024-11-29 08:49:55 +01:00
Napalys Klicius
13afd6310b Update javascript/ql/lib/change-notes/2024-11-28-regexp-unknown-flags.md
Co-authored-by: Erik Krogh Kristensen <erik-krogh@github.com>
2024-11-29 08:26:04 +01:00
github-actions[bot]
8feca3d532 Add changed framework coverage reports 2024-11-29 00:21:55 +00:00
github-actions[bot]
32bfaa8569 Post-release preparation for codeql-cli-2.19.4 2024-11-28 19:40:05 +00:00
Alexander Eyers-Taylor
de325133c7 Merge pull request #18156 from github/release-prep/2.19.4
Release preparation for version 2.19.4
2024-11-28 19:32:51 +00:00
Alex Eyers-Taylor
dbe9f22034 Fix broken changelog. 2024-11-28 19:31:25 +00:00
github-actions[bot]
b36f3f97ee Release preparation for version 2.19.4 2024-11-28 19:28:05 +00:00
Alexander Eyers-Taylor
f7896b4c2b Merge pull request #18155 from github/revert-18065-release-prep/2.19.4
Revert "Release preparation for version 2.19.4"
2024-11-28 19:22:36 +00:00
Alexander Eyers-Taylor
6f18d69925 Revert "Release preparation for version 2.19.4" 2024-11-28 19:19:56 +00:00
Geoffrey White
1fc112e7a7 Swift: Fix for OptionSet. 2024-11-28 18:48:23 +00:00
Geoffrey White
e08eac03d8 Swift: Fix for Int.description. 2024-11-28 18:18:23 +00:00
Owen Mansel-Chan
b5fbf2e944 Add models for third arg of getForObject
No attempt to stop FPs.
2024-11-28 16:51:13 +00:00
Owen Mansel-Chan
65fb895ed5 (Unrelated) Fix typo in class name 2024-11-28 16:51:09 +00:00
Jeroen Ketema
6d37efc0d8 Update cpp/ql/src/Best Practices/GuardedFree.qhelp
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
2024-11-28 16:36:13 +01:00
Jeroen Ketema
f9d9f9ba62 Update cpp/ql/src/Best Practices/GuardedFree.qhelp
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
2024-11-28 16:36:04 +01:00
Jeroen Ketema
088a3ef15c Update cpp/ql/src/Best Practices/GuardedFree.qhelp
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
2024-11-28 16:35:39 +01:00
Paolo Tranquilli
9f6a2e090e Rust: add diagnostics queries to integration tests 2024-11-28 15:33:10 +01:00
Ed Minnix
a7a77a5f23 Added NavigationManager::BaseUri 2024-11-28 09:16:45 -05:00
Geoffrey White
5b50a8270d Rust: Clarify the doc on the two models a little. 2024-11-28 14:11:15 +00:00
Geoffrey White
1d0338444a Rust: Fix SqlExecute. 2024-11-28 14:11:14 +00:00
Ed Minnix
5bcc694f6a Fix typo 2024-11-28 09:06:18 -05:00
Simon Friis Vindum
08648f912e Merge branch 'main' into rust-df-inconsistency-no-location 2024-11-28 15:03:52 +01:00
Ed Minnix
1c06c4aae0 Fix summaries 2024-11-28 08:59:58 -05:00
Ed Minnix
61a4b251c0 NavigationManager::Uri and URI-parsing utilities 2024-11-28 08:59:57 -05:00
Edward Minnix III
418ab4b22a Merge pull request #18123 from egregius313/egregius313/csharp/ijsruntime-models
C#: Add `js-interop` sinks for `Microsoft.JSInterop.IJSRuntime`
2024-11-28 08:58:23 -05:00
Tamas Vajk
7acbf1a984 Add change note 2024-11-28 14:40:20 +01:00
Tamas Vajk
072713f771 C#: Exclude more property access expressions from DB quality metric 2024-11-28 14:34:35 +01:00
Napalys
d2de9a2238 Fixed change notes 2024-11-28 14:24:27 +01:00
Napalys Klicius
9ca0fe4cbf Update RegExp handling and add test case
Co-authored-by: erik-krogh <erik-krogh@github.com>
2024-11-28 14:13:40 +01:00
Geoffrey White
2810d64b22 Rust: Fix ql-for-ql warning. 2024-11-28 12:43:24 +00:00
Taus
a9817a0281 Python: Add guide describing how to extend the parser 2024-11-28 12:32:00 +00:00
Geoffrey White
14b70b856a Merge pull request #18143 from geoffw0/swift6models3
Swift: Fix makeIterator() models
2024-11-28 12:11:26 +00:00
Simon Friis Vindum
b05d290bf0 Rust: Exclude data flow inconsistencies that stem from other inconsistencies 2024-11-28 12:46:32 +01:00
Napalys
fd773603e6 Added change notes 2024-11-28 12:04:09 +01:00
Napalys
9a1c1f4be3 JS: Added in RegExpCreationNode maybeGlobal predicate for more convenience. 2024-11-28 12:03:51 +01:00
Paolo Tranquilli
50c917d2eb Rust: restrict extracted files queries 2024-11-28 12:02:57 +01:00
yoff
c1937ea549 Merge pull request #18117 from github/tausbn/python-fix-match-literal-pruning
Python: Add change note for CFG pruning fix
2024-11-28 11:40:21 +01:00
Napalys
1d2e08a3b6 JS: now Reg Exp injection treats unknownFlags as sanitization, MetacharEscapeSanitizer 2024-11-28 11:26:58 +01:00
Napalys
62194f5337 JS: add test cases RegExp with unknown flags 2024-11-28 11:26:57 +01:00
Napalys
e673348ed3 JS: now RegExp with unknown flags is not flagged as an issue within password Clear text storage of sensitive information 2024-11-28 11:26:56 +01:00
Napalys
a2c46749c6 JS: fixed issue where MaskingReplacer would work only with regexp literals but not objects 2024-11-28 11:26:55 +01:00
Napalys
1ca57cfb9d JS: add test cases with RegExp object for MaskingReplacer, currently gives wrong results 2024-11-28 11:26:54 +01:00
Napalys
c71778f1aa JS: xss does not flag anymore replace with RegExp unknown flags 2024-11-28 11:26:53 +01:00
Napalys
dbae553146 JS: add xss test cases with unknownflags for replace using RegExp 2024-11-28 11:26:52 +01:00
Napalys
fe28657c7d JS: add test cases with unknown flags for double escaping, works as expected. 2024-11-28 11:26:51 +01:00
Napalys
98fd97799c JS: imcomplete sanization now handles properly maybe global 2024-11-28 11:26:50 +01:00
Napalys
1ae174849f JS: incomplete sanitization now also works with RegExp objects 2024-11-28 11:26:48 +01:00
Napalys
76318035ff JS: Add test cases for RegExp object usage in replace within incomplete sanitization 2024-11-28 11:26:47 +01:00
Napalys
9c2366a660 JS: Added tests for ReDos with unknownFlags, everything seems to be good 2024-11-28 11:26:46 +01:00
Napalys
875478c1c6 JS: Fixed path query not flagging new RegExp with DotRemovingReplaceCall 2024-11-28 11:26:45 +01:00
Napalys
aa557cf950 JS: Added tests for DotRemovingReplaceCall with RegExp Object. 2024-11-28 11:26:44 +01:00
Napalys
a0df33c3ac JS: UnsafeShellCommand Using unknown flags in the RegExp object is no longer flagged as bad sanitization to reduce false positives. 2024-11-28 11:26:43 +01:00
Napalys
155f1fca85 JS: Added test cases for unsafe shell command sanitization with RegExpr Object, instead of literal 2024-11-28 11:26:42 +01:00
Napalys
23b18aeca9 JS: Now unknown flags are not flagged in taint paths 2024-11-28 11:26:41 +01:00
Napalys
eca7a88615 JS: Fixed docs description 2024-11-28 11:26:40 +01:00
Napalys
7db6f7c721 JS: Added test cases with new RegExp for Tainted paths, currently works only with literals 2024-11-28 11:26:39 +01:00
Napalys
faef9dd877 JS: protyte poluting now treats unknownFlags as potentially good sanitization. 2024-11-28 11:26:38 +01:00
Napalys
41fef0f2b3 JS: Added test cases which cover new RegExp creation with replace on protytpe pulluting 2024-11-28 11:26:37 +01:00
Napalys
18c7b18f82 JS: Now BadHtmlSanitizers new RegExp with unknown flags is also flagged. 2024-11-28 11:26:36 +01:00
Napalys
89f3b6f8d3 JS: Added test case for bad sanitizer with unknown flags, currently not flagged. 2024-11-28 11:26:35 +01:00
Napalys
38be0e4c0a JS: Now BadHtmlSanitizers also flags new RegExp as potential issue 2024-11-28 11:26:34 +01:00
Napalys
41f21d429b JS: Added test case which is not flagged but should be abusing new RegExp with global flag 2024-11-28 11:26:33 +01:00
Geoffrey White
23ed48ea12 Swift: Add a couple more makeIterator() implementations to be safe. 2024-11-28 10:18:13 +00:00
Geoffrey White
1d43abfe4d Swift: Model Collection.makeIterator(). 2024-11-28 10:11:55 +00:00
Paolo Tranquilli
814218c7a8 Swift: extract variables as children of ForEachStmt 2024-11-28 11:03:46 +01:00
Tamas Vajk
5727fda07a C#: Exclude get-only property accesses from CallTargetStats 2024-11-28 11:02:39 +01:00
Simon Friis Vindum
e8ddb6b180 Rust: Add getStaticTarget to CallExprBase 2024-11-28 10:57:07 +01:00
Edward Minnix III
1b224c1ab2 Merge pull request #17258 from egregius313/egregius313/go/mad/documentation
Go: Models as Data Documentation
2024-11-27 22:55:50 -05:00
Mathias Vorreiter Pedersen
3c0af498db C++: Fix bug introduced in an earlier commit and accept test changes. They all look good. 2024-11-27 19:04:25 +00:00
Óscar San José
1a0442c5a6 Adding correct wildcard 2024-11-27 19:34:34 +01:00
Óscar San José
5790f5d5dc Include paths on pull_request event trigger for compile-queries.yml workflow 2024-11-27 18:37:12 +01:00
Mathias Vorreiter Pedersen
02428745bd C++: Add change note. 2024-11-27 16:42:00 +00:00
Mathias Vorreiter Pedersen
19e7c37760 C++: Update the final test changes. Nothing exciting here. 2024-11-27 16:41:58 +00:00
Mathias Vorreiter Pedersen
d69de0cc76 C++: Add a MaD model for 'CRegKey' and mark query calls as local flow sources. 2024-11-27 16:41:57 +00:00
Mathias Vorreiter Pedersen
5aada39a4e C++: Add failing tests for 'CRegKey'. 2024-11-27 16:41:55 +00:00
Mathias Vorreiter Pedersen
33212da876 C++: Add a MaD model for 'CAtlTemporaryFile' and mark reads as local flow sources. 2024-11-27 16:41:53 +00:00
Mathias Vorreiter Pedersen
67ba85a0a3 C++: Add failing tests for 'CAtlTemporaryFile'. 2024-11-27 16:41:52 +00:00
Mathias Vorreiter Pedersen
3709151353 C++: Add a MaD model for 'CAtlFileMappingBase' and mark reads as local flow sources. 2024-11-27 16:41:51 +00:00
Mathias Vorreiter Pedersen
ac0599cf75 C++: Add a failing test with 'CAtlFileMapping'. 2024-11-27 16:41:50 +00:00
Mathias Vorreiter Pedersen
74eae4a18d C++: Add a MaD model for 'CAtlFile' and mark reads as local flow sources. 2024-11-27 16:41:48 +00:00
Mathias Vorreiter Pedersen
dee47f2111 C++: Add a failing test with 'CAtlFile'. 2024-11-27 16:41:47 +00:00
Mathias Vorreiter Pedersen
e73fccdb4a C++: Add more types that we'll need for later. 2024-11-27 16:41:46 +00:00
Mathias Vorreiter Pedersen
300e3eaba6 C++: Add MaD model for 'CUrl'. 2024-11-27 16:41:45 +00:00
Mathias Vorreiter Pedersen
1ea879a880 C++: Add failing tests for 'CUrl'. 2024-11-27 16:41:43 +00:00
Mathias Vorreiter Pedersen
74b6c9dcc7 C++: Add MaD model for 'CSimpleMap'. 2024-11-27 16:41:42 +00:00
Mathias Vorreiter Pedersen
12674ea2e6 C++: Add failing tests with 'CSimpleMap'. 2024-11-27 16:41:41 +00:00
Mathias Vorreiter Pedersen
02b88d5dbd C++: Add MaD model for 'CSimpleArray'. 2024-11-27 16:41:40 +00:00
Mathias Vorreiter Pedersen
029c0134eb C++: Add failing tests with 'CSimpleArray'. 2024-11-27 16:41:38 +00:00
Mathias Vorreiter Pedersen
c61395b973 C++: Add implicit read of the 'm_strPath' member. 2024-11-27 16:41:37 +00:00
Mathias Vorreiter Pedersen
354361952a C++: Add MaD model for 'CPathT'. 2024-11-27 16:41:36 +00:00
Mathias Vorreiter Pedersen
1a79290fd6 C++: Add failing tests with 'CPathT'. 2024-11-27 16:41:35 +00:00
Mathias Vorreiter Pedersen
5f05417890 C++: Add MaD model for 'CComSafeArray'. 2024-11-27 16:41:33 +00:00
Mathias Vorreiter Pedersen
e831cb5f26 C++: Add failing tests with 'CComSafeArray'. 2024-11-27 16:41:32 +00:00
Mathias Vorreiter Pedersen
948be09257 C++: Add an taint step from object to field for 'CComBSTR's. 2024-11-27 16:41:31 +00:00
Mathias Vorreiter Pedersen
9b004848a3 C++: Add MaD model for 'CComBSTR'. 2024-11-27 16:41:30 +00:00
Mathias Vorreiter Pedersen
68ee8da574 C++: Add failing tests with 'CComBSTR'. 2024-11-27 16:41:28 +00:00
Mathias Vorreiter Pedersen
2b8ef5a8c8 C++: Add MaD model for 'CAtlList'. 2024-11-27 16:41:27 +00:00
Mathias Vorreiter Pedersen
c604a93d16 C++: Add failing tests with 'CAtlList'. 2024-11-27 16:41:26 +00:00
Mathias Vorreiter Pedersen
0f8df1cd9f C++: Add MaD model for 'CAtlArray'. 2024-11-27 16:41:24 +00:00
Mathias Vorreiter Pedersen
1cd426e9f9 C++: Add failing tests with 'CAtlArray'. 2024-11-27 16:41:23 +00:00
Mathias Vorreiter Pedersen
4f2cd81f9e C++: Accept test changes. 2024-11-27 16:41:22 +00:00
Mathias Vorreiter Pedersen
c00f84d74a C++: Work around the 'wrong' function name for conversion operators. 2024-11-27 16:41:20 +00:00
Mathias Vorreiter Pedersen
2c7d0dec7d C++: Accept test changes. 2024-11-27 16:41:19 +00:00
Mathias Vorreiter Pedersen
763b991408 C++: Add models. 2024-11-27 16:41:18 +00:00
Mathias Vorreiter Pedersen
749602c982 C++: Add failing tests with CA2AEX and friends. 2024-11-27 16:41:17 +00:00
Mathias Vorreiter Pedersen
f688470324 C++: Since isConstructedFrom only holds for templates we need to explicitly handle the case where the function (or class) is not a template. 2024-11-27 16:41:16 +00:00
Mathias Vorreiter Pedersen
bf36f00bb0 C++: Add model. Observe that flow still fails. 2024-11-27 15:49:41 +00:00
Mathias Vorreiter Pedersen
16e5fa34d1 C++: Add failing tests with U_STRINGorID. 2024-11-27 15:49:39 +00:00
Mathias Vorreiter Pedersen
fe9feb900d C++: We will need all these types. 2024-11-27 15:49:38 +00:00
Óscar San José
2bc89900fb Update codespaces default config to ubuntu 24 2024-11-27 16:16:45 +01:00
Asger F
66d6bda716 Merge pull request #18044 from asgerf/js/shared-dataflow-bump
JS: Merge 'main' and implement 'speculativeTaintStep'
2024-11-27 15:43:27 +01:00
Paolo Tranquilli
5c2a6b8865 Merge pull request #18083 from github/redsun82/rust-canonical-enum
Rust: add extended canonical paths on enum variants
2024-11-27 15:22:07 +01:00
Paolo Tranquilli
a8188598b0 Merge branch 'main' into redsun82/rust-canonical-enum 2024-11-27 15:01:47 +01:00
Paolo Tranquilli
4e7115538b Rust: move steps breakdown from JSON diagnostics to the DB 2024-11-27 14:55:46 +01:00
Simon Friis Vindum
d89678f49f Rust: Data flow through tuple and struct fields 2024-11-27 14:53:01 +01:00
Paolo Tranquilli
5251dc2058 Rust: use check_diagnostics improvements 2024-11-27 13:36:27 +01:00
Mathias Vorreiter Pedersen
d86fea5ba5 Merge pull request #18114 from MathiasVP/actually-check-func-name-in-mad
C++: Actually check function names in MaD
2024-11-27 11:22:10 +00:00
Paolo Tranquilli
27738eaacc Rust: reorganize perf diagnostics 2024-11-27 12:05:06 +01:00
Geoffrey White
c113a0b5a1 Rust: Fix typo. 2024-11-27 10:51:42 +00:00
Geoffrey White
60c212bb10 Rust: Update for changes on main. 2024-11-27 10:42:24 +00:00
Geoffrey White
ba560f2fe9 Rust: Model SQLx. 2024-11-27 10:31:05 +00:00
Geoffrey White
e96f15d9b4 Rust: Add a test exposing SQL Injection sinks directly. 2024-11-27 10:31:04 +00:00
Anders Schack-Mulligen
df2e2e503a Merge pull request #17901 from aschackmull/java/allowlist-sanitizer
Java: Add a default taint sanitizer for contains-checks on lists of constants
2024-11-27 11:09:05 +01:00
Owen Mansel-Chan
c580046f8c Merge pull request #18121 from github/workflow/coverage/update
Update CSV framework coverage reports
2024-11-27 09:37:19 +00:00
Simon Friis Vindum
9ec9d79b4f Rust: Add additional tests for flow through structs 2024-11-27 10:10:49 +01:00
Simon Friis Vindum
46abb9083b Merge pull request #18115 from paldepind/rust-rename-expr
Rust: Rename `expr` on `CallExpr` and `LetExpr`
2024-11-27 09:41:04 +01:00
Anders Schack-Mulligen
5ef496dd1b Java: Add more qldoc. 2024-11-27 09:07:35 +01:00
Tom Hvitved
7402276ec7 Data flow: Move more logic into DataFlowImplCommon 2024-11-27 09:03:37 +01:00
Anders Schack-Mulligen
85778f7fea Java: Fix semantic merge conflict in expected file. 2024-11-27 08:53:41 +01:00
Simon Friis Vindum
8f886c6603 Merge pull request #18088 from paldepind/rust-self-parameters
Rust: Handle `self` parameters in variables and SSA library
2024-11-27 08:42:58 +01:00
Ed Minnix
2b0c7a209b Fix test results 2024-11-26 22:42:24 -05:00
Ed Minnix
a4b2ee1205 Fix generic 2024-11-26 22:42:13 -05:00
Ed Minnix
b820b324bd Change note 2024-11-26 22:32:45 -05:00
Ed Minnix
216d298780 Microsoft.JSInterop models 2024-11-26 22:29:43 -05:00
github-actions[bot]
89b2a6b726 Add changed framework coverage reports 2024-11-27 00:21:55 +00:00
Owen Mansel-Chan
0e94ee81ae Don't getUnderlyingType before looking through pointer type
If `T` is the type of an embedded field, it is invalid for `T` to be a
named type defined to be a pointer type (`type T *S`). It is also
invalid for `T` to be a type parameter. So this `getUnderlyingType()` is
redundant.
2024-11-26 22:25:56 +00:00
Owen Mansel-Chan
2cba97e87d Small stylistic improvement 2024-11-26 22:25:55 +00:00
Owen Mansel-Chan
1bc1472b0b Add change note 2024-11-26 22:25:53 +00:00
Owen Mansel-Chan
4990f16ba5 Refactor struct field predicate to remove redundancy 2024-11-26 22:25:48 +00:00
Owen Mansel-Chan
8dc0688b6f Fix bug 2024-11-26 22:25:47 +00:00
Owen Mansel-Chan
593896b40e Add test showing promoted field bug
NCField should be promoted to EmbedsNameClash. Currently it isn't
because its embedded parent pkg2.NameClash is not a promoted field in
EmbedsNameClash (because of a name clash with pkg1.NameClash), but this
should not make a difference.
2024-11-26 22:25:41 +00:00
Owen Mansel-Chan
553bc8c13d Merge pull request #18108 from owen-mc/go/mad/model-slices-package
Go: model `slices` package (skipping functions that involve iterating over a function)
2024-11-26 21:24:22 +00:00
Edward Minnix III
86c7a49264 Apply suggestions from code review
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-11-26 13:12:16 -05:00
Paolo Tranquilli
556774edc7 Rust: do not put extraction steps in the expected diagnostics 2024-11-26 18:00:15 +01:00
Simon Friis Vindum
92427ab0c1 Merge branch 'main' into rust-rename-expr 2024-11-26 17:40:47 +01:00
Paolo Tranquilli
8abd3c4707 Rust: Remove windows difference from diagnostics 2024-11-26 16:48:49 +01:00
Taus
d779ae5c3e Python: Add change note for CFG pruning fix
... And also bump the extractor version.
2024-11-26 15:39:15 +00:00
Paolo Tranquilli
24eb65692f Rust: add some performance diagnostics
This outputs some duration counts for various parts of the extraction
process in the database in the form of telemetry diagnostics.

The diagnostics format was preferred to putting things in the relational
database as that will scale better to code scanning and is more flexible
as for the data we can put into it without passing through the dbscheme.
Also, although it's not the case yet, it will be possible to output
diagnostics even if creation of the database fails.
2024-11-26 16:35:38 +01:00
Asger F
805fd0b46e JS: Refine speculative step definition 2024-11-26 15:56:56 +01:00
Owen Mansel-Chan
141259c003 Update go/ql/lib/ext/slices.model.yml
Co-authored-by: Chris Smowton <smowton@github.com>
2024-11-26 14:48:20 +00:00
Asger F
8818fcc207 JS: Benign test output changes 2024-11-26 15:47:13 +01:00
Simon Friis Vindum
7ab5663fa6 Rust: Address PR feedback 2024-11-26 15:42:19 +01:00
Asger F
c94a01e6b6 JS: Remove reference to argsParseStep
This was removed as part of the PR that introduced threat models.
2024-11-26 15:36:47 +01:00
Asger F
bf62582f53 JS: Implement 'speculativeTaintStep'
It is a mandatory part of the interface now; just providing a bare-bones implementation for rather than 'none()'
2024-11-26 15:36:46 +01:00
Asger F
82d61e4194 Merge branch 'js/shared-dataflow-branch' into js/shared-dataflow-merge-main 2024-11-26 15:36:16 +01:00
Jeroen Ketema
8d59159691 C++: Fix qlref file 2024-11-26 15:35:52 +01:00
Simon Friis Vindum
d30f3e2822 Rust: Renamed expr on CallExpr and LetExpr 2024-11-26 15:22:14 +01:00
Mathias Vorreiter Pedersen
e42c7452ef C++: Cleanup conjuncts. This doesn't change any behavior. 2024-11-26 13:57:51 +00:00
Mathias Vorreiter Pedersen
39b61598e9 C++: Accept test changes. 2024-11-26 13:57:38 +00:00
Mathias Vorreiter Pedersen
f7cf5af720 C++: Actually check the function name. 2024-11-26 13:56:22 +00:00
Jami
36acfeb305 Merge pull request #18087 from jcogs33/jcogs33/java-sha2
Java: add SHA-384 to list of secure crypto algorithms
2024-11-26 08:51:58 -05:00
yoff
6d6f269e6c Merge pull request #17997 from yoff/java/inline-range-tests 2024-11-26 14:48:07 +01:00
Tom Hvitved
0c6b4cdb8f Merge pull request #18078 from hvitved/rust/variant-flow
Rust: Data flow through variants
2024-11-26 14:45:00 +01:00
Mathias Vorreiter Pedersen
f65f11b404 C++: Add a test for a somewhat embarrasing bug: MaD didn't check the function name in some cases. 2024-11-26 13:43:42 +00:00
Asger F
c2e9dca1de Merge pull request #18043 from asgerf/jss/jump-and-test-exclusion
JS: Fix jump steps generated by IIFEs and exception flow
2024-11-26 14:33:42 +01:00
Taus
2734377e5d Python: Add API graph support for parameter annotations
Adds API graph support for observing that in
```python
def foo(x : Bar): ...
```
The variable `x` is likely to be an instance of the type `Bar` inside
this function.
In particular, we add `getInstanceFromAnnotation` as a predicate on API
graph nodes that tracks this step (corresponding to a new edge type
labeled with "annotation" in the API graph), and extend the existing
`getAnInstance` predicate to also include instances arising from type
annotations.

A more complete solution would also add support for annotated
assignments (`x : Foo = ...` or just `x : Foo`) as well as track types
through type aliases (`type Foo = Bar`). This turns out to be
non-trivial, however, as these type constructs don't have any CFG nodes
(and so no data-flow nodes by default either). In order to not have
perfect be the enemy of good, this commit is only targeting the type
parameter case (which is also likely to be the most common use case
anyway).

The tests for API graphs have been extended accordingly, including tests
for the kinds of type ascriptions that we _don't_ currently model in API
graphs (marked with `MISSING:` in the inline tests).
2024-11-26 13:03:06 +00:00
Jeroen Ketema
6aa7c93af2 C++: More qlhelp fixes 2024-11-26 13:58:54 +01:00
Jeroen Ketema
fc6c327ab7 C++: Add change note 2024-11-26 13:55:30 +01:00
Taus
047e9742a0 Merge pull request #18086 from github/tausbn/add-vscode-task-for-creating-change-notes
Add script and VSCode task for creating change notes
2024-11-26 13:55:21 +01:00
Jeroen Ketema
e1f70a0dec C++: Add missing </p> to qlhelp 2024-11-26 13:50:09 +01:00
Taus
5279857d06 Fix comment 2024-11-26 12:48:20 +00:00
Asger F
f073f3b791 JS: Rename file to foo.test.js 2024-11-26 13:44:00 +01:00
Asger F
65da9b41b5 JS: Add cross-file test in InsecureRandom 2024-11-26 13:43:24 +01:00
Taus
adbd4d35ed Add support for both query and library change notes 2024-11-26 12:39:17 +00:00
Anders Schack-Mulligen
a6fc41ec4b Java: Accept consistency failure. 2024-11-26 13:25:44 +01:00
Anders Schack-Mulligen
38eb3e4952 Java: Adjust expected output. 2024-11-26 13:25:44 +01:00
Anders Schack-Mulligen
2ff2d25784 Java: Cherry-pick test from https://github.com/github/codeql/pull/17051 2024-11-26 13:25:43 +01:00
Anders Schack-Mulligen
408a38d9fb Java: Address review comment, include addFirst,addLast. 2024-11-26 13:25:43 +01:00
Anders Schack-Mulligen
0d45f0efb2 Java: Accept consistency check result. 2024-11-26 13:25:43 +01:00
Anders Schack-Mulligen
2b1caa8a35 Java: Add test. 2024-11-26 13:25:42 +01:00
Anders Schack-Mulligen
5a4b720322 Java: Add change note. 2024-11-26 13:25:42 +01:00
Anders Schack-Mulligen
6f32c4129d Java: Add a default taint sanitizer for contains-checks on lists of constants. 2024-11-26 13:25:41 +01:00
Anders Schack-Mulligen
7f86f8cac7 Java: Prepare TypeFlow for separate instantiation of universal flow. 2024-11-26 13:25:41 +01:00
Owen Mansel-Chan
bcc89ecb7c Add change note 2024-11-26 12:07:32 +00:00
Owen Mansel-Chan
196634ecdb Model slices package
Skipping functions that involve iterators for now.
2024-11-26 12:01:09 +00:00
Tom Hvitved
8c111382ad Address review comments 2024-11-26 13:00:59 +01:00
Owen Mansel-Chan
47eb407be9 Update Go version in stdlib tests 2024-11-26 12:00:10 +00:00
Paolo Tranquilli
9f09454db9 Merge pull request #18107 from github/redsun82/rust-rename
Rust: rename `MatchExpr.expr` to `scrutinee` in all layers
2024-11-26 12:59:06 +01:00
Asger F
b4bd8e701c JS: Add test for file classification change 2024-11-26 12:33:39 +01:00
Geoffrey White
d1915c707d Swift: Add a test revealing the issue in pure dataflow. 2024-11-26 11:24:42 +00:00
Geoffrey White
45858527e2 Swift: Add another test case. 2024-11-26 11:15:24 +00:00
Geoffrey White
6130679c34 Swift: Label the now missing cases for CWE-020 and dataflow. 2024-11-26 11:13:19 +00:00
Paolo Tranquilli
cb0ac61db6 Merge pull request #18069 from geoffw0/sourcemodels
Rust: Add some flow source models
2024-11-26 12:08:02 +01:00
Jeroen Ketema
d9b278de66 C++: Promote cpp/guarded-free 2024-11-26 11:45:55 +01:00
Rasmus Lerchedahl Petersen
f508f8eb83 Java: address review comments 2024-11-26 11:44:16 +01:00
Paolo Tranquilli
7a86257968 Merge branch 'main' into redsun82/rust-rename 2024-11-26 10:48:19 +01:00
Paolo Tranquilli
d73dcd6753 Merge pull request #18105 from paldepind/rust-string-to-str
Rust: Change `&String` to `&str`
2024-11-26 10:45:44 +01:00
Paolo Tranquilli
8a01161d4a Rust: rename MatchExpr.expr to scrutinee in all layers
This doesn't require `ql.name` and is simpler while we don't have
to write upgrade scripts. The `ql.name` mechanism might get useful
once we do have to write upgrade scripts, as that doesn't change the
dbscheme.
2024-11-26 10:42:13 +01:00
Simon Friis Vindum
8252e1da02 Rust: Change &String to &str 2024-11-26 09:21:44 +01:00
Simon Friis Vindum
44b1ad52d9 Rust: Support self parameters in variable and SSA library 2024-11-26 09:02:13 +01:00
Ed Minnix
8c6e08c94e Add `slices.Concat` example 2024-11-25 21:57:24 -05:00
Ed Minnix
96a796585f fix formatting issue 2024-11-25 21:57:09 -05:00
Ed Minnix
460df89f28 Add `slices.Max` example 2024-11-25 21:56:52 -05:00
Geoffrey White
1090164b77 Merge branch 'main' into sourcemodels 2024-11-25 21:12:24 +00:00
Geoffrey White
28c0e899b7 Rust: Autoformat. 2024-11-25 20:50:56 +00:00
Geoffrey White
e6302cae53 Rust: Address CI and ql-for-ql issues. 2024-11-25 20:07:47 +00:00
Geoffrey White
e8981a505d Rust: Fix qhelp. 2024-11-25 20:00:22 +00:00
Geoffrey White
77f5168590 Rust: Query metadata and path edges. 2024-11-25 19:54:06 +00:00
Geoffrey White
be5bd1da0a Rust: Also add the good example and a couple of other cited good cases to the test. 2024-11-25 19:54:04 +00:00
Geoffrey White
82f2c6075f Rust: Add qhelp + examples. 2024-11-25 19:54:03 +00:00
Geoffrey White
88fc7be0a2 Rust: Implement the query. 2024-11-25 19:22:13 +00:00
Geoffrey White
9ead2dc03c Rust: Add a query test. 2024-11-25 19:14:16 +00:00
Geoffrey White
93e7202a69 Merge pull request #17940 from geoffw0/resolvable
Rust: Add unresolved macro calls diagnostic
2024-11-25 19:08:29 +00:00
Tom Hvitved
5e7cd46117 Rust: Flow through variants 2024-11-25 19:17:57 +01:00
Tom Hvitved
2fb670a27c Rust: Do not print unit type in data flow 2024-11-25 19:14:44 +01:00
Tom Hvitved
511f791511 Rust: Add more flow tests 2024-11-25 19:14:42 +01:00
Paolo Tranquilli
c3b4447586 Merge branch 'main' into redsun82/rust-canonical-enum 2024-11-25 17:46:48 +01:00
Paolo Tranquilli
74aa47a809 Merge pull request #18094 from github/redsun82/rust-rename
Codegen/Rust: allow renaming in QL
2024-11-25 17:42:25 +01:00
Paolo Tranquilli
269ea75036 Rust: matched_expr -> scrutinee 2024-11-25 17:23:47 +01:00
Paolo Tranquilli
b47e9612eb Rust: fix MatchExpr.getExpr renaming 2024-11-25 17:14:05 +01:00
Paolo Tranquilli
261e0a1a53 Codegen/Rust: allow renaming in QL
This adds a `ql.name` codegen pragma to change the name of a property on
the QL side. This is useful to give more meaningful names than what we
get from the generated rust AST.
2024-11-25 17:04:03 +01:00
Mathias Vorreiter Pedersen
8fd581dd7e Merge pull request #18093 from MathiasVP/more-win32-command-execution-functions
C++: Add more `CommandExecutionFunction`s
2024-11-25 15:26:50 +00:00
Simon Friis Vindum
d06b5833cf Rust: Add an additional variables test with a self parameter 2024-11-25 16:08:26 +01:00
Geoffrey White
f92e8555a6 Rust: update for toString changes in main. 2024-11-25 14:35:12 +00:00
Geoffrey White
e9a13aec1d Merge branch 'main' into resolvable 2024-11-25 14:33:56 +00:00
Paolo Tranquilli
adafe3e5b0 Merge branch 'main' into redsun82/rust-canonical-enum 2024-11-25 15:28:45 +01:00
Jami Cogswell
05b6700607 Java: add SHA384 to list of secure algorithms 2024-11-25 09:27:53 -05:00
Arthur Baars
c2b342f1a0 Merge pull request #18084 from github/aibaars/java-sha3
Java: add SHA3 family to list of secure crypto algorithms
2024-11-25 15:07:43 +01:00
Simon Friis Vindum
d5c8dfd88c Merge pull request #18092 from paldepind/rust-param-base
Rust: Generate `ParamBase`, a superclass of `Param` and `SelfParam`
2024-11-25 14:58:07 +01:00
Rasmus Lerchedahl Petersen
25664d0e53 Java: Add support for non-integer bounds in inline expectations 2024-11-25 14:48:17 +01:00
Mathias Vorreiter Pedersen
03ab74e07d C++: Add more 'CommandExecutionFunction's. 2024-11-25 13:43:20 +00:00
Simon Friis Vindum
0de6658660 Rust: Use ParamBase in data flow implementation 2024-11-25 14:18:08 +01:00
Napalys Klicius
e9dff4d68f Merge pull request #17953 from Napalys/napalys/ts57
JS: upgrade TypeScript to 5.7
2024-11-25 14:16:40 +01:00
Simon Friis Vindum
0d02126f12 Generate ParamBase, superclass of Param and SelfParam 2024-11-25 14:07:50 +01:00
Rasmus Lerchedahl Petersen
37935eea3b java: separate bounds onto different lines 2024-11-25 12:32:11 +01:00
Napalys Klicius
d6372aebc7 Update javascript/ql/src/Security/CWE-178/CaseSensitiveMiddlewarePath.ql
Co-authored-by: Erik Krogh Kristensen <erik-krogh@github.com>
2024-11-25 12:12:12 +01:00
Napalys
e38b63ebcd JS: previously js/case-sensitive-middleware-path was not taking into consideration unknown flags 2024-11-25 11:56:06 +01:00
Napalys
178da21fb8 JS: Added test case for CWE-178 RegExp with unknown flags 2024-11-25 11:53:00 +01:00
Tom Hvitved
e6161a5019 Merge pull request #18070 from hvitved/rust/canonical-path-dataflow
Rust: Use extended canonical paths to resolve calls in data flow
2024-11-25 11:48:19 +01:00
Arthur Baars
5eb91fd516 Drop SHA3-224
Drop the 224bits variant as it looks like SHA3-224 may be deprecated soon based on NIST's most recent draft revision of Transitioning the Use of Cryptographic Algorithms and Key Lengths
2024-11-25 11:25:45 +01:00
Geoffrey White
68a4ea3be0 Rust: New query rust/ctor-initialization (placeholder).
undo
2024-11-25 10:09:42 +00:00
Geoffrey White
bded7085f0 Rust: Effect of toString changes in main. 2024-11-25 10:01:57 +00:00
Geoffrey White
d38f0eec7b Merge branch 'main' into sourcemodels 2024-11-25 09:59:08 +00:00
Napalys
3d467b24f8 Added change notes 2024-11-25 09:30:01 +01:00
Tom Hvitved
4b0b038513 Merge pull request #18035 from github/redsun82/rust-str
Rust: add some `toString` implementations
2024-11-25 09:29:18 +01:00
Napalys
f8d623e905 JS: Bumped TS version to 5.7.2 2024-11-25 09:08:51 +01:00
Edward Minnix III
940a99db3b Fix typo
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-11-24 21:25:09 -05:00
Edward Minnix III
fb04e39935 ReturnValue[i] text
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-11-24 21:24:53 -05:00
Edward Minnix III
7210786721 Subtypes/overrides documentation
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-11-24 21:24:24 -05:00
Jami
f0045692a7 Merge pull request #17869 from jcogs33/jcogs33/improve-weak-crypto
Java: Improve weak crypto query
2024-11-24 12:04:00 -05:00
Taus
addef2f171 Add script and VSCode task for creating change notes
Adds a VSCode Task (accessible from the "Run Task" menu) for creating
change notes, prompting the user for the language, name, and category of
the change.

The language options presented are based on the existing occurrences of
`change-notes` folders in the repo. There are more such files (in
particular every shared library has a `change-notes` directory), but it
seemed to me that the language change notes are the ones that are most
common, and so in an effort to not clutter the list too much, I only
included the languages.

The selection of categories is based on existing usage -- more
specifically the result of grepping for occurrences of '^category: ' in
the repo. It's possible there are more change categories that could be
added.

Hopefully this should make it more convenient to create change notes
from within VSCode.
2024-11-22 22:32:15 +00:00
Arthur Baars
c6eaed343d Java: add SHA3 family to list of secure crypto algorithms 2024-11-22 19:03:00 +01:00
Arthur Baars
7f84cf6d72 Add test case 2024-11-22 19:02:11 +01:00
Calum Grant
7baaa2373f Merge pull request #18080 from github/revert-18072-revert-18009-calumgrant/bmn/record-build-mode
C++: Implement compilation_build_mode
2024-11-22 17:15:26 +00:00
Geoffrey White
4c50c083fb Rust: Implement good suggestions from ql-for-ql. 2024-11-22 17:12:09 +00:00
Geoffrey White
f2f577f86c Rust: Fix toString(). 2024-11-22 17:09:52 +00:00
Geoffrey White
d8b58f21c7 Rust: Restrict ReqwestGet by crate origin. 2024-11-22 16:42:24 +00:00
Calum Grant
b1b62f2362 Merge pull request #17919 from github/calumgrant/bmn/too-few-arguments
C++: Remove FPs from cpp/too-few-arguments
2024-11-22 16:40:07 +00:00
Paolo Tranquilli
b32e578580 Rust: accept test changes 2024-11-22 17:18:32 +01:00
Calum Grant
4dab0390c9 C++: Update expected output 2024-11-22 16:10:23 +00:00
Paolo Tranquilli
f3cd61f043 Rust: add extended canonical paths on enum variants 2024-11-22 17:00:57 +01:00
Calum Grant
fcf16848d2 Revert "Revert "C++: Implement compilation_build_mode"" 2024-11-22 15:48:50 +00:00
Calum Grant
3b4fdb3fc2 Update cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/test.c
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-11-22 15:39:28 +00:00
Calum Grant
60155ce205 C++: Address review comments 2024-11-22 15:30:24 +00:00
Calum Grant
4fa8c6ae65 C++: Add change note 2024-11-22 15:12:09 +00:00
Calum Grant
227f9c7c1b C++: Update the test.c comments 2024-11-22 15:12:07 +00:00
Calum Grant
4d851440b6 C++: Remove FPs from cpp/too-few-arguments 2024-11-22 15:12:05 +00:00
Paolo Tranquilli
e7c10c6325 Merge branch 'main' into redsun82/rust-str 2024-11-22 14:44:48 +01:00
Paolo Tranquilli
86c25d0396 Merge pull request #18074 from github/redsun82/rust-format-parent-child
Rust: fix regression in `getFormat` indexing
2024-11-22 14:37:50 +01:00
Paolo Tranquilli
28d517da59 Rust: fix regression in getFormat indexing 2024-11-22 14:13:15 +01:00
Paolo Tranquilli
626b1cef17 Merge pull request #18071 from github/redsun82/rust-format-parent-child
Rust: fix parent/child relationship for format entities
2024-11-22 14:03:53 +01:00
Paolo Tranquilli
2e90c80a6f Rust: accept test changes 2024-11-22 13:45:00 +01:00
Tom Hvitved
143d7e2084 Rust: Use extended canonical paths to resolve calls in data flow 2024-11-22 13:23:39 +01:00
Tom Hvitved
faabc9982e Merge pull request #18056 from paldepind/rust-df-global
Rust: Extend data flow library instantiation for global data flow
2024-11-22 13:23:02 +01:00
Geoffrey White
6e627f6543 Rust: Add new consistency check failure. 2024-11-22 12:21:13 +00:00
Jeroen Ketema
cdfb085e99 Merge pull request #18072 from github/revert-18009-calumgrant/bmn/record-build-mode
Revert "C++: Implement compilation_build_mode"
2024-11-22 13:03:43 +01:00
Alexander Eyers-Taylor
d2021b9c65 Merge pull request #18067 from github/post-release-prep/codeql-cli-2.19.4
Post-release preparation for codeql-cli-2.19.4
2024-11-22 12:01:42 +00:00
Geoffrey White
75a3c931d1 Rust: Autoformat (again). 2024-11-22 11:58:23 +00:00
Geoffrey White
fa7c6f8b5e Merge branch 'main' into resolvable 2024-11-22 11:45:47 +00:00
Calum Grant
169671ad93 Revert "C++: Implement compilation_build_mode" 2024-11-22 11:42:39 +00:00
Geoffrey White
fe2d0b631c Rust: Autoformat. 2024-11-22 11:37:15 +00:00
Geoffrey White
194f967d74 Rust: Required doc comments. 2024-11-22 11:36:54 +00:00
Geoffrey White
ed67dae850 Rust: Make ql-for-ql happy. 2024-11-22 11:33:35 +00:00
Paolo Tranquilli
9a07b3c3d4 Rust: remove obsolete expected files 2024-11-22 12:24:44 +01:00
Paolo Tranquilli
e49a5be62f Rust: fix parent/child relationship for format entities 2024-11-22 12:20:49 +01:00
Calum Grant
ab9a2bdf9a Merge pull request #18009 from github/calumgrant/bmn/record-build-mode
C++: Implement compilation_build_mode
2024-11-22 11:00:17 +00:00
yoff
44c94e02fe Merge pull request #18037 from joefarebrother/pythob-test-global-capture
Python: Add some test cases for flow involving global and captured variables
2024-11-22 11:33:31 +01:00
Geoffrey White
20eaaa5699 Rust: Use final extensions. 2024-11-22 09:22:11 +00:00
Simon Friis Vindum
e81c3483db Rust: Apply suggestions from PR comments 2024-11-22 10:19:13 +01:00
Geoffrey White
292b29b0e3 Rust: Fix following rebase on main. 2024-11-22 09:13:48 +00:00
Geoffrey White
176e9a425f Rust: Model reqwest. 2024-11-22 09:13:47 +00:00
Geoffrey White
e64f139c98 Rust: Model std::env. 2024-11-22 09:13:44 +00:00
Geoffrey White
374769873a Rust: Add Frameworks.qll infrastructure. 2024-11-22 09:13:43 +00:00
Geoffrey White
be40085982 Rust: Add a test of flow sources reaching sinks as well. 2024-11-22 09:13:42 +00:00
Geoffrey White
a85ad4ec29 Rust: Add a dataflow/sources test. 2024-11-22 09:13:41 +00:00
Geoffrey White
ca424d1e61 Rust: Add a count of flow sources to rust/summary/summary-statistics. 2024-11-22 09:13:39 +00:00
Geoffrey White
3fa93e5ca9 Rust: Add rust/summary/taint-sources query. 2024-11-22 09:13:38 +00:00
Stephan Brandauer
30581d7c1d Merge pull request #18022 from github/kaeluka/4648-remove-automodel-queries
Delete Automodel Queries
2024-11-22 10:13:11 +01:00
Geoffrey White
b6cdae20d8 Merge pull request #18025 from geoffw0/sql1
Rust: SQL Injection Query
2024-11-21 22:48:54 +00:00
Tom Hvitved
d3dd94433b Merge pull request #18053 from hvitved/compile-queries-ram
CI: Set `--ram` in `compile-queries.yml`
2024-11-21 19:22:40 +01:00
Napalys Klicius
61e00861e5 Merge pull request #18008 from Napalys/napalys/ES2024-group-functions
JS: Added support for [Object, Map].groupBy ES2024 feature
2024-11-21 19:03:57 +01:00
github-actions[bot]
258f72db46 Post-release preparation for codeql-cli-2.19.4 2024-11-21 18:01:56 +00:00
REDMOND\brodes
37365c746c Updating to NonCppThrowingFunction use in IncorrectALlocationErrorHandling.ql 2024-11-21 12:59:56 -05:00
REDMOND\brodes
66cf736b4c printf formatting. 2024-11-21 12:44:28 -05:00
REDMOND\brodes
583651ba40 Missing NonCppThrowingFunction changes in Printf.qll 2024-11-21 12:41:26 -05:00
REDMOND\brodes
248f1c4ebe Updating change log 2024-11-21 12:15:14 -05:00
REDMOND\brodes
7059fc3e31 Adding intermediate solution towards deprecating ThrowingFunction 2024-11-21 12:10:42 -05:00
Geoffrey White
01cddcc042 Rust: Suggestions from docs review. 2024-11-21 17:08:51 +00:00
REDMOND\brodes
44126913cd Delaying deprecation of ThrowingFunction. 2024-11-21 12:08:04 -05:00
Geoffrey White
f8fff4b18c Update rust/ql/src/queries/security/CWE-089/SqlInjection.ql
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
2024-11-21 17:06:32 +00:00
Alexander Eyers-Taylor
c65ce97ada Merge pull request #18065 from github/release-prep/2.19.4
Release preparation for version 2.19.4
2024-11-21 17:06:14 +00:00
Alex Eyers-Taylor
602f52f09b Fix broken changelog. 2024-11-21 16:57:41 +00:00
github-actions[bot]
f7448f5b43 Release preparation for version 2.19.4 2024-11-21 16:55:07 +00:00
Alexander Eyers-Taylor
40bb7ec6ef Merge pull request #18063 from github/revert-18059-revert-18039-post-release-prep/codeql-cli-2.19.4
Revert "Revert "Post-release preparation for codeql-cli-2.19.4""
2024-11-21 16:32:38 +00:00
Alexander Eyers-Taylor
f4d6db4c79 Merge pull request #18062 from github/alexet/revert-release-prep
Revert "Merge pull request #18036 from github/release-prep/2.19.4"
2024-11-21 16:32:34 +00:00
REDMOND\brodes
9b2590ec7a Updating PR per review comments. Moving more towards a simplified model. 2024-11-21 11:28:11 -05:00
Alex Eyers-Taylor
50ec400fe4 Revert "Merge pull request #18036 from github/release-prep/2.19.4"
This reverts commit aa4cc72f30, reversing
changes made to e5951516b8.
2024-11-21 15:41:08 +00:00
Alexander Eyers-Taylor
c0474c4e45 Revert "Revert "Post-release preparation for codeql-cli-2.19.4"" 2024-11-21 15:37:52 +00:00
Alexander Eyers-Taylor
ed922f6519 Merge pull request #18057 from jketema/codeql-cli-2.19.4
Revert "Merge pull request #17938 from MathiasVP/fix-fp-in-missing-check-scanf-fixing-take-2"
2024-11-21 15:31:23 +00:00
Alexander Eyers-Taylor
7c8ca7a4d3 Merge pull request #18059 from github/revert-18039-post-release-prep/codeql-cli-2.19.4
Revert "Post-release preparation for codeql-cli-2.19.4"
2024-11-21 15:24:07 +00:00
Paolo Tranquilli
a82d267223 Rust: accept test changes 2024-11-21 16:03:56 +01:00
Alexander Eyers-Taylor
4effe9e364 Revert "Post-release preparation for codeql-cli-2.19.4" 2024-11-21 14:43:15 +00:00
Jeroen Ketema
fa8aba88af Revert "Merge pull request #17938 from MathiasVP/fix-fp-in-missing-check-scanf-fixing-take-2"
This reverts commit 6785b93ed8, reversing
changes made to d9b86f55c8.
2024-11-21 15:39:00 +01:00
Paolo Tranquilli
6776b31c0d Rust: tweak PathType string representations and add one for InferType 2024-11-21 15:27:34 +01:00
Geoffrey White
b7c7a9ee7c Rust: Accept consistency check failures. 2024-11-21 14:23:51 +00:00
Geoffrey White
ae6b7b0277 Merge branch 'main' into sql1 2024-11-21 14:18:04 +00:00
Simon Friis Vindum
fffeac6a13 Rust: Extend data flow library instantiation for global data flow 2024-11-21 15:11:25 +01:00
Geoffrey White
49e002843e Rust: Restore some documentation. 2024-11-21 14:05:24 +00:00
Simon Friis Vindum
bb70bfce43 Rust: Tweak global data flow test and add inline flow test 2024-11-21 15:03:58 +01:00
Geoffrey White
636c047c41 Rust: Use final class. 2024-11-21 13:57:33 +00:00
Calum Grant
0836c3d6a5 C++: Update stats 2024-11-21 13:45:22 +00:00
Calum Grant
38fa3c10d6 Update cpp/downgrades/f0156f5f88ab5967c79162012c20f30600ca5ebf/upgrade.properties
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-11-21 13:45:20 +00:00
Calum Grant
d3e44028ea C++: Fix upgrade.properties 2024-11-21 13:45:18 +00:00
Calum Grant
8050b8246b C++: Update stats 2024-11-21 13:45:17 +00:00
Calum Grant
10f692b57c C++: DB upgrade scripts 2024-11-21 13:45:16 +00:00
Calum Grant
d3e8292db9 C++: Update dbscheme 2024-11-21 13:45:15 +00:00
Calum Grant
ac4121dd6c C++: Describe compilation_build_mode using a case 2024-11-21 13:45:14 +00:00
Calum Grant
6f3e6edd0e C++: Implement compilation_build_mode 2024-11-21 13:45:13 +00:00
Napalys Klicius
7ee0a7b398 Update javascript/ql/lib/semmle/javascript/Collections.qll
Co-authored-by: Erik Krogh Kristensen <erik-krogh@github.com>
2024-11-21 14:02:42 +01:00
Napalys Klicius
edb9b47111 Merge pull request #18047 from Napalys/napalys/ES2023-string-protytpe-toWellFormed
JS: Added taint-step String.prototype.toWellFormed ES2023 feature
2024-11-21 14:01:21 +01:00
Tom Hvitved
65be8a8aed CI: Set --ram in compile-queries.yml 2024-11-21 13:44:31 +01:00
Asger F
930a7b6e28 JS: Update output changes to nodes/edges/subpaths 2024-11-21 13:33:39 +01:00
Asger F
7a77432024 JS: Update lost result in insecure-download
The VariableCapture library consumes one component of the access path limit, which means we lose this result
2024-11-21 13:33:10 +01:00
Owen Mansel-Chan
c80a45f2a3 Merge pull request #18051 from github/workflow/coverage/update
Update CSV framework coverage reports
2024-11-21 12:19:43 +00:00
Asger F
1ac7591faf JS: Update missed flow in capture-flow.js
We previously caught this flow because of a heuristic in capture flow. We'll have to fix it properly later.
2024-11-21 12:57:34 +01:00
Paolo Tranquilli
c2b426df76 Rust: accept test changes 2024-11-21 12:54:13 +01:00
Asger F
9dad2d62d7 JS: Update DataFlowConsistency 2024-11-21 12:54:11 +01:00
Paolo Tranquilli
6a6154913b Merge branch 'main' into redsun82/rust-str 2024-11-21 11:50:38 +01:00
Paolo Tranquilli
36d8a6d05f Rust: add class printouts to AstConsistency.ql 2024-11-21 11:42:00 +01:00
Tom Hvitved
295626d53b Merge pull request #17918 from hvitved/rust/cfg-codegen
Rust: Add (auto-generated) CFG node wrapper classes
2024-11-21 11:20:51 +01:00
Paolo Tranquilli
d8b453fc0d Rust: add consistency query printing AST classes of nodes with wrong toString 2024-11-21 11:14:59 +01:00
Paolo Tranquilli
5012332bb2 Rust: fix Path.toString and address some review comments 2024-11-21 11:13:06 +01:00
Asger F
ce00bd2cc9 JS: More docs 2024-11-21 11:06:43 +01:00
Asger F
4e62a512c5 JS: Only apply exception propagator when no other summary applies
Previously a few Promise-related methods were special-cased, which is no longer needed.
2024-11-21 11:01:05 +01:00
Asger F
84820adf3c Add test for exception flow out of finally() 2024-11-21 11:01:03 +01:00
Tom Hvitved
86a7c486f9 Rust: "control-flow" -> "control flow" 2024-11-21 10:42:11 +01:00
Tom Hvitved
be7aca9780 Address review comments 2024-11-21 10:32:06 +01:00
Asger F
948d21ca07 JS: Propagate exceptions from summarized callables by default 2024-11-21 10:24:31 +01:00
Asger F
dcdb2e5133 JS: Fix callback check so it works without parameters 2024-11-21 10:24:29 +01:00
Tom Hvitved
e6887f982e Rust: Use nodes from CfgNodes.qll in DataFlowImpl.qll 2024-11-21 10:21:13 +01:00
Tom Hvitved
ca18005e44 Rust: Add some manual classes to CfgNodes.qll 2024-11-21 10:21:12 +01:00
Tom Hvitved
c8736e8a3d Rust: Auto-generate CfgNodes.qll 2024-11-21 10:21:11 +01:00
Tom Hvitved
1c2fdc29a3 Rust: Add more local data flow tests 2024-11-21 10:21:09 +01:00
Tom Hvitved
fab29361cb Rust: Add more CFG tests 2024-11-21 10:21:06 +01:00
Tom Hvitved
6dc599c200 Merge pull request #17876 from hvitved/dataflow/param-flow-call-ctx
Data flow: Track call contexts in `parameterValueFlow`
2024-11-21 10:20:27 +01:00
Asger F
b7dd455aff JS: Add test case 2024-11-21 09:21:36 +01:00
Michael Nebel
932ced4ace Merge pull request #18052 from ewillonermsft/javascriptserializer-deserializ-stubs
Add Deserialize() and Deserialize<T> to System.Web.Serialization stubs
2024-11-21 09:09:12 +01:00
Simon Friis Vindum
8c74478ef4 Merge pull request #18041 from paldepind/rust-cfg-self
Rust: Include `self` parameters in the CFG
2024-11-21 08:53:52 +01:00
Napalys Klicius
82ca369dce Merge pull request #18005 from Napalys/napalys/ES2022-find-functions
JS: Added support for Array.prototype.[findLastIndex, findLast] ES2022 feature
2024-11-21 08:01:19 +01:00
ewillonermsft
d6ceb89324 Add Deserialize() and Deserialize<T> to System.Web.Serialization stub.s 2024-11-20 21:01:20 -08:00
github-actions[bot]
f25c16245c Add changed framework coverage reports 2024-11-21 00:21:44 +00:00
Geoffrey White
d828941b7c Rust: Address review comments. 2024-11-20 22:39:27 +00:00
REDMOND\brodes
007dd83799 Updating ir test expected files. 2024-11-20 14:40:58 -05:00
REDMOND\brodes
4078d79f2a Adds SEH exception edge types, disjoint from normal C++ edges. Does not apply the edges yet, just stipulates the types. 2024-11-20 14:37:32 -05:00
Ben Rodes
6aa74123af Merge branch 'main' into brodes/seh_flow_phase1_throwing_models 2024-11-20 12:48:54 -05:00
Napalys
43eda58f83 Added change notes 2024-11-20 17:44:36 +01:00
Napalys
afc2d3e6d2 JS: Add: String.protytpe.toWellFormed to StringManipulationTaintStep 2024-11-20 17:42:25 +01:00
Napalys
09f73d8d6f JS: Add: test cases for toWellFormed 2024-11-20 17:36:43 +01:00
Paolo Tranquilli
d609c1b7e6 Rust: fix OrPat.toString 2024-11-20 17:00:13 +01:00
Paolo Tranquilli
fd45e11f4b Rust: accept test changes 2024-11-20 16:49:20 +01:00
Paolo Tranquilli
b4af5a61d1 Rust: more advanced toString 2024-11-20 16:21:23 +01:00
Tom Hvitved
596cfcfb42 Merge pull request #18042 from hvitved/shared/dense-rank-refactor
Util: Refactor `DenseRank` implementation
2024-11-20 15:57:09 +01:00
Owen Mansel-Chan
9aede5f433 Merge pull request #17494 from owen-mc/go/reinstate-mad-with-fixes
Go: reinstate models-as-data sink conversions with fixes
2024-11-20 14:50:47 +00:00
Owen Mansel-Chan
69ad69c38a Move change note out of C# folder 2024-11-20 14:21:28 +00:00
Ben Rodes
69df07ed12 Update cpp/ql/lib/change-notes/2024-11-18-throwing-functions.md
Co-authored-by: Mathias Vorreiter Pedersen <mathiasvp@github.com>
2024-11-20 09:06:44 -05:00
Napalys
64c45debdb JS: removed unnecessary getALocalSource from ArrayCallBackDataFlowStep 2024-11-20 14:57:00 +01:00
Napalys
9dbf7d1828 JS: removed unnecessary getALocalSource from ArrayCallBackDataTaintStep 2024-11-20 14:54:06 +01:00
Owen Mansel-Chan
dcf3b31f62 Move and update change note 2024-11-20 13:52:22 +00:00
Owen Mansel-Chan
d9a830e008 Add log function prefix "With" for heuristic logger 2024-11-20 13:50:59 +00:00
Napalys Klicius
59df4de8af Merge branch 'main' into napalys/ES2024-group-functions 2024-11-20 14:50:25 +01:00
Napalys
cdf43f7118 Added change notes 2024-11-20 14:06:44 +01:00
Asger F
d52bc971b8 Merge branch 'main' into js/shared-dataflow-merge-main 2024-11-20 14:05:03 +01:00
Napalys Klicius
a957e00fe5 Merge branch 'main' into napalys/ES2024-group-functions 2024-11-20 14:03:31 +01:00
Jeroen Ketema
b4718792d1 Merge pull request #17986 from jketema/guarded-free2
C++: Reduce number of FPs `cpp/guarded-free` and turn `if(x) { free(x) }` cases from FNs to TPs
2024-11-20 13:58:48 +01:00
Napalys
58faa2d71e JS: Add: dataflow step for static method of groupBy from Map. 2024-11-20 13:34:11 +01:00
Napalys
6344f83e4b JS: Add: tests for taint tracking in groupBy functions 2024-11-20 13:22:53 +01:00
Tom Hvitved
3f56fc9e89 Address review comments 2024-11-20 13:15:50 +01:00
Tom Hvitved
42e0d7ce10 Util: Refactor DenseRank implementation 2024-11-20 13:09:59 +01:00
Tom Hvitved
5f9b8c05bd Java: Update expected test output 2024-11-20 12:58:00 +01:00
Tom Hvitved
e5eed2302f Data flow: Track call contexts in parameterFlow 2024-11-20 12:57:56 +01:00
Simon Friis Vindum
93f6f042e1 Rust: Update expected file 2024-11-20 12:39:31 +01:00
Simon Friis Vindum
aab0d5e9e4 Rust: Refactor to avoid needing getNumberOfSelfParams 2024-11-20 12:35:52 +01:00
Joe Farebrother
52cd7f2c5c Add 2 more cases 2024-11-20 11:22:42 +00:00
Paolo Tranquilli
4d04c5af83 Rust: fix non-existent string representations 2024-11-20 12:08:51 +01:00
Joe Farebrother
9b4b01a442 Fix typo 2024-11-20 10:59:27 +00:00
Simon Friis Vindum
24adbb80c7 Rust: Include self parameters in the CFG 2024-11-20 11:50:46 +01:00
Simon Friis Vindum
55121d866c Rust: Add CFG tests for method definitions with self parameters 2024-11-20 11:45:42 +01:00
Nora Dimitrijević
6a3e34cc4c Merge pull request #17987 from d10c/d10c/bigint-ga
BigInt GA: update docs
2024-11-20 10:34:42 +01:00
Paolo Tranquilli
57973df795 Rust: make CallExpr.toString use call identifier if present 2024-11-20 10:00:10 +01:00
Michael Nebel
745e52f659 Merge pull request #18033 from michaelnebel/csharp/net9-2
C#: Update to .NET 9
2024-11-20 09:53:58 +01:00
Michael Nebel
9a8a27750e Merge pull request #18040 from github/workflow/coverage/update
Update CSV framework coverage reports
2024-11-20 09:51:59 +01:00
Paolo Tranquilli
4fb028cbb2 Rust: accept last integration test changes
Also make `--learn` work with the nested qltest tests.
2024-11-20 09:45:15 +01:00
github-actions[bot]
d80aa6fa6a Add changed framework coverage reports 2024-11-20 00:21:24 +00:00
Owen Mansel-Chan
cf84c08abf Add change note 2024-11-20 00:18:55 +00:00
REDMOND\brodes
4e777561f0 Changing terminology back to "throws" vs "rasis" for alwaysThrowsException to be consistent with other backward compatibility changes. 2024-11-19 15:10:15 -05:00
Owen Mansel-Chan
f21439a6e3 Merge pull request #18034 from owen-mc/go/mad/package-level-variables
Go: Allow package-level variables in models-as-data models
2024-11-19 19:49:02 +00:00
REDMOND\brodes
23485f185b Merge branch 'brodes/seh_flow_phase1_throwing_models' of https://github.com/microsoft/codeql into brodes/seh_flow_phase1_throwing_models 2024-11-19 13:36:01 -05:00
REDMOND\brodes
a69daa0d20 Missing change to 'mayThrowException' in StructuredExceptionHandling.qll 2024-11-19 13:35:45 -05:00
Ben Rodes
ae1ed385f6 Merge branch 'main' into brodes/seh_flow_phase1_throwing_models 2024-11-19 13:33:25 -05:00
REDMOND\brodes
07847762e1 bringing back mayThrowException to make it cleaner/easier for backwards compatibility. 2024-11-19 13:17:10 -05:00
Alexander Eyers-Taylor
38a5f63437 Merge pull request #18039 from github/post-release-prep/codeql-cli-2.19.4
Post-release preparation for codeql-cli-2.19.4
2024-11-19 18:07:25 +00:00
Jeroen Ketema
5a18f1ff07 Merge pull request #18038 from github/nickrolfe/typo-manger
C++: fix typo in qhelp
2024-11-19 19:02:31 +01:00
REDMOND\brodes
63ddd81059 Merge branch 'brodes/seh_flow_phase1_throwing_models' of https://github.com/microsoft/codeql into brodes/seh_flow_phase1_throwing_models 2024-11-19 12:58:51 -05:00
REDMOND\brodes
26d590a616 Putting back deleted file, and deprecating instead. Deprecating mayThrowException as well. 2024-11-19 12:57:50 -05:00
github-actions[bot]
3909df75dc Post-release preparation for codeql-cli-2.19.4 2024-11-19 17:54:03 +00:00
Nick Rolfe
a2c6278282 C++: fix typo in qhelp 2024-11-19 17:39:05 +00:00
Alexander Eyers-Taylor
aa4cc72f30 Merge pull request #18036 from github/release-prep/2.19.4
Release preparation for version 2.19.4
2024-11-19 17:15:02 +00:00
Owen Mansel-Chan
dd87b1a9de Convert os.stdin model to MaD 2024-11-19 16:59:47 +00:00
Owen Mansel-Chan
bf824cac0a Allow package-level variables in MaD 2024-11-19 16:59:42 +00:00
Paolo Tranquilli
e4f982c12c Rust: accept integration test changes 2024-11-19 17:50:57 +01:00
Paolo Tranquilli
fce13aeb35 Rust: accept test changes 2024-11-19 17:50:14 +01:00
Joe Farebrother
a398f707fe Add some test cases for flow involving global variables and captured variables 2024-11-19 16:34:59 +00:00
Alex Eyers-Taylor
ef3fc5e29f Fix broken changelog. 2024-11-19 16:34:30 +00:00
github-actions[bot]
9783a11565 Release preparation for version 2.19.4 2024-11-19 16:21:37 +00:00
Paolo Tranquilli
a709fc6a54 Rust: add some toString implementations 2024-11-19 17:21:08 +01:00
yoff
d4ec8f650a Merge pull request #18030 from github/tausbn/python-fix-match-literal-pruning
Python: Fix pruning of literals in `match` pattern
2024-11-19 17:16:22 +01:00
Michael Nebel
3b01efaf5d C#: Update launch.json. 2024-11-19 17:08:08 +01:00
Ben Rodes
5bb765d834 Merge branch 'main' into brodes/seh_flow_phase1_throwing_models 2024-11-19 10:46:17 -05:00
Michael Nebel
0fc46f5855 C#: Fix compiler warnings related to errors in XML comments. 2024-11-19 16:30:48 +01:00
Nora Dimitrijević
2da1d6aaa8 BigInt GA: remove mention of experimental status from .rst docs 2024-11-19 16:05:20 +01:00
Nora Dimitrijević
54e7db2294 BigInt GA: s/arbitrary-precision/arbitrary-range/g in .rst docs 2024-11-19 16:05:20 +01:00
REDMOND\brodes
1c874d3221 Fixed usage raisesException 2024-11-19 10:04:11 -05:00
Simon Friis Vindum
e5951516b8 Merge pull request #18026 from paldepind/rust-df-local
Rust: Add local data flow edge for SSA nodes
2024-11-19 15:41:25 +01:00
yoff
22287be5d1 Merge pull request #17370 from Kwstubbs/Bottle/Tornado-HeaderSupport
Python: Bottle Framework Support
2024-11-19 15:34:26 +01:00
Tom Hvitved
7a065746d6 Merge pull request #18024 from hvitved/rust/cfg/async-block-return
Rust: Handle early returns in `async` blocks in CFG
2024-11-19 15:21:34 +01:00
Taus
e2530cf14f Python: Update expected test output
Co-authored-by: yoff <lerchedahl@gmail.com>
2024-11-19 14:10:50 +00:00
Michael Nebel
358098230c C#: Address review comment from previous PR. 2024-11-19 14:58:21 +01:00
Taus
a4ccda5fe3 Python: Fix pruning of literals in match pattern
Co-authored-by: yoff <lerchedahl@gmail.com>
2024-11-19 13:48:13 +00:00
Simon Friis Vindum
2c9bee6208 Rust: Only add data flow edge to SSA write definitions from their underlying CFG node 2024-11-19 14:32:31 +01:00
Michael Nebel
95a8881428 Merge pull request #17999 from michaelnebel/csharp/net9
C#: Update to .NET9.
2024-11-19 14:28:59 +01:00
Napalys
28ead4011a JS: Add: taint step to handle propagation of data flow from the array to callback 2024-11-19 14:15:15 +01:00
Napalys
f1e95a8a1d JS: Add: taint step test cases for findLastIndex, findLast, find 2024-11-19 14:09:58 +01:00
Paolo Tranquilli
2f3624b625 Merge pull request #18023 from github/redsun82/installer-shortcut
Bazel: add an `install` shortcut and an `experimental` attribute to `codeql_pack`
2024-11-19 14:00:52 +01:00
yoff
6ed895064f Apply suggestions from code review
Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com>
2024-11-19 13:37:53 +01:00
Simon Friis Vindum
6ae979293c Rust: Accept inconsistencies 2024-11-19 13:26:01 +01:00
Asger F
d1c9e47d23 JS: More aggressive test file classification 2024-11-19 13:23:32 +01:00
Asger F
01669908f2 JS: Block InsecureRandomness flow into test files 2024-11-19 13:23:31 +01:00
Asger F
80a5a5909e JS: Use getUnderlyingValue() a few places in VariableCapture 2024-11-19 13:23:29 +01:00
Asger F
d2daec4c66 JS: Add tests explaining why the IIFE in f2 didn't work 2024-11-19 13:23:24 +01:00
Geoffrey White
758092b1d6 Rust: Add consistency check failures. 2024-11-19 12:04:15 +00:00
Geoffrey White
49eefccde1 Rust: Autoformat. 2024-11-19 11:49:02 +00:00
Paolo Tranquilli
918b0bfc53 Bazel: add experimental to codeql_pack 2024-11-19 12:48:36 +01:00
Owen Mansel-Chan
307fdc0864 Add tests for heuristic logger calls 2024-11-19 11:41:53 +00:00
Owen Mansel-Chan
e57d8983f5 Add heuristic logger calls 2024-11-19 11:41:51 +00:00
Owen Mansel-Chan
9fc0dc5690 Fix typo in unrelated QLDoc 2024-11-19 11:41:40 +00:00
Owen Mansel-Chan
874dc83f3f Update test expectations 2024-11-19 11:28:43 +00:00
Owen Mansel-Chan
81907bc743 Set Subtypes column correctly
We set it to False when it has no meaning and True otherwise.
2024-11-19 11:22:36 +00:00
Simon Friis Vindum
23bfa8a9bc Rust: Add local data flow edge for SSA definitons 2024-11-19 12:19:47 +01:00
Owen Mansel-Chan
bc784268fd Make Logrus log injection tests more comprehensive 2024-11-19 11:18:28 +00:00
Owen Mansel-Chan
791313fbdf Add tests for logrus.FieldLogger 2024-11-19 11:18:26 +00:00
Owen Mansel-Chan
cc62db796c Add tests for Xorm first argument of varargs slice 2024-11-19 11:18:24 +00:00
Owen Mansel-Chan
5a0cd2e7d6 Add tests for squirrel.Eq 2024-11-19 11:18:22 +00:00
Owen Mansel-Chan
8cbab0c66e Model logrus.FieldLogger using models-as-data 2024-11-19 11:18:20 +00:00
Owen Mansel-Chan
d37c816bd9 Model some Xorm methods in QL 2024-11-19 11:18:17 +00:00
Owen Mansel-Chan
25cd4d4585 Model some squirrel methods in QL
We need to put a restriction on the type of the argument.
2024-11-19 11:18:15 +00:00
Owen Mansel-Chan
a0729fc760 Fix typo in package path
Co-authored-by: Edward Minnix III <egregius313@github.com>
2024-11-19 11:18:13 +00:00
Owen Mansel-Chan
35cbc162b0 Convert logging sinks to use MaD 2024-11-19 11:18:11 +00:00
Owen Mansel-Chan
85c7e8c221 Convert gocb nosql-injection sinks to MaD 2024-11-19 11:18:09 +00:00
Owen Mansel-Chan
fbaad09179 Convert mongodb nosql-injection sinks to MaD 2024-11-19 11:18:02 +00:00
Owen Mansel-Chan
b4c84be3be Convert database/sql/driver sql-injection sinks to MaD 2024-11-19 11:15:48 +00:00
Owen Mansel-Chan
e4eef6791a Convert database/sql sql-injection sinks to MaD 2024-11-19 11:15:42 +00:00
Owen Mansel-Chan
4cca6cff59 Convert Beego orm sql-injection sinks to MaD 2024-11-19 11:13:32 +00:00
Owen Mansel-Chan
2282a8184b Convert Bun sql-injection sinks to MaD 2024-11-19 11:13:30 +00:00
Owen Mansel-Chan
1c305aa8f3 Convert Xorm sql-injection sinks to MaD 2024-11-19 11:13:28 +00:00
Owen Mansel-Chan
1ab50fc62c Convert Gorm sql-injection sinks to MaD 2024-11-19 11:13:26 +00:00
Owen Mansel-Chan
fb050e8b43 Convert sqlx sql-injection sinks to MaD 2024-11-19 11:13:23 +00:00
Owen Mansel-Chan
d9d3e74e8c Convert gogf/gf sql-injection sinks to MaD 2024-11-19 11:13:17 +00:00
Owen Mansel-Chan
1315a1e9ae Upgrade and convert gorqlite sql-injection sinks to MaD 2024-11-19 11:13:13 +00:00
Owen Mansel-Chan
924467bebe Convert squirrel sql-injection sinks to MaD (non-existent methods removed)
Various non-existent methods were modeled, and I couldn't find any
evidence that they used to exist. They aren't in the stubs or tests. I
have removed them.
2024-11-19 11:13:10 +00:00
Geoffrey White
c7c6924fda Rust: Implement query, source/sink/barrier classes and concepts. All of this is framework, nothing is concretely modelled yet. 2024-11-19 11:09:43 +00:00
Geoffrey White
6a7fb06086 Rust: Add .qhelp and examples. 2024-11-19 11:09:42 +00:00
Simon Friis Vindum
bacc37d886 Rust: Add additional tests for intraprocedural data flow 2024-11-19 12:07:26 +01:00
Geoffrey White
2df565c84f Rust: Add options.yml and sqlx 'query cache' (result of 'sqlx prepare') so that the query test can function. 2024-11-19 10:56:37 +00:00
Geoffrey White
28d0ad94d5 Rust: Add placeholder SQL injection query, linked in test. 2024-11-19 10:56:36 +00:00
Geoffrey White
3673c7c813 Rust: Add SQL injection test cases (complete and functioning). 2024-11-19 10:56:35 +00:00
Michael Nebel
45458ed72b Merge pull request #17845 from michaelnebel/csharp/net8runtimehigherorder
C#: Add generated higher order models for .NET8 Runtime.
2024-11-19 11:52:34 +01:00
Simon Friis Vindum
b3668f8183 Merge pull request #17971 from paldepind/rust-df-patterns
Rust: Include patterns as data flow nodes
2024-11-19 11:12:12 +01:00
Simon Friis Vindum
2307df41ed Merge pull request #18010 from paldepind/rust-df-viable-callable
Rust: Include method calls in DataFlowCall and implement simple call target resolution
2024-11-19 11:10:34 +01:00
Michael Nebel
e3990b7d04 C#: Add change-note. 2024-11-19 10:56:19 +01:00
Stephan Brandauer
4208f031e3 Java: drop automodel queries 2024-11-19 10:40:22 +01:00
Stephan Brandauer
aea7c3fc81 Java: drop automodel change note 2024-11-19 10:40:17 +01:00
Paolo Tranquilli
e8677b46d5 Bazel: rename shortcut to install 2024-11-19 10:34:40 +01:00
Tom Hvitved
bb8d0b4881 Rust: Handle early returns in async blocks in CFG 2024-11-19 10:33:25 +01:00
Tom Hvitved
b6103e1ef4 Rust: Add CFG test for early return in async block
Also made the test comply with `cargo check`.
2024-11-19 10:32:43 +01:00
Paolo Tranquilli
40b8406d62 Bazel: use installer shortcut in docs and workflows 2024-11-19 10:32:21 +01:00
Michael Nebel
263a4a9fcb C#: Allow other characters between build-stdput and the expected message. 2024-11-19 10:26:07 +01:00
Michael Nebel
f89e80f402 C#: Update integration tests expected output. 2024-11-19 10:26:06 +01:00
Michael Nebel
05a19adc8f C#: Update global.json files. 2024-11-19 10:26:04 +01:00
Michael Nebel
d8313fc7b4 C#: Update .NET version in project files. 2024-11-19 10:26:02 +01:00
Michael Nebel
6b9d9a2c94 C#: Update stub generator script. 2024-11-19 10:26:00 +01:00
Michael Nebel
57e0e2dba1 C#: Update workflow files and scripts. 2024-11-19 10:25:58 +01:00
Michael Nebel
201a5e9faa C#: Update the extractor to target .NET 9. 2024-11-19 10:25:52 +01:00
Paolo Tranquilli
6e33f979c7 Bazel: add an installer shortcut to codeql_pack
This makes the first `codeql_pack` in a package add an `installer` target
aliasing the `<name>-installer` one. This makes it so that one can for
example do `bazel run //rust:installer` instead of the stuttering
`bazel run //rust:rust-installer`. If a bazel package defines multiple
`codeql_pack` targets, the first one only will get the `installer` alias.
2024-11-19 10:25:31 +01:00
Tom Hvitved
ef9f3835e5 Merge pull request #18007 from hvitved/rust/cfg/and-let
Rust: Improve CFG for `let` expressions
2024-11-19 10:23:32 +01:00
Calum Grant
2bfd7326d9 Merge pull request #18004 from github/revert-17948-revert-17694-multiple-entry-point
Revert "Revert "C++: Do not generate IR for functions with multiple entry points""
2024-11-19 09:20:24 +00:00
Napalys
c03d69af1e JS: Add: dataflow step for find, findLast, findLastIndex callback functions 2024-11-19 09:42:11 +01:00
Napalys
b64b837db3 JS: Add: test cases for find, findLast, findLastIndex with callbacks 2024-11-19 09:35:43 +01:00
Napalys
1b0f8aa657 JS: removed unnecessary findlast module import 2024-11-19 09:30:05 +01:00
Paolo Tranquilli
99494dd540 Merge pull request #18012 from github/revert-18011-revert-17937-redsun82/rust-cargo-options
Revert "Revert "Rust: allow to specify more cargo configuration options""
2024-11-19 09:03:52 +01:00
Tom Hvitved
46b4bad510 Rust: Update expected test output 2024-11-19 08:59:12 +01:00
Tom Hvitved
c85a5f9644 Rust: Run cargo fmt 2024-11-19 08:58:34 +01:00
Napalys
72a69cfa17 Added change notes 2024-11-19 08:24:36 +01:00
Owen Mansel-Chan
e2f17c63d7 Merge pull request #17988 from owen-mc/java/fix-unreachable-blocks-in-const-switch-stmt
Java: fix unreachable basic blocks in const switch stmt
2024-11-19 00:48:12 +00:00
Owen Mansel-Chan
c5bec1cc7f Merge pull request #17966 from owen-mc/go/mad/subtypes-true
Go: set `subtypes` column to true for models where it has a meaning
2024-11-19 00:43:55 +00:00
Jeroen Ketema
b622c6e9ca Merge pull request #18015 from jketema/cpu-cleanup
Remove duplicated "Supported CPU architectures" from "Supported platforms" table
2024-11-18 21:10:17 +01:00
REDMOND\brodes
792231c949 Removing SEH default case for function calls as the logic to handle SEH is not yet part of the IR generation to make this logic work. 2024-11-18 14:43:44 -05:00
Jeroen Ketema
ba545ca5d8 Remove duplicated "Supported CPU architectures" from "Supported platforms" table 2024-11-18 19:18:35 +01:00
Jeroen Ketema
84f3e6a0d3 Merge branch 'main' into guarded-free2 2024-11-18 19:09:23 +01:00
Ben Rodes
1c7b5aebb5 Merge branch 'main' into brodes/seh_flow_phase1_throwing_models 2024-11-18 12:48:38 -05:00
Mathias Vorreiter Pedersen
f2f83f77e0 Merge pull request #18013 from MathiasVP/non-boolean-consistency-check
C++: Add another IR consistency query
2024-11-18 17:27:33 +00:00
Paolo Tranquilli
f7ee5f4bf5 Merge pull request #18003 from github/redsun82/rust-qltest
Rust: only accept `options.yml` in QL tests
2024-11-18 17:24:57 +01:00
Paolo Tranquilli
8377ee545f Rust: fix reading lists from options.yml 2024-11-18 17:22:23 +01:00
REDMOND\brodes
4b83a451bd Change log 2024-11-18 11:14:46 -05:00
REDMOND\brodes
de05aee483 Adding model transition to using Throwing.qll. 2024-11-18 11:11:25 -05:00
Mathias Vorreiter Pedersen
ccca0b6ba4 C++: Also update syntax-zoo tests. 2024-11-18 15:56:41 +00:00
Mathias Vorreiter Pedersen
4a4552bbc1 C++: Also update the consistency query itself. 2024-11-18 15:55:25 +00:00
Jeroen Ketema
08bf6d7d30 Merge branch 'main' into guarded-free2 2024-11-18 16:50:22 +01:00
Mathias Vorreiter Pedersen
28391d19b6 C++: Add some more tests to expose consistency issues. 2024-11-18 15:25:57 +00:00
Mathias Vorreiter Pedersen
493ea6da31 C++: Add a new consistency check for branching on non-boolean values. 2024-11-18 15:21:28 +00:00
Paolo Tranquilli
0943389ca1 Rust: add rust-specific deps updater script 2024-11-18 16:16:54 +01:00
Paolo Tranquilli
e077bf0732 Rust: update vendored dependencies 2024-11-18 16:06:27 +01:00
Mathias Vorreiter Pedersen
6785b93ed8 Merge pull request #17938 from MathiasVP/fix-fp-in-missing-check-scanf-fixing-take-2
C++: Fix some FPs in `cpp/missing-check-scanf` (second attempt)
2024-11-18 15:05:18 +00:00
Simon Friis Vindum
86672b7e8c Merge branch 'main' into rust-df-viable-callable 2024-11-18 15:52:57 +01:00
Paolo Tranquilli
abd73e16d4 Revert "Revert "Rust: allow to specify more cargo configuration options"" 2024-11-18 15:52:03 +01:00
Tom Hvitved
74b5ebe4bf Rust: Improve CFG for let expressions 2024-11-18 15:51:16 +01:00
Tom Hvitved
8be1127e8c Rust: Add more CFG tests 2024-11-18 15:51:15 +01:00
Paolo Tranquilli
d9b86f55c8 Merge pull request #18011 from github/revert-17937-redsun82/rust-cargo-options
Revert "Rust: allow to specify more cargo configuration options"
2024-11-18 15:46:55 +01:00
Mathias Vorreiter Pedersen
86e95f14e0 Update cpp/ql/lib/change-notes/2024-11-18-guard-conditions.md
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-11-18 14:37:52 +00:00
Paolo Tranquilli
04072591c4 Revert "Rust: allow to specify more cargo configuration options" 2024-11-18 15:36:06 +01:00
Mathias Vorreiter Pedersen
90d7616f14 C++: Add change note. 2024-11-18 14:31:36 +00:00
Simon Friis Vindum
58a1b004ab Rust: Include method calls in DataFlowCall and implement simple call
target resolution
2024-11-18 15:27:21 +01:00
Simon Friis Vindum
4e97a9554a Rust: Add interprocedural tests 2024-11-18 15:21:15 +01:00
Napalys Klicius
9457bc3548 Merge pull request #17993 from Napalys/napalys/ES2023-array-protype-with
JS: Added support for Array.prototype.with() ES2023 feature
2024-11-18 14:37:53 +01:00
Jeroen Ketema
88be4b88ab C++: Address review comments 2024-11-18 14:27:01 +01:00
Asger F
023dcce400 JS: Disable variable capture heuristic
Bailing out can be more expensive as the resulting jump steps themselves
cause perf issues. The limit of 100 variables per scope has also been
added in the interim, which handles the cases that this needed to cover.
2024-11-18 13:44:10 +01:00
Asger F
37676f41aa JS: Remove jump steps from IIFE steps 2024-11-18 13:38:34 +01:00
Asger F
7f2eae0966 JS: Add test case for false flow through IIFEs
We generate local flow steps into and out of IIFEs, but these come jump steps automatically, resulting in FPs.
2024-11-18 13:34:35 +01:00
Asger F
7acc5689cf JS: Port exception steps to a universal summary 2024-11-18 13:27:58 +01:00
Paolo Tranquilli
fa52d03194 Merge pull request #17937 from github/redsun82/rust-cargo-options
Rust: allow to specify more cargo configuration options
2024-11-18 13:24:39 +01:00
Asger F
5ed362f7d6 JS: Add exception test case 2024-11-18 13:23:09 +01:00
Napalys
213ce225e0 JS: Add: taint step for Object.groupBy function, fixed test cases from 8ae05d8be4 2024-11-18 12:58:07 +01:00
Napalys
8ae05d8be4 JS: Add: test case for Object.groupBy 2024-11-18 12:55:17 +01:00
Napalys
c02ad65fdc JS: Add: taint step for Map.groupBy function 2024-11-18 12:50:06 +01:00
Asger F
33b7ba41ca Merge pull request #17535 from asgerf/jss/use-use-flow
JS: Follow use-use flow after a post-update
2024-11-18 12:48:58 +01:00
Napalys
3786ad4277 JS: Add: test case for Map.groupBy 2024-11-18 12:44:49 +01:00
Paolo Tranquilli
b11388c49b Rust: accept test changes 2024-11-18 12:06:25 +01:00
Paolo Tranquilli
8bcc5f4bf8 Merge pull request #17989 from geoffw0/swift6models2
Swift: More model repairs for Swift 6
2024-11-18 11:52:14 +01:00
Calum Grant
6a0a7dda76 Revert "Revert "C++: Do not generate IR for functions with multiple entry points"" 2024-11-18 10:31:04 +00:00
Tamás Vajk
b84b687b0d Merge pull request #17992 from tamasvajk/binlog/no-compilations
C#: Consider the extraction of empty binlog files acceptable
2024-11-18 11:09:57 +01:00
Paolo Tranquilli
8137419d93 Rust: only accept options.yml in QL tests 2024-11-18 10:40:29 +01:00
Geoffrey White
fa43207538 Swift: Autoformat. 2024-11-18 09:40:06 +00:00
Paolo Tranquilli
0356cdc3cc Merge pull request #18002 from github/redsun82/rust-ql-test-deps
Rust: add optional dependencies to ql tests
2024-11-18 10:32:09 +01:00
Simon Friis Vindum
1a198bfb3a Merge branch 'main' into rust-df-patterns 2024-11-18 10:06:01 +01:00
Paolo Tranquilli
75375be7ac Rust: add optional dependencies to ql tests
Also accept `options.yml` and `options.yaml` files as well for test options,
to get YAML syntax highlighting. In a follow up PR we might make the extension
mandatory.
2024-11-18 09:42:01 +01:00
Simon Friis Vindum
d178d84ea9 Merge pull request #17995 from paldepind/rust-df-source-sink-fix
Rust: Fix default source and sink in inline flow test
2024-11-18 09:19:08 +01:00
Simon Friis Vindum
0e025abd13 Rust: Add custom toString predicate for path expression 2024-11-18 09:09:03 +01:00
Napalys Klicius
a23850940f Merge branch 'main' into napalys/ES2023-array-protype-with 2024-11-18 08:25:09 +01:00
Napalys Klicius
63bc1ef69f Merge pull request #17977 from Napalys/napalys/toSpliced-support
JS: Added support for Array.prototype.toSpliced() ES2023 feature
2024-11-18 08:24:49 +01:00
Napalys
1304ab7065 Added change notes 2024-11-18 08:05:51 +01:00
Mathias Vorreiter Pedersen
19d53fba8c C++: Exclude guards in static local or global initializers. 2024-11-17 19:51:35 +00:00
Owen Mansel-Chan
06b72e5782 Update models in test expectation files 2024-11-16 19:44:32 +00:00
Owen Mansel-Chan
5745969462 Set subtypes=false when it has no meaning 2024-11-16 19:34:23 +00:00
Mathias Vorreiter Pedersen
409f2c1251 C++: Make the formatting of conjunct when using 'getDualValue' consistent. 2024-11-15 15:20:04 +00:00
Mathias Vorreiter Pedersen
459bb6ed04 Update cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-11-15 14:43:04 +00:00
Mathias Vorreiter Pedersen
5f9d3d7b09 C++: Rename 'ScrutineeValueNumber' to 'SwitchConditionValueNumber'. 2024-11-15 14:28:56 +00:00
Mathias Vorreiter Pedersen
feea29b8fe C++: Move classes. 2024-11-15 14:21:18 +00:00
Mathias Vorreiter Pedersen
c80bea33e5 C++: Stylistic fixes. 2024-11-15 14:20:12 +00:00
Napalys
a28fc8e772 JS: Add: Use of returnless function support for findLast and findLastIndex 2024-11-15 14:44:25 +01:00
Napalys
7250099f6c JS: Add: Test cases use of returnless function in findLast and findLastIndex 2024-11-15 14:42:11 +01:00
Tamás Vajk
e081b9a420 Merge pull request #17984 from tamasvajk/fix/tech-debt-01
Merge `Semmle.Extraction` into `Semmle.Extraction.CSharp`
2024-11-15 14:27:57 +01:00
Napalys
fcb65534a8 JS: Add: Array.protype.findLast as taint step 2024-11-15 14:10:01 +01:00
Napalys
ea90698fc1 JS: Add: Test case taint step for findLast 2024-11-15 13:35:28 +01:00
Rasmus Lerchedahl Petersen
15953bf569 java: inline range test 2024-11-15 12:31:18 +01:00
Simon Friis Vindum
7cb9d07f59 Rust: Fix default source and sink in inline flow test 2024-11-15 11:59:48 +01:00
Ian Lynagh
b1ac02795b Merge pull request #17991 from igfoo/igfoo/redundant
Go: Remove a redundant override
2024-11-15 10:55:56 +00:00
Napalys
bed1f25b3f JS: Fix: Now Array.prototype.with is properly flagged as taint step 2024-11-15 10:35:34 +01:00
Napalys
f04fd5cdcc JS: Add: Test case for Array.protype.with taint step 2024-11-15 10:27:44 +01:00
Tamas Vajk
e3b83bb4b4 Undo accidental comment removal 2024-11-15 10:19:33 +01:00
Simon Friis Vindum
9bf53f50fa Rust: Get CFG scope and update expected results 2024-11-15 10:00:43 +01:00
Napalys
631a3770ec JS: Add: change notes 2024-11-15 09:16:21 +01:00
Tamas Vajk
da5573203e C#: Consider the extraction of empty binlog files acceptable 2024-11-15 08:35:21 +01:00
Mathias Vorreiter Pedersen
42c1937776 Update IRGuards.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-11-14 21:28:54 +00:00
Mathias Vorreiter Pedersen
229d40ad8b Update IRGuards.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-11-14 21:28:43 +00:00
Mathias Vorreiter Pedersen
b10696c155 Update IRGuards.qll
Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
2024-11-14 21:28:33 +00:00
Ian Lynagh
50b9702afd Go: Remove a redundant override 2024-11-14 21:19:29 +00:00
Geoffrey White
8245e6c2b9 Swift: Fix unwanted flows. 2024-11-14 17:51:47 +00:00
Geoffrey White
e589b1fcd0 Swift: Fix query barriers. 2024-11-14 17:37:43 +00:00
Geoffrey White
6aa43e001d Swift: Effect on other tests. 2024-11-14 17:29:17 +00:00
Geoffrey White
c2c23c872b Swift: Address some modelling issues for Swift 6. 2024-11-14 17:22:15 +00:00
Geoffrey White
570393fe2b Swift: Additional test cases. 2024-11-14 17:17:00 +00:00
Mathias Vorreiter Pedersen
6e7256f9d4 C++: Delete unused predicates. 2024-11-14 16:46:19 +00:00
Geoffrey White
f0dc4f5ec3 Swift: Convert the dataflow-taint-core-conversions test to labelled sources. 2024-11-14 16:34:16 +00:00
Mathias Vorreiter Pedersen
bb85aa2fc9 C++: Accept test changes. 2024-11-14 16:29:51 +00:00
Mathias Vorreiter Pedersen
442968c3c2 C++: Properly restrict 'unary_simple_comparison_eq'. 2024-11-14 16:29:49 +00:00
Mathias Vorreiter Pedersen
db38069290 C++: Use value numbering in IRGuards. 2024-11-14 16:29:48 +00:00
Mathias Vorreiter Pedersen
a40c1d50b8 C++: Add FP tests. 2024-11-14 16:13:46 +00:00
Napalys Klicius
6fa3ff39a0 Merge branch 'main' into napalys/toSpliced-support 2024-11-14 16:56:32 +01:00
Owen Mansel-Chan
ba239a1be0 Add change note 2024-11-14 15:02:21 +00:00
Owen Mansel-Chan
bf0fba6c49 Refactor UnreachableBasicBlock to make it clearer 2024-11-14 14:53:12 +00:00
Owen Mansel-Chan
efb34aea45 Fix bug in UnreachableBlocks 2024-11-14 14:50:25 +00:00
Napalys Klicius
c8c15a0899 Merge pull request #17910 from Napalys/napalys/matchAll-support
JS: Support for matchAll
2024-11-14 15:36:20 +01:00
Napalys
b333f523df JS: Fix: now one can determine regex via Array.prototype.toSpliced function call. 2024-11-14 15:35:03 +01:00
Napalys
2b0def1ed3 JS: Add: Test case for checking if regex via using toSpliced 2024-11-14 15:31:38 +01:00
Napalys
52330e834c JS: Add: Test case for checking if regex via using splice 2024-11-14 15:29:05 +01:00
Jeroen Ketema
20685918bd C++: Silence ql-for-ql warning 2024-11-14 13:10:20 +01:00
Cornelius Riemenschneider
3fdd35cfdc Merge pull request #17976 from github/criemen/rust-3rdparty
Rust: Vendor build files for 3rdparty dependencies.
2024-11-14 12:58:00 +01:00
Jeroen Ketema
b581723a63 C++: Ignore complex guards and the comma operator 2024-11-14 12:53:54 +01:00
Jeroen Ketema
176acabd9d C++: Ignore free calls that are macro defined or #if/#ifdef guarded 2024-11-14 12:51:04 +01:00
Jeroen Ketema
a31e983e9e C++: Also allow single statement blocks in cpp/guarded-free 2024-11-14 12:47:29 +01:00
Jeroen Ketema
c86bbbb063 C++: Fix cpp/guarded-free FPs when there are other blocks depending on the guard 2024-11-14 11:48:17 +01:00
Owen Mansel-Chan
4ca6c80eb5 Merge pull request #17973 from github/workflow/coverage/update
Update CSV framework coverage reports
2024-11-14 10:19:41 +00:00
Tamas Vajk
0fa3ba6b4d Code quality improvements 2024-11-14 10:45:54 +01:00
Tamas Vajk
90579947cf Move all classes to the Semmle.Extraction.CSharp namespace 2024-11-14 09:13:03 +01:00
Napalys Klicius
97de35c689 Merge pull request #17965 from Napalys/napalys/immutable-array-operations
JS: Added support for toSorted and toReversed
2024-11-14 06:59:38 +01:00
github-actions[bot]
788a88aaca Add changed framework coverage reports 2024-11-14 00:20:18 +00:00
Napalys
84234d59b9 JS: Fix: Ensure toSpliced with spread operator is flagged 2024-11-13 17:21:34 +01:00
Napalys
8512cb44ff JS: Add: Test cases for toSpliced with spread operator 2024-11-13 17:18:09 +01:00
Napalys
cf90430ec0 JS: Add: Missing test case for splice spread operator 2024-11-13 17:07:17 +01:00
Simon Friis Vindum
d3f5b479f6 Merge branch 'main' into rust-df-patterns 2024-11-13 16:22:07 +01:00
Napalys
2df3d1b251 JS: Fix: Ensure toSpliced is flagged by taint tracking in test suite (ed44358143) 2024-11-13 15:58:20 +01:00
Tamas Vajk
a0cac46b46 Merge the two CachedEntityFactory classes 2024-11-13 15:53:49 +01:00
Napalys
ed44358143 Added toSpliced test cases for mutation arrays 2024-11-13 15:51:00 +01:00
Tamas Vajk
02bd204111 Move more classes to the Semmle.Extraction.CSharp namespace 2024-11-13 15:27:48 +01:00
Tamas Vajk
46da5960ee Move extraction context classes to the Semmle.Extraction.CSharp namespace 2024-11-13 14:28:04 +01:00
Tamas Vajk
b7098b72a4 Move location-like entities to the Semmle.Extraction.CSharp namespace 2024-11-13 14:24:08 +01:00
Tom Hvitved
2bb5603b30 Merge pull request #17949 from paldepind/rust-async-blocks
Rust: Handle async blocks in CFG and SSA
2024-11-13 13:51:20 +01:00
Tamas Vajk
e7844e2855 C#: Remove Semmle.Extraction project and move content to Semmle.Extraction.CSharp 2024-11-13 13:47:40 +01:00
Napalys
df4b596180 Added toSpliced as part ArraySliceStep and ArraySpliceStep, fixed tests from 2d9bc43506 2024-11-13 13:47:34 +01:00
Cornelius Riemenschneider
a66f8209f9 Rust: Vendor 3rdparty dependencies.
We've been observing some performance issues using crate_universe on CI.
Therefore, we're moving to vendor the auto-generated BUILD files
in our repository. This should provide a nice speed boost, while
getting rid of the complexity of the "rust cache" job we've been using
when we had a lot of git dependencies.

This PR includes a vendor script, and I'll put up a CI job internally
that runs that vendor script on Cargo.toml and Cargo.lock changes, to check
that the vendored files are in sync.
2024-11-13 13:22:14 +01:00
Calum Grant
67684d1813 Merge pull request #17948 from github/revert-17694-multiple-entry-point
Revert "C++: Do not generate IR for functions with multiple entry points"
2024-11-13 12:11:02 +00:00
Napalys
2d9bc43506 Added tests for arrays toSpliced with pop 2024-11-13 12:58:24 +01:00
Napalys
b4c84d3d3c Added taint step for toSpliced, handles test from a65f80ef76 2024-11-13 12:41:41 +01:00
Napalys
a65f80ef76 Added basic taint tracking test for Array.prototype.toSpliced() 2024-11-13 12:28:14 +01:00
Napalys
37712d2e21 Added a new way to simulate CatastrophicError for integration-tests. In the future environmental variable, might be a more sustainable solution. 2024-11-13 08:58:54 +01:00
Napalys Klicius
ef18a6e562 Remove toReversed and toSorted func prototypes from extern.js. 2024-11-13 08:29:18 +01:00
Simon Friis Vindum
78edafc94c Rust: Include patterns as data flow nodes 2024-11-12 18:43:06 +01:00
Napalys
c2c6b77b11 Added new test case for TS57 Creating Index Signatures from Non-Literal Method Names in Classes 2024-11-12 14:26:42 +01:00
Simon Friis Vindum
274d9421a7 Rust: Cache getEnclosingCfgScope 2024-11-12 13:15:20 +01:00
Owen Mansel-Chan
44e865114a Add change note 2024-11-12 11:37:07 +00:00
Owen Mansel-Chan
d31700cf92 Accept changes in models in .expected files 2024-11-12 11:34:29 +00:00
Owen Mansel-Chan
dfd8e7d397 Set subtypes column to True in models
This is almost always what we want.
2024-11-12 11:21:52 +00:00
Napalys
5f8ff125e9 Added change notes 2024-11-12 12:21:39 +01:00
Napalys
7427a24ca1 Added test case for Array.prototype.toReversed, which is currently not flagged as a taint sink. 2024-11-12 12:02:37 +01:00
Napalys
3215967cbc Added toReserved test case 2024-11-12 12:02:20 +01:00
Napalys
3f0a54c2e8 Added support for Array.prototype.toSorted function 2024-11-12 12:02:04 +01:00
Napalys
def8d75cb8 Added test case for Array.prototype.toSorted, which is currently not flagged as a taint sink. 2024-11-12 12:01:51 +01:00
Asger F
80ee372ddf JS: Replace an unused value with _ 2024-11-12 11:24:17 +01:00
Asger F
637baabe37 JS: Clarify why there are no SSA definitions 2024-11-12 11:23:35 +01:00
Simon Friis Vindum
03292310b6 Merge branch 'main' into rust-async-blocks 2024-11-12 09:36:04 +01:00
Simon Friis Vindum
63d84edfae Rust: Fix minor issues from PR feedback 2024-11-12 08:37:56 +01:00
Napalys
00790bf3f4 Added change notes 2024-11-11 15:43:54 +01:00
Napalys Klicius
1eabb6cbdd Update javascript/ql/test/experimental/Security/CWE-918/check-regex.js
Co-authored-by: Erik Krogh Kristensen <erik-krogh@github.com>
2024-11-11 15:40:22 +01:00
Calum Grant
2f032ec7b8 C++: Revert 17694 and keep tests 2024-11-11 13:06:50 +00:00
Paolo Tranquilli
5ef92a281b Rust: fix integration test on windows 2024-11-11 13:37:25 +01:00
Paolo Tranquilli
34361b81eb Rust: reorganize options integration tests 2024-11-11 13:11:10 +01:00
Napalys
82f09f1f8b Updated TS version to 5.7.1-release candidate 2024-11-11 10:19:32 +01:00
Paolo Tranquilli
07c59f7562 Rust: fix integration tests 2024-11-11 09:55:46 +01:00
Paolo Tranquilli
0298743f2a Merge branch 'main' into redsun82/rust-cargo-options 2024-11-11 09:47:59 +01:00
Simon Friis Vindum
9f0fba16cd Rust: Fix grammar and add documentation comments 2024-11-11 09:46:47 +01:00
Simon Friis Vindum
db1b698689 Rust: Accept fixed spurious results 2024-11-11 08:59:34 +01:00
Simon Friis Vindum
54172774d5 Merge branch 'main' into rust-async-blocks 2024-11-11 08:50:51 +01:00
Simon Friis Vindum
a5e13ee71b Rust: Handle async blocks in SSA analysis 2024-11-10 11:59:37 +01:00
Simon Friis Vindum
74a6d9812d Rust: Add SSA test for async blocks 2024-11-10 11:33:03 +01:00
Simon Friis Vindum
8e6844e4da Merge branch 'main' into rust-async-blocks 2024-11-10 09:28:14 +01:00
Paolo Tranquilli
98b7d50e8a Rust: avoid test name with * 2024-11-08 18:20:09 +01:00
Paolo Tranquilli
d9d37dc341 Merge branch 'main' into redsun82/rust-cargo-options 2024-11-08 18:17:54 +01:00
Paolo Tranquilli
94ba6473dd Merge branch 'main' into redsun82/rust-cargo-options 2024-11-08 17:54:59 +01:00
Paolo Tranquilli
f77f2b7ff0 Rust: turn off the test cfg by default 2024-11-08 17:07:03 +01:00
Paolo Tranquilli
a13c70bd11 Rust: add integration test for cargo options 2024-11-08 16:50:21 +01:00
Simon Friis Vindum
d52a2d67a2 Rust: Create CFG scope for async blocks 2024-11-08 15:00:02 +01:00
Geoffrey White
ede72b2680 Rust: Add unresolved macro calls count as well. 2024-11-08 13:59:05 +00:00
Simon Friis Vindum
e05b126215 Rust: Add CFG tests for async/await and const 2024-11-08 14:50:07 +01:00
Geoffrey White
f827ad8157 Rust: Add missing @kind diagnostic query metadata. 2024-11-08 12:33:06 +00:00
Paolo Tranquilli
b9ea78fb32 Rust: fix vector options 2024-11-08 13:06:22 +01:00
Paolo Tranquilli
be45e3deed Rust: allow to specify more cargo configuration options
This allows to tweak via extractor options some aspects of the cargo
configuration:
* the target architecture
* features (including `*` for all, which we must understand whether to
  set by default)
* cfg overrides

Integration tests will be added in a follow-up commit.
2024-11-08 12:23:16 +01:00
Geoffrey White
04926df6ea Rust: Add rust/diagnostics/unresolved-macro-calls diagnostic query. 2024-11-08 10:19:43 +00:00
Geoffrey White
0d1bd8a9cd Rust: Add 'order by' to the summary stats query (doesn't seem to affect the test, but affects VSCode runs). 2024-11-08 10:19:42 +00:00
Geoffrey White
7b265b2df3 Rust: Add a deliberately unresolvable macro call to the test. 2024-11-08 09:53:32 +00:00
Geoffrey White
7279cc42f8 Rust: Add resolved macros to rust/summary/summary-stats. 2024-11-08 09:49:47 +00:00
Napalys
70cf1a57bc Now catches usage of RegExp. after matchAll usage. 2024-11-08 08:59:31 +01:00
Napalys
c2baf0bd6d Added test where RegExp. is used after matchAll but it not flagged as potential issue 2024-11-08 08:56:12 +01:00
Napalys
dbd57e3870 Fixed issue where TaintTracking was not catching matchAll vulnerability 2024-11-07 13:40:10 +01:00
Napalys
a4fe728af2 Added matchAll test which is not marked as vulnurability by CodeQL 2024-11-07 13:35:09 +01:00
Napalys
514375dbf9 Fixes false positives from commit 42600c93ff 2024-11-07 13:00:54 +01:00
Michael Nebel
b45b40ea4f C#: Add change note. 2024-11-07 11:55:55 +01:00
Napalys
42600c93ff Added tests which shows false positive SSRF via matchAll 2024-11-07 11:40:20 +01:00
Michael Nebel
71bf900c6c C#: Update FlowSummaries expected tests. 2024-11-07 11:14:02 +01:00
Michael Nebel
a60d9c2ca2 C#: Update .NET8 Runtime models to include generated models for higher order methods. 2024-11-07 11:14:01 +01:00
Napalys
449cee91c8 Fixes false positives from commit 445552d3b53ec9592e8e3892cb337d1004b6a432 2024-11-07 10:33:13 +01:00
Napalys
4106663d89 Added tests for regex sanitization to identify false positives matchAll 2024-11-07 10:27:58 +01:00
Paolo Tranquilli
51f7129c79 Swift: accept integration test change 2024-11-06 08:40:29 +01:00
Paolo Tranquilli
02a0021a26 Swift: tweak mangling of extensions 2024-11-06 08:40:12 +01:00
Paolo Tranquilli
9e1e56f769 Swift: remove obsolete bazel definitions 2024-11-06 08:39:53 +01:00
Paolo Tranquilli
afd4585561 Merge branch 'main' into redsun82/swift-6 2024-11-06 08:05:52 +01:00
Paolo Tranquilli
c875667980 Swift: update to 6.0.2 2024-11-06 08:05:14 +01:00
Napalys Klicius
5e8b1b061f Update javascript/ql/src/Security/CWE-020/MissingRegExpAnchor.ql
Co-authored-by: Erik Krogh Kristensen <erik-krogh@github.com>
2024-11-05 10:29:22 +01:00
Napalys Klicius
7825a46085 Merge branch 'github:main' into napalys/matchAll-support 2024-11-05 09:31:30 +01:00
Napalys
b239bfabf1 Added tests forIncompleteHostnameRegExp and normalizedPaths using matchAll 2024-11-05 09:22:26 +01:00
Paolo Tranquilli
87a08fe5fa Merge pull request #17891 from geoffw0/swift6models
Swift: Update models for better Swift 6 compatibility.
2024-11-05 08:55:26 +01:00
Napalys
ccee34d6d3 Added support for matchAll in CWE-020 including new test cases 2024-11-05 08:51:24 +01:00
Jami Cogswell
459d16824e Java: weak crypto: do not report weak hash algorithms 2024-11-03 18:22:06 -05:00
Geoffrey White
24c4e87f44 Swift: Fix stray []. 2024-11-01 16:30:15 +00:00
Geoffrey White
f3ea75d27c Swift: Further modelling updates / gap filling that doesn't seem to affect tests. 2024-11-01 16:19:41 +00:00
Geoffrey White
954fbc44bf Swift: Update prefix / suffix models for Swift 6. 2024-11-01 16:19:39 +00:00
Geoffrey White
be12649838 Swift: Update joined models for Swift 6. 2024-11-01 16:19:36 +00:00
Geoffrey White
6f0f73974a Swift: Update dropFirst / dropLast / reversed models for Swift 6. 2024-11-01 16:19:34 +00:00
Paolo Tranquilli
1f356078ff Swift: temporarily accept test changes 2024-10-31 15:57:31 +01:00
Paolo Tranquilli
5a045beff9 Swift: turn off SIL verifications 2024-10-31 10:03:08 +01:00
Paolo Tranquilli
ce4273d461 Revert "Swift: use -typecheck in QL tests"
This reverts commit 34b8b43843.
2024-10-31 09:52:08 +01:00
Paolo Tranquilli
3aa7123032 Swift: restrict UnresolvedAstNodes to known locations 2024-10-31 09:26:14 +01:00
Paolo Tranquilli
34b8b43843 Swift: use -typecheck in QL tests 2024-10-31 06:41:46 +01:00
Paolo Tranquilli
7f3745cfcd Swift: fix @isolated(any) DB inconsistencies 2024-10-31 06:22:06 +01:00
Kevin Stubbings
ac411f1254 Second round feedback 2024-10-30 13:52:38 -07:00
Paolo Tranquilli
66e43c4006 Swift: use ubuntu 22.04 2024-10-30 17:16:35 +01:00
Paolo Tranquilli
3877eb8bc9 Swift: tentatively fix type mangling 2024-10-30 17:08:20 +01:00
Paolo Tranquilli
01417025f2 Swift: use ubuntu-latest 2024-10-30 16:20:27 +01:00
Paolo Tranquilli
5e6228cf7c Swift: fix 2024-10-30 16:11:08 +01:00
Paolo Tranquilli
df8184e0dc Swift: fix check-no-override job 2024-10-30 15:59:03 +01:00
Paolo Tranquilli
d325b8e678 Swift: update load.bzl and resources 2024-10-30 15:56:48 +01:00
Paolo Tranquilli
91f683d94c Merge branch 'main' into redsun82/swift-6 2024-10-30 12:27:24 +01:00
Paolo Tranquilli
d3fb2543d2 Swift: try out new builds 2024-10-30 12:26:34 +01:00
Kevin Stubbings
0483b8004c Feedback 2024-10-29 15:45:11 -07:00
Asger F
2fb108419c JS: Only parameter-calls as lambda calls 2024-10-29 08:32:15 +01:00
Asger F
1e9e57e46e JS: Fix missing qldoc 2024-10-29 08:32:14 +01:00
Asger F
52ba91a7f8 JS: Updates to nodes/edges in tests
Only changes to nodes/edges for various reasons, no actual result changes
2024-10-29 08:32:13 +01:00
Asger F
1243188825 JS: Update CleartextLogging with fixed FP 2024-10-29 08:32:11 +01:00
Asger F
18b39460f5 JS: Add regained results in UnsafeJQueryPlugin
These were marked as 'NOT OK' in the test file, but weren't previously flagged for some reason
2024-10-29 08:32:10 +01:00
Asger F
d3e70c1e97 JS: Add in-barrier to XSS query
This is a bit of a bandaid to cover issues with the push() method on next/router being
treated as an array push, which causes it to flow into other taint sources.
2024-10-29 08:32:08 +01:00
Asger F
1b85feb1fa JS: Add imprecise post-update steps for when a captured var/this is not tracked precisely
With the capture library we sometimes bails out of handling certain functions for scalability reasons.

This means we have a notion of "captured but imprecisely-tracked" variables and 'this'. In these cases we go back to propagating flow from a post-update node to the local source.
2024-10-29 08:32:07 +01:00
Asger F
d557c7689c JS: Update a test that now has more precise output 2024-10-29 08:32:06 +01:00
Asger F
1efef2ca3c JS: Change rule for getPostUpdateForStore
This causes less wobbles in test outputs
2024-10-29 08:32:05 +01:00
Asger F
ad52b71922 JS: Update immutable.js test to clarify why it stopped working
The Immutable model uses the 'd' and 'f' properties to model Map content, but the test doesn't actually mention those properties, so they were missing from the PropertyName class.

The flow was previously found spuriously by the regular Map model, which also adds flow through the  get/set calls. This flow is however no longer found since it relied on a step from post-update back to getALocalSource which is no longer present.
2024-10-29 08:32:03 +01:00
Asger F
c0997c28cb JS: Reveal issue with immutable.js test
Fixed in the next commit
2024-10-29 08:32:02 +01:00
Asger F
4473e6d977 JS: Update test with some post-update consistency checks gone
For a constructor call, the return value acts as the post-update node for the 'this' argument. The fact that constructor calls are sometimes PostUpdateNodes causes some of these harmless alerts.

The warnings have disappeared in some cases because we no longer target getALocalSource() so the target is no longer the constructor call.
2024-10-29 08:32:01 +01:00
Asger F
cb874945bf Test updates from introduction of implicit 'this' 2024-10-29 08:31:59 +01:00
Asger F
bd94fe1574 JS: Explain false positive in test case 2024-10-29 08:31:58 +01:00
Asger F
e05e077b33 JS: Block jump steps through 'this' now that the capture lib handles 'this' 2024-10-29 08:31:57 +01:00
Asger F
16b08b74eb JS: Add test showing potential for FPs when handling refinement guards 2024-10-29 08:31:55 +01:00
Asger F
958602e43e JS: Cache getARead (as per instructions in the SSA library) 2024-10-22 12:46:20 +02:00
Asger F
e784813c3b JS: Make barrier guards work with use-use flow 2024-10-22 12:46:19 +02:00
Asger F
67fdd864c9 JS: Add TODO 2024-10-22 12:46:18 +02:00
Asger F
81af9a1658 Fix missing flow through super calls 2024-10-22 12:46:17 +02:00
Asger F
12370e9210 JS: Use VariableOrThis in variable capture as well 2024-10-22 12:46:16 +02:00
Asger F
0ebe8bdd91 JS: Add test for missing capture flow for 'this' 2024-10-22 12:46:15 +02:00
Asger F
d31499d727 JS: introduce implicit this uses in general 2024-10-22 12:46:14 +02:00
Asger F
8dc0505f84 JS: Add test for missing flow into 'this' in field initializers 2024-10-22 12:46:13 +02:00
Asger F
c3c003b275 JS: Fix post-update flow into 'this' 2024-10-22 12:46:11 +02:00
Asger F
9fc99d6f9d JS: Fix store into object literals that have a post-update node 2024-10-22 12:46:11 +02:00
Asger F
d626e79ed3 JS: Add two test cases for missing flow 2024-10-22 12:46:10 +02:00
Asger F
992c144559 JS: Add qldoc to file 2024-10-22 12:46:09 +02:00
Asger F
beaacf96b3 JS: Rename Internal -> Cached since whole file is internal now 2024-10-22 12:46:08 +02:00
Asger F
3fca27bee2 JS: Fix indentation
Only formatting changes
2024-10-22 12:46:07 +02:00
Asger F
ed0af958a9 JS: Add Public module and only expose that
Indentation will be fixed in next commit
2024-10-22 12:46:06 +02:00
Asger F
3b663bd2f6 JS: Remove BasicBlockInternal module and mark relevant predicates as public
This exposes the predicates publicly, but will be hidden again in the next commit.
2024-10-22 12:46:04 +02:00
Asger F
211b42d0ce JS: Move BasicBlocks.qll -> internal/BasicBlocksInternal.qll 2024-10-22 12:46:03 +02:00
Asger F
9e600424cc JS: Remove unused predicate 2024-10-22 12:46:02 +02:00
Asger F
78e961cef3 JS: Add use-use flow 2024-10-22 12:46:01 +02:00
Asger F
81e74d8bb5 JS: Add test case for spurious flow from lack of use-use 2024-10-22 12:46:00 +02:00
Asger F
7363b578b1 JS: Instantiate shared SSA library
JS: Remove with statement comment
2024-10-22 12:45:58 +02:00
Asger F
a258489551 JS: Refactor some internal methods to make them easier to alias
We need these to return the dominator instead of declaring it in the parameter list, so that we can use it directly to fulfill part of the signature for the SSA library.

We can't rewrite it with an inline predicate since the SSA module calls with a transitive closure '*', which does not permit inline predicates.
2024-10-22 12:45:57 +02:00
Asger F
443987b484 Merge branch 'main' into js/shared-dataflow-merge-main 2024-10-22 10:30:53 +02:00
Paolo Tranquilli
524686ce37 Swift: make extractor compilable with Swift 6 2024-10-08 16:39:21 +02:00
Asger F
12e316b99d JS: Update test output after merging in 'main'
- Paths are now relative to the test case, not the qlpack
- Paths going through an implicit reads have changed slightly
2024-10-08 10:11:15 +02:00
Asger F
e2e91ac7d9 Merge branch 'main' into js/shared-dataflow-merge-main 2024-10-08 09:28:26 +02:00
Asger F
72daa980a0 Merge pull request #17643 from asgerf/jss/cached-barriers
JS: Fix bug causing re-evaluation of cached barriers
2024-10-03 12:59:53 +02:00
Asger F
5d2ce172eb JS: Update a test to handle AdditionalSanitizerGuardNode 2024-10-02 14:44:42 +02:00
Asger F
6cbe04dcb7 JS: Consistently use the shared XSS barrier guards in the XSS queries
Previously only reflected XSS used shared barrier guards.
2024-10-02 14:44:17 +02:00
Asger F
341bacfe55 JS: Fix bug causing re-evaluation of cached barriers 2024-10-02 14:43:18 +02:00
Kevin Stubbings
02a664319a formatting 2024-09-23 15:10:25 -07:00
Kevin Stubbings
e6b775422d Remove redundant imports 2024-09-23 15:08:24 -07:00
Kevin Stubbings
b1c0e28aff Extra test 2024-09-23 15:00:23 -07:00
Kevin Stubbings
05765c4284 Formatting 2024-09-23 14:51:50 -07:00
Kevin Stubbings
5d12f7bd30 Pre formatting Bottle tests 2024-09-23 14:37:22 -07:00
Asger F
1cd00a118c Merge branch 'main' into js/shared-dataflow-merge-main 2024-09-18 14:57:50 +02:00
Asger F
5e4c0906d8 Merge pull request #17412 from asgerf/jss/array-index-constant
JS: Fix handling of constant array index reads, and fix the fallout
2024-09-18 12:28:44 +02:00
Asger F
7ba6995854 JS: Clarify a comment 2024-09-17 15:59:04 +02:00
Asger F
1df69ec1d2 JS: Actually don't propagate into array element 0
Preserving tainted-url-suffix into array element 0 seemed like a good idea, but didn't work out so well.
2024-09-12 13:42:36 +02:00
Asger F
0e4e0f4fdd JS: Preverse tainted-url-suffix when stepping into prefix
A URL of form https://example.com?evil#bar will contain '?evil' after splitting out the '#' suffix, and vice versa.
2024-09-12 13:42:28 +02:00
Asger F
74ab346348 JS: Do not include taint steps in TaintedUrlSuffix::step
TaintedUrlSuffix is currently only used in TaintTracking configs meaning it is already propagated
by taint steps. The inclusion of these taint steps here however meant that implicit reads could appear prior to any of these steps.

This was is problematic for PropRead steps as an expression like x[0] could spuriously read from array element 1 via the path:

x [element 1]
x [empty access path] (after implicit read)
x[0] (taint step through PropRead)
2024-09-12 13:42:25 +02:00
Asger F
2712bf821a JS: Fix a bug in isSafeClientSideUrlProperty 2024-09-12 13:42:23 +02:00
Asger F
bc04131c72 JS: Disallow implicit reads before an optional step 2024-09-12 13:42:22 +02:00
Asger F
e1bed42481 JS: Add inline expectation test specifically for TaintedUrlSuffix 2024-09-12 13:42:20 +02:00
Asger F
cf90c83604 JS: Accept changes to nodes/edges results 2024-09-12 13:42:19 +02:00
Asger F
3b09bc548e JS: Add taint step for shift() 2024-09-12 13:42:17 +02:00
Asger F
3ea1134cc1 JS: Add inline test for .shift() method 2024-09-12 13:42:16 +02:00
Asger F
3fcf4ef7a1 JS: More precise model of .shift()
Array.prototype.shift only returns the first array element.

The mutation of Argument[this] is not yet modelled, and is better handled when we have use-use flow.
2024-09-12 13:42:15 +02:00
Asger F
e4f7560bcd JS: Add missing qldoc 2024-09-12 13:42:14 +02:00
Asger F
15fc450a9e JS: Add reminder to update ClientSideUrlRedirect 2024-09-12 13:42:13 +02:00
Asger F
da696817a3 JS: Convert 'split' taint step to legacy taint step 2024-09-12 13:42:05 +02:00
Asger F
133b016c7c JS: Remove old 'split' handling from TaintedUrlSuffix 2024-09-12 13:41:56 +02:00
Asger F
e87e543850 JS: Ensure optional steps/barriers are computed in the correct stage 2024-09-12 13:35:38 +02:00
Asger F
7790f68fe2 JS: Make the TaintedUrlSuffix library use optional steps/barriers 2024-09-12 13:35:36 +02:00
Asger F
3b34cd72f2 JS: Handle split() with '#' or '?' separator in a separate summary
This summary uses the notion of optional steps/barriers so it becomes configurable whether there is flow into the zero'th array element.

Also makes sure we handle the second-argument version of split().
2024-09-12 13:35:33 +02:00
Asger F
24983a5836 JS: Add OptionalStep and OptionalBarrier MaD tokens
OptionalStep[foo] and OptionalBarrier[foo] contribute steps/barriers that are not active by default, but can be opted into by specific queries or for specific flow states.

(Will be used in the following commits)
2024-09-12 13:30:39 +02:00
Asger F
87454a4f11 JS: Remove unused predicate 2024-09-10 14:44:49 +02:00
Asger F
0ddb1c87f5 JS: Test update indicating a problem with .split() 2024-09-10 13:14:37 +02:00
Asger F
e0ca1b0482 JS: Benign test updates 2024-09-10 13:07:24 +02:00
Asger F
3d4287b7cc JS: Remove ContentSet#asArrayIndex()
For ContentSet it is ambiguous whether asArrayIndex() should get a singleton content set, or the KnownArrayElement content set. The user will now have to choose between asSingleton().asArrayIndex() or ContentSet::arrayElementKnown.
2024-09-09 13:28:32 +02:00
Asger F
013d226ae3 JS: Update comment 2024-09-09 13:26:27 +02:00
Asger F
55d4e7e742 JS: Use ArrayElementKnown when reading a constant array index 2024-09-09 13:26:25 +02:00
Asger F
094112c905 Merge pull request #17213 from asgerf/jss/spread-argument
JS: Improve handling of spread arguments and rest parameters [shared data flow branch]
2024-09-09 13:15:22 +02:00
Asger F
fb9732a33f JS: Add another test and TODO about an issue with constant array indices 2024-09-06 08:43:11 +02:00
Asger F
1da68aac73 JS: Benign test output change
This happened as a result of the bugfix in the previous commit
2024-09-06 08:43:10 +02:00
Asger F
a9a8351cce JS: Fix one case of missing handling of unknown array index 2024-09-06 08:43:09 +02:00
Asger F
379c7ef20a JS: Add test to show lack of unknown array element being propagated 2024-09-06 08:43:08 +02:00
Asger F
92bb4b3da8 JS: Address some comments from hvitved 2024-09-05 11:32:07 +02:00
Kevin Stubbings
6efb3c69ef QLformatting 2024-09-03 15:54:06 -07:00
Kevin Stubbings
bd2564ee44 Formatting 2024-09-03 14:34:25 -07:00
Kevin Stubbings
581e7f5d3c Bottle 2024-09-03 14:00:27 -07:00
Kevin Stubbings
326eb6946e Added 2024-08-30 18:17:38 -07:00
Kevin Stubbings
5c8c99d31f Add header support for bottle and tornado 2024-08-30 18:16:01 -07:00
Asger F
4568967a76 JS: Do not use legacy taint steps in TaintedUrlSuffix
Tainted URL suffix steps are added as configuration-specific additional
steps, which means implicit reads may occur before any of these steps.

These steps accidentally included the legacy taint steps which include
a step from 'arguments' to all positional parameters. Combined with the
implicit read, arguments could escape their array index and flow to
any parameter while in the tainted-url flow state.
2024-08-29 13:48:30 +02:00
Asger F
65a36b0b3b JS: Add regression test for argument position confusion 2024-08-29 13:42:28 +02:00
Asger F
f65879eef1 JS: Update a test that no longer fails 2024-08-27 11:35:37 +02:00
Asger F
cb5dbb919d JS: Update test to reflect implicit read flow has been fixed
Shows the effect of https://github.com/github/codeql/pull/17262
2024-08-27 11:35:36 +02:00
Asger F
a2d53c261b JS: Update test output and add related TODO in model of 'async' 2024-08-27 11:35:35 +02:00
Asger F
837a8be1b8 JS: Update test output and add related TODO in 'markdown-table' model 2024-08-27 11:35:34 +02:00
Asger F
2e2181be2c JS: Update test output that only affects nodes/edges/subpaths 2024-08-27 11:35:33 +02:00
Asger F
3e196f83f1 JS: Update Promises/flow2 test 2024-08-27 11:35:32 +02:00
Asger F
aa8bd332bf JS: Add a few more tests 2024-08-27 11:35:31 +02:00
Asger F
371f7ef551 JS: Add implicit taint read of array elements 2024-08-27 11:35:31 +02:00
Asger F
df42e7c527 JS: Add test showing lack of implicit reads for ArrayElement 2024-08-27 11:35:30 +02:00
Asger F
4e7bd9ddd8 JS: Update Arrays test now that array elements do not taint the whole array 2024-08-27 11:35:29 +02:00
Asger F
4389b5c999 JS: Fix issue for .apply() calls 2024-08-27 11:35:28 +02:00
Asger F
34e6864fa3 JS: Note issue with .apply() calls 2024-08-27 11:35:27 +02:00
Asger F
ac1dd1850e JS: Remove taint step from array element to whole array 2024-08-27 11:35:26 +02:00
Asger F
5084d0260f Update tests.expected
The 'arguments' node is only materialised for functions that use 'arguments
2024-08-27 11:35:25 +02:00
Asger F
895cb872ad JS: Add taint into dynamic argument array 2024-08-27 11:35:24 +02:00
Asger F
079a622cf9 JS: Add tests showing missing taint flow
When the spread argument itself is tained and not
inside any content, the read steps currently fail
to propagate the data.
2024-08-27 11:35:23 +02:00
Asger F
6a083136d7 JS: Hide some nodes 2024-08-27 11:35:22 +02:00
Asger F
acdc896c04 JS: Support for dynamic args to flow summaries 2024-08-27 11:35:21 +02:00
Asger F
53a2a66dd0 Add new nodes to early stage 2024-08-27 11:35:20 +02:00
Asger F
5c7e623c47 JS: Add some tests for missing handling of dynamic args in flow summaries 2024-08-27 11:35:19 +02:00
Asger F
c04f0beb8a Update DataFlowConsistency.expected 2024-08-27 11:35:18 +02:00
Asger F
60c3d077b2 Update DataFlowImplConsistency.qll 2024-08-27 11:35:17 +02:00
Asger F
bbb1c8c374 Remove old arguments-array position 2024-08-27 11:35:16 +02:00
Asger F
ed33a6e91b JS: Add explicit model of .join() 2024-08-27 11:35:15 +02:00
Asger F
fa7ad03068 JS: Add store/load steps for the new argument arrays 2024-08-27 11:35:15 +02:00
Asger F
623dbda77d Do not pass regular positional args into the rest parameter 2024-08-27 11:35:14 +02:00
Asger F
a72f79576a JS: Add corresponding argument positions 2024-08-27 11:35:13 +02:00
Asger F
6c7d745a2b JS: Add nodes for static/dynamic argument/parameter arrays 2024-08-27 11:35:12 +02:00
Asger F
5d77c336fc Test case for spread and rest args/params 2024-08-27 11:35:11 +02:00
Asger F
4cdaccd22e JS: Add InlineFlowTest 2024-08-27 11:35:10 +02:00
Asger F
2adaf0f935 Merge pull request #17261 from asgerf/jss/dynamic-import-step
JS: Port step for dynamic imports
2024-08-27 08:27:16 +02:00
Asger F
47c519fc0a JS: Add test for flow through dynamic imports 2024-08-26 15:15:49 +02:00
Asger F
4b8ae2a4f3 Merge branch 'main' into js/shared-dataflow-merge-main 2024-08-26 12:43:16 +02:00
Asger F
7cfe3dae85 JS: Port step for dynamic imports 2024-08-23 10:07:28 +02:00
Asger F
379952febc Merge pull request #17285 from asgerf/js/shared-dataflow-bump
JS: Resolve conflicts after merging 'main' into shared data flow branch
2024-08-23 09:58:27 +02:00
Ed Minnix
bf11e2cd0f Fix code block 2024-08-22 08:57:54 -04:00
Edward Minnix III
9b43b4994e fixed-version: example
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-08-22 08:52:02 -04:00
Edward Minnix III
7e98d02d56 Wording
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-08-22 08:51:30 -04:00
Asger F
a2dd47aeb2 JS: Update test output
These files conflicted and have been regenerated.
2024-08-22 14:27:15 +02:00
Asger F
423fd04545 JS: Update new xsjs-specific code to respect TEarlyStageNode 2024-08-22 13:22:35 +02:00
Asger F
c54f5858b1 Merge branch 'main' into js/shared-dataflow-merge-main 2024-08-22 13:22:05 +02:00
Ed Minnix
2757b0ba6e Change example to net/http Request::FormValue 2024-08-21 18:35:19 -04:00
Edward Minnix III
1e1bbe92a3 Wording and typo
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-08-21 18:12:40 -04:00
Edward Minnix III
8b73d4af86 Fix typo
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-08-20 21:19:11 -04:00
Ed Minnix
1079486032 Mention Go in codeql-for-go toctree 2024-08-20 17:31:20 -04:00
Edward Minnix III
cc6b09da48 Fix name of section 2024-08-20 17:16:29 -04:00
Edward Minnix III
a99dd69d87 Remove function signature 2024-08-20 17:12:07 -04:00
Edward Minnix III
de2f8a1577 Make field consistent with existing model 2024-08-20 17:09:47 -04:00
Edward Minnix III
e142818fe5 Remove Select example.
Go does not currently have any equivalent with regards to lambda flow
2024-08-20 17:08:50 -04:00
Edward Minnix III
e8aac2be9a Remove neutral example
Go currently does not use `neutralModel`s and they are less relevant for Go than for Java/C#.
2024-08-20 17:06:58 -04:00
Edward Minnix III
27ad882f54 Usage range pattern instead of comma separation
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-08-20 17:05:33 -04:00
Edward Minnix III
2bfca21a2f Replace ss with elems 2024-08-20 17:04:42 -04:00
Edward Minnix III
9b92ff7e78 Typos and minor wording
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-08-20 17:02:24 -04:00
Edward Minnix III
211cda390d Method signatures and receiver/qualifier language
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-08-20 17:01:45 -04:00
Edward Minnix III
cfa1ad65c8 Consistently replace usage of namespace with package
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2024-08-20 17:00:32 -04:00
Ed Minnix
49a4318ab1 DRAFT: Go MaD docs first draft (still need to change Select example) 2024-08-20 00:30:16 -04:00
Asger F
c66000d2fa Merge pull request #17136 from asgerf/js/shared-dataflow-bump
JS: Merge 'main' into shared dataflow branch
2024-08-06 14:14:47 +02:00
Asger F
2d814428d6 JS: Update expected output with provenance 2024-08-06 12:45:08 +02:00
Asger F
0a143a5f52 JS: Do not include type in path explanation 2024-08-06 12:45:07 +02:00
Asger F
1a532dac29 JS: Update VariableCapture instantiation after merge 2024-08-06 12:45:06 +02:00
Asger F
c8bbad6c4d Merge branch 'main' into js/shared-dataflow-merge-main 2024-08-06 12:43:13 +02:00
Asger F
df64388d79 Merge branch 'main' into js/shared-dataflow-merge-main 2024-08-02 13:18:38 +02:00
Asger F
5c222f7b05 Merge pull request #14412 from asgerf/js/shared-dataflow
[Feature branch] JS: Migrate to shared dataflow library
2024-08-02 12:48:01 +02:00
Asger F
1d267efb6b JS: Fix missing qldoc 2024-06-28 14:30:56 +02:00
Asger F
e5924c1f84 JS: Another messy test update 2024-06-28 13:08:38 +02:00
Asger F
14fc790617 Update DataFlowConsistency.expected 2024-06-28 13:08:09 +02:00
Asger F
1c730bc66e JS: Fix compilation error in DataFlowImplConsistency.qll 2024-06-27 12:47:15 +02:00
Asger F
c3806a2210 JS: Messy test output updates
These initially got messed up by a merge conflict where I couldn't rerun the tests due to breaking
changes in the data flow library. I wanted the breaking-change updates to live in their own commits,
not just eaten by a merge resolution commit, so the test output became broken for a while.

The '#select' result set is unchanged in all of these, so they should be safe to accept.
2024-06-27 11:59:56 +02:00
Asger F
90f0e07e49 JS: Benign update after fixing PropertyName charpred 2024-06-27 11:56:22 +02:00
Asger F
ee10702e73 JS: Another provanance test output update 2024-06-27 11:56:01 +02:00
Asger F
df0488a470 Ensure Member tokens from flow summaries are seen in PropertyName 2024-06-27 10:22:14 +02:00
Asger F
c52a4b0621 JS: Provide RenderSummarizedCallable 2024-06-27 09:44:45 +02:00
Asger F
e53c0cdce7 Fix unknown Parameter/Argument decoding 2024-06-27 09:39:06 +02:00
Asger F
2473274681 JS: Benign test output changes 2024-06-27 09:06:45 +02:00
Asger F
af7b4e3063 Accept flow difference due to added test cases
New library gets FN for spread arguments in a call to splice(), which
was added to the old version in this PR:
  https://github.com/github/codeql/pull/16739
2024-06-26 13:52:27 +02:00
Asger F
53efb5837b JS: Update some tests with provenance columns
Only includes the changes that purely contain the new provenance columns
2024-06-26 13:51:44 +02:00
Asger F
88edc06517 Avoid bad join in compatibleTypesCached
This is identical to the code in Ruby and seems to prevent a bad join ordering
in a cached version of this predicate in DataFlowCommon
2024-06-26 13:51:41 +02:00
Asger F
fc7c2c5b17 Remove unused code 2024-06-26 13:51:40 +02:00
Asger F
e67e89dd70 Implement decodeUnknownArgument/ParameterPosition 2024-06-26 13:51:39 +02:00
Asger F
3bebd709b3 Handle AnyMemberDeep and ArrayElementDeep in encodeContent 2024-06-26 13:51:38 +02:00
Asger F
6c0c67dce4 Implement encodeWith/WithoutContent 2024-06-26 13:51:37 +02:00
Asger F
b0ea81276b Implement encodeReturn 2024-06-26 13:51:36 +02:00
Asger F
5811a3c5a6 Port getMadStringFromContentSet -> encodeContent 2024-06-26 13:51:35 +02:00
Asger F
8c4e5e8876 Boilerplate implementation of default predicates from FlowSummaryImpl.qll 2024-06-26 13:51:34 +02:00
Asger F
6b35a766a6 Migrate to shared FlowSummary library 2024-06-25 14:43:29 +02:00
Asger F
dd7aff555d Instantiate shared FlowSummary library 2024-06-25 13:35:49 +02:00
Asger F
f0d7c3a7f0 Remove bindingsets 2024-06-25 13:33:06 +02:00
Asger F
6e32f27652 Rename predicates to be consistent with qlpack
In preparation for migrating to the FlowSummary module in the qlpack,
rename predicates to be consistent with the qlpack.
2024-06-25 13:30:33 +02:00
Asger F
6c8fb61f60 Js: Update FlowSummaryImpl.qll to make things compile 2024-06-25 13:10:24 +02:00
Asger F
64a9598b89 JS: Update interface for isUnreachableInCall 2024-06-25 13:01:23 +02:00
Asger F
505c532af7 JS: Implement totalorder() 2024-06-25 12:58:35 +02:00
Asger F
102ca77acf Switch to getLocation() in DataFlowCall 2024-06-25 11:49:19 +02:00
Asger F
ecf418b8f6 Merge branch 'main' into js/shared-dataflow 2024-06-25 11:48:41 +02:00
Asger F
bd3fccd1a8 JS: Update test output with provenance column 2024-06-25 10:30:56 +02:00
Asger F
20df5adbaa JS: Bugfix in DeduplicatePathGraph
This was introduced after a quick fix to handle the addition of
provenance.
2024-06-25 10:30:14 +02:00
Asger F
f43a189f06 JS: Make CaptureNode.toString() more explicit 2024-06-25 09:56:39 +02:00
Asger F
536c115c1c JS: Fix location override in CaptureNode 2024-05-06 13:51:25 +02:00
Asger F
23d28fc098 Shared: add location for 'this' nodes 2024-05-06 13:50:40 +02:00
Asger F
5a2260b481 JS: Update to match changes to API 2024-05-06 10:13:25 +02:00
Asger F
19f14622f3 JS: Update use of Locations 2024-05-06 10:13:24 +02:00
Asger F
2de9af2236 JS: Update to getLocation() in DeduplicatePathGraph 2024-05-06 10:13:07 +02:00
Asger F
c408ab9e6a Merge branch 'main' into js/shared-dataflow 2024-05-02 19:43:34 +02:00
Asger F
711a08b0d4 JS: Add TODO about switching to the shared library 2024-03-15 09:26:19 +01:00
Asger F
eff5f3b7d6 JS: Remove duplicate dependency from qlpack.yml 2024-03-13 20:43:44 +01:00
Asger F
ddf6eb3a04 JS: Quick fix to make DeduplicatePathGraph compile
There's an open PR for this where a real fix should be written
2024-03-13 15:24:53 +01:00
Asger F
8ecdb5cefe Update VariableCapture.qll 2024-03-13 15:24:20 +01:00
Asger F
82abd867a0 JS: Update uses of AccessPathSyntax
This doesn't yet migrate to the FlowSummaryImpl.qll in a qlpack, just trying to make things compile first
2024-03-13 15:17:58 +01:00
Asger F
e5bc8db2f0 JS: Fix conflicting default for visbleImplInCallContext 2024-03-13 15:17:08 +01:00
Asger F
bb1f729a3f Update VariableCapture.qll 2024-03-13 15:16:37 +01:00
Asger F
97567f412e JS: Update VariableCapture.qll after changes to API 2024-03-13 14:53:00 +01:00
Asger F
5e7d1d5c2c Merge branch 'main' into js/shared-dataflow-merged 2024-03-13 14:27:16 +01:00
Asger F
fa8933eb41 JS: Reduce duplication in UnsafeDynamicMethodAccessQuery 2024-03-13 12:30:05 +01:00
Asger F
ea4bc9cdbb JS: Comment about manually applying taint steps 2024-03-13 12:30:05 +01:00
Asger F
406b080ce3 JS: Add comment about allowImplicitRead in PostMessageStar 2024-03-13 11:30:52 +01:00
Asger F
0a2050bc42 JS: Deduplicate predicate in HostHeaderPoisoningQuery 2024-03-13 11:27:18 +01:00
Asger F
11983faccf JS: Remove out-commented code 2024-03-13 11:26:56 +01:00
Asger F
b31f20a64e JS: Explain why ObjetWrapperFlowLabel is deprecated 2024-03-13 11:08:25 +01:00
Asger F
e0aae53ac7 JS: Remove unnecessary BarrierGuardLegacy class 2024-03-13 11:05:23 +01:00
Asger F
fce2be0af3 JS: Use BarrierGuardLegacy in TaintedPath 2024-03-13 11:02:09 +01:00
Asger F
e640154048 JS: Be backwards compatible with AdditionalBarrierGuardNode
I've confirmed that the 'legacyBarrier' predicate does not occur in the DIL
2024-03-13 10:54:02 +01:00
Asger F
14e75be510 JS: Expand comments and synthetic node name in ForOfLoops 2024-03-13 09:27:00 +01:00
Asger F
e66f27cfe3 JS: Move hasWildcardReplaceRegExp to a shared place 2024-03-13 09:19:26 +01:00
Asger F
4043bc13ab JS: Explicit mark comment as a TODO 2024-03-13 09:19:03 +01:00
Asger F
858c79e395 JS: Add plain taint step through Promise.all() 2024-03-13 08:57:42 +01:00
Asger F
13a8e0fbf0 JS: Add failing test for Promise.all() 2024-03-13 08:54:06 +01:00
Asger F
2c1aa08f79 JS: Rename Strings2 -> Strings 2024-03-12 21:18:14 +01:00
Asger F
478dd25f3e JS: Rename Sets2 -> Sets 2024-03-12 21:17:29 +01:00
Asger F
433489478d JS: Rename Promise2 -> Promise 2024-03-12 21:16:43 +01:00
Asger F
e2f3565227 JS: Rename Maps2 -> Maps 2024-03-12 21:14:29 +01:00
Asger F
b3fad7a8dc JS: Rename Iterators2 -> Iterators 2024-03-12 15:12:07 +01:00
Asger F
5aafd33cec JS: Rename Arrays2 -> Arrays 2024-03-12 15:11:29 +01:00
Asger F
76e0445af0 JS: Be consistent about caching in PreCallGraphStep 2024-03-12 15:08:59 +01:00
Asger F
28fc8ba0c1 JS: Remove EmptyType 2024-03-12 14:59:04 +01:00
Asger F
f94aa2ceec Update javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowNode.qll 2024-03-12 14:41:11 +01:00
Asger F
a02ab2ad88 JS: Port heuristic versions of standard queries 2023-10-13 13:15:08 +02:00
Asger F
3c7c5377ec JS: Add content approximation
This seems to fix a performance issue for RegExpInjection in angular
2023-10-13 13:15:08 +02:00
Asger F
5775fe6d6e JS: Use TAnyType in FlowSummaryPrivate 2023-10-13 13:15:08 +02:00
Asger F
9faf300dd0 JS: Use type-pruning to restrict callback flow 2023-10-13 13:15:08 +02:00
Asger F
e738b5d125 JS: Expand callback test case
Type-based pruning is confused by the different tests being interleaved, so we additionally want to have a test that is independent from the other parts of this test.
2023-10-13 13:15:08 +02:00
Asger F
d3f5169e66 JS: Lower field-flow branch limit on Polynomial ReDoS 2023-10-13 13:15:08 +02:00
Asger F
51dec79401 JS: Lower access path limit to 2 2023-10-13 13:15:08 +02:00
Asger F
24bab27ffe JS: Add TODO for dynamic import step 2023-10-13 13:15:08 +02:00
Asger F
7c5eb89491 JS: Add tests for captured 'this' (genuine FN) 2023-10-13 13:15:08 +02:00
Asger F
98c79e7674 JS: Update test output showing lack of global flow (geniune FN) 2023-10-13 13:15:08 +02:00
Asger F
9b46c4596c JS: Update HeuristicSoruceCodeInjection test 2023-10-13 13:15:08 +02:00
Asger F
bab639f23c JS: Update ReflectedXssWithCustomSanitizer test 2023-10-13 13:15:08 +02:00
Asger F
85e8998067 JS: Update ImportEquals test 2023-10-13 13:15:08 +02:00
Asger F
2eff07f476 JS: Update TaintTracking test 2023-10-13 13:15:08 +02:00
Asger F
b5ad36686e JS: Block flow into window.location 2023-10-13 13:15:08 +02:00
Asger F
75c915b2a3 JS: Update Spife test 2023-10-13 13:15:07 +02:00
Asger F
c2f66c0f93 JS: Update Restify2 test 2023-10-13 13:15:07 +02:00
Asger F
b304fb4337 JS: Reorder result sets in ReactJS test output 2023-10-13 13:15:07 +02:00
Asger F
32eddd3c07 JS: Update ReactJS test output 2023-10-13 13:15:07 +02:00
Asger F
b8a0afbb9f JS: Make overriding ConsistencyChecking.getATestFile() optional 2023-10-13 13:15:07 +02:00
Asger F
6c9f4a10ac JS: Port TaintBarriers test 2023-10-13 13:15:07 +02:00
Asger F
e5946bf43b JS: Port HeuristicSource test 2023-10-13 13:15:07 +02:00
Asger F
771519bbc5 JS: Port Routing test 2023-10-13 13:15:07 +02:00
Asger F
2364bd84e0 JS: Fix whitespace in a test (trivial change) 2023-10-13 13:15:07 +02:00
Asger F
98d1bb3826 JS: Reorder result sets in a test (trivial change) 2023-10-13 13:15:07 +02:00
Asger F
81bd292a16 JS: Port Promises test
Result changes are benign
2023-10-13 13:15:07 +02:00
Asger F
dd8a24c6c0 JS: Port LabelledBarrierGuards test 2023-10-13 13:15:07 +02:00
Asger F
458f0a077c JS: Port InterProceduralFlow test
All the new results are benign
2023-10-13 13:15:07 +02:00
Asger F
0d10aba67d Revert "JS: Add global post-update steps"
This resulted in huge performance issues from too much global flow
2023-10-13 13:15:07 +02:00
Asger F
50aace3fa3 JS: Add global post-update steps 2023-10-13 13:15:07 +02:00
Asger F
9372f7993d JS: Update Generators test
Data flow difference is benign
2023-10-13 13:15:07 +02:00
Asger F
995df41532 JS: Update Vuex test 2023-10-13 13:15:07 +02:00
Asger F
3983530983 JS: Update Templating/Xss test 2023-10-13 13:15:07 +02:00
Asger F
b9344134d3 JS: Update Redux test 2023-10-13 13:15:07 +02:00
Asger F
d2053445a7 JS: Update frameworks/PropertyProjection test 2023-10-13 13:15:07 +02:00
Asger F
2eec47b52c JS: Update frameworks/Next test 2023-10-13 13:15:07 +02:00
Asger F
644f9683b1 JS: Update frameworks/immutable test 2023-10-13 13:15:07 +02:00
Asger F
a2d4a03c0e JS: Update framework/data test 2023-10-13 13:15:06 +02:00
Asger F
6600fe9d51 JS: Port ComposedFunctions test 2023-10-13 13:15:06 +02:00
Asger F
09892279e6 JS: Port Collections test 2023-10-13 13:15:06 +02:00
Asger F
466ffdf8f5 JS: Port AsyncTaintTracking test 2023-10-13 13:15:06 +02:00
Asger F
09b0ba0c1f JS: Port Angular2 test 2023-10-13 13:15:06 +02:00
Asger F
92812eee78 JS: Add test for flow summaries 2023-10-13 13:15:06 +02:00
Asger F
af05789cbf JS: Remove noise from data flow test 2023-10-13 13:15:06 +02:00
Asger F
c652470e2f JS: Do not port CustomLoadStoreStep test 2023-10-13 13:15:06 +02:00
Asger F
1a95961bac JS: Port Classes test 2023-10-13 13:15:06 +02:00
Asger F
9a15a557b4 JS: Port SimpleBarrierGuard test 2023-10-13 13:15:06 +02:00
Asger F
ff086377cb JS: Port Arrays test 2023-10-13 13:15:06 +02:00
Asger F
d35959a098 JS: Add utility for comparing results in tests 2023-10-13 13:15:06 +02:00
Asger F
43be45207d JS: Port meta queries 2023-10-13 13:15:06 +02:00
Asger F
c55300d4b0 JS: Port PolynomialReDoS 2023-10-13 13:15:06 +02:00
Asger F
b8847dbc5d JS: Port Xxe 2023-10-13 13:15:06 +02:00
Asger F
c2d170b4fd JS: Port XpathInjection 2023-10-13 13:15:06 +02:00
Asger F
03f8c0fc5e JS: Port XmlBomb 2023-10-13 13:15:06 +02:00
Asger F
83095535f9 JS: Port UnvalidatedDynamicMethodCall 2023-10-13 13:15:06 +02:00
Asger F
ba9edb4e54 JS: Port UnsafeShellCommandConstruction 2023-10-13 13:15:06 +02:00
Asger F
d08e4504ff JS: Port UnsafeJQueryPlugin 2023-10-13 13:15:06 +02:00
Asger F
6e3f4bd7d8 JS: Port UnsafeHtmlConstruction 2023-10-13 13:15:06 +02:00
Asger F
7f4d42ddcd JS: Port UnsafeDynamicMethodAccess 2023-10-13 13:15:06 +02:00
Asger F
758f42495c JS: Port UnsafeDeserialization 2023-10-13 13:15:05 +02:00
Asger F
32022ccbda JS: Port UnsafeCodeConstruction 2023-10-13 13:15:05 +02:00
Asger F
5af608c937 JS: Port TypeConfusionThroughParameterTampering 2023-10-13 13:15:05 +02:00
Asger F
25962a9ba6 JS: Port TemplateObjectInjection 2023-10-13 13:15:05 +02:00
Asger F
51624c02a2 JS: Port TaintedFormatString 2023-10-13 13:15:05 +02:00
Asger F
63343b1ba4 JS: Port StackTraceExposure 2023-10-13 13:15:05 +02:00
Asger F
d446444667 JS: Port ShellCommandInjectionFromEnvironment 2023-10-13 13:15:05 +02:00
Asger F
06835a800c JS: Port SecondOrderCommandInjection 2023-10-13 13:15:05 +02:00
Asger F
4af7694309 JS: Port ResourceExhaustion 2023-10-13 13:15:05 +02:00
Asger F
b9bd0520e2 JS: Port RemotePropertyInjection 2023-10-13 13:15:05 +02:00
Asger F
dcc73a7f90 JS: Port RegExpInjection 2023-10-13 13:15:05 +02:00
Asger F
2400af4bc3 JS: Port PostMessageStar 2023-10-13 13:15:05 +02:00
Asger F
e1fae3d16d JS: Port InsufficientPasswordHash 2023-10-13 13:15:05 +02:00
Asger F
fd98b2546d JS: Port InsecureTemporaryFile 2023-10-13 13:15:05 +02:00
Asger F
cd1a1e25ae JS: Port InsecureRandomness 2023-10-13 13:15:05 +02:00
Asger F
99f63b1cfa JS: Port InsecureDownload 2023-10-13 13:15:05 +02:00
Asger F
8c001916b6 JS: Port IndirectCommandInjection 2023-10-13 13:15:05 +02:00
Asger F
e3ab5bdd16 JS: Port IncompleteHtmlAttributeSanitization 2023-10-13 13:15:05 +02:00
Asger F
9128722627 JS: Port ImproperCodeSanitization 2023-10-13 13:15:05 +02:00
Asger F
8715c1b324 JS: Port HostHeaderPoisoningInEmailGeneration 2023-10-13 13:15:05 +02:00
Asger F
bc88f50a5f JS: Port HardcodedDataInterpretedAsCode 2023-10-13 13:15:04 +02:00
Asger F
4bac90252c JS: Port HardcodedCredentials 2023-10-13 13:15:04 +02:00
Asger F
f4d62c3225 JS: Port HttpToFileAccess 2023-10-13 13:15:04 +02:00
Asger F
2935aac559 JS: Port FileAccessToHttp 2023-10-13 13:15:04 +02:00
Asger F
8e95a90d03 JS: Port UntrustedDataToExternalAPI 2023-10-13 13:15:04 +02:00
Asger F
abd937a49d JS: Port DifferentKindsComparisonBypass 2023-10-13 13:15:04 +02:00
Asger F
d324e554f3 JS: Port DeepObjectResourceExhaustion 2023-10-13 13:15:04 +02:00
Asger F
30f1fbc10d JS: Port CorsMisconfigurationForCredentials 2023-10-13 13:15:04 +02:00
Asger F
f14303acea JS: Port ConditionalBypass 2023-10-13 13:15:04 +02:00
Asger F
2296a273c4 JS: Port BuildArtifactLeak 2023-10-13 13:15:04 +02:00
Asger F
85617c292e JS: Port BrokenCryptoAlgorithm 2023-10-13 13:15:04 +02:00
Asger F
395f52303c JS: Port barriers in UrlConcatenation.qll 2023-10-13 13:15:04 +02:00
Asger F
7a1aead831 JS: Port ZipSlip 2023-10-13 13:15:04 +02:00
Asger F
e9189f965f JS: Port LogInjection 2023-10-13 13:15:04 +02:00
Asger F
ae680e747b JS: Port LoopBoundInjection 2023-10-13 13:15:04 +02:00
Asger F
40d68cb4dc JS: Port CleartextStorage 2023-10-13 13:15:04 +02:00
Asger F
b8a6f81669 JS: Port CleartextLogging 2023-10-13 13:15:04 +02:00
Asger F
a5c221fcfc JS: Port PrototypePollutingMergeCall 2023-10-13 13:15:04 +02:00
Asger F
adf7d5409d JS: Port PrototypePollutingFunction 2023-10-13 13:15:04 +02:00
Asger F
f1f45927b1 JS: Port PrototypePollutingAssignment 2023-10-13 13:15:04 +02:00
Asger F
81d2721248 JS: Port ClientSideUrlRedirect 2023-10-13 13:15:04 +02:00
Asger F
46fd727a55 JS: Port ServerSideUrlRedirect 2023-10-13 13:15:04 +02:00
Asger F
92816b1c9a JS: Port ClientSideRequestForgery 2023-10-13 13:15:03 +02:00
Asger F
b2216627be JS: Port RequestForgery 2023-10-13 13:15:03 +02:00
Asger F
d7b4e0c206 JS: Port ExceptionXss 2023-10-13 13:15:03 +02:00
Asger F
cf5450dbd5 JS: Port XssThroughDom 2023-10-13 13:15:03 +02:00
Asger F
5f05232e02 JS: Port StoredXss 2023-10-13 13:15:03 +02:00
Asger F
46b90e51fc JS: Port ReflectedXss 2023-10-13 13:15:03 +02:00
Asger F
e091fdefa4 JS: Port DomBasedXss 2023-10-13 13:15:03 +02:00
Asger F
2818fa62d6 JS: Updates to shared Xss.qll 2023-10-13 13:15:03 +02:00
Asger F
547a8a958a JS: Port SqlInjection 2023-10-13 13:15:03 +02:00
Asger F
65e9706c8e JS: Port TaintedPath 2023-10-13 13:15:03 +02:00
Asger F
fcfab5238e JS: Port CodeInjection 2023-10-13 13:15:03 +02:00
Asger F
17233a6749 JS: Port CommandInjection 2023-10-13 13:15:03 +02:00
Asger F
ccd6d3dcd7 JS: Port example queries 2023-10-13 13:15:03 +02:00
Asger F
449ec72dbe JS: Port experimental queries 2023-10-13 13:15:03 +02:00
Asger F
aa5a2836f5 JS: Update barriers in TaintedObject 2023-10-13 13:15:03 +02:00
Asger F
bc68b6a7f8 JS: Add AdHocWhitelistSanitizer::getABarrierNode()
This sanitizer guard is opt-in, i.e. not an AdditionalSanitizerGuardNode.
2023-10-13 13:15:03 +02:00
Asger F
26f7f94246 JS: Expose default taint steps/sanitizers
We need access to these in order to port taint-tracking configurations
where only some flow labels should use taint steps. This isn't supported
by the shared data flow library.

Such queries must therefore be converted to plain data-flow
configurations that explicitly add taint steps to the relevant flow
states.
2023-10-13 13:15:03 +02:00
Asger F
c924b4a220 JS: Expose shared API in DataFlow/TaintTracking modules 2023-10-13 13:15:03 +02:00
Asger F
1ed3235639 JS: use BarrierGuards 2023-10-13 13:15:03 +02:00
Asger F
277292e3b9 JS: Improve performance of barrier guards without pruning 2023-10-13 13:15:03 +02:00
Asger F
06fd9c2359 JS: Add barrier guard library 2023-10-13 13:14:43 +02:00
Asger F
46e4cdc623 JS: Disallow consecutive captured contents 2023-10-13 13:14:43 +02:00
Asger F
7bcf8b858b JS: Capture flow 2023-10-13 13:14:43 +02:00
Asger F
16df2c31bb Create DataFlowImplConsistency.qll 2023-10-13 12:42:41 +02:00
Asger F
3ef478669b JS: Collapse some cached stages 2023-10-13 12:42:41 +02:00
Asger F
9fef8803ed JS: Avoid BarrierGuardNode's range from depending on Configuration 2023-10-13 12:42:41 +02:00
Asger F
e31ae3a1bf JS: Model JSON.stringify with "deep" read operators 2023-10-13 12:42:41 +02:00
Asger F
0c2e52baba JS: Summary/steps for iterators and generators 2023-10-13 12:42:41 +02:00
Asger F
da3a0de814 JS: Port String#replace to flow summary 2023-10-13 12:42:41 +02:00
Asger F
f0c2afe39e JS: Add flow summaries for maps and sets 2023-10-13 12:42:40 +02:00
Asger F
5054c43b18 JS: Add flow summaries/steps for promises and async/await 2023-10-13 12:42:40 +02:00
Asger F
4319b07798 JS: Add flow summaries for Arrays 2023-10-13 12:42:40 +02:00
Asger F
a31e251529 JS: Add flow summaries for core methods 2023-10-13 12:42:40 +02:00
Asger F
46fec8ea7e JS: Add AdditionalFlowInternal
This provides access to more features than we want to expose publicly at the moment, but is useful for modelling certain language features.
2023-10-13 12:42:40 +02:00
Asger F
3f20d71a9b JS: Add legacy post-update step
This is to ensure getALocalSource() can be replaced by getPostUpdateNode() as the base of a store
2023-10-13 12:42:40 +02:00
Asger F
6037ff553c JS: Add LegacyPreUpdateStep
This contributes to both LegacyFlowStep and SharedTypeTrackingStep.

That is, this is for steps that are used by type-tracking and the old data flow library, but not the new data flow library.
2023-10-13 12:42:40 +02:00
Asger F
27c7d5004a JS: Do the same for additional taint steps 2023-10-13 12:42:40 +02:00
Asger F
1afe06e3a5 JS: Add "additional" and "legacy" steps
See the comment at the top of AdditionalFlowSteps.qll
2023-10-13 12:42:40 +02:00
Asger F
c24a0e00f5 JS: Move SharedTaintStep to AdditionalTaintSteps.qll
NOTE that this commit only moves around code. There are no changes.
2023-10-13 12:42:40 +02:00
Asger F
5bccc652c8 JS: Move SharedFlowStep to AdditionalFlowSteps.qll
NOTE that this commit only moves around code. There are no changes.
2023-10-13 12:42:40 +02:00
Asger F
293899d648 JS: Add 'Awaited' token 2023-10-13 12:42:40 +02:00
Asger F
32070abb27 JS: Implicitly treat array steps as taint steps 2023-10-13 12:42:40 +02:00
Asger F
60101f5e6a JS: Instantiate flow summary library 2023-10-13 12:42:40 +02:00
Asger F
8dc0800526 JS: Add the shared FlowSummaryImpl.qll file 2023-10-13 12:42:40 +02:00
Asger F
f316da78d2 JS: Add FunctionSelfReferenceNode 2023-10-13 12:42:40 +02:00
Asger F
760873c01c JS: Basic instantiation of shared library 2023-10-13 12:42:40 +02:00
Asger F
3455463e71 JS: Add instantiation boilerplate
Note that this commit won't compile on its own, but putting the boilerplate in its own commit
2023-10-13 12:42:40 +02:00
Asger F
c839822eb9 JS: Add PostUpdateNode 2023-10-13 12:42:40 +02:00
Asger F
01952f17bf JS: Add some missing getContainer() predicates 2023-10-13 12:42:40 +02:00
Asger F
21300eef4c JS:Add ConstructorThisArgumentNode 2023-10-13 12:42:40 +02:00
Asger F
b499c6075a JS: Add Contents.qll 2023-10-13 12:42:40 +02:00
Asger F
79e7aae9f6 JS: Add TEarlyStageNode 2023-10-13 12:42:39 +02:00
Asger F
51ef0e5836 JS: Move TNode into a cached module 2023-10-13 12:42:39 +02:00
Asger F
60b179bda2 Shared: add DeduplicatePathGraph
Note that there is a separate PR open with this library
2023-10-13 12:42:39 +02:00
4692 changed files with 149126 additions and 78704 deletions

View File

@@ -23,6 +23,13 @@ common --registry=file:///%workspace%/misc/bazel/registry
common --registry=https://bcr.bazel.build
common --@rules_dotnet//dotnet/settings:strict_deps=false
common --experimental_isolated_extension_usages
# Reduce this eventually to empty, once we've fixed all our usages of java, and https://github.com/bazel-contrib/rules_go/issues/4193 is fixed
common --incompatible_autoload_externally="+@rules_java,+@rules_shell"
build --java_language_version=17
build --tool_java_language_version=17
build --tool_java_runtime_version=remotejdk_17
build --java_runtime_version=remotejdk_17
try-import %workspace%/local.bazelrc

View File

@@ -8,4 +8,3 @@ common --registry=https://bcr.bazel.build
# its implementation packages without providing any code itself.
# We either can depend on internal implementation details, or turn of strict deps.
common --@rules_dotnet//dotnet/settings:strict_deps=false
common --experimental_isolated_extension_usages

View File

@@ -1 +1 @@
8.0.0rc1
8.0.0

View File

@@ -1,4 +1,5 @@
{
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
"extensions": [
"rust-lang.rust-analyzer",
"bungcip.better-toml",

3
.gitattributes vendored
View File

@@ -86,4 +86,5 @@
/misc/ripunzip/ripunzip-* filter=lfs diff=lfs merge=lfs -text
# swift prebuilt resources
/swift/third_party/resource-dir/*.zip filter=lfs diff=lfs merge=lfs -text
/swift/third_party/resources/*.zip filter=lfs diff=lfs merge=lfs -text
/swift/third_party/resources/*.tar.zst filter=lfs diff=lfs merge=lfs -text

View File

@@ -30,7 +30,7 @@ jobs:
- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.101
dotnet-version: 9.0.100
- name: Checkout repository
uses: actions/checkout@v4

View File

@@ -7,6 +7,11 @@ on:
- "rc/*"
- "codeql-cli-*"
pull_request:
paths:
- '**.ql'
- '**.qll'
- '**/qlpack.yml'
- '**.dbscheme'
permissions:
contents: read
@@ -33,9 +38,9 @@ jobs:
# run with --check-only if running in a PR (github.sha != main)
if : ${{ github.event_name == 'pull_request' }}
shell: bash
run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --check-only --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500
run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --check-only --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000
- name: compile queries - full
# do full compile if running on main - this populates the cache
if : ${{ github.event_name != 'pull_request' }}
shell: bash
run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500
run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500 --ram=56000

View File

@@ -48,7 +48,7 @@ jobs:
- name: "Build Swift extractor using Bazel"
run: |
bazel clean --expunge
bazel run //swift:create-extractor-pack --nouse_action_cache --noremote_accept_cached --noremote_upload_local_results --spawn_strategy=local
bazel run //swift:install --nouse_action_cache --noremote_accept_cached --noremote_upload_local_results --spawn_strategy=local
bazel shutdown
- name: Perform CodeQL Analysis

View File

@@ -5,8 +5,10 @@ on:
paths:
- "csharp/**"
- "shared/**"
- "misc/bazel/**"
- .github/actions/fetch-codeql/action.yml
- codeql-workspace.yml
- "MODULE.bazel"
branches:
- main
- "rc/*"
@@ -14,9 +16,11 @@ on:
paths:
- "csharp/**"
- "shared/**"
- "misc/bazel/**"
- .github/workflows/csharp-qltest.yml
- .github/actions/fetch-codeql/action.yml
- codeql-workspace.yml
- "MODULE.bazel"
branches:
- main
- "rc/*"
@@ -39,14 +43,14 @@ jobs:
- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.101
dotnet-version: 9.0.100
- name: Extractor unit tests
run: |
dotnet tool restore
dotnet test -p:RuntimeFrameworkVersion=8.0.1 extractor/Semmle.Util.Tests
dotnet test -p:RuntimeFrameworkVersion=8.0.1 extractor/Semmle.Extraction.Tests
dotnet test -p:RuntimeFrameworkVersion=8.0.1 autobuilder/Semmle.Autobuild.CSharp.Tests
dotnet test -p:RuntimeFrameworkVersion=8.0.1 autobuilder/Semmle.Autobuild.Cpp.Tests
dotnet test -p:RuntimeFrameworkVersion=9.0.0 extractor/Semmle.Util.Tests
dotnet test -p:RuntimeFrameworkVersion=9.0.0 extractor/Semmle.Extraction.Tests
dotnet test -p:RuntimeFrameworkVersion=9.0.0 autobuilder/Semmle.Autobuild.CSharp.Tests
dotnet test -p:RuntimeFrameworkVersion=9.0.0 autobuilder/Semmle.Autobuild.Cpp.Tests
shell: bash
stubgentest:
runs-on: ubuntu-latest

View File

@@ -50,17 +50,10 @@ jobs:
- uses: ./swift/actions/build-and-test
build-and-test-linux:
if: github.repository_owner == 'github'
runs-on: ubuntu-latest-xl
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: ./swift/actions/build-and-test
qltests-linux:
if: github.repository_owner == 'github'
needs: build-and-test-linux
runs-on: ubuntu-latest-xl
steps:
- uses: actions/checkout@v4
- uses: ./swift/actions/run-ql-tests
qltests-macos:
if: ${{ github.repository_owner == 'github' && github.event_name == 'pull_request' }}
needs: build-and-test-macos
@@ -109,3 +102,10 @@ jobs:
- uses: actions/checkout@v4
- uses: ./.github/actions/fetch-codeql
- uses: ./swift/actions/database-upgrade-scripts
check-no-override:
if : github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- shell: bash
run: bazel test //swift/... --test_tag_filters=override --test_output=errors

2
.gitignore vendored
View File

@@ -8,7 +8,7 @@
# qltest projects and artifacts
*.actual
*/ql/test/**/*.testproj
*/ql/test*/**/*.testproj
*/ql/test/**/go.sum
# Visual studio temporaries, except a file used by QL4VS

View File

@@ -72,7 +72,7 @@ repos:
- id: rust-codegen
name: Run Rust checked in code generation
files: ^misc/codegen/|^rust/(schema.py$|codegen/|.*/generated/|ql/lib/(rust\.dbscheme$|codeql/rust/elements)|\.generated.list)
files: ^misc/codegen/|^rust/(prefix\.dbscheme|schema/|codegen/|.*/generated/|ql/lib/(rust\.dbscheme$|codeql/rust/elements)|\.generated.list)
language: system
entry: bazel run //rust/codegen -- --quiet
pass_filenames: false

87
.vscode/tasks.json vendored
View File

@@ -38,6 +38,93 @@
"command": "${config:python.pythonPath}",
},
"problemMatcher": []
},
{
"label": "Create query change note",
"type": "process",
"command": "python3",
"args": [
"misc/scripts/create-change-note.py",
"${input:language}",
"src",
"${input:name}",
"${input:categoryQuery}"
],
"presentation": {
"reveal": "never",
"close": true
},
"problemMatcher": []
},
{
"label": "Create library change note",
"type": "process",
"command": "python3",
"args": [
"misc/scripts/create-change-note.py",
"${input:language}",
"lib",
"${input:name}",
"${input:categoryLibrary}"
],
"presentation": {
"reveal": "never",
"close": true
},
"problemMatcher": []
}
],
"inputs": [
{
"type": "pickString",
"id": "language",
"description": "Language",
"options":
[
"go",
"java",
"javascript",
"cpp",
"csharp",
"python",
"ruby",
"rust",
"swift",
]
},
{
"type": "promptString",
"id": "name",
"description": "Short name (kebab-case)"
},
{
"type": "pickString",
"id": "categoryQuery",
"description": "Category (query change)",
"options":
[
"breaking",
"deprecated",
"newQuery",
"queryMetadata",
"majorAnalysis",
"minorAnalysis",
"fix",
]
},
{
"type": "pickString",
"id": "categoryLibrary",
"description": "Category (library change)",
"options":
[
"breaking",
"deprecated",
"feature",
"majorAnalysis",
"minorAnalysis",
"fix",
]
}
]
}

4
2024-11-25-ts57.md Normal file
View File

@@ -0,0 +1,4 @@
---
category: majorAnalysis
---
* Added support for TypeScript 5.7.

View File

@@ -1 +1,5 @@
exports_files(["LICENSE"])
exports_files([
"LICENSE",
"Cargo.lock",
"Cargo.toml",
])

View File

@@ -42,3 +42,6 @@ MODULE.bazel @github/codeql-ci-reviewers
# Misc
/misc/scripts/accept-expected-changes-from-ci.py @RasmusWL
/misc/scripts/generate-code-scanning-query-list.py @RasmusWL
# .devcontainer
/.devcontainer/ @github/codeql-ci-reviewers

437
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,60 +15,80 @@ local_path_override(
# see https://registry.bazel.build/ for a list of available packages
bazel_dep(name = "platforms", version = "0.0.10")
bazel_dep(name = "rules_go", version = "0.50.0")
bazel_dep(name = "rules_go", version = "0.50.1")
bazel_dep(name = "rules_pkg", version = "1.0.1")
bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1")
bazel_dep(name = "rules_python", version = "0.36.0")
bazel_dep(name = "rules_python", version = "0.40.0")
bazel_dep(name = "rules_shell", version = "0.3.0")
bazel_dep(name = "bazel_skylib", version = "1.7.1")
bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl")
bazel_dep(name = "abseil-cpp", version = "20240116.1", repo_name = "absl")
bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json")
bazel_dep(name = "fmt", version = "10.0.0")
bazel_dep(name = "rules_kotlin", version = "2.0.0-codeql.1")
bazel_dep(name = "gazelle", version = "0.38.0")
bazel_dep(name = "rules_dotnet", version = "0.16.1")
bazel_dep(name = "gazelle", version = "0.40.0")
bazel_dep(name = "rules_dotnet", version = "0.17.4")
bazel_dep(name = "googletest", version = "1.14.0.bcr.1")
bazel_dep(name = "rules_rust", version = "0.52.2")
bazel_dep(name = "zstd", version = "1.5.5.bcr.1")
bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True)
# crate_py but shortened due to Windows file path considerations
cp = use_extension(
"@rules_rust//crate_universe:extension.bzl",
"crate",
isolate = True,
)
cp.from_cargo(
name = "py_deps",
cargo_lockfile = "//python/extractor/tsg-python:Cargo.lock",
manifests = [
"//python/extractor/tsg-python:Cargo.toml",
"//python/extractor/tsg-python/tsp:Cargo.toml",
],
)
use_repo(cp, "py_deps")
# Keep edition and version approximately in sync with internal repo.
# the versions there are canonical, the versions here are used for CI in github/codeql, as well as for the vendoring of dependencies.
RUST_EDITION = "2021"
# deps for ruby+rust, but shortened due to windows file paths
r = use_extension(
"@rules_rust//crate_universe:extension.bzl",
"crate",
isolate = True,
)
r.from_cargo(
name = "r",
cargo_lockfile = "//:Cargo.lock",
manifests = [
"//:Cargo.toml",
"//ruby/extractor:Cargo.toml",
"//rust/extractor:Cargo.toml",
"//rust/extractor/macros:Cargo.toml",
"//rust/ast-generator:Cargo.toml",
"//shared/tree-sitter-extractor:Cargo.toml",
RUST_VERSION = "1.82.0"
rust = use_extension("@rules_rust//rust:extensions.bzl", "rust")
rust.toolchain(
edition = RUST_EDITION,
# We need those extra target triples so that we can build universal binaries on macos
extra_target_triples = [
"x86_64-apple-darwin",
"aarch64-apple-darwin",
],
versions = [RUST_VERSION],
)
use_repo(rust, "rust_toolchains")
register_toolchains("@rust_toolchains//:all")
rust_host_tools = use_extension("@rules_rust//rust:extensions.bzl", "rust_host_tools")
# Don't download a second toolchain as host toolchain, make sure this is the same version as above
# The host toolchain is used for vendoring dependencies.
rust_host_tools.host_tools(
edition = RUST_EDITION,
version = RUST_VERSION,
)
# deps for python extractor
# keep in sync by running `misc/bazel/3rdparty/update_cargo_deps.sh`
py_deps = use_extension("//misc/bazel/3rdparty:py_deps_extension.bzl", "p")
use_repo(py_deps, "vendor__anyhow-1.0.44", "vendor__cc-1.0.70", "vendor__clap-2.33.3", "vendor__regex-1.5.5", "vendor__smallvec-1.6.1", "vendor__string-interner-0.12.2", "vendor__thiserror-1.0.29", "vendor__tree-sitter-0.20.4", "vendor__tree-sitter-graph-0.7.0")
# deps for ruby+rust
# keep in sync by running `misc/bazel/3rdparty/update_cargo_deps.sh`
tree_sitter_extractors_deps = use_extension("//misc/bazel/3rdparty:tree_sitter_extractors_extension.bzl", "r")
use_repo(tree_sitter_extractors_deps, "vendor__anyhow-1.0.94", "vendor__argfile-0.2.1", "vendor__chrono-0.4.39", "vendor__clap-4.5.23", "vendor__dunce-1.0.5", "vendor__either-1.13.0", "vendor__encoding-0.2.33", "vendor__figment-0.10.19", "vendor__flate2-1.0.35", "vendor__glob-0.3.1", "vendor__globset-0.4.15", "vendor__itertools-0.12.1", "vendor__itertools-0.13.0", "vendor__lazy_static-1.5.0", "vendor__log-0.4.22", "vendor__num-traits-0.2.19", "vendor__num_cpus-1.16.0", "vendor__proc-macro2-1.0.92", "vendor__quote-1.0.37", "vendor__ra_ap_base_db-0.0.248", "vendor__ra_ap_cfg-0.0.248", "vendor__ra_ap_hir-0.0.248", "vendor__ra_ap_hir_def-0.0.248", "vendor__ra_ap_hir_expand-0.0.248", "vendor__ra_ap_ide_db-0.0.248", "vendor__ra_ap_intern-0.0.248", "vendor__ra_ap_load-cargo-0.0.248", "vendor__ra_ap_parser-0.0.248", "vendor__ra_ap_paths-0.0.248", "vendor__ra_ap_project_model-0.0.248", "vendor__ra_ap_span-0.0.248", "vendor__ra_ap_stdx-0.0.248", "vendor__ra_ap_syntax-0.0.248", "vendor__ra_ap_vfs-0.0.248", "vendor__rand-0.8.5", "vendor__rayon-1.10.0", "vendor__regex-1.11.1", "vendor__serde-1.0.216", "vendor__serde_json-1.0.133", "vendor__serde_with-3.11.0", "vendor__stderrlog-0.6.0", "vendor__syn-2.0.90", "vendor__tracing-0.1.41", "vendor__tracing-subscriber-0.3.19", "vendor__tree-sitter-0.24.5", "vendor__tree-sitter-embedded-template-0.23.2", "vendor__tree-sitter-json-0.24.8", "vendor__tree-sitter-ql-0.23.1", "vendor__tree-sitter-ruby-0.23.1", "vendor__triomphe-0.1.14", "vendor__ungrammar-1.16.1")
http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
# rust-analyzer sources needed by the rust ast-generator (see `rust/ast-generator/README.md`)
http_archive(
name = "rust-analyzer-src",
build_file = "//rust/ast-generator:BUILD.rust-analyzer-src.bazel",
integrity = "sha256-jl4KJmZku+ilMLnuX2NU+qa1v10IauSiDiz23sZo360=",
patch_args = ["-p1"],
patches = [
"//rust/ast-generator:patches/rust-analyzer.patch",
],
strip_prefix = "rust-analyzer-2024-12-16",
url = "https://github.com/rust-lang/rust-analyzer/archive/refs/tags/2024-12-16.tar.gz",
)
use_repo(r, tree_sitter_extractors_deps = "r")
dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet")
dotnet.toolchain(dotnet_version = "8.0.101")
dotnet.toolchain(dotnet_version = "9.0.100")
use_repo(dotnet, "dotnet_toolchains")
register_toolchains("@dotnet_toolchains//:all")
@@ -91,10 +111,12 @@ use_repo(
swift_deps,
"binlog",
"picosha2",
"swift_prebuilt_darwin_x86_64",
"swift_prebuilt_linux",
"swift_toolchain_linux",
"swift_toolchain_macos",
"swift-prebuilt-linux",
"swift-prebuilt-linux-download-only",
"swift-prebuilt-macos",
"swift-prebuilt-macos-download-only",
"swift-resource-dir-linux",
"swift-resource-dir-macos",
)
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
@@ -166,21 +188,6 @@ go_deps = use_extension("@gazelle//:extensions.bzl", "go_deps")
go_deps.from_file(go_mod = "//go/extractor:go.mod")
use_repo(go_deps, "org_golang_x_mod", "org_golang_x_tools")
git_lfs_binary = use_repo_rule("//misc/bazel:lfs.bzl", "git_lfs_binary")
# to update, check out dsp-testing/codeql-git-lfs, do changes there, and push a tag with
# `git tag $(git describe)-ls-urls && git push --tags`
# then wait for https://github.com/dsp-testing/codeql-git-lfs/actions/runs/11800398535 to end,
# then copy here information from https://github.com/dsp-testing/codeql-git-lfs/releases/latest
git_lfs_binary(
name = "git-lfs",
sha256_linux = "08b75033a98f77f7e60b0928e160a6f0a5c5cd9d91b8605537969eec6980219a",
sha256_macos_arm64 = "8a17c488c975dbd050610a0b2692567064dbfef33b6c58ee89ea02f649cc0114",
sha256_macos_x86 = "9fc7265c5345901ca5cb83707ed5374fc6dfbf7ed45d2c047d5929bfe0b5f64a",
sha256_windows = "ef2f5794667584b155786291d4f839c59bfe10fcc5f870902c64f3063ffd9923",
version = "v3.5.0-179-gfd031ea1",
)
lfs_files = use_repo_rule("//misc/bazel:lfs.bzl", "lfs_files")
lfs_files(
@@ -201,16 +208,6 @@ lfs_files(
executable = True,
)
lfs_files(
name = "swift-resource-dir-linux",
srcs = ["//swift/third_party/resource-dir:resource-dir-linux.zip"],
)
lfs_files(
name = "swift-resource-dir-macos",
srcs = ["//swift/third_party/resource-dir:resource-dir-macos.zip"],
)
register_toolchains(
"@nodejs_toolchains//:all",
)

View File

@@ -2,19 +2,8 @@ load("//misc/bazel:pkg.bzl", "codeql_pack")
package(default_visibility = ["//visibility:public"])
[
codeql_pack(
name = "-".join(parts),
srcs = [
"//actions/extractor",
],
pack_prefix = "/".join(parts),
)
for parts in (
[
"experimental",
"actions",
],
["actions"],
)
]
codeql_pack(
name = "actions",
srcs = ["//actions/extractor"],
experimental = True,
)

View File

@@ -1,58 +1,4 @@
{
"DataFlow Java/C++/C#/Go/Python/Ruby/Swift Legacy Configuration": [
"java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl1.qll",
"java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll",
"java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll",
"java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll",
"java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll",
"java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll",
"cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl1.qll",
"cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll",
"cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll",
"cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll",
"cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll",
"cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl1.qll",
"cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll",
"cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll",
"cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl1.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll",
"go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl1.qll",
"go/ql/lib/semmle/go/dataflow/internal/DataFlowImpl2.qll",
"python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl1.qll",
"python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll",
"python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll",
"python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll",
"ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl1.qll",
"ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll",
"swift/ql/lib/codeql/swift/dataflow/internal/DataFlowImpl1.qll"
],
"TaintTracking Legacy Configuration Java/C++/C#/Go/Python/Ruby/Swift": [
"cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll",
"cpp/ql/lib/semmle/code/cpp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll",
"cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking1/TaintTrackingImpl.qll",
"cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking2/TaintTrackingImpl.qll",
"cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/tainttracking3/TaintTrackingImpl.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking1/TaintTrackingImpl.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking2/TaintTrackingImpl.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking3/TaintTrackingImpl.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking4/TaintTrackingImpl.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/tainttracking5/TaintTrackingImpl.qll",
"go/ql/lib/semmle/go/dataflow/internal/tainttracking1/TaintTrackingImpl.qll",
"go/ql/lib/semmle/go/dataflow/internal/tainttracking2/TaintTrackingImpl.qll",
"java/ql/lib/semmle/code/java/dataflow/internal/tainttracking1/TaintTrackingImpl.qll",
"java/ql/lib/semmle/code/java/dataflow/internal/tainttracking2/TaintTrackingImpl.qll",
"java/ql/lib/semmle/code/java/dataflow/internal/tainttracking3/TaintTrackingImpl.qll",
"python/ql/lib/semmle/python/dataflow/new/internal/tainttracking1/TaintTrackingImpl.qll",
"python/ql/lib/semmle/python/dataflow/new/internal/tainttracking2/TaintTrackingImpl.qll",
"python/ql/lib/semmle/python/dataflow/new/internal/tainttracking3/TaintTrackingImpl.qll",
"python/ql/lib/semmle/python/dataflow/new/internal/tainttracking4/TaintTrackingImpl.qll",
"ruby/ql/lib/codeql/ruby/dataflow/internal/tainttracking1/TaintTrackingImpl.qll",
"swift/ql/lib/codeql/swift/dataflow/internal/tainttracking1/TaintTrackingImpl.qll"
],
"SsaReadPosition Java/C#": [
"java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll",
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll"
@@ -288,12 +234,14 @@
"CryptoAlgorithms Python/JS/Ruby": [
"javascript/ql/lib/semmle/javascript/security/CryptoAlgorithms.qll",
"python/ql/lib/semmle/python/concepts/CryptoAlgorithms.qll",
"ruby/ql/lib/codeql/ruby/security/CryptoAlgorithms.qll"
"ruby/ql/lib/codeql/ruby/security/CryptoAlgorithms.qll",
"rust/ql/lib/codeql/rust/security/CryptoAlgorithms.qll"
],
"CryptoAlgorithmNames Python/JS/Ruby": [
"javascript/ql/lib/semmle/javascript/security/internal/CryptoAlgorithmNames.qll",
"python/ql/lib/semmle/python/concepts/internal/CryptoAlgorithmNames.qll",
"ruby/ql/lib/codeql/ruby/security/internal/CryptoAlgorithmNames.qll"
"ruby/ql/lib/codeql/ruby/security/internal/CryptoAlgorithmNames.qll",
"rust/ql/lib/codeql/rust/security/internal/CryptoAlgorithmNames.qll"
],
"SensitiveDataHeuristics Python/JS": [
"javascript/ql/lib/semmle/javascript/security/internal/SensitiveDataHeuristics.qll",
@@ -308,7 +256,8 @@
"Concepts Python/Ruby/JS": [
"python/ql/lib/semmle/python/internal/ConceptsShared.qll",
"ruby/ql/lib/codeql/ruby/internal/ConceptsShared.qll",
"javascript/ql/lib/semmle/javascript/internal/ConceptsShared.qll"
"javascript/ql/lib/semmle/javascript/internal/ConceptsShared.qll",
"rust/ql/lib/codeql/rust/internal/ConceptsShared.qll"
],
"ApiGraphModels": [
"javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
description: Implement compilation_build_mode/2
compatibility: full
compilation_build_mode.rel: delete

View File

@@ -1,3 +1,17 @@
## 3.0.0
### Breaking Changes
* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API.
### Deprecated APIs
* The `NonThrowingFunction` class (`semmle.code.cpp.models.interfaces.NonThrowing.NonThrowingFunction`) has been deprecated. Please use the `NonCppThrowingFunction` class instead.
## 2.1.1
No user-facing changes.
## 2.1.0
### New Features

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* The `Guards` library (`semmle.code.cpp.controlflow.Guards`) has been improved to recognize more guard conditions.

View File

@@ -0,0 +1,4 @@
---
category: feature
---
* A new class `TemplateParameterBase` was introduced, which represents C++ non-type template parameters, type template parameters, and template template parameters.

View File

@@ -0,0 +1,4 @@
---
category: deprecated
---
* The `TemplateParameter` class, representing C++ type template parameters has been deprecated. Use `TypeTemplateParameter` instead.

View File

@@ -0,0 +1,3 @@
## 2.1.1
No user-facing changes.

View File

@@ -0,0 +1,9 @@
## 3.0.0
### Breaking Changes
* Deleted the old deprecated data flow API that was based on extending a configuration class. See https://github.blog/changelog/2023-08-14-new-dataflow-api-for-writing-custom-codeql-queries for instructions on migrating your queries to use the new API.
### Deprecated APIs
* The `NonThrowingFunction` class (`semmle.code.cpp.models.interfaces.NonThrowing.NonThrowingFunction`) has been deprecated. Please use the `NonCppThrowingFunction` class instead.

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 2.1.0
lastReleaseVersion: 3.0.0

View File

@@ -0,0 +1,18 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "_U_STRINGorID", True, "_U_STRINGorID", "(UINT)", "", "Argument[0]", "Argument[-1].Field[*m_lpstr]", "value", "manual"]
- ["", "_U_STRINGorID", True, "_U_STRINGorID", "(LPCTSTR)", "", "Argument[*0]", "Argument[-1].Field[*m_lpstr]", "value", "manual"]
- ["", "CA2AEX", True, "CA2AEX", "", "", "Argument[*0]", "Argument[-1].Field[*m_psz]", "value", "manual"]
- ["", "CA2AEX", True, "CA2AEX", "", "", "Argument[*0]", "Argument[-1].Field[m_szBuffer]", "value", "manual"]
- ["", "CA2AEX", True, "operator LPSTR", "", "", "Argument[-1].Field[*m_psz]", "ReturnValue[*]", "value", "manual"]
- ["", "CA2AEX", True, "CA2AEX", "", "", "Argument[*0]", "Argument[-1].Field[m_szBuffer]", "value", "manual"]
- ["", "CA2AEX", True, "operator LPSTR", "", "", "Argument[-1].Field[m_szBuffer]", "ReturnValue[*]", "value", "manual"]
- ["", "CA2CAEX", True, "CA2CAEX", "", "", "Argument[*0]", "Argument[-1].Field[*m_psz]", "value", "manual"]
- ["", "CA2CAEX", True, "operator LPCSTR", "", "", "Argument[-1].Field[*m_psz]", "ReturnValue[*]", "value", "manual"]
- ["", "CA2WEX", True, "CA2WEX", "", "", "Argument[*0]", "Argument[-1].Field[*m_psz]", "value", "manual"]
- ["", "CA2WEX", True, "operator LPWSTR", "", "", "Argument[-1].Field[*m_psz]", "ReturnValue[*]", "value", "manual"]
- ["", "CA2WEX", True, "CA2WEX", "", "", "Argument[*0]", "Argument[-1].Field[m_szBuffer]", "value", "manual"]
- ["", "CA2WEX", True, "operator LPWSTR", "", "", "Argument[-1].Field[m_szBuffer]", "ReturnValue[*]", "value", "manual"]

View File

@@ -0,0 +1,15 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CAtlArray", True, "Add", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlArray", True, "Append", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlArray", True, "Copy", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlArray", True, "GetAt", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CAtlArray", True, "GetData", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CAtlArray", True, "InsertArrayAt", "", "", "Argument[*1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlArray", True, "InsertAt", "", "", "Argument[@1]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlArray", True, "SetAt", "", "", "Argument[@1]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlArray", True, "SetAtGrow", "", "", "Argument[@1]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlArray", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*]", "value", "manual"]

View File

@@ -0,0 +1,9 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CAtlFile", True, "CAtlFile", "(CAtlFile &)", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CAtlFile", True, "CAtlFile", "(HANDLE)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["", "CAtlFile", True, "Create", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CAtlFile", True, "Read", "", "", "Argument[-1]", "Argument[*0]", "taint", "manual"]

View File

@@ -0,0 +1,13 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CAtlFileMappingBase", True, "CAtlFileMappingBase", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CAtlFileMappingBase", True, "CopyFrom", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CAtlFileMappingBase", True, "GetData", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CAtlFileMappingBase", True, "GetHandle", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["", "CAtlFileMappingBase", True, "MapFile", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["", "CAtlFileMappingBase", True, "MapSharedMem", "", "", "Argument[*1]", "Argument[-1]", "taint", "manual"]
- ["", "CAtlFileMappingBase", True, "OpenMapping", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CAtlFileMappingBase", True, "operator=", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]

View File

@@ -0,0 +1,15 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CAtlList", True, "AddHead", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlList", True, "AddHeadList", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlList", True, "AddTail", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlList", True, "AddTailList", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlList", True, "GetAt", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CAtlList", True, "GetHead", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CAtlList", True, "GetTail", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CAtlList", True, "InsertAfter", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlList", True, "InsertBefore", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CAtlList", True, "SetAt", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]

View File

@@ -0,0 +1,8 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CAtlTemporaryFile", True, "Create", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CAtlTemporaryFile", True, "Read", "", "", "Argument[-1]", "Argument[*0]", "taint", "manual"]
- ["", "CAtlTemporaryFile", True, "Write", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]

View File

@@ -0,0 +1,33 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CComBSTR", True, "CComBSTR", "(LPCSTR)", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "CComBSTR", "(LPCOLESTR)", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "CComBSTR", "(int,LPCSTR)", "", "Argument[*1]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "CComBSTR", "(int,LPCOLESTR)", "", "Argument[*1]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "CComBSTR", "(const CComBSTR &)", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "CComBSTR", "(CComBSTR &&)", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "Append", "(const CComBSTR &)", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "Append", "(wchar_t)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "Append", "(char)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "Append", "(LPCOLESTR)", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "Append", "(LPCSTR)", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "Append", "(LPCOLESTR,int)", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "AppendBytes", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "AppendBSTR", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "ArrayToBSTR", "", "", "Argument[*0].Field[*pvData]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "AssignBSTR", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "Attach", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CComBSTR", True, "BSTRToArray", "", "", "Argument[-1]", "Argument[**0].Field[*pvData]", "value", "manual"]
- ["", "CComBSTR", True, "Copy", "", "", "Argument[-1]", "ReturnValue[*]", "value", "manual"]
- ["", "CComBSTR", True, "CopyTo", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"]
- ["", "CComBSTR", True, "LoadString", "(HINSTANCE,UINT)", "", "Argument[1]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "LoadString", "(UINT)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "ReadFromStream", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CComBSTR", True, "WriteToStream", "", "", "Argument[-1]", "Argument[*0]", "taint", "manual"]
- ["", "CComBSTR", True, "operator BSTR", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CComBSTR", True, "operator&", "", "", "Argument[-1]", "ReturnValue[*]", "value", "manual"]
- ["", "CComBSTR", True, "operator+=", "", "", "Argument[*0]", "ReturnValue[*]", "taint", "manual"]
- ["", "CComBSTR", True, "operator+=", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]

View File

@@ -0,0 +1,26 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CComSafeArray", True, "CComSafeArray", "(const CComSafeArray &)", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CComSafeArray", True, "CComSafeArray", "(const SAFEARRAY &)", "", "Argument[*0]", "Argument[-1].Field[*m_psa]", "value", "manual"]
- ["", "CComSafeArray", True, "CComSafeArray", "(const SAFEARRAY *)", "", "Argument[*0]", "Argument[-1].Field[*m_psa]", "value", "manual"]
- ["", "CComSafeArray", True, "Add", "(const SAFEARRAY *)", "", "Argument[*0]", "Argument[-1].Field[*m_psa]", "value", "manual"]
- ["", "CComSafeArray<T>", True, "Add", "(const T &,BOOL)", "", "Argument[*@0]", "Argument[-1].Field[*m_psa].Field[*@pvData]", "value", "manual"]
- ["", "CComSafeArray", True, "Attach", "", "", "Argument[*0]", "Argument[-1].Field[*m_psa]", "value", "manual"]
- ["", "CComSafeArray", True, "CopyFrom", "", "", "Argument[*0]", "Argument[-1].Field[*m_psa]", "value", "manual"]
- ["", "CComSafeArray", True, "CopyTo", "", "", "Argument[-1].Field[*m_psa]", "Argument[*0]", "value", "manual"]
- ["", "CComSafeArray", True, "GetAt", "", "", "Argument[-1].Field[*m_psa].Field[*@pvData]", "ReturnValue[*@]", "value", "manual"]
- ["", "CComSafeArray", True, "GetLowerBound", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["", "CComSafeArray", True, "GetSafeArrayPtr", "", "", "Argument[-1].Field[*m_psa]", "ReturnValue[*]", "value", "manual"]
- ["", "CComSafeArray", True, "GetUpperBound", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["", "CComSafeArray", True, "MultiDimGetAt", "", "", "Argument[-1].Field[*m_psa].Field[*@pvData]", "Argument[*@1]", "value", "manual"]
- ["", "CComSafeArray", True, "MultiDimSetAt", "", "", "Argument[*@1]", "Argument[-1].Field[*m_psa].Field[*@pvData]", "value", "manual"]
- ["", "CComSafeArray", True, "SetAt", "", "", "Argument[*@1]", "Argument[-1].Field[*m_psa].Field[*@pvData]", "value", "manual"]
- ["", "CComSafeArray", True, "operator LPSAFEARRAY", "", "", "Argument[-1].Field[*m_psa]", "ReturnValue[*]", "value", "manual"]
- ["", "CComSafeArray", True, "operator[]", "", "", "Argument[-1].Field[*m_psa].Field[*@pvData]", "ReturnValue[*@]", "value", "manual"]
- ["", "CComSafeArray", True, "operator=", "(const CComSafeArray &)", "", "Argument[*0].Field[*m_psa]", "ReturnValue[*]", "value", "manual"]
- ["", "CComSafeArray", True, "operator=", "(const CComSafeArray &)", "", "Argument[*0].Field[*m_psa]", "Argument[-1].Field[*m_psa]", "value", "manual"]
- ["", "CComSafeArray", True, "operator=", "(const SAFEARRAY *)", "", "Argument[*0]", "Argument[-1].Field[*m_psa]", "value", "manual"]
- ["", "CComSafeArray", True, "operator=", "(const SAFEARRAY *)", "", "Argument[*0]", "ReturnValue[*]", "value", "manual"]

View File

@@ -0,0 +1,23 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CPathT", True, "CPathT", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CPathT", True, "AddExtension", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CPathT", True, "Append", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CPathT", True, "Combine", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CPathT", True, "Combine", "", "", "Argument[*1]", "Argument[-1]", "taint", "manual"]
- ["", "CPathT", True, "CommonPrefix", "", "", "Argument[*0]", "ReturnValue", "taint", "manual"]
- ["", "CPathT", True, "CommonPrefix", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["", "CPathT", True, "GetExtension", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CPathT", True, "RelativePathTo", "", "", "Argument[*0]", "ReturnValue[-1]", "taint", "manual"]
- ["", "CPathT", True, "RelativePathTo", "", "", "Argument[*2]", "ReturnValue[-1]", "taint", "manual"]
- ["", "CPathT", True, "RenameExtension", "", "", "Argument[*0]", "ReturnValue[-1]", "taint", "manual"]
# Note: These don't work currently since we cannot use the template parameter in the name of the function
# - ["", "CPathT<T>", True, "operator const T &", "", "", "Argument[-1]", "ReturnValue[*]", "value", "manual"]
# - ["", "CPathT<T>", True, "operator T &", "", "", "Argument[-1]", "ReturnValue[*]", "value", "manual"]
- ["", "CPathT", True, "operator PCXSTR", "", "", "Argument[-1]", "ReturnValue[*]", "value", "manual"]
- ["", "CPathT", True, "operator+=", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CPathT", True, "operator+=", "", "", "Argument[*0]", "ReturnValue[*]", "taint", "manual"]
- ["", "CPathT", True, "operator+=", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]

View File

@@ -0,0 +1,20 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CRegKey", True, "CRegKey", "(CRegKey &)", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CRegKey", True, "CRegKey", "(HKEY)", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["", "CRegKey", True, "Create", "", "", "Argument[*1]", "Argument[-1]", "taint", "manual"]
- ["", "CRegKey", True, "Attach", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
- ["", "CRegKey", True, "QueryBinaryValue", "", "", "Argument[*0]", "Argument[*1]", "taint", "manual"]
- ["", "CRegKey", True, "QueryDWORDValue", "", "", "Argument[*0]", "Argument[*1]", "taint", "manual"]
- ["", "CRegKey", True, "QueryMultiStringValue", "", "", "Argument[*0]", "Argument[*1]", "taint", "manual"]
- ["", "CRegKey", True, "QueryQWORDValue", "", "", "Argument[*0]", "Argument[*1]", "taint", "manual"]
- ["", "CRegKey", True, "QueryStringValue", "", "", "Argument[*0]", "Argument[*1]", "taint", "manual"]
- ["", "CRegKey", True, "QueryValue", "(LPCTSTR,DWORD *,void *,ULONG *)", "", "Argument[*0]", "Argument[*2]", "taint", "manual"]
- ["", "CRegKey", True, "QueryValue", "(DWORD &,LPCTSTR)", "", "Argument[*1]", "Argument[*0]", "taint", "manual"]
- ["", "CRegKey", True, "QueryValue", "(LPTSTR,LPCTSTR,DWORD *)", "", "Argument[*1]", "Argument[*0]", "taint", "manual"]
- ["", "CRegKey", True, "operator HKEY", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
- ["", "CRegKey", True, "operator=", "", "", "Argument[*0]", "ReturnValue[*]", "value", "manual"]
- ["", "CRegKey", True, "operator=", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]

View File

@@ -0,0 +1,12 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CSimpleArray", True, "CSimpleArray", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CSimpleArray", True, "Add", "", "", "Argument[*0]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CSimpleArray", True, "GetData", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CSimpleArray", True, "SetAtIndex", "", "", "Argument[*1]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CSimpleArray", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CSimpleArray", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CSimpleArray", True, "operator=", "", "", "Argument[*0].Element[@]", "ReturnValue[*].Element[@]", "value", "manual"]

View File

@@ -0,0 +1,12 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CSimpleMap", True, "Add", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CSimpleMap", True, "GetValueAt", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CSimpleMap", True, "Lookup", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
- ["", "CSimpleMap", True, "SetAt", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CSimpleMap", True, "SetAtIndex", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
- ["", "CSimpleMap", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
- ["", "CSimpleMap", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]

View File

@@ -0,0 +1,21 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # TODO this model can be improved a lot once we have MapKey content # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "CUrl", True, "CUrl", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
- ["", "CUrl", True, "CrackUrl", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CUrl", True, "CreateUrl", "", "", "Argument[-1]", "Argument[*0]", "taint", "manual"]
- ["", "CUrl", True, "GetExtraInfo", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CUrl", True, "GetHostName", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CUrl", True, "GetPassword", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CUrl", True, "GetSchemeName", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CUrl", True, "GetUrlPath", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CUrl", True, "GetUserName", "", "", "Argument[-1]", "ReturnValue[*]", "taint", "manual"]
- ["", "CUrl", True, "SetExtraInfo", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CUrl", True, "SetHostName", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CUrl", True, "SetPassword", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CUrl", True, "SetSchemeName", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CUrl", True, "SetUrlPath", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CUrl", True, "SetUserName", "", "", "Argument[*0]", "Argument[-1]", "taint", "manual"]
- ["", "CUrl", True, "operator=", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]

View File

@@ -1,5 +1,5 @@
name: codeql/cpp-all
version: 2.1.1-dev
version: 3.0.1-dev
groups: cpp
dbscheme: semmlecode.cpp.dbscheme
extractor: cpp

View File

@@ -952,7 +952,7 @@ class ClassTemplateSpecialization extends Class {
result.getNamespace() = this.getNamespace() and
// It is distinguished by the fact that each of its template arguments
// is a distinct template parameter.
count(TemplateParameter tp | tp = result.getATemplateArgument()) =
count(TemplateParameterBase tp | tp = result.getATemplateArgument()) =
count(int i | exists(result.getTemplateArgument(i)))
}
@@ -1006,7 +1006,7 @@ private predicate isPartialClassTemplateSpecialization(Class c) {
*/
exists(Type ta | ta = c.getATemplateArgument() and ta.involvesTemplateParameter()) and
count(TemplateParameter tp | tp = c.getATemplateArgument()) !=
count(TemplateParameterBase tp | tp = c.getATemplateArgument()) !=
count(int i | exists(c.getTemplateArgument(i)))
}
@@ -1091,7 +1091,7 @@ class ProxyClass extends UserType {
override Location getLocation() { result = this.getTemplateParameter().getDefinitionLocation() }
/** Gets the template parameter for which this is the proxy class. */
TemplateParameter getTemplateParameter() {
TypeTemplateParameter getTemplateParameter() {
is_proxy_class_for(underlyingElement(this), unresolveElement(result))
}
}

View File

@@ -112,4 +112,7 @@ class Compilation extends @compilation {
* termination, but crashing due to something like a segfault is not.
*/
predicate normalTermination() { compilation_finished(this, _, _) }
/** Holds if this compilation was compiled using the "none" build mode. */
predicate buildModeNone() { compilation_build_mode(this, 0) }
}

View File

@@ -187,7 +187,7 @@ class Declaration extends Locatable, @declaration {
this instanceof Parameter or
this instanceof ProxyClass or
this instanceof LocalVariable or
this instanceof TemplateParameter or
this instanceof TypeTemplateParameter or
this.(UserType).isLocal()
)
}

View File

@@ -33,7 +33,7 @@ private string getScopePrefix(Declaration decl) {
result = "(" + type.getEnclosingFunction().(DumpFunction).getIdentityString() + ")::"
)
or
decl instanceof TemplateParameter and result = ""
decl instanceof TypeTemplateParameter and result = ""
}
/**

View File

@@ -954,9 +954,18 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred)
expr.(C11GenericExpr).getAssociationExpr(n) = ele and pred = "getAssociationExpr(" + n + ")"
)
or
expr.(Call).getQualifier() = ele and pred = "getQualifier()"
// OverloadedArrayExpr::getArrayBase/0 also considers qualifiers, and is already handled below.
not expr.(OverloadedArrayExpr).getArrayBase() = expr.(Call).getQualifier() and
expr.(Call).getQualifier() = ele and
pred = "getQualifier()"
or
exists(int n | expr.(Call).getArgument(n) = ele and pred = "getArgument(" + n.toString() + ")")
// OverloadedArrayExpr::getArrayBase/0 and OverloadedArrayExpr::getArrayOffset/0 also consider arguments, and are already handled below.
exists(int n, Expr arg | expr.(Call).getArgument(n) = arg |
not expr.(OverloadedArrayExpr).getArrayBase() = arg and
not expr.(OverloadedArrayExpr).getArrayOffset() = arg and
arg = ele and
pred = "getArgument(" + n.toString() + ")"
)
or
expr.(ExprCall).getExpr() = ele and pred = "getExpr()"
or
@@ -964,7 +973,7 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred)
or
expr.(OverloadedArrayExpr).getArrayOffset() = ele and pred = "getArrayOffset()"
or
// OverloadedPointerDereferenceExpr::getExpr/0 also considers qualifiers, which are already handled above for all Call classes.
// OverloadedPointerDereferenceExpr::getExpr/0 also considers qualifiers, and is already handled above for all Call classes.
not expr.(OverloadedPointerDereferenceExpr).getQualifier() =
expr.(OverloadedPointerDereferenceExpr).getExpr() and
expr.(OverloadedPointerDereferenceExpr).getExpr() = ele and

View File

@@ -1666,6 +1666,28 @@ class RoutineType extends Type, @routinetype {
}
}
abstract private class TemplateParameterImpl extends Locatable {
override string getAPrimaryQlClass() { result = "TemplateParameterImpl" }
}
/**
* A C++ template parameter.
*
* In the example below, `T`, `TT`, and `I` are template parameters:
* ```
* template <class T, template<typename> TT, int I>
* class C { };
* ```
*/
final class TemplateParameterBase = TemplateParameterImpl;
/**
* A C++ `typename` (or `class`) template parameter.
*
* DEPRECATED: Use `TypeTemplateParameter` instead.
*/
deprecated class TemplateParameter = TypeTemplateParameter;
/**
* A C++ `typename` (or `class`) template parameter.
*
@@ -1675,12 +1697,12 @@ class RoutineType extends Type, @routinetype {
* class C { };
* ```
*/
class TemplateParameter extends UserType {
TemplateParameter() {
class TypeTemplateParameter extends UserType, TemplateParameterImpl {
TypeTemplateParameter() {
usertypes(underlyingElement(this), _, 7) or usertypes(underlyingElement(this), _, 8)
}
override string getAPrimaryQlClass() { result = "TemplateParameter" }
override string getAPrimaryQlClass() { result = "TypeTemplateParameter" }
override predicate involvesTemplateParameter() { any() }
}
@@ -1695,7 +1717,7 @@ class TemplateParameter extends UserType {
* void foo(const Container<Elem> &value) { }
* ```
*/
class TemplateTemplateParameter extends TemplateParameter {
class TemplateTemplateParameter extends TypeTemplateParameter {
TemplateTemplateParameter() { usertypes(underlyingElement(this), _, 8) }
override string getAPrimaryQlClass() { result = "TemplateTemplateParameter" }
@@ -1707,7 +1729,7 @@ class TemplateTemplateParameter extends TemplateParameter {
* auto val = some_typed_expr();
* ```
*/
class AutoType extends TemplateParameter {
class AutoType extends TypeTemplateParameter {
AutoType() { usertypes(underlyingElement(this), "auto", 7) }
override string getAPrimaryQlClass() { result = "AutoType" }

View File

@@ -66,7 +66,7 @@ class Symbol extends DependsSource {
not this.(TypeDeclarationEntry).getType() instanceof LocalEnum and
not this.(TypeDeclarationEntry).getType() instanceof LocalClass and
not this.(TypeDeclarationEntry).getType() instanceof LocalTypedefType and
not this.(TypeDeclarationEntry).getType() instanceof TemplateParameter
not this.(TypeDeclarationEntry).getType() instanceof TypeTemplateParameter
or
this instanceof NamespaceDeclarationEntry
)

File diff suppressed because it is too large Load Diff

View File

@@ -29,5 +29,5 @@ deprecated module DataFlow {
private import semmle.code.cpp.dataflow.internal.DataFlowImplSpecific
private import codeql.dataflow.DataFlow
import DataFlowMake<Location, CppOldDataFlow>
import semmle.code.cpp.dataflow.internal.DataFlowImpl1
import Public
}

View File

@@ -1,22 +0,0 @@
/**
* Provides a `DataFlow2` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.dataflow.DataFlow` for the full documentation.
*/
import cpp
/**
* DEPRECATED: Use `semmle.code.cpp.dataflow.new.DataFlow2` instead.
*
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) data flow analyses.
*/
deprecated module DataFlow2 {
import semmle.code.cpp.dataflow.internal.DataFlowImpl2
}

View File

@@ -1,22 +0,0 @@
/**
* Provides a `DataFlow3` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.dataflow.DataFlow` for the full documentation.
*/
import cpp
/**
* DEPRECATED: Use `semmle.code.cpp.dataflow.new.DataFlow3` instead.
*
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) data flow analyses.
*/
deprecated module DataFlow3 {
import semmle.code.cpp.dataflow.internal.DataFlowImpl3
}

View File

@@ -1,22 +0,0 @@
/**
* Provides a `DataFlow4` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.dataflow.DataFlow` for the full documentation.
*/
import cpp
/**
* DEPRECATED: Use `semmle.code.cpp.dataflow.new.DataFlow4` instead.
*
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) data flow analyses.
*/
deprecated module DataFlow4 {
import semmle.code.cpp.dataflow.internal.DataFlowImpl4
}

View File

@@ -434,18 +434,48 @@ private predicate elementSpec(
summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _, _)
}
/**
* Holds if `c` is an instantiation of a class template `templateClass`, or
* holds with `c = templateClass` if `c` is not an instantiation of any class
* template.
*
* This predicate is used instead of `Class.isConstructedFrom` (which only
* holds for template instantiations) in this file to allow for uniform
* treatment of non-templated classes and class template instantiations.
*/
private predicate isClassConstructedFrom(Class c, Class templateClass) {
c.isConstructedFrom(templateClass)
or
not c.isConstructedFrom(_) and c = templateClass
}
/**
* Holds if `f` is an instantiation of a function template `templateFunc`, or
* holds with `f = templateFunc` if `f` is not an instantiation of any function
* template.
*
* This predicate is used instead of `Function.isConstructedFrom` (which only
* holds for template instantiations) in this file to allow for uniform
* treatment of non-templated classes and class template instantiations.
*/
private predicate isFunctionConstructedFrom(Function f, Function templateFunc) {
f.isConstructedFrom(templateFunc)
or
not f.isConstructedFrom(_) and f = templateFunc
}
/** Gets the fully templated version of `f`. */
private Function getFullyTemplatedFunction(Function f) {
not f.isFromUninstantiatedTemplate(_) and
(
exists(Class c, Class templateClass, int i |
c.isConstructedFrom(templateClass) and
isClassConstructedFrom(c, templateClass) and
f = c.getAMember(i) and
result = templateClass.getCanonicalMember(i)
)
or
not exists(f.getDeclaringType()) and
f.isConstructedFrom(result)
isFunctionConstructedFrom(f, result)
)
}
@@ -474,7 +504,7 @@ private string getTypeNameWithoutFunctionTemplates(Function f, int n, int remain
result = getParameterTypeWithoutTemplateArguments(templateFunction, n)
)
or
exists(string mid, TemplateParameter tp, Function templateFunction |
exists(string mid, TypeTemplateParameter tp, Function templateFunction |
mid = getTypeNameWithoutFunctionTemplates(f, n, remaining + 1) and
templateFunction = getFullyTemplatedFunction(f) and
tp = templateFunction.getTemplateArgument(remaining) and
@@ -489,7 +519,7 @@ private string getTypeNameWithoutFunctionTemplates(Function f, int n, int remain
private string getTypeNameWithoutClassTemplates(Function f, int n, int remaining) {
// If there is a declaring type then we start by expanding the function templates
exists(Class template |
f.getDeclaringType().isConstructedFrom(template) and
isClassConstructedFrom(f.getDeclaringType(), template) and
remaining = template.getNumberOfTemplateArguments() and
result = getTypeNameWithoutFunctionTemplates(f, n, 0)
)
@@ -499,9 +529,9 @@ private string getTypeNameWithoutClassTemplates(Function f, int n, int remaining
remaining = 0 and
result = getTypeNameWithoutFunctionTemplates(f, n, 0)
or
exists(string mid, TemplateParameter tp, Class template |
exists(string mid, TypeTemplateParameter tp, Class template |
mid = getTypeNameWithoutClassTemplates(f, n, remaining + 1) and
f.getDeclaringType().isConstructedFrom(template) and
isClassConstructedFrom(f.getDeclaringType(), template) and
tp = template.getTemplateArgument(remaining) and
result = mid.replaceAll(tp.getName(), "class:" + remaining.toString())
)
@@ -742,6 +772,22 @@ private predicate elementSpecMatchesSignature(
signatureMatches(func, signature, type, name, 0)
}
/**
* Holds when `method` has name `nameWithoutArgs`, and gets the enclosing
* class of `method`. Unlike `method.getClassAndName` this predicate does
* not strip typedefs from the name when `method` is an `ConversionOperator`.
*/
bindingset[nameWithoutArgs]
pragma[inline_late]
private Class getClassAndNameImpl(Function method, string nameWithoutArgs) {
exists(string memberName | result = method.getClassAndName(memberName) |
nameWithoutArgs = "operator " + method.(ConversionOperator).getDestType()
or
not method instanceof ConversionOperator and
memberName = nameWithoutArgs
)
}
/**
* Holds if `classWithMethod` has `method` named `name` (excluding any
* template parameters).
@@ -751,7 +797,7 @@ pragma[inline_late]
private predicate hasClassAndName(Class classWithMethod, Function method, string name) {
exists(string nameWithoutArgs |
parseAngles(name, nameWithoutArgs, _, "") and
classWithMethod = method.getClassAndName(nameWithoutArgs)
classWithMethod = getClassAndNameImpl(method, nameWithoutArgs)
)
}
@@ -793,28 +839,27 @@ private Element interpretElement0(
) {
(
// Non-member functions
elementSpec(namespace, type, subtypes, name, signature, _) and
funcHasQualifiedName(result, namespace, name) and
subtypes = false and
type = "" and
(
elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature)
or
signature = "" and
elementSpec(namespace, type, subtypes, name, "", _) and
funcHasQualifiedName(result, namespace, name)
elementSpec(namespace, type, subtypes, name, signature, _)
)
or
// Member functions
exists(Class namedClass, Class classWithMethod |
hasClassAndName(classWithMethod, result, name) and
classHasQualifiedName(namedClass, namespace, type)
|
(
elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature) and
hasClassAndName(classWithMethod, result, name)
elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature)
or
signature = "" and
elementSpec(namespace, type, subtypes, name, "", _) and
hasClassAndName(classWithMethod, result, name)
elementSpec(namespace, type, subtypes, name, "", _)
) and
classHasQualifiedName(namedClass, namespace, type) and
(
// member declared in the named type or a subtype of it
subtypes = true and

View File

@@ -1,39 +0,0 @@
/**
* DEPRECATED: Recursion through `DataFlow::Configuration` is impossible in
* any supported tooling. There is no need for this module because it's
* impossible to accidentally depend on recursion through
* `DataFlow::Configuration` in current releases.
*
* When this module is imported, recursive use of `DataFlow::Configuration` is
* disallowed. Importing this module will guarantee the absence of such
* recursion, which is unsupported and will be unconditionally disallowed in a
* future release.
*
* Recursive use of `DataFlow{2..4}::Configuration` is always disallowed, so no
* import is needed for those.
*/
import cpp
private import semmle.code.cpp.dataflow.DataFlow
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
* Four copies are available: `DataFlow` through `DataFlow4`.
*/
abstract private class ConfigurationRecursionPrevention extends DataFlow::Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(DataFlow::Node source, DataFlow::Node sink) {
strictcount(DataFlow::Node n | this.isSource(n)) < 0
or
strictcount(DataFlow::Node n | this.isSink(n)) < 0
or
strictcount(DataFlow::Node n1, DataFlow::Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
super.hasFlow(source, sink)
}
}

View File

@@ -16,7 +16,6 @@
*/
import semmle.code.cpp.dataflow.DataFlow
import semmle.code.cpp.dataflow.DataFlow2
/**
* DEPRECATED: Use `semmle.code.cpp.dataflow.new.TaintTracking` instead.
@@ -25,10 +24,9 @@ import semmle.code.cpp.dataflow.DataFlow2
* global (inter-procedural) taint-tracking analyses.
*/
deprecated module TaintTracking {
import semmle.code.cpp.dataflow.internal.tainttracking1.TaintTrackingParameter::Public
import semmle.code.cpp.dataflow.internal.TaintTrackingUtil
private import semmle.code.cpp.dataflow.internal.DataFlowImplSpecific
private import semmle.code.cpp.dataflow.internal.TaintTrackingImplSpecific
private import codeql.dataflow.TaintTracking
import TaintFlowMake<Location, CppOldDataFlow, CppOldTaintTracking>
import semmle.code.cpp.dataflow.internal.tainttracking1.TaintTrackingImpl
}

View File

@@ -1,22 +0,0 @@
/**
* Provides a `TaintTracking2` module, which is a copy of the `TaintTracking`
* module. Use this class when data-flow configurations or taint-tracking
* configurations must depend on each other. Two classes extending
* `DataFlow::Configuration` should never depend on each other, but one of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. The
* `TaintTracking::Configuration` class extends `DataFlow::Configuration`, and
* `TaintTracking2::Configuration` extends `DataFlow2::Configuration`.
*
* See `semmle.code.cpp.dataflow.TaintTracking` for the full documentation.
*/
/**
* DEPRECATED: Use `semmle.code.cpp.dataflow.new.TaintTracking2` instead.
*
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) taint-tracking analyses.
*/
deprecated module TaintTracking2 {
import semmle.code.cpp.dataflow.internal.tainttracking2.TaintTrackingImpl
}

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -729,41 +729,39 @@ private predicate exprToDefinitionByReferenceStep(Expr exprIn, Expr argOut) {
private module FieldFlow {
private import DataFlowImplCommon
private import DataFlowImplLocal
private import DataFlowPrivate
private import semmle.code.cpp.dataflow.DataFlow
/**
* A configuration for finding local-only flow through fields. This uses the
* `Configuration` class in the dedicated `DataFlowImplLocal` copy of the
* shared library that's not user-exposed directly.
* A configuration for finding local-only flow through fields.
*
* To keep the flow local to a single function, we put barriers on parameters
* and return statements. Sources and sinks are the values that go into and
* out of fields, respectively.
*/
private class FieldConfiguration extends Configuration {
FieldConfiguration() { this = "FieldConfiguration" }
override predicate isSource(Node source) {
private module FieldConfig implements DataFlow::ConfigSig {
predicate isSource(Node source) {
storeStep(source, _, _)
or
// Also mark `foo(a.b);` as a source when `a.b` may be overwritten by `foo`.
readStep(_, _, any(Node node | node.asExpr() = source.asDefiningArgument()))
}
override predicate isSink(Node sink) { readStep(_, _, sink) }
predicate isSink(Node sink) { readStep(_, _, sink) }
override predicate isBarrier(Node node) { node instanceof ParameterNode }
predicate isBarrier(Node node) { node instanceof ParameterNode }
override predicate isBarrierOut(Node node) {
predicate isBarrierOut(Node node) {
node.asExpr().getParent() instanceof ReturnStmt
or
node.asExpr().getParent() instanceof ThrowExpr
}
}
private module Flow = DataFlow::Global<FieldConfig>;
predicate fieldFlow(Node node1, Node node2) {
exists(FieldConfiguration cfg | cfg.hasFlow(node1, node2)) and
Flow::flow(node1, node2) and
// This configuration should not be able to cross function boundaries, but
// we double-check here just to be sure.
getNodeEnclosingCallable(node1) = getNodeEnclosingCallable(node2)

View File

@@ -1,168 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly
* exposed through the `Configuration` class. For some languages, this file
* exists in several identical copies, allowing queries to use multiple
* `Configuration` classes that depend on each other without introducing
* mutual recursion among those configurations.
*/
import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of
* this abstract class.
*
* A taint-tracking configuration is a special data flow configuration
* (`DataFlow::Configuration`) that allows for flow through nodes that do not
* necessarily preserve values but are still relevant from a taint tracking
* perspective. (For example, string concatenation, where one of the operands
* is tainted.)
*
* To create a configuration, extend this class with a subclass whose
* characteristic predicate is a unique singleton string. For example, write
*
* ```ql
* class MyAnalysisConfiguration extends TaintTracking::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isSanitizer`.
* // Optionally override `isSanitizerIn`.
* // Optionally override `isSanitizerOut`.
* // Optionally override `isSanitizerGuard`.
* // Optionally override `isAdditionalTaintStep`.
* }
* ```
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but it is unsupported to depend on
* another `TaintTracking::Configuration` or a `DataFlow::Configuration` in the
* overridden predicates that define sources, sinks, or additional steps.
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/
abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant taint source.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source) { none() }
/**
* Holds if `source` is a relevant taint source with the given initial
* `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { none() }
/**
* Holds if `sink` is a relevant taint sink
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink) { none() }
/**
* Holds if `sink` is a relevant taint sink accepting `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { none() }
/** Holds if the node `node` is a taint sanitizer. */
predicate isSanitizer(DataFlow::Node node) { none() }
final override predicate isBarrier(DataFlow::Node node) {
this.isSanitizer(node) or
defaultTaintSanitizer(node)
}
/**
* Holds if the node `node` is a taint sanitizer when the flow state is
* `state`.
*/
predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { none() }
final override predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) {
this.isSanitizer(node, state)
}
/** Holds if taint propagation into `node` is prohibited. */
predicate isSanitizerIn(DataFlow::Node node) { none() }
final override predicate isBarrierIn(DataFlow::Node node) { this.isSanitizerIn(node) }
/** Holds if taint propagation out of `node` is prohibited. */
predicate isSanitizerOut(DataFlow::Node node) { none() }
final override predicate isBarrierOut(DataFlow::Node node) { this.isSanitizerOut(node) }
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
*/
predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() }
final override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
this.isAdditionalTaintStep(node1, node2) or
defaultAdditionalTaintStep(node1, node2, _)
}
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
none()
}
final override predicate isAdditionalFlowStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
this.isAdditionalTaintStep(node1, state1, node2, state2)
}
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) {
(
this.isSink(node) or
this.isSink(node, _) or
this.isAdditionalTaintStep(node, _) or
this.isAdditionalTaintStep(node, _, _, _)
) and
defaultImplicitTaintRead(node, c)
}
/**
* Holds if taint may flow from `source` to `sink` for this configuration.
*/
// overridden to provide taint-tracking specific qldoc
override predicate hasFlow(DataFlow::Node source, DataFlow::Node sink) {
super.hasFlow(source, sink)
}
}

View File

@@ -1,10 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*/
import semmle.code.cpp.dataflow.internal.TaintTrackingUtil as Public
module Private {
import semmle.code.cpp.dataflow.DataFlow::DataFlow as DataFlow
import semmle.code.cpp.dataflow.internal.DataFlowImpl as DataFlowInternal
}

View File

@@ -1,168 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly
* exposed through the `Configuration` class. For some languages, this file
* exists in several identical copies, allowing queries to use multiple
* `Configuration` classes that depend on each other without introducing
* mutual recursion among those configurations.
*/
import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of
* this abstract class.
*
* A taint-tracking configuration is a special data flow configuration
* (`DataFlow::Configuration`) that allows for flow through nodes that do not
* necessarily preserve values but are still relevant from a taint tracking
* perspective. (For example, string concatenation, where one of the operands
* is tainted.)
*
* To create a configuration, extend this class with a subclass whose
* characteristic predicate is a unique singleton string. For example, write
*
* ```ql
* class MyAnalysisConfiguration extends TaintTracking::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isSanitizer`.
* // Optionally override `isSanitizerIn`.
* // Optionally override `isSanitizerOut`.
* // Optionally override `isSanitizerGuard`.
* // Optionally override `isAdditionalTaintStep`.
* }
* ```
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but it is unsupported to depend on
* another `TaintTracking::Configuration` or a `DataFlow::Configuration` in the
* overridden predicates that define sources, sinks, or additional steps.
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/
abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant taint source.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source) { none() }
/**
* Holds if `source` is a relevant taint source with the given initial
* `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { none() }
/**
* Holds if `sink` is a relevant taint sink
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink) { none() }
/**
* Holds if `sink` is a relevant taint sink accepting `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { none() }
/** Holds if the node `node` is a taint sanitizer. */
predicate isSanitizer(DataFlow::Node node) { none() }
final override predicate isBarrier(DataFlow::Node node) {
this.isSanitizer(node) or
defaultTaintSanitizer(node)
}
/**
* Holds if the node `node` is a taint sanitizer when the flow state is
* `state`.
*/
predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { none() }
final override predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) {
this.isSanitizer(node, state)
}
/** Holds if taint propagation into `node` is prohibited. */
predicate isSanitizerIn(DataFlow::Node node) { none() }
final override predicate isBarrierIn(DataFlow::Node node) { this.isSanitizerIn(node) }
/** Holds if taint propagation out of `node` is prohibited. */
predicate isSanitizerOut(DataFlow::Node node) { none() }
final override predicate isBarrierOut(DataFlow::Node node) { this.isSanitizerOut(node) }
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
*/
predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() }
final override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
this.isAdditionalTaintStep(node1, node2) or
defaultAdditionalTaintStep(node1, node2, _)
}
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
none()
}
final override predicate isAdditionalFlowStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
this.isAdditionalTaintStep(node1, state1, node2, state2)
}
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) {
(
this.isSink(node) or
this.isSink(node, _) or
this.isAdditionalTaintStep(node, _) or
this.isAdditionalTaintStep(node, _, _, _)
) and
defaultImplicitTaintRead(node, c)
}
/**
* Holds if taint may flow from `source` to `sink` for this configuration.
*/
// overridden to provide taint-tracking specific qldoc
override predicate hasFlow(DataFlow::Node source, DataFlow::Node sink) {
super.hasFlow(source, sink)
}
}

View File

@@ -1,9 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*/
import semmle.code.cpp.dataflow.internal.TaintTrackingUtil as Public
module Private {
import semmle.code.cpp.dataflow.DataFlow2::DataFlow2 as DataFlow
}

View File

@@ -29,5 +29,5 @@ module DataFlow {
private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific
private import codeql.dataflow.DataFlow
import DataFlowMake<Location, CppDataFlow>
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl1
import Public
}

View File

@@ -1,20 +0,0 @@
/**
* Provides a `DataFlow2` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.dataflow.new.DataFlow` for the full documentation.
*/
import cpp
/**
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) data flow analyses.
*/
module DataFlow2 {
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl2
}

View File

@@ -1,20 +0,0 @@
/**
* Provides a `DataFlow3` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.dataflow.new.DataFlow` for the full documentation.
*/
import cpp
/**
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) data flow analyses.
*/
module DataFlow3 {
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl3
}

View File

@@ -1,20 +0,0 @@
/**
* Provides a `DataFlow4` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.dataflow.new.DataFlow` for the full documentation.
*/
import cpp
/**
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) data flow analyses.
*/
module DataFlow4 {
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl4
}

View File

@@ -16,18 +16,16 @@
*/
import semmle.code.cpp.dataflow.new.DataFlow
import semmle.code.cpp.dataflow.new.DataFlow2
/**
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) taint-tracking analyses.
*/
module TaintTracking {
import semmle.code.cpp.ir.dataflow.internal.tainttracking1.TaintTrackingParameter::Public
import semmle.code.cpp.ir.dataflow.internal.TaintTrackingUtil
private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific
private import semmle.code.cpp.ir.dataflow.internal.TaintTrackingImplSpecific
private import codeql.dataflow.TaintTracking
private import semmle.code.cpp.Location
import TaintFlowMake<Location, CppDataFlow, CppTaintTracking>
import semmle.code.cpp.ir.dataflow.internal.tainttracking1.TaintTrackingImpl
}

View File

@@ -1,20 +0,0 @@
/**
* Provides a `TaintTracking2` module, which is a copy of the `TaintTracking`
* module. Use this class when data-flow configurations or taint-tracking
* configurations must depend on each other. Two classes extending
* `DataFlow::Configuration` should never depend on each other, but one of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. The
* `TaintTracking::Configuration` class extends `DataFlow::Configuration`, and
* `TaintTracking2::Configuration` extends `DataFlow2::Configuration`.
*
* See `semmle.code.cpp.dataflow.new.TaintTracking` for the full documentation.
*/
/**
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) taint-tracking analyses.
*/
module TaintTracking2 {
import semmle.code.cpp.ir.dataflow.internal.tainttracking2.TaintTrackingImpl
}

View File

@@ -1,20 +0,0 @@
/**
* Provides a `TaintTracking3` module, which is a copy of the `TaintTracking`
* module. Use this class when data-flow configurations or taint-tracking
* configurations must depend on each other. Two classes extending
* `DataFlow::Configuration` should never depend on each other, but one of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. The
* `TaintTracking::Configuration` class extends `DataFlow::Configuration`, and
* `TaintTracking2::Configuration` extends `DataFlow2::Configuration`.
*
* See `semmle.code.cpp.dataflow.new.TaintTracking` for the full documentation.
*/
/**
* Provides classes for performing local (intra-procedural) and
* global (inter-procedural) taint-tracking analyses.
*/
module TaintTracking3 {
import semmle.code.cpp.ir.dataflow.internal.tainttracking3.TaintTrackingImpl
}

View File

@@ -130,7 +130,7 @@ class Declaration extends @declaration {
this instanceof Parameter or
this instanceof ProxyClass or
this instanceof LocalVariable or
this instanceof TemplateParameter or
this instanceof TypeTemplateParameter or
this.(UserType).isLocal()
)
}
@@ -226,8 +226,8 @@ class ProxyClass extends UserType {
ProxyClass() { usertypes(this, _, 9) }
}
class TemplateParameter extends UserType {
TemplateParameter() { usertypes(this, _, 7) or usertypes(this, _, 8) }
class TypeTemplateParameter extends UserType {
TypeTemplateParameter() { usertypes(this, _, 7) or usertypes(this, _, 8) }
}
class TemplateClass extends UserType {

View File

@@ -25,5 +25,5 @@ module DataFlow {
private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific
private import codeql.dataflow.DataFlow
import DataFlowMake<Location, CppDataFlow>
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl1
import Public
}

View File

@@ -1,16 +0,0 @@
/**
* Provides a `DataFlow2` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.ir.dataflow.DataFlow` for the full documentation.
*/
import cpp
module DataFlow2 {
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl2
}

View File

@@ -1,16 +0,0 @@
/**
* Provides a `DataFlow3` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.ir.dataflow.DataFlow` for the full documentation.
*/
import cpp
module DataFlow3 {
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl3
}

View File

@@ -1,16 +0,0 @@
/**
* Provides a `DataFlow4` module, which is a copy of the `DataFlow` module. Use
* this class when data-flow configurations must depend on each other. Two
* classes extending `DataFlow::Configuration` should never depend on each
* other, but one of them should instead depend on a
* `DataFlow2::Configuration`, a `DataFlow3::Configuration`, or a
* `DataFlow4::Configuration`.
*
* See `semmle.code.cpp.ir.dataflow.DataFlow` for the full documentation.
*/
import cpp
module DataFlow4 {
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl4
}

View File

@@ -16,13 +16,11 @@
*/
import semmle.code.cpp.ir.dataflow.DataFlow
import semmle.code.cpp.ir.dataflow.DataFlow2
module TaintTracking {
import semmle.code.cpp.ir.dataflow.internal.tainttracking1.TaintTrackingParameter::Public
import semmle.code.cpp.ir.dataflow.internal.TaintTrackingUtil
private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific
private import semmle.code.cpp.ir.dataflow.internal.TaintTrackingImplSpecific
private import codeql.dataflow.TaintTracking
import TaintFlowMake<Location, CppDataFlow, CppTaintTracking>
import semmle.code.cpp.ir.dataflow.internal.tainttracking1.TaintTrackingImpl
}

View File

@@ -1,15 +0,0 @@
/**
* Provides a `TaintTracking2` module, which is a copy of the `TaintTracking`
* module. Use this class when data-flow configurations or taint-tracking
* configurations must depend on each other. Two classes extending
* `DataFlow::Configuration` should never depend on each other, but one of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. The
* `TaintTracking::Configuration` class extends `DataFlow::Configuration`, and
* `TaintTracking2::Configuration` extends `DataFlow2::Configuration`.
*
* See `semmle.code.cpp.ir.dataflow.TaintTracking` for the full documentation.
*/
module TaintTracking2 {
import semmle.code.cpp.ir.dataflow.internal.tainttracking2.TaintTrackingImpl
}

View File

@@ -1,15 +0,0 @@
/**
* Provides a `TaintTracking3` module, which is a copy of the `TaintTracking`
* module. Use this class when data-flow configurations or taint-tracking
* configurations must depend on each other. Two classes extending
* `DataFlow::Configuration` should never depend on each other, but one of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`. The
* `TaintTracking::Configuration` class extends `DataFlow::Configuration`, and
* `TaintTracking2::Configuration` extends `DataFlow2::Configuration`.
*
* See `semmle.code.cpp.ir.dataflow.TaintTracking` for the full documentation.
*/
module TaintTracking3 {
import semmle.code.cpp.ir.dataflow.internal.tainttracking3.TaintTrackingImpl
}

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1,361 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides a `Configuration` class backwards-compatible interface to the data
* flow library.
*/
private import DataFlowImplCommon
private import DataFlowImplSpecific::Private
import DataFlowImplSpecific::Public
private import DataFlowImpl
import DataFlowImplCommonPublic
deprecated import FlowStateString
private import codeql.util.Unit
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural data flow analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the global data flow library must define its own unique extension
* of this abstract class. To create a configuration, extend this class with
* a subclass whose characteristic predicate is a unique singleton string.
* For example, write
*
* ```ql
* class MyAnalysisConfiguration extends DataFlow::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isBarrier`.
* // Optionally override `isAdditionalFlowStep`.
* }
* ```
* Conceptually, this defines a graph where the nodes are `DataFlow::Node`s and
* the edges are those data-flow steps that preserve the value of the node
* along with any additional edges defined by `isAdditionalFlowStep`.
* Specifying nodes in `isBarrier` will remove those nodes from the graph, and
* specifying nodes in `isBarrierIn` and/or `isBarrierOut` will remove in-going
* and/or out-going edges from those nodes, respectively.
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but two classes extending
* `DataFlow::Configuration` should never depend on each other. One of them
* should instead depend on a `DataFlow2::Configuration`, a
* `DataFlow3::Configuration`, or a `DataFlow4::Configuration`.
*/
abstract deprecated class Configuration extends string {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant data flow source.
*/
predicate isSource(Node source) { none() }
/**
* Holds if `source` is a relevant data flow source with the given initial
* `state`.
*/
predicate isSource(Node source, FlowState state) { none() }
/**
* Holds if `sink` is a relevant data flow sink.
*/
predicate isSink(Node sink) { none() }
/**
* Holds if `sink` is a relevant data flow sink accepting `state`.
*/
predicate isSink(Node sink, FlowState state) { none() }
/**
* Holds if data flow through `node` is prohibited. This completely removes
* `node` from the data flow graph.
*/
predicate isBarrier(Node node) { none() }
/**
* Holds if data flow through `node` is prohibited when the flow state is
* `state`.
*/
predicate isBarrier(Node node, FlowState state) { none() }
/** Holds if data flow into `node` is prohibited. */
predicate isBarrierIn(Node node) { none() }
/** Holds if data flow out of `node` is prohibited. */
predicate isBarrierOut(Node node) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
*/
predicate isAdditionalFlowStep(Node node1, Node node2) { none() }
/**
* Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
none()
}
/**
* Holds if an arbitrary number of implicit read steps of content `c` may be
* taken at `node`.
*/
predicate allowImplicitRead(Node node, ContentSet c) { none() }
/**
* Gets the virtual dispatch branching limit when calculating field flow.
* This can be overridden to a smaller value to improve performance (a
* value of 0 disables field flow), or a larger value to get more results.
*/
int fieldFlowBranchLimit() { result = 2 }
/**
* Gets a data flow configuration feature to add restrictions to the set of
* valid flow paths.
*
* - `FeatureHasSourceCallContext`:
* Assume that sources have some existing call context to disallow
* conflicting return-flow directly following the source.
* - `FeatureHasSinkCallContext`:
* Assume that sinks have some existing call context to disallow
* conflicting argument-to-parameter flow directly preceding the sink.
* - `FeatureEqualSourceSinkCallContext`:
* Implies both of the above and additionally ensures that the entire flow
* path preserves the call context.
*
* These features are generally not relevant for typical end-to-end data flow
* queries, but should only be used for constructing paths that need to
* somehow be pluggable in another path context.
*/
FlowFeature getAFeature() { none() }
/** Holds if sources should be grouped in the result of `hasFlowPath`. */
predicate sourceGrouping(Node source, string sourceGroup) { none() }
/** Holds if sinks should be grouped in the result of `hasFlowPath`. */
predicate sinkGrouping(Node sink, string sinkGroup) { none() }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*/
predicate hasFlow(Node source, Node sink) { hasFlow(source, sink, this) }
/**
* Holds if data may flow from `source` to `sink` for this configuration.
*
* The corresponding paths are generated from the end-points and the graph
* included in the module `PathGraph`.
*/
predicate hasFlowPath(PathNode source, PathNode sink) { hasFlowPath(source, sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowTo(Node sink) { hasFlowTo(sink, this) }
/**
* Holds if data may flow from some source to `sink` for this configuration.
*/
predicate hasFlowToExpr(DataFlowExpr sink) { this.hasFlowTo(exprNode(sink)) }
/**
* Holds if hidden nodes should be included in the data flow graph.
*
* This feature should only be used for debugging or when the data flow graph
* is not visualized (for example in a `path-problem` query).
*/
predicate includeHiddenNodes() { none() }
}
/**
* This class exists to prevent mutual recursion between the user-overridden
* member predicates of `Configuration` and the rest of the data-flow library.
* Good performance cannot be guaranteed in the presence of such recursion, so
* it should be replaced by using more than one copy of the data flow library.
*/
abstract deprecated private class ConfigurationRecursionPrevention extends Configuration {
bindingset[this]
ConfigurationRecursionPrevention() { any() }
override predicate hasFlow(Node source, Node sink) {
strictcount(Node n | this.isSource(n)) < 0
or
strictcount(Node n | this.isSource(n, _)) < 0
or
strictcount(Node n | this.isSink(n)) < 0
or
strictcount(Node n | this.isSink(n, _)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, n2)) < 0
or
strictcount(Node n1, Node n2 | this.isAdditionalFlowStep(n1, _, n2, _)) < 0
or
super.hasFlow(source, sink)
}
}
deprecated private FlowState relevantState(Configuration config) {
config.isSource(_, result) or
config.isSink(_, result) or
config.isBarrier(_, result) or
config.isAdditionalFlowStep(_, result, _, _) or
config.isAdditionalFlowStep(_, _, _, result)
}
private newtype TConfigState =
deprecated TMkConfigState(Configuration config, FlowState state) {
state = relevantState(config) or state instanceof FlowStateEmpty
}
deprecated private Configuration getConfig(TConfigState state) { state = TMkConfigState(result, _) }
deprecated private FlowState getState(TConfigState state) { state = TMkConfigState(_, result) }
deprecated private predicate singleConfiguration() { 1 = strictcount(Configuration c) }
deprecated private module Config implements FullStateConfigSig {
class FlowState = TConfigState;
predicate isSource(Node source, FlowState state) {
getConfig(state).isSource(source, getState(state))
or
getConfig(state).isSource(source) and getState(state) instanceof FlowStateEmpty
}
predicate isSink(Node sink) { none() }
predicate isSink(Node sink, FlowState state) {
getConfig(state).isSink(sink, getState(state))
or
getConfig(state).isSink(sink) and getState(state) instanceof FlowStateEmpty
}
predicate isBarrier(Node node) { none() }
predicate isBarrier(Node node, FlowState state) {
getConfig(state).isBarrier(node, getState(state)) or
getConfig(state).isBarrier(node)
}
predicate isBarrierIn(Node node) { any(Configuration config).isBarrierIn(node) }
predicate isBarrierOut(Node node) { any(Configuration config).isBarrierOut(node) }
predicate isBarrierIn(Node node, FlowState state) { none() }
predicate isBarrierOut(Node node, FlowState state) { none() }
predicate isAdditionalFlowStep(Node node1, Node node2, string model) {
singleConfiguration() and
any(Configuration config).isAdditionalFlowStep(node1, node2) and
model = ""
}
predicate isAdditionalFlowStep(
Node node1, FlowState state1, Node node2, FlowState state2, string model
) {
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
getConfig(state2) = getConfig(state1) and
model = ""
or
not singleConfiguration() and
getConfig(state1).isAdditionalFlowStep(node1, node2) and
state2 = state1 and
model = ""
}
predicate allowImplicitRead(Node node, ContentSet c) {
any(Configuration config).allowImplicitRead(node, c)
}
predicate neverSkip(Node node) { none() }
int fieldFlowBranchLimit() { result = min(any(Configuration config).fieldFlowBranchLimit()) }
int accessPathLimit() { result = 5 }
FlowFeature getAFeature() { result = any(Configuration config).getAFeature() }
predicate includeHiddenNodes() { any(Configuration config).includeHiddenNodes() }
predicate observeDiffInformedIncrementalMode() { none() }
}
deprecated private import Impl<Config> as I
/**
* A `Node` augmented with a call context (except for sinks), an access path, and a configuration.
* Only those `PathNode`s that are reachable from a source, and which can reach a sink, are generated.
*/
deprecated class PathNode instanceof I::PathNode {
/** Gets a textual representation of this element. */
final string toString() { result = super.toString() }
/**
* Gets a textual representation of this element, including a textual
* representation of the call context.
*/
final string toStringWithContext() { result = super.toStringWithContext() }
/**
* Holds if this element is at the specified location.
* The location spans column `startcolumn` of line `startline` to
* column `endcolumn` of line `endline` in file `filepath`.
* For more information, see
* [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
*/
final predicate hasLocationInfo(
string filepath, int startline, int startcolumn, int endline, int endcolumn
) {
super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
}
/** Gets the underlying `Node`. */
final Node getNode() { result = super.getNode() }
/** Gets the `FlowState` of this node. */
deprecated final FlowState getState() { result = getState(super.getState()) }
/** Gets the associated configuration. */
deprecated final Configuration getConfiguration() { result = getConfig(super.getState()) }
/** Gets a successor of this node, if any. */
final PathNode getASuccessor() { result = super.getASuccessor() }
/** Holds if this node is a source. */
final predicate isSource() { super.isSource() }
/** Holds if this node is a grouping of source nodes. */
final predicate isSourceGroup(string group) { super.isSourceGroup(group) }
/** Holds if this node is a grouping of sink nodes. */
final predicate isSinkGroup(string group) { super.isSinkGroup(group) }
}
deprecated module PathGraph = I::PathGraph;
deprecated private predicate hasFlow(Node source, Node sink, Configuration config) {
exists(PathNode source0, PathNode sink0 |
hasFlowPath(source0, sink0, config) and
source0.getNode() = source and
sink0.getNode() = sink
)
}
deprecated private predicate hasFlowPath(PathNode source, PathNode sink, Configuration config) {
I::flowPath(source, sink) and source.getConfiguration() = config
}
deprecated private predicate hasFlowTo(Node sink, Configuration config) { hasFlow(_, sink, config) }
deprecated predicate flowsTo = hasFlow/3;

View File

@@ -1237,12 +1237,14 @@ module IsUnreachableInCall {
int getValue() { result = value }
}
pragma[nomagic]
bindingset[right]
pragma[inline_late]
private predicate ensuresEq(Operand left, Operand right, int k, IRBlock block, boolean areEqual) {
any(G::IRGuardCondition guard).ensuresEq(left, right, k, block, areEqual)
}
pragma[nomagic]
bindingset[right]
pragma[inline_late]
private predicate ensuresLt(Operand left, Operand right, int k, IRBlock block, boolean areEqual) {
any(G::IRGuardCondition guard).ensuresLt(left, right, k, block, areEqual)
}

View File

@@ -2275,6 +2275,12 @@ private predicate guardControlsPhiInput(
*/
signature predicate guardChecksSig(IRGuardCondition g, Expr e, boolean branch);
bindingset[g]
pragma[inline_late]
private predicate controls(IRGuardCondition g, Node n, boolean edge) {
g.controls(n.getBasicBlock(), edge)
}
/**
* Provides a set of barrier nodes for a guard that validates an expression.
*
@@ -2282,6 +2288,15 @@ signature predicate guardChecksSig(IRGuardCondition g, Expr e, boolean branch);
* in data flow and taint tracking.
*/
module BarrierGuard<guardChecksSig/3 guardChecks> {
bindingset[value, n]
pragma[inline_late]
private predicate convertedExprHasValueNumber(ValueNumber value, Node n) {
exists(Expr e |
e = value.getAnInstruction().getConvertedResultExpression() and
n.asConvertedExpr() = e
)
}
/**
* Gets an expression node that is safely guarded by the given guard check.
*
@@ -2315,18 +2330,19 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
* NOTE: If an indirect expression is tracked, use `getAnIndirectBarrierNode` instead.
*/
Node getABarrierNode() {
exists(IRGuardCondition g, Expr e, ValueNumber value, boolean edge |
e = value.getAnInstruction().getConvertedResultExpression() and
result.asConvertedExpr() = e and
guardChecks(g, value.getAnInstruction().getConvertedResultExpression(), edge) and
g.controls(result.getBasicBlock(), edge)
exists(IRGuardCondition g, ValueNumber value, boolean edge |
convertedExprHasValueNumber(value, result) and
guardChecks(g,
pragma[only_bind_into](value.getAnInstruction().getConvertedResultExpression()), edge) and
controls(g, result, edge)
)
or
exists(
IRGuardCondition g, boolean branch, Ssa::DefinitionExt def, IRBlock input, Ssa::PhiNode phi
|
guardChecks(g, def.getARead().asOperand().getDef().getConvertedResultExpression(), branch) and
guardControlsPhiInput(g, branch, def, input, phi) and
guardControlsPhiInput(g, branch, def, pragma[only_bind_into](input),
pragma[only_bind_into](phi)) and
result = TSsaPhiInputNode(phi, input)
)
}
@@ -2366,6 +2382,17 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
*/
Node getAnIndirectBarrierNode() { result = getAnIndirectBarrierNode(_) }
bindingset[value, n]
pragma[inline_late]
private predicate indirectConvertedExprHasValueNumber(
int indirectionIndex, ValueNumber value, Node n
) {
exists(Expr e |
e = value.getAnInstruction().getConvertedResultExpression() and
n.asIndirectConvertedExpr(indirectionIndex) = e
)
}
/**
* Gets an indirect expression node with indirection index `indirectionIndex` that is
* safely guarded by the given guard check.
@@ -2401,11 +2428,11 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
* NOTE: If a non-indirect expression is tracked, use `getABarrierNode` instead.
*/
Node getAnIndirectBarrierNode(int indirectionIndex) {
exists(IRGuardCondition g, Expr e, ValueNumber value, boolean edge |
e = value.getAnInstruction().getConvertedResultExpression() and
result.asIndirectConvertedExpr(indirectionIndex) = e and
guardChecks(g, value.getAnInstruction().getConvertedResultExpression(), edge) and
g.controls(result.getBasicBlock(), edge)
exists(IRGuardCondition g, ValueNumber value, boolean edge |
indirectConvertedExprHasValueNumber(indirectionIndex, value, result) and
guardChecks(g,
pragma[only_bind_into](value.getAnInstruction().getConvertedResultExpression()), edge) and
controls(g, result, edge)
)
or
exists(
@@ -2414,7 +2441,8 @@ module BarrierGuard<guardChecksSig/3 guardChecks> {
guardChecks(g,
def.getARead().asIndirectOperand(indirectionIndex).getDef().getConvertedResultExpression(),
branch) and
guardControlsPhiInput(g, branch, def, input, phi) and
guardControlsPhiInput(g, branch, def, pragma[only_bind_into](input),
pragma[only_bind_into](phi)) and
result = TSsaPhiInputNode(phi, input)
)
}
@@ -2440,20 +2468,29 @@ private EdgeKind getConditionalEdge(boolean branch) {
* in data flow and taint tracking.
*/
module InstructionBarrierGuard<instructionGuardChecksSig/3 instructionGuardChecks> {
bindingset[value, n]
pragma[inline_late]
private predicate operandHasValueNumber(ValueNumber value, Node n) {
exists(Operand use |
use = value.getAnInstruction().getAUse() and
n.asOperand() = use
)
}
/** Gets a node that is safely guarded by the given guard check. */
Node getABarrierNode() {
exists(IRGuardCondition g, ValueNumber value, boolean edge, Operand use |
instructionGuardChecks(g, value.getAnInstruction(), edge) and
use = value.getAnInstruction().getAUse() and
result.asOperand() = use and
g.controls(result.getBasicBlock(), edge)
exists(IRGuardCondition g, ValueNumber value, boolean edge |
instructionGuardChecks(g, pragma[only_bind_into](value.getAnInstruction()), edge) and
operandHasValueNumber(value, result) and
controls(g, result, edge)
)
or
exists(
IRGuardCondition g, boolean branch, Ssa::DefinitionExt def, IRBlock input, Ssa::PhiNode phi
|
instructionGuardChecks(g, def.getARead().asOperand().getDef(), branch) and
guardControlsPhiInput(g, branch, def, input, phi) and
guardControlsPhiInput(g, branch, def, pragma[only_bind_into](input),
pragma[only_bind_into](phi)) and
result = TSsaPhiInputNode(phi, input)
)
}

View File

@@ -545,7 +545,7 @@ module ProductFlow {
private predicate outImpl1(Flow1::PathNode pred1, Flow1::PathNode succ1, DataFlowCall call) {
Flow1::PathGraph::edges(pred1, succ1, _, _) and
exists(ReturnKindExt returnKind |
succ1.getNode() = returnKind.getAnOutNode(call) and
succ1.getNode() = getAnOutNodeExt(call, returnKind) and
returnKind = getParamReturnPosition(_, pred1.asParameterReturnNode()).getKind()
)
}
@@ -573,7 +573,7 @@ module ProductFlow {
private predicate outImpl2(Flow2::PathNode pred2, Flow2::PathNode succ2, DataFlowCall call) {
Flow2::PathGraph::edges(pred2, succ2, _, _) and
exists(ReturnKindExt returnKind |
succ2.getNode() = returnKind.getAnOutNode(call) and
succ2.getNode() = getAnOutNodeExt(call, returnKind) and
returnKind = getParamReturnPosition(_, pred2.asParameterReturnNode()).getKind()
)
}

View File

@@ -1276,6 +1276,7 @@ class DefinitionExt extends SsaImpl::DefinitionExt {
}
/** Gets a node that represents a read of this SSA definition. */
pragma[nomagic]
Node getARead() {
exists(SourceVariable sv, IRBlock bb, int i | SsaCached::ssaDefReachesReadExt(sv, this, bb, i) |
useToNode(bb, i, sv, result)

View File

@@ -27,8 +27,11 @@ private module Input implements TypeFlowInput<Location> {
}
private predicate hasExactSingleType(Instruction i) {
// The address of a variable is always a single object
i instanceof VariableAddressInstruction
// The address of a variable is always a single object (unless it's an array)
exists(VariableAddressInstruction vai |
i = vai and
not vai.getResultType() instanceof ArrayType
)
or
// A reference always points to a single object
i.getResultLanguageType().hasUnspecifiedType(any(ReferenceType rt), false)

View File

@@ -1,168 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly
* exposed through the `Configuration` class. For some languages, this file
* exists in several identical copies, allowing queries to use multiple
* `Configuration` classes that depend on each other without introducing
* mutual recursion among those configurations.
*/
import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of
* this abstract class.
*
* A taint-tracking configuration is a special data flow configuration
* (`DataFlow::Configuration`) that allows for flow through nodes that do not
* necessarily preserve values but are still relevant from a taint tracking
* perspective. (For example, string concatenation, where one of the operands
* is tainted.)
*
* To create a configuration, extend this class with a subclass whose
* characteristic predicate is a unique singleton string. For example, write
*
* ```ql
* class MyAnalysisConfiguration extends TaintTracking::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isSanitizer`.
* // Optionally override `isSanitizerIn`.
* // Optionally override `isSanitizerOut`.
* // Optionally override `isSanitizerGuard`.
* // Optionally override `isAdditionalTaintStep`.
* }
* ```
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but it is unsupported to depend on
* another `TaintTracking::Configuration` or a `DataFlow::Configuration` in the
* overridden predicates that define sources, sinks, or additional steps.
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/
abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant taint source.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source) { none() }
/**
* Holds if `source` is a relevant taint source with the given initial
* `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { none() }
/**
* Holds if `sink` is a relevant taint sink
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink) { none() }
/**
* Holds if `sink` is a relevant taint sink accepting `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { none() }
/** Holds if the node `node` is a taint sanitizer. */
predicate isSanitizer(DataFlow::Node node) { none() }
final override predicate isBarrier(DataFlow::Node node) {
this.isSanitizer(node) or
defaultTaintSanitizer(node)
}
/**
* Holds if the node `node` is a taint sanitizer when the flow state is
* `state`.
*/
predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { none() }
final override predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) {
this.isSanitizer(node, state)
}
/** Holds if taint propagation into `node` is prohibited. */
predicate isSanitizerIn(DataFlow::Node node) { none() }
final override predicate isBarrierIn(DataFlow::Node node) { this.isSanitizerIn(node) }
/** Holds if taint propagation out of `node` is prohibited. */
predicate isSanitizerOut(DataFlow::Node node) { none() }
final override predicate isBarrierOut(DataFlow::Node node) { this.isSanitizerOut(node) }
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
*/
predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() }
final override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
this.isAdditionalTaintStep(node1, node2) or
defaultAdditionalTaintStep(node1, node2, _)
}
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
none()
}
final override predicate isAdditionalFlowStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
this.isAdditionalTaintStep(node1, state1, node2, state2)
}
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) {
(
this.isSink(node) or
this.isSink(node, _) or
this.isAdditionalTaintStep(node, _) or
this.isAdditionalTaintStep(node, _, _, _)
) and
defaultImplicitTaintRead(node, c)
}
/**
* Holds if taint may flow from `source` to `sink` for this configuration.
*/
// overridden to provide taint-tracking specific qldoc
override predicate hasFlow(DataFlow::Node source, DataFlow::Node sink) {
super.hasFlow(source, sink)
}
}

View File

@@ -1,6 +0,0 @@
import semmle.code.cpp.ir.dataflow.internal.TaintTrackingUtil as Public
module Private {
import semmle.code.cpp.ir.dataflow.DataFlow::DataFlow as DataFlow
import semmle.code.cpp.ir.dataflow.internal.DataFlowImpl as DataFlowInternal
}

View File

@@ -1,168 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly
* exposed through the `Configuration` class. For some languages, this file
* exists in several identical copies, allowing queries to use multiple
* `Configuration` classes that depend on each other without introducing
* mutual recursion among those configurations.
*/
import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of
* this abstract class.
*
* A taint-tracking configuration is a special data flow configuration
* (`DataFlow::Configuration`) that allows for flow through nodes that do not
* necessarily preserve values but are still relevant from a taint tracking
* perspective. (For example, string concatenation, where one of the operands
* is tainted.)
*
* To create a configuration, extend this class with a subclass whose
* characteristic predicate is a unique singleton string. For example, write
*
* ```ql
* class MyAnalysisConfiguration extends TaintTracking::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isSanitizer`.
* // Optionally override `isSanitizerIn`.
* // Optionally override `isSanitizerOut`.
* // Optionally override `isSanitizerGuard`.
* // Optionally override `isAdditionalTaintStep`.
* }
* ```
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but it is unsupported to depend on
* another `TaintTracking::Configuration` or a `DataFlow::Configuration` in the
* overridden predicates that define sources, sinks, or additional steps.
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/
abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant taint source.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source) { none() }
/**
* Holds if `source` is a relevant taint source with the given initial
* `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { none() }
/**
* Holds if `sink` is a relevant taint sink
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink) { none() }
/**
* Holds if `sink` is a relevant taint sink accepting `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { none() }
/** Holds if the node `node` is a taint sanitizer. */
predicate isSanitizer(DataFlow::Node node) { none() }
final override predicate isBarrier(DataFlow::Node node) {
this.isSanitizer(node) or
defaultTaintSanitizer(node)
}
/**
* Holds if the node `node` is a taint sanitizer when the flow state is
* `state`.
*/
predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { none() }
final override predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) {
this.isSanitizer(node, state)
}
/** Holds if taint propagation into `node` is prohibited. */
predicate isSanitizerIn(DataFlow::Node node) { none() }
final override predicate isBarrierIn(DataFlow::Node node) { this.isSanitizerIn(node) }
/** Holds if taint propagation out of `node` is prohibited. */
predicate isSanitizerOut(DataFlow::Node node) { none() }
final override predicate isBarrierOut(DataFlow::Node node) { this.isSanitizerOut(node) }
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
*/
predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() }
final override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
this.isAdditionalTaintStep(node1, node2) or
defaultAdditionalTaintStep(node1, node2, _)
}
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
none()
}
final override predicate isAdditionalFlowStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
this.isAdditionalTaintStep(node1, state1, node2, state2)
}
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) {
(
this.isSink(node) or
this.isSink(node, _) or
this.isAdditionalTaintStep(node, _) or
this.isAdditionalTaintStep(node, _, _, _)
) and
defaultImplicitTaintRead(node, c)
}
/**
* Holds if taint may flow from `source` to `sink` for this configuration.
*/
// overridden to provide taint-tracking specific qldoc
override predicate hasFlow(DataFlow::Node source, DataFlow::Node sink) {
super.hasFlow(source, sink)
}
}

View File

@@ -1,5 +0,0 @@
import semmle.code.cpp.ir.dataflow.internal.TaintTrackingUtil as Public
module Private {
import semmle.code.cpp.ir.dataflow.DataFlow2::DataFlow2 as DataFlow
}

View File

@@ -1,168 +0,0 @@
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* Provides an implementation of global (interprocedural) taint tracking.
* This file re-exports the local (intraprocedural) taint-tracking analysis
* from `TaintTrackingParameter::Public` and adds a global analysis, mainly
* exposed through the `Configuration` class. For some languages, this file
* exists in several identical copies, allowing queries to use multiple
* `Configuration` classes that depend on each other without introducing
* mutual recursion among those configurations.
*/
import TaintTrackingParameter::Public
private import TaintTrackingParameter::Private
/**
* DEPRECATED: Use `Global` and `GlobalWithState` instead.
*
* A configuration of interprocedural taint tracking analysis. This defines
* sources, sinks, and any other configurable aspect of the analysis. Each
* use of the taint tracking library must define its own unique extension of
* this abstract class.
*
* A taint-tracking configuration is a special data flow configuration
* (`DataFlow::Configuration`) that allows for flow through nodes that do not
* necessarily preserve values but are still relevant from a taint tracking
* perspective. (For example, string concatenation, where one of the operands
* is tainted.)
*
* To create a configuration, extend this class with a subclass whose
* characteristic predicate is a unique singleton string. For example, write
*
* ```ql
* class MyAnalysisConfiguration extends TaintTracking::Configuration {
* MyAnalysisConfiguration() { this = "MyAnalysisConfiguration" }
* // Override `isSource` and `isSink`.
* // Optionally override `isSanitizer`.
* // Optionally override `isSanitizerIn`.
* // Optionally override `isSanitizerOut`.
* // Optionally override `isSanitizerGuard`.
* // Optionally override `isAdditionalTaintStep`.
* }
* ```
*
* Then, to query whether there is flow between some `source` and `sink`,
* write
*
* ```ql
* exists(MyAnalysisConfiguration cfg | cfg.hasFlow(source, sink))
* ```
*
* Multiple configurations can coexist, but it is unsupported to depend on
* another `TaintTracking::Configuration` or a `DataFlow::Configuration` in the
* overridden predicates that define sources, sinks, or additional steps.
* Instead, the dependency should go to a `TaintTracking2::Configuration` or a
* `DataFlow2::Configuration`, `DataFlow3::Configuration`, etc.
*/
abstract deprecated class Configuration extends DataFlow::Configuration {
bindingset[this]
Configuration() { any() }
/**
* Holds if `source` is a relevant taint source.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source) { none() }
/**
* Holds if `source` is a relevant taint source with the given initial
* `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { none() }
/**
* Holds if `sink` is a relevant taint sink
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink) { none() }
/**
* Holds if `sink` is a relevant taint sink accepting `state`.
*
* The smaller this predicate is, the faster `hasFlow()` will converge.
*/
// overridden to provide taint-tracking specific qldoc
override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { none() }
/** Holds if the node `node` is a taint sanitizer. */
predicate isSanitizer(DataFlow::Node node) { none() }
final override predicate isBarrier(DataFlow::Node node) {
this.isSanitizer(node) or
defaultTaintSanitizer(node)
}
/**
* Holds if the node `node` is a taint sanitizer when the flow state is
* `state`.
*/
predicate isSanitizer(DataFlow::Node node, DataFlow::FlowState state) { none() }
final override predicate isBarrier(DataFlow::Node node, DataFlow::FlowState state) {
this.isSanitizer(node, state)
}
/** Holds if taint propagation into `node` is prohibited. */
predicate isSanitizerIn(DataFlow::Node node) { none() }
final override predicate isBarrierIn(DataFlow::Node node) { this.isSanitizerIn(node) }
/** Holds if taint propagation out of `node` is prohibited. */
predicate isSanitizerOut(DataFlow::Node node) { none() }
final override predicate isBarrierOut(DataFlow::Node node) { this.isSanitizerOut(node) }
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
*/
predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() }
final override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
this.isAdditionalTaintStep(node1, node2) or
defaultAdditionalTaintStep(node1, node2, _)
}
/**
* Holds if taint may propagate from `node1` to `node2` in addition to the normal data-flow and taint steps.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
none()
}
final override predicate isAdditionalFlowStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
this.isAdditionalTaintStep(node1, state1, node2, state2)
}
override predicate allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c) {
(
this.isSink(node) or
this.isSink(node, _) or
this.isAdditionalTaintStep(node, _) or
this.isAdditionalTaintStep(node, _, _, _)
) and
defaultImplicitTaintRead(node, c)
}
/**
* Holds if taint may flow from `source` to `sink` for this configuration.
*/
// overridden to provide taint-tracking specific qldoc
override predicate hasFlow(DataFlow::Node source, DataFlow::Node sink) {
super.hasFlow(source, sink)
}
}

View File

@@ -1,5 +0,0 @@
import semmle.code.cpp.ir.dataflow.internal.TaintTrackingUtil as Public
module Private {
import semmle.code.cpp.ir.dataflow.DataFlow3::DataFlow3 as DataFlow
}

Some files were not shown because too many files have changed in this diff Show More