Compare commits

...

1075 Commits

Author SHA1 Message Date
Ian Lynagh
79dbd1a160 C++: Update stats 2025-11-24 18:15:11 +00:00
Geoffrey White
daead038ab Merge pull request #20829 from geoffw0/cert-checks
Rust: New Query rust/disabled-certificate-check
2025-11-24 15:21:58 +00:00
Ian Lynagh
555301cec7 Merge pull request #20874 from igfoo/igfoo/overlay
C++: Add the beginnings of overlay support
2025-11-24 14:11:09 +00:00
Tom Hvitved
43111b8eaa Merge pull request #20716 from hvitved/rust/path-resolution-variable-impl
Rust: Path resolution before variable resolution
2025-11-24 13:08:53 +01:00
Tom Hvitved
ac644b257a Merge pull request #20848 from hvitved/rust/ranked-forex-rename
Rust: Use `ToIndex` instead of `FromIndex` in ranked `forex` predicates
2025-11-24 13:05:58 +01:00
Tom Hvitved
c7a0411c55 Merge pull request #20892 from hvitved/rust/builtin-mut-placeholders
Rust: Add placeholder declarations for `&mut` and `*mut`
2025-11-24 13:05:15 +01:00
Tom Hvitved
17e1e1713e Rust: Add placeholder declarations for &mut and *mut 2025-11-23 20:56:07 +01:00
Tom Hvitved
b16f8c20a9 Update rust/ql/lib/codeql/rust/internal/PathResolution.qll
Co-authored-by: Simon Friis Vindum <paldepind@github.com>
2025-11-23 19:05:24 +01:00
Geoffrey White
b62968fa0f Rust: Spelling. 2025-11-22 09:22:33 +00:00
Geoffrey White
993154ed57 Rust: Avoid duplicating sinks. 2025-11-21 19:34:16 +00:00
Geoffrey White
0ea28b4026 Rust: Test .expected changes. 2025-11-21 18:57:06 +00:00
Geoffrey White
ff8032a4ec Rust: Fix after merge. 2025-11-21 18:53:57 +00:00
Geoffrey White
eb674d08d6 Rust: Reinstate the original function names model but call it a heuristic now. 2025-11-21 18:46:12 +00:00
Geoffrey White
2ce4c47646 Rust: More sinks from the MRVA-1000. 2025-11-21 18:43:35 +00:00
Geoffrey White
80615056c0 Merge remote-tracking branch 'upstream/main' into cert-checks 2025-11-21 18:40:40 +00:00
Geoffrey White
e01c871b70 Rust: Accept changes to the dataflow/sources/file test. 2025-11-21 17:12:23 +00:00
Geoffrey White
3ad014b2f9 Rust: Additional sinks found in MRVA-1000. 2025-11-21 16:33:59 +00:00
Geoffrey White
ace7a77fd6 Rust: Switch to MaD models. 2025-11-21 16:27:52 +00:00
Geoffrey White
785754ec65 Rust: Switch the query to taint flow, since some taint summaries are relevant now. 2025-11-21 15:02:29 +00:00
Geoffrey White
89a9c46547 Rust: Second change note. 2025-11-21 15:02:27 +00:00
Geoffrey White
aca7877be2 Rust: Add some missing path / file metadata models. 2025-11-21 15:02:25 +00:00
Geoffrey White
8145264b77 Rust: Add threat model sources as additional sources for the query. 2025-11-21 14:40:11 +00:00
Geoffrey White
2da0814f65 Rust: Add test case involving taint. 2025-11-21 14:39:15 +00:00
Anders Schack-Mulligen
b1ed72d760 Merge pull request #20886 from aschackmull/java/rangeanalysis-longliterals
Java: Recognize int-sized long literals.
2025-11-21 13:35:14 +01:00
Anders Schack-Mulligen
298e4cfcc5 Java: Recognize int-sized long literals. 2025-11-21 12:53:39 +01:00
Michael Nebel
60826bd18a Merge pull request #20837 from michaelnebel/csharp/dotnet10
C#: Improve the logic for downloading .NET and setting environment variables.
2025-11-21 12:41:08 +01:00
Michael Nebel
638c98bba3 Merge pull request #20832 from michaelnebel/csharp/dependencycaching
C#:  Add extractor option for the dependency directory in BMN.
2025-11-21 12:38:28 +01:00
Ian Lynagh
6c7370ea95 C++: Add up/downgrade scripts 2025-11-21 11:30:58 +00:00
Ian Lynagh
c2f96b94e3 C++: Update stats 2025-11-21 11:30:40 +00:00
Ian Lynagh
d5399300e9 C++: Add databaseMetadata and overlayChangedFiles tables to dbscheme 2025-11-21 11:30:40 +00:00
Anders Schack-Mulligen
8d72040e8f Merge pull request #20772 from aschackmull/java/ssa-deprecate
Java: Add deprecation annotations in SSA
2025-11-21 12:30:31 +01:00
Michael Nebel
5c454d23e8 C#: Fix typo. 2025-11-21 10:39:59 +01:00
Michael Nebel
138441b662 C#: Address review comments. 2025-11-21 10:39:57 +01:00
Michael Nebel
90dbb7a8eb C#: Add change note. 2025-11-21 10:39:56 +01:00
Michael Nebel
2700843a9c C#: Add an integration test for setting the dependency directory in BMN. 2025-11-21 10:39:54 +01:00
Michael Nebel
1256ccf2eb C#: Add extractor option for buildless dependency directory. 2025-11-21 10:39:52 +01:00
Michael Nebel
e76e7ab26a C#: Read from dependency directory from extractor option. 2025-11-21 10:39:51 +01:00
Anders Schack-Mulligen
30d68d8906 Java: Add missing deprecated annotations. 2025-11-21 10:14:13 +01:00
Tom Hvitved
132f02c51b Update rust/ql/lib/codeql/rust/internal/PathResolution.qll
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-20 14:34:02 +01:00
Mathias Vorreiter Pedersen
14f9997eb3 Merge pull request #20862 from MathiasVP/union-content-field-content-common-base-class
C++: Create a common base class for 'FieldContent' and 'UnionContent'
2025-11-20 13:14:29 +00:00
Paolo Tranquilli
240c637e7a Merge pull request #20868 from github/redsun82/java-doc
Java: add missing QLDoc
2025-11-20 12:08:16 +01:00
Owen Mansel-Chan
05085a8e82 Merge pull request #20666 from owen-mc/go/promote-weak-crypto-algorithm
Go: promote `go/weak-crypto-algorithm`
2025-11-20 11:03:05 +00:00
Tom Hvitved
0f40b3ccb8 Merge pull request #20842 from hvitved/rust/path-resolution-extern-crate-visibility
Rust: Handle `pub extern crate` in path resolution
2025-11-20 11:59:05 +01:00
Tom Hvitved
4d4a677da0 Merge pull request #20869 from hvitved/rust/dataflow-ast
Rust: Base `DataFlow::Node` on AST instead of CFG
2025-11-20 11:34:40 +01:00
Asger F
613895e0c0 Merge pull request #20424 from asgerf/js/overlay-manual-v4
JS: Add overlay annotations
2025-11-20 11:10:46 +01:00
Tom Hvitved
d4fdf956a0 Address review comments 2025-11-20 11:03:53 +01:00
Tom Hvitved
e4853ab060 Add change note 2025-11-19 19:37:41 +01:00
Tom Hvitved
d2bb53a81e Rust: Run codegen 2025-11-19 19:37:40 +01:00
Tom Hvitved
489fff9572 Rust: Base DataFlow::Node on AST instead of CFG 2025-11-19 19:37:39 +01:00
Ian Lynagh
42f0ce74ca C++: Enable overlay compilation 2025-11-19 17:34:06 +00:00
Mathias Vorreiter Pedersen
6c4def13b4 C++: Add change note. 2025-11-19 17:24:30 +00:00
Mathias Vorreiter Pedersen
4c09e554fc Merge branch 'main' into union-content-field-content-common-base-class 2025-11-19 17:17:45 +00:00
Jeroen Ketema
0c43f2c4f0 Merge pull request #20870 from jketema/exp-arg-fix
C++: `getExpandedArgument` fixes
2025-11-19 17:10:56 +01:00
Owen Mansel-Chan
a70d74220f Add test for good password hashing 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
f562b3d26e Make line differences in test comments relative 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
349e8ca589 Remove unnecessary import 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
adbc1efe59 Fix diff-informed predicates 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
7d7af193dc Fix small mistake in Ruby query help 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
8d7b2757bf Add query help examples 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
69ecdcb4cd Fix capitalization of class names 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
970b5d7496 Fix query suite integration tests 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
2cfafe53ca Fix failing ruby crypto test that lists all algorithms 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
d2033ca1d5 Add change note 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
52d7e2dd18 Add query for hashing sensitive data with weak hashing algorithm 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
713e19f6f1 Make non-path query for encryption only 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
f34a625ac2 Model cryptographic operations 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
fac5296efc Avoid duplicate results using in-barriers 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
34b2e3e2bf Copy the structure of the Javascript query 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
5c403d374e Move crypto qll files from query pack to library pack 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
92a3bccfd6 Align metadata with related queries 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
188b25f11f Remove experimental tag from query metadata 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
a71bb4ba9a Convert test to inline expectations 2025-11-19 14:36:26 +00:00
Owen Mansel-Chan
2c20d3ffeb Move weak crypto algorithm query out of experimental 2025-11-19 14:36:26 +00:00
Simon Friis Vindum
4d9ab7b573 Merge pull request #20871 from paldepind/rust/string-literal
Rust: Handle string literals with line breaks
2025-11-19 14:05:43 +01:00
Asger F
efa438a352 JS: Move identityFunctionStep back into CachedSteps module 2025-11-19 13:47:30 +01:00
Asger F
8fef60464e JS: Remove out-commented code 2025-11-19 13:46:10 +01:00
Simon Friis Vindum
0e539dbca5 Rust: Handle string literals with line breaks 2025-11-19 13:39:48 +01:00
Simon Friis Vindum
481f627ae0 Rust: Add string literal test 2025-11-19 13:37:23 +01:00
Michael Nebel
5cdfb3c0a9 C#: Address review comments. 2025-11-19 12:58:59 +01:00
Jeroen Ketema
fe3f90e041 C++: Make getExpandedArgument more robust
This make the predicate give back sensible results on (upgraded) databases
where we do not have expanded arguments, and avoid having to write case
distinctions in places where we would want to use `getExpandedArgument`.
2025-11-19 12:49:54 +01:00
Jeroen Ketema
e235e0473a C++: Fix getAnExpandedArgument
The fix was accidentially lost when rebasing the branch that introduced this
predicate.
2025-11-19 12:49:02 +01:00
Paolo Tranquilli
b3c09389c8 Java: add missing QLDoc
The check for QLDoc comments was unfortunately broken for some time, so
we missed this.
2025-11-19 11:59:25 +01:00
Michael Nebel
edabbfc12f C#: Add change note. 2025-11-19 11:29:25 +01:00
Michael Nebel
34de2f5318 C#: Update linux integration tests (as we have added CLI preferred language as english). 2025-11-19 11:17:56 +01:00
Michael Nebel
fba496f911 C#: Add proper .NET environment for dotnet info and list-sdks and streamline the minimal dotnet environment. 2025-11-19 11:17:54 +01:00
Michael Nebel
0daee6fbf2 C#: Specifically download .NET for Arm architecture. 2025-11-19 11:17:52 +01:00
Michael Nebel
8df57d81a0 C#: Add basic buildless test for .NET 10. 2025-11-19 11:17:51 +01:00
Michael Nebel
ed92352faf C#: Remove the linux specific .NET 10 RC 2 test. 2025-11-19 11:17:49 +01:00
Michael Nebel
d7545f21cb C#: Enable tests for all platforms and use .NET 10 instead of .NET 10 RC 2. 2025-11-19 11:17:48 +01:00
Michael Nebel
7d746d4e3f C#: Move .NET 10 RC2 basic integration test all platforms folder. 2025-11-19 11:17:46 +01:00
Mathias Vorreiter Pedersen
9bfe847fda C++: Fix awful joins on bochs:
```
Evaluated relational algebra for predicate DataFlowPrivate::storeStepImpl/4#b2c79f9a@13be12rc with tuple counts:
           9   ~0%    {3} r1 = JOIN `FlowSummaryImpl::Private::Steps::summaryStoreStep/3#5c2d4899` WITH DataFlowUtil::TFlowSummaryNode#40da8361 ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Rhs.1
           9   ~0%    {4}    | JOIN WITH DataFlowUtil::TFlowSummaryNode#40da8361 ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Rhs.1, _
           9  ~12%    {4}    | REWRITE WITH Out.3 := true

     1853420   ~0%    {3} r2 = SCAN `DataFlowPrivate::nodeHasInstruction/3#f469bb06` OUTPUT In.1, In.0, In.2
      100282   ~0%    {3}    | JOIN WITH `Instruction::StoreInstruction.getDestinationAddressOperand/0#dispred#596a4aba` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
      127910   ~0%    {6}    | JOIN WITH `DataFlowPrivate::numberOfLoadsFromOperand/4#7e555666_1023#join_rhs` ON FIRST 1 OUTPUT _, Lhs.1, Rhs.1, Rhs.3, Lhs.2, Rhs.2
      127910   ~0%    {4}    | REWRITE WITH Tmp.0 := 1, Out.0 := (Tmp.0 + In.4 + In.5) KEEPING 4
  4178182721   ~1%    {4}    | JOIN WITH `DataFlowUtil::FieldContent.getIndirectionIndex/0#dispred#cc69866f_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3
  4290552803   ~0%    {5}    | JOIN WITH `DataFlowUtil::FieldContent.getAField/0#dispred#ba1c91e5` ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.3, Lhs.0, Rhs.1
  3033745816   ~5%    {7}    | JOIN WITH DataFlowUtil::PostFieldUpdateNode#b86f3a84_1023#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.2, Rhs.3
  3033745816   ~3%    {9}    | JOIN WITH DataFlowUtil::TPostUpdateNodeImpl#f5e76b7a_21#join_rhs ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.0, Lhs.5, Lhs.6, Rhs.1, _
                      {8}    | REWRITE WITH Tmp.8 := 1, TEST InOut.7 = Tmp.8 KEEPING 8
  1516872908   ~0%    {7}    | SCAN OUTPUT In.4, In.5, In.6, In.0, In.1, In.2, In.3
  2409090286   ~1%    {6}    | JOIN WITH DataFlowUtil::PostFieldUpdateNode#b86f3a84_0231#join_rhs ON FIRST 3 OUTPUT Rhs.3, Lhs.6, Lhs.3, Lhs.4, Lhs.5, Lhs.0
       66016  ~45%    {4}    | JOIN WITH `DataFlowUtil::FieldAddress.getField/0#dispred#bdd01c1a` ON FIRST 2 OUTPUT Lhs.2, Lhs.4, Lhs.5, Lhs.3

       66025  ~45%    {4} r3 = r1 UNION r2
                      return r3
```
2025-11-19 10:08:09 +00:00
Paolo Tranquilli
e850a8a46c Merge pull request #20861 from github/redsun82/ripunzip
Ripunzip: use releases from github
2025-11-19 11:03:35 +01:00
Paolo Tranquilli
87b9afce97 Merge branch 'main' into redsun82/ripunzip 2025-11-19 10:33:39 +01:00
Tom Hvitved
3d49eff4a5 Rust: Add integration test for pub extern crate resolution 2025-11-19 09:38:49 +01:00
Tom Hvitved
8acfc7f752 Rust: Handle pub extern crate in path resolution 2025-11-19 09:38:48 +01:00
Tom Hvitved
ec3b2c6a8d Rust: Path resolution before variable resolution 2025-11-19 09:06:41 +01:00
Paolo Tranquilli
3be8591370 Ripunzip: fix windows os check, add comments 2025-11-19 08:56:06 +01:00
Tom Hvitved
880f7b0f18 Rust: More path resolution and variable tests 2025-11-19 08:55:43 +01:00
Paolo Tranquilli
69ee9cdb9f Ripunzip: fix mac os and windows URLs 2025-11-19 08:12:07 +01:00
Paolo Tranquilli
f1afe5cd9d Bazel: format 2025-11-19 08:06:28 +01:00
Paolo Tranquilli
702d1bbbea Ripunzip: fix mac os string 2025-11-19 08:05:17 +01:00
Mathias Vorreiter Pedersen
73e72f5273 Merge pull request #20864 from MathiasVP/better-sizeof-api
C++: Lift `getTypeOperand` to a superclass
2025-11-18 23:53:26 +00:00
Mathias Vorreiter Pedersen
4279a970fa C++: Remove unnecessary cast. 2025-11-18 20:03:24 +00:00
Mathias Vorreiter Pedersen
a27ac9d59d C++: Updated expected after Copilot change. 2025-11-18 20:03:10 +00:00
Mathias Vorreiter Pedersen
6b136e3a53 Update cpp/ql/test/library-tests/types/sizeof/sizeof.ql
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-18 20:00:32 +00:00
Tom Hvitved
68552f9725 Merge pull request #20845 from hvitved/rust/cache-infer-certain-type
Rust: Cache `inferCertainType`
2025-11-18 20:59:38 +01:00
Mathias Vorreiter Pedersen
d4a8dbb5f3 C++: Slightly modify a test so that we can see the effect of this change. 2025-11-18 19:52:30 +00:00
Mathias Vorreiter Pedersen
a5601ce734 C++: Lift 'getTypeOperand' to the superclass. 2025-11-18 19:52:05 +00:00
Mathias Vorreiter Pedersen
7f0fcb0c46 C++: Create a common base class for 'NonUnionContent' and 'UnionContent' called 'FieldContent'. 2025-11-18 18:53:37 +00:00
Mathias Vorreiter Pedersen
7527d88762 C++: Get rid of abstract'ness from these public predicates. We are not supposed to have abstract public stuff. Oops ... 2025-11-18 18:52:20 +00:00
Mathias Vorreiter Pedersen
2af6db6320 C++: Rename 'FieldContent' to 'NonUnionContent'. 2025-11-18 18:51:33 +00:00
Paolo Tranquilli
ddee385f37 Ripunzip: use releases from github
This uses the ripunzip releases from github instead of building them
ourselves.
2025-11-18 17:23:59 +01:00
Paolo Tranquilli
f4a6ba9e50 Merge pull request #20857 from github/post-release-prep/codeql-cli-2.23.6
Post-release preparation for codeql-cli-2.23.6
2025-11-18 15:14:39 +01:00
Tom Hvitved
71e84439d7 Merge pull request #20830 from hvitved/rust/path-resolution-slice-array-builtin
Rust: Model builtin types in path resolution
2025-11-18 14:42:59 +01:00
Tom Hvitved
ec15085c34 Address review comments 2025-11-18 13:44:25 +01:00
Paolo Tranquilli
773b6c04a1 Merge branch 'main' into post-release-prep/codeql-cli-2.23.6 2025-11-18 13:44:21 +01:00
Paolo Tranquilli
ebf04d308d Merge pull request #20859 from github/redsun82/ripunzip
Ripunzip: build on older ubuntu
2025-11-18 13:43:43 +01:00
Paolo Tranquilli
aaccca3e4e Merge pull request #20860 from github/update-ripunzip
Update ripunzip binaries
2025-11-18 13:37:30 +01:00
github-actions[bot]
f3742008de Update ripunzip binaries to version v2.0.3 2025-11-18 12:35:31 +00:00
Anders Schack-Mulligen
fe7be22478 Merge pull request #20761 from aschackmull/java/ssa-shared
Java: Replace SSA wrapper classes with shared implementation.
2025-11-18 13:31:50 +01:00
Asger F
a0965f33e3 JS: Also discard JSON, YAML, and XML 2025-11-18 13:29:00 +01:00
Paolo Tranquilli
cc9828c23e Ripunzip: build on older ubuntu 2025-11-18 13:20:07 +01:00
Paolo Tranquilli
48ee9dd149 Merge branch 'main' into post-release-prep/codeql-cli-2.23.6 2025-11-18 12:18:09 +01:00
Paolo Tranquilli
76dc4c4023 Merge branch 'codeql-cli-2.23.6' into post-release-prep/codeql-cli-2.23.6 2025-11-18 12:07:33 +01:00
Paolo Tranquilli
b31d649647 Merge pull request #20858 from github/redsun82/2.23.6
Changedocs 2.23.5
2025-11-18 12:00:16 +01:00
Jon Janego
1ebc16e2d3 Merge pull request #20855 from github/changedocs-2.23.5
Changedocs 2.23.5

(cherry picked from commit f27271d216)
2025-11-18 11:53:11 +01:00
Michael Nebel
958d209a81 Merge pull request #20849 from michaelnebel/csharp/addcompilationerrorstodebuglogbmn
C#: Add compilation errors to the debug log in BMN.
2025-11-18 11:20:27 +01:00
github-actions[bot]
5ee45af3aa Post-release preparation for codeql-cli-2.23.6 2025-11-18 09:53:12 +00:00
Geoffrey White
9ab7f87603 Merge pull request #20776 from geoffw0/rustexamples
Rust: Add example queries
2025-11-18 09:34:48 +00:00
Paolo Tranquilli
117168d25b Merge pull request #20852 from github/release-prep/2.23.6
Release preparation for version 2.23.6
2025-11-18 10:08:53 +01:00
Paolo Tranquilli
4c1f2b840e C#: change capitalization 2025-11-18 10:06:19 +01:00
Paolo Tranquilli
1c81c4d4c9 C#: make some tweaks to change logs 2025-11-18 10:01:36 +01:00
Mathias Vorreiter Pedersen
b90d0fd44c Merge pull request #20854 from MathiasVP/no-magic-get-param
C++: Add `nomagic` to `Function::getParameter`
2025-11-18 00:13:05 +00:00
Jon Janego
f27271d216 Merge pull request #20855 from github/changedocs-2.23.5
Changedocs 2.23.5
2025-11-17 14:39:35 -06:00
Jon Janego
d685e666b4 missing space 2025-11-17 14:32:04 -06:00
Jon Janego
3431c121d7 adding in 2.23.1 changes so they stay the same 2025-11-17 14:30:45 -06:00
Jon Janego
63390be185 Changedocs for 2.23.5 2025-11-17 14:24:35 -06:00
Mathias Vorreiter Pedersen
47ac4dd1dc C++: Add 'nomagic' to 'getParameter'. 2025-11-17 19:21:37 +00:00
github-actions[bot]
18fa6799ce Release preparation for version 2.23.6 2025-11-17 16:38:07 +00:00
Paolo Tranquilli
07c80b4685 Merge pull request #20850 from github/redsun82/fix-change-notes
C#: add missing `*` to change note
2025-11-17 15:06:42 +01:00
Paolo Tranquilli
12f1bd8ffd C#: add missing * to change note 2025-11-17 15:00:30 +01:00
Michael Nebel
9f69ff22d3 C#: Add change-note. 2025-11-17 14:57:16 +01:00
Michael Nebel
f1b12203f6 C#: Add compilation errors to the debug log in BMN. 2025-11-17 14:57:14 +01:00
Jeroen Ketema
1671805598 Merge pull request #20831 from jketema/expanded
C++: Extract the expanded compiler arguments
2025-11-17 13:58:24 +01:00
Tom Hvitved
bf0dc3c4d1 Rust: Use useUniversalConditions() { none() } 2025-11-17 13:57:00 +01:00
Tom Hvitved
46f5d89674 Rust: Handle builtin types in path resolution 2025-11-17 13:56:56 +01:00
Tom Hvitved
39720a17ef Rust: More type inference tests 2025-11-17 13:54:39 +01:00
Tom Hvitved
b0dc48e393 Merge pull request #20723 from paldepind/rust/ti-inheritance
Rust: Make impl blocks only give rise to direct trait implementation
2025-11-17 13:36:05 +01:00
Simon Friis Vindum
4eb22a7e55 Rust: Fix grammar 2025-11-17 12:39:38 +01:00
Simon Friis Vindum
9971936036 Rust: Improvements to docs from review comments 2025-11-17 12:39:37 +01:00
Simon Friis Vindum
a07f015d01 Rust: Accept changes to expected files 2025-11-17 12:39:36 +01:00
Tom Hvitved
3419c00bc0 Rust: Use ToIndex instead of FromIndex in ranked forex predicates
`ToIndex` makes more sense, since we start the recursion from `0`.
2025-11-17 12:28:35 +01:00
Jeroen Ketema
1df47cc747 C++: Fix QL-for-QL warning 2025-11-17 11:17:57 +01:00
Jeroen Ketema
15393ae621 C++: Add change note 2025-11-17 11:17:56 +01:00
Jeroen Ketema
61b7eb3d5c C++: Update dbscheme stats file 2025-11-17 11:17:55 +01:00
Jeroen Ketema
a8d488fa29 C++: Add upgrade and downgrade scripts 2025-11-17 11:17:54 +01:00
Jeroen Ketema
ee97d6f461 C++: Expose the expanded compilation arguments 2025-11-17 11:17:53 +01:00
Jeroen Ketema
861c236dae C++: Add table for expanded compilation arguments 2025-11-17 11:17:51 +01:00
Asger F
4b57b4418f JS: Factor out some code 2025-11-17 10:48:15 +01:00
Asger F
a405b7b3e0 JS: Add discard predicates for locations 2025-11-17 10:47:37 +01:00
Simon Friis Vindum
089bffff94 Rust: Make impl blocks only give rise to direct trait implementation 2025-11-17 10:22:18 +01:00
Michael Nebel
c0ebc17bdc Merge pull request #20768 from michaelnebel/csharp/extractionlogging
C#: Report more timing metrics to the console logger.
2025-11-17 10:06:05 +01:00
Tom Hvitved
19ff5c09d2 Rust: Cache inferCertainType
Ideally, this shouldn't be needed, as we already cache `inferType`. However, since we
have consistency checks that directly call `inferCertainType`, we need to cache it
as well to avoid recomputation.
2025-11-17 09:30:20 +01:00
Tom Hvitved
e986cca5c1 Merge pull request #20843 from hvitved/rust/access-after-lifetime-speedup
Rust: Speedup `AccessAfterLifetime.ql`
2025-11-17 08:40:27 +01:00
Tom Hvitved
8455663255 Rust: Speedup AccessAfterLifetime.ql 2025-11-15 15:21:03 +01:00
Owen Mansel-Chan
fabcd044d6 Merge pull request #20838 from owen-mc/go/fix/dataset-check-errors-sourcefile
Go: fix dataset check errors
2025-11-14 21:04:24 +00:00
Paolo Tranquilli
68a03585da Merge pull request #20811 from github/redsun82/update-rules_java
Javascript: fix errors from upcoming `rules_java` update
2025-11-14 16:44:47 +01:00
Jeroen Ketema
0f2e29c90e Merge pull request #20816 from paldepind/cpp/range-analysis-perf-fix
C++: Range analysis performance fix
2025-11-14 16:15:04 +01:00
Anders Schack-Mulligen
1c93710ed3 Merge pull request #20826 from aschackmull/guards/disjunctive-implication
Guards: Support disjunctive implications.
2025-11-14 15:44:45 +01:00
Simon Friis Vindum
792ac7a772 C++: Fix typo
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-14 12:59:41 +01:00
Paolo Tranquilli
da12d73f25 Merge branch 'main' into redsun82/update-rules_java 2025-11-14 12:35:09 +01:00
Simon Friis Vindum
1dd78e2f4b C++: Add change note 2025-11-14 12:26:24 +01:00
Simon Friis Vindum
5da73f3232 C++: Make sure that nrOfBoundsNEPhi is functional 2025-11-14 12:26:23 +01:00
Simon Friis Vindum
74b433ef59 C++: Add range analysis tests 2025-11-14 12:26:22 +01:00
Simon Friis Vindum
69e70d7cbc Reapply "Merge pull request #20645 from paldepind/cpp/range-analysis-measure"
This reverts commit e7c029ae7d.
2025-11-14 12:26:21 +01:00
Idriss Riouak
96f57b207d Merge pull request #20615 from github/idrissrio/java-jdk
Java: Add test for multi-module projects with different Java versions
2025-11-14 12:18:19 +01:00
Anders Schack-Mulligen
4867306b5e C#: Add change note. 2025-11-14 11:44:27 +01:00
Anders Schack-Mulligen
dc029e8da9 C#: Accept qltest weirdness. 2025-11-14 11:38:13 +01:00
Owen Mansel-Chan
59ac2d3d3e Move TransformPath into FileLabelFor
This way we don't have to remember to transform it at all call sites.
2025-11-14 10:25:40 +00:00
Tom Hvitved
8668473916 Merge pull request #20683 from hvitved/rust/type-inference-arg-target-typed
Rust: Restrict type propagation into arguments
2025-11-14 10:46:04 +01:00
Tom Hvitved
4c7f9c0144 Rust: Rename ContextType -> UnknownType 2025-11-14 10:16:21 +01:00
Owen Mansel-Chan
4005a6e2de Merge pull request #20835 from github/dependabot/go_modules/go/extractor/extractor-dependencies-d13c81f2db
Bump golang.org/x/tools from 0.38.0 to 0.39.0 in /go/extractor in the extractor-dependencies group
2025-11-14 09:09:18 +00:00
Tom Hvitved
337e161aa3 Merge pull request #20834 from hvitved/rust/fix-bad-join
Rust: Fix bad join
2025-11-14 09:57:56 +01:00
Idriss Riouak
d916ebdc24 Java: Address review comments. Improve Change note
Co-authored-by: Chris Smowton <smowton@github.com>
2025-11-14 09:53:09 +01:00
Tom Hvitved
79bdf897d7 Rust: Context typing for constructors 2025-11-14 09:45:03 +01:00
Tom Hvitved
c16b42119d Rust: More type inference tests 2025-11-14 09:45:02 +01:00
Tom Hvitved
e69ff0d5e8 Rust: Restrict type propagation into arguments 2025-11-14 09:44:58 +01:00
Tom Hvitved
72b7dd8955 Rust: Add more type inference tests 2025-11-14 09:41:30 +01:00
dependabot[bot]
acfca601bc 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.38.0 to 0.39.0
- [Release notes](https://github.com/golang/tools/releases)
- [Commits](https://github.com/golang/tools/compare/v0.38.0...v0.39.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-14 03:08:48 +00:00
Tom Hvitved
f926a076b8 Rust: Fix bad join
Before
```
Evaluated relational algebra for predicate TypeMention::NonAliasPathTypeMention.getTypeMentionForTypeParameter/1#f0c507c8@d7d71dnu with tuple counts:
            12496   ~2%    {3} r1 = SCAN `TypeMention::NonAliasPathTypeMention.getAnAssocTypeArgument/1#c61d1deb` OUTPUT In.2, In.0, In.1
            12421   ~0%    {3}    | JOIN WITH TypeMention::TypeMention#3ab935d1 ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.0
            12421   ~0%    {3}    | JOIN WITH TypeMention::NonAliasPathTypeMention#9123dc7e ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2
            12421   ~0%    {3}    | JOIN WITH cached_Type::TAssociatedTypeTypeParameter#14a276f6 ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
            12421   ~0%    {3}    | JOIN WITH Type::TypeParameter#f85657da ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2

                1   ~0%    {2} r2 = SCAN `Stdlib::FnOnceTrait.getTypeParam/0#dispred#93f20bbc` OUTPUT In.1, In.0
                1   ~0%    {2}    | JOIN WITH cached_Type::TTypeParamTypeParameter#868c69a5 ON FIRST 1 OUTPUT Rhs.1, Lhs.1
                1   ~0%    {2}    | JOIN WITH Type::TypeParameter#f85657da ON FIRST 1 OUTPUT Lhs.1, Lhs.0
             3216   ~0%    {2}    | JOIN WITH TypeMention::NonAliasPathTypeMention#9123dc7e_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
             3216   ~0%    {3}    | JOIN WITH `Path::Generated::Path.getSegment/0#dispred#1c7ef50f` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0
             3201   ~0%    {3}    | JOIN WITH `PathSegment::Generated::PathSegment.getParenthesizedArgList/0#dispred#cd573956` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
             3201   ~0%    {3}    | JOIN WITH TypeMention::TypeMention#3ab935d1 ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.0

                1   ~0%    {2} r3 = SCAN `Stdlib::FnOnceTrait.getOutputType/0#0d2e9ef1` OUTPUT In.1, In.0
                1   ~0%    {2}    | JOIN WITH cached_Type::TAssociatedTypeTypeParameter#14a276f6 ON FIRST 1 OUTPUT Rhs.1, Lhs.1
                1   ~0%    {2}    | JOIN WITH Type::TypeParameter#f85657da ON FIRST 1 OUTPUT Lhs.1, Lhs.0
             3216   ~3%    {2}    | JOIN WITH TypeMention::NonAliasPathTypeMention#9123dc7e_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
             3216   ~0%    {3}    | JOIN WITH `Path::Generated::Path.getSegment/0#dispred#1c7ef50f` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0
             2958   ~0%    {3}    | JOIN WITH `PathSegment::Generated::PathSegment.getRetType/0#dispred#9d400241` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
             2958   ~0%    {3}    | JOIN WITH `RetTypeRepr::Generated::RetTypeRepr.getTypeRepr/0#dispred#fd85a980` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
             2944   ~0%    {3}    | JOIN WITH TypeMention::TypeMention#3ab935d1 ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.0

            54186   ~3%    {2} r4 = JOIN `TypeAlias::Generated::TypeAlias.getTypeRepr/0#dispred#5fd7e521_10#join_rhs` WITH TypeMention::TypeMention#3ab935d1 ON FIRST 1 OUTPUT Lhs.1, Lhs.0
          1446369  ~12%    {3}    | JOIN WITH `PathResolution::ItemNode.getASuccessor/1#8f430f71_201#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Rhs.2
            36945   ~0%    {3}    | JOIN WITH `PathResolution::ImplItemNode.getTraitPath/0#dispred#3b7d1cb6` ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Rhs.1
        377232832   ~1%    {4}    | JOIN WITH `Name::Generated::Name.getText/0#dispred#107a5a39_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.0
        370815806   ~5%    {4}    | JOIN WITH `TypeAlias::Generated::TypeAlias.getName/0#dispred#bf886045_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3
          1490317   ~0%    {4}    | JOIN WITH cached_Type::TAssociatedTypeTypeParameter#14a276f6 ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3
          1490317   ~0%    {4}    | JOIN WITH `Type::AssociatedTypeTypeParameter.getTrait/0#dispred#41eb3020` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.1, Lhs.3
            36413   ~1%    {4}    | JOIN WITH TypeMention::NonAliasPathTypeMention#9123dc7e ON FIRST 2 OUTPUT Lhs.1, Lhs.3, Lhs.2, Lhs.0
            36413   ~1%    {3}    | JOIN WITH `PathResolution::ImplOrTraitItemNode.getAssocItem/1#f77bb9ed` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.3
            36413   ~0%    {3}    | JOIN WITH cached_Type::TAssociatedTypeTypeParameter#14a276f6 ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
            36413   ~0%    {3}    | JOIN WITH Type::TypeParameter#f85657da ON FIRST 1 OUTPUT Lhs.2, Lhs.0, Lhs.1

            54979   ~3%    {3} r5 = r1 UNION r2 UNION r3 UNION r4
                           return r5
```

After
```
Evaluated relational algebra for predicate TypeMention::NonAliasPathTypeMention.getTypeMentionForTypeParameter/1#f0c507c8@a37ac19m with tuple counts:
          12496   ~2%    {3} r1 = SCAN `TypeMention::NonAliasPathTypeMention.getAnAssocTypeArgument/1#c61d1deb` OUTPUT In.2, In.0, In.1
          12421   ~0%    {3}    | JOIN WITH TypeMention::TypeMention#3ab935d1 ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.0
          12421   ~0%    {3}    | JOIN WITH TypeMention::NonAliasPathTypeMention#9123dc7e ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2
          12421   ~0%    {3}    | JOIN WITH Type::TAssociatedTypeTypeParameter#14a276f6 ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
          12421   ~0%    {3}    | JOIN WITH Type::TypeParameter#f85657da ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2

              1   ~0%    {2} r2 = SCAN `Stdlib::FnOnceTrait.getTypeParam/0#dispred#93f20bbc` OUTPUT In.1, In.0
              1   ~0%    {2}    | JOIN WITH Type::TTypeParamTypeParameter#868c69a5 ON FIRST 1 OUTPUT Rhs.1, Lhs.1
              1   ~0%    {2}    | JOIN WITH Type::TypeParameter#f85657da ON FIRST 1 OUTPUT Lhs.1, Lhs.0
           3216   ~0%    {2}    | JOIN WITH TypeMention::NonAliasPathTypeMention#9123dc7e_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
           3216   ~0%    {3}    | JOIN WITH `Path::Generated::Path.getSegment/0#dispred#1c7ef50f` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0
           3201   ~0%    {3}    | JOIN WITH `PathSegment::Generated::PathSegment.getParenthesizedArgList/0#dispred#cd573956` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
           3201   ~0%    {3}    | JOIN WITH TypeMention::TypeMention#3ab935d1 ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.0

              1   ~0%    {2} r3 = SCAN `Stdlib::FnOnceTrait.getOutputType/0#0d2e9ef1` OUTPUT In.1, In.0
              1   ~0%    {2}    | JOIN WITH Type::TAssociatedTypeTypeParameter#14a276f6 ON FIRST 1 OUTPUT Rhs.1, Lhs.1
              1   ~0%    {2}    | JOIN WITH Type::TypeParameter#f85657da ON FIRST 1 OUTPUT Lhs.1, Lhs.0
           3216   ~3%    {2}    | JOIN WITH TypeMention::NonAliasPathTypeMention#9123dc7e_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
           3216   ~0%    {3}    | JOIN WITH `Path::Generated::Path.getSegment/0#dispred#1c7ef50f` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0
           2958   ~0%    {3}    | JOIN WITH `PathSegment::Generated::PathSegment.getRetType/0#dispred#9d400241` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
           2958   ~0%    {3}    | JOIN WITH `RetTypeRepr::Generated::RetTypeRepr.getTypeRepr/0#dispred#fd85a980` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
           2944   ~0%    {3}    | JOIN WITH TypeMention::TypeMention#3ab935d1 ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.0

          54186   ~3%    {2} r4 = JOIN `TypeAlias::Generated::TypeAlias.getTypeRepr/0#dispred#5fd7e521_10#join_rhs` WITH TypeMention::TypeMention#3ab935d1 ON FIRST 1 OUTPUT Lhs.1, Lhs.0
        1446369  ~12%    {3}    | JOIN WITH `PathResolution::ItemNode.getASuccessor/1#8f430f71_201#join_rhs` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Rhs.2
          36945   ~2%    {3}    | JOIN WITH `PathResolution::ImplItemNode.getTraitPath/0#dispred#3b7d1cb6` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
          36398   ~3%    {3}    | JOIN WITH TypeMention::NonAliasPathTypeMention#9123dc7e ON FIRST 1 OUTPUT Lhs.0, Lhs.2, Lhs.1
          36413   ~1%    {3}    | JOIN WITH `TypeMention::NonAliasPathTypeMention.getResolvedAlias/1#c48b878e` ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.0
          36413   ~0%    {3}    | JOIN WITH Type::TAssociatedTypeTypeParameter#14a276f6 ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
          36413   ~0%    {3}    | JOIN WITH Type::TypeParameter#f85657da ON FIRST 1 OUTPUT Lhs.2, Lhs.0, Lhs.1

          54979   ~3%    {3} r5 = r1 UNION r2 UNION r3 UNION r4
                         return r5
```
2025-11-13 21:31:32 +01:00
Tom Hvitved
caccee9990 Merge pull request #20833 from hvitved/rust/fix-bad-join
Rust: Fix bad join
2025-11-13 19:11:27 +01:00
Tom Hvitved
1b6b1e56ed Rust: Fix bad join
Before
```
Pipeline standard for ElementImpl::Impl::MacroExpansion::isFromMacroExpansion/1#69965d18@7580bdbj was evaluated in 205 iterations totaling 49106ms (delta sizes total: 1254645).
        8014745124  ~4%    {1} r1 = AstNodeImpl::Impl::AstNode#22e758cf AND NOT `ElementImpl::Impl::MacroExpansion::isFromMacroExpansion/1#69965d18#prev`(FIRST 1)
         822416474  ~0%    {2}    | JOIN WITH `ElementImpl::Impl::MacroExpansion::getImmediatelyEnclosingMacroInvocation/1#1eb32ecc` ON FIRST 1 OUTPUT Rhs.1, Lhs.0
           1254645  ~0%    {1}    | JOIN WITH `ElementImpl::Impl::MacroExpansion::isFromMacroExpansion/1#69965d18#prev_delta` ON FIRST 1 OUTPUT Lhs.1
                           return r1
```

After
```
Pipeline standard for ElementImpl::Impl::MacroExpansion::isFromMacroExpansion/1#69965d18@f39b84ka was evaluated in 205 iterations totaling 138ms (delta sizes total: 1254645).
        4675568  ~0%    {1} r1 = JOIN `ElementImpl::Impl::MacroExpansion::isFromMacroExpansion/1#69965d18#prev_delta` WITH `ElementImpl::Impl::MacroExpansion::getImmediatelyEnclosingMacroInvocation/1#1eb32ecc_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1
        4672186  ~0%    {1}    | JOIN WITH AstNodeImpl::Impl::AstNode#22e758cf ON FIRST 1 OUTPUT Lhs.0
        1254645  ~0%    {1}    | AND NOT `ElementImpl::Impl::MacroExpansion::isFromMacroExpansion/1#69965d18#prev`(FIRST 1)
                        return r1
```
2025-11-13 15:26:01 +01:00
Anders Schack-Mulligen
a28a718409 Merge pull request #20814 from aschackmull/guards/wrapper-perf
Guards: Improve join-order for wrapper guards
2025-11-13 13:16:13 +01:00
Anders Schack-Mulligen
b31dfdd5f4 Guards: Add elaborating comment. 2025-11-13 13:09:44 +01:00
Tom Hvitved
bfa35629ac Merge pull request #20744 from hvitved/rust/path-resolution-unqualified-use-tree
Rust: Handle unqualified `UseTree`s in path resolution
2025-11-13 11:18:41 +01:00
Tom Hvitved
c6164b33e5 Address review comment 2025-11-13 10:47:04 +01:00
Geoffrey White
e43000f7cf Rust: Correct ordering in query suite .expected lists. 2025-11-13 09:21:04 +00:00
Geoffrey White
12cbb64ef8 Rust: Add query to suite .expected lists. 2025-11-13 09:00:56 +00:00
Geoffrey White
15fa99a288 Rust: Clarify some confusing text in the .qhelp. 2025-11-13 09:00:46 +00:00
Geoffrey White
42aca4a171 Apply suggestions from code review
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
2025-11-13 08:51:41 +00:00
Asger F
c7341f295d JS: Fix bad join in BarrierGuards.qll 2025-11-13 09:46:27 +01:00
Asger F
578355ac27 JS: Fix bad join in CallGraphs.qll 2025-11-13 09:46:25 +01:00
Asger F
ecfa94600f Sync ApiGraphModels.qll 2025-11-13 09:46:23 +01:00
Asger F
16e7dc1b8a Sync ApiGraphModelsExtensions.qll 2025-11-13 09:46:21 +01:00
Asger F
46b1387846 JS: Make isAssignedInUniqueFile global, as it should be 2025-11-13 09:46:20 +01:00
Asger F
6498cd1b07 JS: Remove obsolete overlay[global] annotations 2025-11-13 09:46:18 +01:00
Asger F
0594f84dfc JS: Improve join orders related to getABooleanValue() 2025-11-13 09:46:16 +01:00
Asger F
4645f327a5 JS: Avoid more bad joins due to locality 2025-11-13 09:46:14 +01:00
Asger F
269489e817 JS: Avoid bad join in shared predicate induced by 'forex'.
Use manual recursion instead.
2025-11-13 09:46:12 +01:00
Asger F
5dd87e379b JS: Add overlay[local] to restore magic in unwrap() predicate
In this case we actually want magic to apply, but was prevented by locality.
2025-11-13 09:46:10 +01:00
Asger F
ac3913e7db JS: Fix bad join in DuplicateProperty.ql 2025-11-13 09:46:08 +01:00
Asger F
e72232fd1d JS: Add more overlay[caller?] annotations 2025-11-13 09:46:06 +01:00
Asger F
66febb263d JS: Add some overlay[caller] and a pragma[nomagic] annotations 2025-11-13 09:46:05 +01:00
Taus
889209719b JS: Overlay annotations for some failing tests
Locally these seem to get rid of the compilation warnings, but of course
CI is the true arbiter here.
2025-11-13 09:46:03 +01:00
Asger F
c09563f775 JS: Make more general-purpose data flow things local 2025-11-13 09:46:01 +01:00
Asger F
b1418e1d70 JS: Add overlay[local?] to new summaries after rebasing 2025-11-13 09:46:00 +01:00
Asger F
2b338fc1d9 JS: Fix getRawEnclosingStmt call 2025-11-13 09:45:58 +01:00
Asger F
23e42c89ee JS: Overlay annotations for AST layer 2025-11-13 09:45:56 +01:00
idrissrio
e6d4e515b0 Java: Add change note for Maven Java version auto-detection 2025-11-13 09:41:32 +01:00
Geoffrey White
0675a29ae6 Rust: Minor corrections. 2025-11-12 19:26:45 +00:00
Tom Hvitved
467bd541d2 Merge pull request #20770 from hvitved/rust/attribute-macro-expansion-filter
Rust: Remove elements superseded by attribute macro expansions
2025-11-12 19:52:09 +01:00
Geoffrey White
7a62642ed7 Rust: Change note. 2025-11-12 18:17:12 +00:00
Geoffrey White
49063ac8a9 Rust: Cut down the example for readability. 2025-11-12 18:13:02 +00:00
Geoffrey White
dcae0ef975 Rust: I prefer the original certificates reference from the Go .qhelp. 2025-11-12 18:10:44 +00:00
Geoffrey White
87d66c69a3 Rust: Clean up the .qhelp a little. 2025-11-12 18:10:02 +00:00
Geoffrey White
bb78fdf150 Rust: Add qhelp and examples (translated from Go, by Copilot). 2025-11-12 16:50:50 +00:00
Geoffrey White
c77eef39e2 Rust: Convert the query to a path-problem with global data flow. 2025-11-12 16:21:46 +00:00
Geoffrey White
209f394b5e Rust: Fix the alert message. 2025-11-12 15:51:03 +00:00
Geoffrey White
f8ef48b924 Rust: Add query test. 2025-11-12 15:44:15 +00:00
Nick Rolfe
86465b36e0 Merge pull request #20623 from github/nickrolfe/go-extractor-overlay
Go: basic overlay support
2025-11-12 14:56:25 +00:00
Geoffrey White
9598772477 Update rust/ql/examples/snippets/simple_constant_password.ql
Co-authored-by: Tom Hvitved <hvitved@github.com>
2025-11-12 14:37:45 +00:00
Michael Nebel
085d3c85cd Merge pull request #20425 from michaelnebel/csharp/basicextractoroverlay
C#: Overlay extraction support.
2025-11-12 15:25:57 +01:00
Anders Schack-Mulligen
d6800394fa Guards: Support disjunctive implications. 2025-11-12 14:14:32 +01:00
Anders Schack-Mulligen
2192d75286 Java: Add test for a known FP. 2025-11-12 14:08:18 +01:00
Owen Mansel-Chan
54ff206fde Merge pull request #20822 from github/dependabot/go_modules/go/extractor/extractor-dependencies-b217d21568
Bump golang.org/x/mod from 0.29.0 to 0.30.0 in /go/extractor in the extractor-dependencies group
2025-11-12 09:27:06 +00:00
Paolo Tranquilli
7c31cf17d8 Merge pull request #20815 from github/update-ripunzip
Update ripunzip binaries to version v2.0.3
2025-11-12 10:25:59 +01:00
Anders Schack-Mulligen
4a58a0158a Java: Reinstate useless null check results for fields that are no longer tracked as SSA variables. 2025-11-12 09:06:22 +01:00
Anders Schack-Mulligen
437ca58e3f Java: Add change note. 2025-11-12 09:06:22 +01:00
Anders Schack-Mulligen
109a5eb7e7 Java: Accept qltest changes due to dropped UntrackedDef. 2025-11-12 09:06:21 +01:00
Anders Schack-Mulligen
e059ded133 Java: Accept toString changes in qltest. 2025-11-12 09:06:21 +01:00
Anders Schack-Mulligen
95ac61df42 Java: Drop caching of deprecated predicates. 2025-11-12 09:06:20 +01:00
Anders Schack-Mulligen
5849d85f1f Java: Deprecate two more SSA classes. 2025-11-12 09:06:20 +01:00
Anders Schack-Mulligen
ee5d65eba1 Java: Update toString for implicit writes. 2025-11-12 09:06:19 +01:00
Anders Schack-Mulligen
f0bd0346f0 Java: Replace usages of SsaVariable. 2025-11-12 09:06:19 +01:00
Anders Schack-Mulligen
8594ae03df Java: Replace remaining SsaImplicitInit. 2025-11-12 09:06:19 +01:00
Anders Schack-Mulligen
f4b9efcdce Java: Replace getAUse with getARead. 2025-11-12 09:06:18 +01:00
Anders Schack-Mulligen
35caede859 Java: Replace SsaPhiNode with SsaPhiDefinition. 2025-11-12 09:06:18 +01:00
Anders Schack-Mulligen
3e43c53b9d Java: Update some qldoc deprecation notices. 2025-11-12 09:06:17 +01:00
Anders Schack-Mulligen
06df5c0bd1 Java: Introduce SsaCapturedDefinition and replace uses of getAnUltimateDefinition. 2025-11-12 09:06:17 +01:00
Anders Schack-Mulligen
483b2d89a7 Java: Replace uses of SsaExplicitUpdate. 2025-11-12 09:06:16 +01:00
Anders Schack-Mulligen
07e635636c Java: Replace getAFirstUse with top-level predicate. 2025-11-12 09:06:16 +01:00
Anders Schack-Mulligen
99aa0333cf Java: Replace usages of isParameterDefinition. 2025-11-12 09:06:15 +01:00
Anders Schack-Mulligen
154f0770de Java: Simplify instantiation of Guards and ControlFlowReachability. 2025-11-12 09:06:15 +01:00
Anders Schack-Mulligen
d5708fdd4e Java: Instantiate shared SSA wrappers for main SSA. 2025-11-12 09:06:14 +01:00
Anders Schack-Mulligen
942dc2b89e Java: Replace BaseSSA class wrappers with shared code. 2025-11-12 09:06:14 +01:00
Anders Schack-Mulligen
551944bacb Java: Add VariableWrite class. 2025-11-12 09:06:13 +01:00
Anders Schack-Mulligen
289d3374ef SSA: Improve toString. 2025-11-12 09:06:13 +01:00
Anders Schack-Mulligen
79b2f21b07 SSA: Fix phi defs. 2025-11-12 09:06:12 +01:00
Anders Schack-Mulligen
374c77213f Java: Remove getAFirstUse in BaseSSA. 2025-11-12 09:06:12 +01:00
Anders Schack-Mulligen
f2181ece4f Java: Get rid of untracked SSA definitions. 2025-11-12 09:06:11 +01:00
Anders Schack-Mulligen
c4f0868844 Java: Move SSA entry defs to index -1. 2025-11-12 09:06:11 +01:00
idrissrio
3b7f2f4eda Java: Add LGTM_INDEX_ MAVEN_TOLLCHAINS_FILE for new Maven integration tests 2025-11-12 08:39:40 +01:00
idrissrio
a82b5e7aa1 Java: Add test for selecting the highest compiler release in a pom 2025-11-12 08:39:39 +01:00
idrissrio
7dab2bef69 Java: Add test for Java 16 target when only Java 17+ is available 2025-11-12 08:39:37 +01:00
idrissrio
fcc54c1470 Java: Add test for detecting --add-exports in poms 2025-11-12 08:39:36 +01:00
idrissrio
5247c88da1 Java: Add test for pom targeting Java 8 but rquiring Java 11 2025-11-12 08:39:35 +01:00
idrissrio
6b890eaf94 Java: Add test for multi-module projects with different Java versions 2025-11-12 08:39:34 +01:00
dependabot[bot]
c88952423e Bump golang.org/x/mod
Bumps the extractor-dependencies group in /go/extractor with 1 update: [golang.org/x/mod](https://github.com/golang/mod).


Updates `golang.org/x/mod` from 0.29.0 to 0.30.0
- [Commits](https://github.com/golang/mod/compare/v0.29.0...v0.30.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-12 03:08:31 +00:00
Paolo Tranquilli
3483007b2a Ripunzip: use new archives 2025-11-11 17:44:12 +01:00
Geoffrey White
f6b7aeaaca Rust: Add prototype query. 2025-11-11 16:01:10 +00:00
Nick Rolfe
e5ba4143ff Go: add change-note for path transformer fixes 2025-11-11 15:47:53 +00:00
github-actions[bot]
d5734af555 Update ripunzip binaries to version v2.0.3 2025-11-11 13:40:02 +00:00
Paolo Tranquilli
0419667460 Merge pull request #20802 from github/redsun82/ripunzip
CI: make `build-ripunzip.yml` auto-create update PR
2025-11-11 14:34:39 +01:00
Michael B. Gale
f1076b9eb1 Merge pull request #20813 from github/post-release-prep/codeql-cli-2.23.5
Post-release preparation for codeql-cli-2.23.5
2025-11-11 13:13:14 +00:00
Henry Mercer
d3dc7908f8 Merge branch 'main' into post-release-prep/codeql-cli-2.23.5 2025-11-11 12:55:58 +00:00
Anders Schack-Mulligen
62e28d2dcf Guards: Simplify non-linear join. 2025-11-11 13:34:47 +01:00
github-actions[bot]
466a6f330a Post-release preparation for codeql-cli-2.23.5 2025-11-11 12:21:57 +00:00
Anders Schack-Mulligen
3c7522ca7d Guards: Replace recursion through universal quantification with rank-iteration. 2025-11-11 13:03:05 +01:00
Paolo Tranquilli
e2671da05f Fix build-ripunzip.yml archive step on macos 2025-11-11 13:01:39 +01:00
Anders Schack-Mulligen
a5279ec420 Guards: Rank return expressions. 2025-11-11 12:52:07 +01:00
Paolo Tranquilli
104f0e3a02 Fix build-ripunzip.yml archive step on windows 2025-11-11 12:51:30 +01:00
Michael B. Gale
e5fa4a6dca Merge pull request #20812 from github/release-prep/2.23.5
Release preparation for version 2.23.5
2025-11-11 11:46:37 +00:00
Paolo Tranquilli
99baf98897 Fix build-ripunzip.yml 2025-11-11 12:46:28 +01:00
Anders Schack-Mulligen
0a4406dec9 Guards: Push forex-range constraint in. 2025-11-11 12:45:46 +01:00
Paolo Tranquilli
82435218dc Javascript: fix compilation error after scripted replacement 2025-11-11 12:44:33 +01:00
Paolo Tranquilli
9d51932124 Merge branch 'main' into redsun82/update-rules_java 2025-11-11 12:43:05 +01:00
Michael B. Gale
b4fed5bf58 Revert C++ range analysis change note 2025-11-11 11:38:54 +00:00
Michael B. Gale
ac9a29701e C#: Minor changelog improvements 2025-11-11 11:38:20 +00:00
Napalys Klicius
d122534398 Merge pull request #20671 from github/napalys/adjust_query_severity
Adjust query severity ratings
2025-11-11 12:37:31 +01:00
github-actions[bot]
e4f25c9a13 Release preparation for version 2.23.5 2025-11-11 11:33:33 +00:00
Paolo Tranquilli
ff62c65cdf Javascript: avoid null pointer exception on boolean values 2025-11-11 12:11:49 +01:00
Paolo Tranquilli
47f2617b4d Use other compression method for ripunzip 2025-11-11 12:07:19 +01:00
Paolo Tranquilli
295744eb36 Set permissions 2025-11-11 12:00:30 +01:00
Paolo Tranquilli
29a2f96cc7 Merge branch 'main' into redsun82/ripunzip 2025-11-11 11:57:29 +01:00
Paolo Tranquilli
6ef314ed03 Javascript: fix errors from upcoming rules_java update 2025-11-11 11:53:07 +01:00
Geoffrey White
109abddc36 Apply suggestions from code review
Co-authored-by: Simon Friis Vindum <paldepind@github.com>
2025-11-11 09:32:14 +00:00
Geoffrey White
8624f9c660 Merge pull request #20749 from github/copilot/add-secure-cookie-test-cases
Add test coverage for actix-web, poem, and http-types cookie secure attribute
2025-11-11 09:26:26 +00:00
Michael B. Gale
5b1e651803 Merge pull request #20803 from github/revert-20778-release-prep/2.23.4
Revert "Release preparation for version 2.23.4"
2025-11-11 00:06:17 +00:00
Michael B. Gale
8ba29a7821 Revert "Release preparation for version 2.23.4" 2025-11-10 17:13:28 +00:00
Joe Farebrother
eda23902ba Merge pull request #20692 from joefarebrother/csharp-secure-cookie-promote
C#: Promote insecure cookie and httponly cookie queries
2025-11-10 15:02:45 +00:00
Paolo Tranquilli
02e696d9cc Update .github/workflows/build-ripunzip.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-10 15:58:43 +01:00
Michael Nebel
0541dccc78 C#: Add discarding for ASP elements. 2025-11-10 15:44:17 +01:00
Michael Nebel
3492811cda C#: Add XML overlay tests. 2025-11-10 15:38:29 +01:00
Michael Nebel
d6b7424e2c C#: Add the same strategy in as in Java for XML element discarding. 2025-11-10 15:38:26 +01:00
Joe Farebrother
c9a559a6d8 Restrict Append calls to string arguments 2025-11-10 14:14:06 +00:00
Joe Farebrother
b813c13462 Restrict sinks to fix performance 2025-11-10 14:14:01 +00:00
Joe Farebrother
7d5388fb68 Update integration tests 2025-11-10 14:13:56 +00:00
Joe Farebrother
544446bb81 Minor comment update 2025-11-10 14:13:51 +00:00
Joe Farebrother
0a085dccbe Fix qhelp 2025-11-10 14:13:46 +00:00
Joe Farebrother
d29fc9d2d0 Add changenote 2025-11-10 14:13:41 +00:00
Joe Farebrother
d8eeae781b Add additional test case for httponly cookies set to true 2025-11-10 14:13:36 +00:00
Paolo Tranquilli
a6fda6ba73 CI: make build-ripunzip.yml auto-create update PR 2025-11-10 15:13:35 +01:00
Joe Farebrother
c734e74c76 Update qhelp 2025-11-10 14:13:31 +00:00
Joe Farebrother
cdd1edd53b Remove experimental versions 2025-11-10 14:13:26 +00:00
Joe Farebrother
6ba7ece2f0 Add httponly tests for aspnet core + fixes 2025-11-10 14:13:19 +00:00
Joe Farebrother
ae0b997c31 Add system.web tests for httponly cookie 2025-11-10 14:13:14 +00:00
Joe Farebrother
a9b97f7065 Add tests for insecure cookie using system.web 2025-11-10 14:13:09 +00:00
Joe Farebrother
bb010fee6b Add tests for secure cookie using aspnetcore 2025-11-10 14:13:04 +00:00
Joe Farebrother
3cdfa8e0ac Update comments and names 2025-11-10 14:12:57 +00:00
Joe Farebrother
a87a03cfa8 Move to main query pack 2025-11-10 14:12:48 +00:00
Joe Farebrother
71ad5a340f Refactor httponly cookie query 2025-11-10 14:12:43 +00:00
Joe Farebrother
a1864edcb6 Presere behaviour for insecure cookie constructor 2025-11-10 14:12:36 +00:00
Joe Farebrother
d3ea6758c3 Simplify checks for assignments to false to creation case 2025-11-10 14:12:30 +00:00
Joe Farebrother
7bb65fef1b Refactor secure cookie query 2025-11-10 14:12:24 +00:00
Mathias Vorreiter Pedersen
fd8bf990f6 Merge pull request #20783 from MathiasVP/fix-cp-in-external-flow
C++: Fix cartesian-like join in `ExternalFlow.qll`
2025-11-10 13:40:34 +00:00
Michael Nebel
c44b74740e C#: Minor code quality improvements. 2025-11-10 14:23:59 +01:00
Michael Nebel
0a16cf68de C#: Do not require that comments and type locations are in source in test. 2025-11-10 13:53:41 +01:00
Geoffrey White
4b212239e1 Rust: Remove unnecessary .(BlockExpr). 2025-11-10 12:35:39 +00:00
Michael Nebel
43118ecccc C#: The extraction of the TypeMentions for return type and explicit interface return type for methods have changed order. 2025-11-10 13:26:07 +01:00
Michael Nebel
ded1328103 C#: Do not extract comments when scaffolding. 2025-11-10 13:26:05 +01:00
Tom Hvitved
de367eaad6 Update rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-10 12:42:28 +01:00
Mathias Vorreiter Pedersen
7b052e2404 Merge branch 'main' into fix-cp-in-external-flow 2025-11-10 10:44:31 +00:00
Mathias Vorreiter Pedersen
29a294f8d0 C++: Bind the columns inside the predicate instead of relying on 'bindingset's. The repeated inlining caused by 'bindiingset's created some #shared predicates with repeated regex matching. 2025-11-10 10:21:12 +00:00
Mathias Vorreiter Pedersen
267a7f5229 Merge pull request #20779 from MathiasVP/fix-bad-magic
C++: Fix bad magic in `IRGuards`
2025-11-10 10:05:18 +00:00
Jeroen Ketema
eb3e86480f Merge pull request #20784 from jketema/qual-fail
C++: Fix named qualifier dataset check error with decltypes
2025-11-10 10:36:47 +01:00
Paolo Tranquilli
3de598ef79 Merge pull request #20800 from github/redsun82/remove-macos-13
CI: update images in `build-ripunzip.yml`
2025-11-10 10:16:14 +01:00
Jeroen Ketema
0bf415acdf C++: Add upgrade and downgrade scripts 2025-11-10 10:11:05 +01:00
Jeroen Ketema
b660625429 C++: Update dbscheme to address dataset check error 2025-11-10 10:11:04 +01:00
Jeroen Ketema
a3f26fd6bb C++: Update expected test results after QL changes 2025-11-10 10:11:03 +01:00
Jeroen Ketema
f9554e1542 C++: Give proper getNames to more types and fix QLdoc 2025-11-10 10:11:01 +01:00
Paolo Tranquilli
7fb0e212b2 Make default refs valid on PR checks
Set default versions for ripunzip and openssl in the workflow.
2025-11-10 10:09:16 +01:00
Paolo Tranquilli
2ff4af9ede Update default versions in build-ripunzip.yml 2025-11-10 09:56:52 +01:00
Paolo Tranquilli
cd3b29f249 Update OS versions in ripunzip workflow 2025-11-10 09:54:10 +01:00
Paolo Tranquilli
63a2088ae0 Add pull_request trigger for ripunzip workflow 2025-11-10 09:53:19 +01:00
Paolo Tranquilli
fe690c90d5 Fix typo in workflow name 2025-11-10 09:52:14 +01:00
Paolo Tranquilli
da966fc799 CI: remove deprecated macos-13 image 2025-11-10 09:50:43 +01:00
Tom Hvitved
c81f5f5190 Rust: Remove elements superseded by attribute macro expansions 2025-11-10 09:18:58 +01:00
Tom Hvitved
74dd515c67 Merge pull request #20790 from hvitved/codegen/raw-child
Codegen: Add `Raw::getImmediateChild` and `Synth::getSynthParent`
2025-11-10 09:14:16 +01:00
Tom Hvitved
a8a799c919 Swift: Run codegen 2025-11-09 20:41:26 +01:00
Tom Hvitved
0bf458a56f Rust: Run codegen 2025-11-09 20:40:13 +01:00
Tom Hvitved
d77b35c5d2 Codegen: Add Raw::getImmediateChild and Synth::getSynthParent 2025-11-09 20:39:38 +01:00
Mathias Vorreiter Pedersen
dfdc2a6a15 C++: Delete an incorrect comment. 2025-11-08 16:45:45 +00:00
Mathias Vorreiter Pedersen
3d6b3a31ac C++: Also join on the 'namespace'. 2025-11-08 16:45:39 +00:00
Mathias Vorreiter Pedersen
bfe2b7dc44 C++: Use the new predicate to remove a cartesian-like join. 2025-11-08 16:43:43 +00:00
Mathias Vorreiter Pedersen
a922d5099f C++: Factor out some conjuncts from 'interpretElement0' and into a new predicate. 2025-11-08 16:42:16 +00:00
Mathias Vorreiter Pedersen
74b774eec5 Merge pull request #20769 from MathiasVP/add-more-flow-models
C++: Add a few more models
2025-11-08 16:39:29 +00:00
Michael B. Gale
dbadb6f738 Merge pull request #20781 from github/post-release-prep/codeql-cli-2.23.4
Post-release preparation for codeql-cli-2.23.4
2025-11-07 19:07:21 +00:00
github-actions[bot]
10ae374a82 Post-release preparation for codeql-cli-2.23.4 2025-11-07 18:18:09 +00:00
Michael B. Gale
714296bcc0 Merge pull request #20778 from github/release-prep/2.23.4
Release preparation for version 2.23.4
2025-11-07 17:52:45 +00:00
Michael B. Gale
0cbc9358de Revert C++ range analysis change note 2025-11-07 17:39:40 +00:00
Michael B. Gale
262bfe0351 C#: Minor changelog improvements 2025-11-07 17:39:10 +00:00
Mathias Vorreiter Pedersen
6a2debba96 C++: Fix bad magic. 2025-11-07 17:38:18 +00:00
github-actions[bot]
6342da9503 Release preparation for version 2.23.4 2025-11-07 17:37:29 +00:00
Michael B. Gale
eb32c32d4c Merge pull request #20777 from github/revert-20745-release-prep/2.23.4
Revert "Release preparation for version 2.23.4"
2025-11-07 17:35:35 +00:00
Mathias Vorreiter Pedersen
56b9566299 C++: Fix mistakes in models of internal strcat and strcpy functions. 2025-11-07 17:29:48 +00:00
Michael B. Gale
9d2206be33 Merge pull request #20775 from github/esteffin/revert-20645-cpp-range-analysis-measure
Revert "Merge pull request #20645 from paldepind/cpp/range-analysis-m…
2025-11-07 17:29:15 +00:00
Michael B. Gale
6ce8f07290 Revert "Release preparation for version 2.23.4" 2025-11-07 17:28:28 +00:00
Mathias Vorreiter Pedersen
f163d015d5 C++: Clean up comments. 2025-11-07 17:27:25 +00:00
Geoffrey White
61481b51e7 Rust: Change note. 2025-11-07 16:55:35 +00:00
Nick Rolfe
e32a5ca846 Go: add some overlay-related logging 2025-11-07 16:52:24 +00:00
Nick Rolfe
44654bdef6 Go: avoid overlay-discarding @file entities
...since they are shared between base and overlay
2025-11-07 16:52:22 +00:00
Nick Rolfe
734cba7b9c Go: add discard predicates for XML entities
This is adapted from the implementation for Java.

Since the HTML/XML extractor is not (yet) incremental, it will extract
files that were not in the diff. These discard predicates are intended
to cope with that, while also being robust against a future version
where the extractor *is* overlay-aware.
2025-11-07 16:52:21 +00:00
Nick Rolfe
10fa1d650d Go: be consistent in replacement of backslashes in file labels 2025-11-07 16:52:20 +00:00
Nick Rolfe
e4c9bb3c5c Go: enable overlay compilation 2025-11-07 16:52:19 +00:00
Nick Rolfe
50e01283da Go: overlay workaround for cgo-processed files 2025-11-07 16:52:17 +00:00
Nick Rolfe
5aaed8941a Go: pass source root from autobuilder to extractor
This ensures the extractor can resolve the relative paths for files
changed in the overlay.
2025-11-07 16:52:16 +00:00
Nick Rolfe
dd4f27868e Go: apply path transformer for file TRAP labels 2025-11-07 16:52:15 +00:00
Nick Rolfe
4c009d5bc9 Go: implement overlay discarding for @locatable 2025-11-07 16:52:14 +00:00
Nick Rolfe
aff874e835 Go: merge with incoming path transformer when setting GOPATH 2025-11-07 16:52:12 +00:00
Nick Rolfe
99236f7877 Go: skip overlay extraction of unchanged go.mod files 2025-11-07 16:52:10 +00:00
Nick Rolfe
604df2125d Go: implement basic overlay extraction
When in overlay mode, extractFile will exit early if the file isn't in
the list of files that changed since the base was extracted.
2025-11-07 16:52:08 +00:00
Nick Rolfe
05e5502680 Go: recognize CODEQL_PATH_TRANSFORMER env var 2025-11-07 16:52:07 +00:00
Nick Rolfe
4a325986e4 Go: add extractor pack field indicating overlay support 2025-11-07 16:52:06 +00:00
Nick Rolfe
c91e5618a4 Go: add dbscheme relations for overlay support 2025-11-07 16:52:05 +00:00
Enrico Steffinlongo
e7c029ae7d Revert "Merge pull request #20645 from paldepind/cpp/range-analysis-measure"
This reverts commit a0a6f288b5, reversing
changes made to 32f21d6d49.
2025-11-07 16:49:47 +00:00
Michael Nebel
9d300e3ad3 C#: Address comments in the QL implementation. 2025-11-07 15:52:37 +01:00
Michael Nebel
1657dfb551 C#: Remove expression population safeguard and guard creation of constructor initializer expressions. 2025-11-07 15:26:07 +01:00
Michael Nebel
7c670cdc3f C#: Address review comments and make more early returns in Populate. 2025-11-07 14:50:20 +01:00
Geoffrey White
7e3ab99d6b Rust: Add much more detailed code comments, since these are examples. 2025-11-07 13:48:03 +00:00
Geoffrey White
7b6e06e8de Rust: Add simple constant password example. 2025-11-07 13:30:53 +00:00
Rasmus Wriedt Larsen
3c20b950a0 Merge pull request #20747 from felickz/patch-4
Add 'code-quality-extended' to query packs list
2025-11-07 14:25:54 +01:00
Idriss Riouak
7c2b1a291d Merge pull request #20760 from github/idrissrio/codeowners-lang-coverage
CODEOWNERS: Add code-scanning-language-coverage team to all extractors
2025-11-07 08:44:11 +01:00
Geoffrey White
49aefe2110 Rust: Add simple SQL injection example. 2025-11-06 18:49:55 +00:00
Geoffrey White
6ce0a0d9df Rust: Add example from the basic-query-for-rust-code.rst. 2025-11-06 17:50:59 +00:00
Geoffrey White
84b50606ed Rust: Add example queries pack. 2025-11-06 17:33:15 +00:00
Mathias Vorreiter Pedersen
f0da0d98a2 C++: Add a few more models I noticed while here. 2025-11-06 17:00:19 +00:00
Mathias Vorreiter Pedersen
2b6a75f4ad C++: Accept test changes. 2025-11-06 16:57:11 +00:00
Mathias Vorreiter Pedersen
1d5d272822 C++: Add a few more models. 2025-11-06 16:55:51 +00:00
Mathias Vorreiter Pedersen
0607100310 C++: Add tests with missing flow. 2025-11-06 16:54:54 +00:00
Michael Nebel
446a87713a C#: Report more timing metrics to the console logger. 2025-11-06 15:17:45 +01:00
Tom Hvitved
000f33fcbf Merge pull request #20765 from hvitved/rust/variable-if-let-guard
Rust: Handle variables introduced in if-let guards
2025-11-06 13:49:38 +01:00
Idriss Riouak
0d76d582b5 CODEOWNERS: Add Go-related folders for extractor and autobuilder
Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com>
2025-11-06 11:12:53 +01:00
Geoffrey White
b4b444de48 Merge pull request #20746 from geoffw0/mv3
Rust: Clean up some models
2025-11-06 10:07:43 +00:00
Geoffrey White
680870dbf3 Rust: Fix after merge. 2025-11-06 09:39:51 +00:00
Tom Hvitved
f8cde74eac Merge pull request #20736 from github/copilot/add-constaccess-class
Rust: Add ConstAccess class with getConst() predicate
2025-11-06 10:25:06 +01:00
Geoffrey White
1ce787a185 Merge branch 'main' into mv3 2025-11-06 09:23:01 +00:00
Tom Hvitved
c80301d58a Rust: Handle variables introduced in if-let guards 2025-11-05 19:46:54 +01:00
Geoffrey White
1e7acc5e1a Merge branch 'main' into copilot/add-secure-cookie-test-cases 2025-11-05 17:53:02 +00:00
Jeroen Ketema
5eac0f7953 Merge pull request #20759 from jketema/swift-6.2.1
Swift: Update to Swift 6.2.1
2025-11-05 16:56:35 +01:00
Geoffrey White
62e77687ca Rust: Move async_std::io models. 2025-11-05 15:09:39 +00:00
Jeroen Ketema
a79c383fd5 Swift: update load.bzl 2025-11-05 15:46:42 +01:00
Jeroen Ketema
6476f60cd4 Swift: Add change note 2025-11-05 15:44:20 +01:00
Jeroen Ketema
a19f49b2ac Swift: Update resources 2025-11-05 15:41:00 +01:00
Tom Hvitved
db7b187961 Rust: Add more variables tests 2025-11-05 15:32:24 +01:00
Geoffrey White
e78018769b Rust: Add the model file (missed on previous commits). 2025-11-05 12:50:26 +00:00
Geoffrey White
6e35cb9748 Rust: Change note. 2025-11-05 11:36:04 +00:00
Geoffrey White
ad24b7414e Rust: Fix for Poem cookies defaulting secure. 2025-11-05 11:32:30 +00:00
Geoffrey White
99a369228b Rust: Model poem cookie methods. 2025-11-05 11:14:40 +00:00
Michael Nebel
5ec0494467 Merge pull request #20731 from michaelnebel/csharp/updatedependencies
C#: Update extractor package dependencies.
2025-11-05 11:58:48 +01:00
Michael B. Gale
046db0419f Merge pull request #20758 from github/post-release-prep/codeql-cli-2.23.4
Post-release preparation for codeql-cli-2.23.4
2025-11-05 10:45:51 +00:00
Owen Mansel-Chan
85175f6d18 Merge pull request #20714 from owen-mc/java/pretty-print-models-quantum-nonce-reuse
Java: Pretty print models in nonce reuse test in experimental/quantum
2025-11-05 09:53:21 +00:00
Anders Schack-Mulligen
02fd1dcccd Merge pull request #20738 from aschackmull/csharp/guards-misc
C#: Misc Guards-related cleanup.
2025-11-05 10:22:07 +01:00
idrissrio
51475df5a9 CODEOWNERS: Add code-scanning-language-coverage team to all extractors 2025-11-05 10:04:16 +01:00
Jeroen Ketema
68cd9ab3ab Swift: Update to Swift 6.2.1 2025-11-05 09:33:06 +01:00
Jeroen Ketema
5d9d6b9a00 Merge pull request #20757 from jketema/swift-doc-update
Swift: Update supported versions in the documentation
2025-11-05 09:27:54 +01:00
Geoffrey White
ff06181e4b Rust: We actually want barriers on set_secure(false) as well as set_secure(true), to prevent excessive flow paths. 2025-11-04 19:30:35 +00:00
Geoffrey White
5fed5a278e Rust: It turns out Poem defaults 'secure' to true. 2025-11-04 18:37:20 +00:00
Geoffrey White
7383e4ff23 Rust: Test for another edge cases supported by two of the libraries. 2025-11-04 18:25:02 +00:00
Chad Bentz
aac10c1efb Merge branch 'main' into patch-4 2025-11-04 13:13:50 -05:00
github-actions[bot]
4014df9a6e Post-release preparation for codeql-cli-2.23.4 2025-11-04 17:57:52 +00:00
Geoffrey White
21274d3d76 Rust: Add tests of poem CookieConfig. 2025-11-04 15:14:00 +00:00
Geoffrey White
e5933d0c54 Rust: Add test cases with cookie builders. 2025-11-04 15:13:31 +00:00
Jeroen Ketema
a29c9af4a7 Update swift/third_party/resources/updating.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-04 16:00:23 +01:00
Jeroen Ketema
41bf91072d Swift: Update supported versions in the documentation
Also document that we need to update the supported versions, so we don't forget
it next time around.
2025-11-04 15:56:39 +01:00
Anders Schack-Mulligen
7ab25b593d C#: Change note. 2025-11-04 15:43:49 +01:00
yoff
f6eabc278a Merge pull request #20722 from github/tausbn/python-move-points-to-predicates-to-legacy-module
Python: Move `ControlFlowNode`, `Expr`, and `Module` points-to to legacy module
2025-11-04 15:40:37 +01:00
Geoffrey White
55cf375886 Rust: Add the cookies to jars, indicating that they're ready for use. 2025-11-04 13:10:33 +00:00
Tom Hvitved
50552da4d8 Rust: Handle unqualified UseTrees in path resolution 2025-11-04 13:57:33 +01:00
Michael B. Gale
da1e93eb0c Merge pull request #20754 from github/mbg/2.23.4/backport-dont-fail-if-no-js
Backport: Merge pull request #20752 from asgerf/actions/dont-fail-if-no-js
2025-11-04 12:51:24 +00:00
Geoffrey White
7fe4877ddd Rust: Update test annotations. 2025-11-04 12:36:56 +00:00
Michael Nebel
d95ebc77ae C#: Add using directives and type mentions as star entities. 2025-11-04 13:28:29 +01:00
Michael Nebel
504bb9c4a1 C#: Only scaffold assemblies in overlay mode, only extract expressions when not scaffolding and only extract attributes when they are in source code in overlay mode. 2025-11-04 13:28:28 +01:00
Michael Nebel
1d2f1545d6 C#: Add change-note. 2025-11-04 13:28:26 +01:00
Michael Nebel
04d33cbad7 C#: Add discarding for diagnostics and extractor messages. 2025-11-04 13:28:24 +01:00
Michael Nebel
8927b0a350 C#: Simplify the discarding and also discard type mentions and comments. 2025-11-04 13:28:21 +01:00
Michael Nebel
40035d2e82 C#: Add a locatable type to the dbscheme. 2025-11-04 13:28:19 +01:00
Michael Nebel
8a344215b9 C#: Add QL overlay tests. 2025-11-04 13:28:17 +01:00
Michael Nebel
121c1500ca C#: Define discarding predicates for expressions, statements, locations and some named TRAP entities. 2025-11-04 13:28:14 +01:00
Michael Nebel
76ac2dff26 C#: Write overlay metadata at end of extraction. 2025-11-04 13:28:12 +01:00
Michael Nebel
61f6512c74 C#: Sprinkle uses of OnlyScaffold to extract less when in overlay mode. 2025-11-04 13:28:10 +01:00
Michael Nebel
cab9d81376 C#: Add unit test. 2025-11-04 13:28:07 +01:00
Michael Nebel
aa805580e3 C#: Add functionality to detect overlay mode and integrate in extraction context. 2025-11-04 13:28:05 +01:00
Michael Nebel
9026a5a82a C#: Turn on overlay support in codeql-extractor.yml. 2025-11-04 13:28:03 +01:00
Michael Nebel
cfb68436f2 C#: Add upgrade- and downgrade scripts. 2025-11-04 13:28:00 +01:00
Michael Nebel
b48ce8dec2 C#: Add overlay builtins to the dbscheme. 2025-11-04 13:27:58 +01:00
Michael Nebel
bcc6234a60 C#: Fix bad join due to overlay compilation. 2025-11-04 13:27:56 +01:00
Michael Nebel
b600255835 C#: Enable overlay compilation in lib/qlpack.yml. 2025-11-04 13:27:53 +01:00
Asger F
6790684767 Merge pull request #20752 from asgerf/actions/dont-fail-if-no-js
Actions: don't fail if no JS/TS code was found
2025-11-04 12:19:54 +00:00
Asger F
d297dcd9e9 Merge pull request #20752 from asgerf/actions/dont-fail-if-no-js
Actions: don't fail if no JS/TS code was found
2025-11-04 13:12:12 +01:00
Asger F
81bb07a7ba JS: Fix check to account for override in tests
The code was written on the assumption that 'seenCode' implies 'seenFiles' but the unit test override 'hasSeenCode()' to always return true. Which meant we would start taking this branch in the unit tests.
2025-11-04 11:46:02 +01:00
Geoffrey White
077bcf6b92 Merge pull request #20740 from geoffw0/rustbarriers
Rust: Add numeric type barriers for three queries
2025-11-04 10:08:46 +00:00
Asger F
105213df03 Update javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-04 09:51:56 +01:00
Asger F
c4d23d16ed Actions: dont fail if no JS/TS code was found 2025-11-04 09:37:33 +01:00
copilot-swe-agent[bot]
ee3d57ef3c Update test cases with correct APIs and run CodeQL test
Co-authored-by: geoffw0 <40627776+geoffw0@users.noreply.github.com>
2025-11-03 17:38:25 +00:00
copilot-swe-agent[bot]
8f02ab107c Add test cases for actix-web, poem, and http-types cookie secure attribute
Co-authored-by: geoffw0 <40627776+geoffw0@users.noreply.github.com>
2025-11-03 17:16:04 +00:00
copilot-swe-agent[bot]
2497d8c329 Initial plan 2025-11-03 17:11:12 +00:00
Geoffrey White
56e98c45ec Rust: Accept trivial changes to test .expected files. 2025-11-03 17:08:22 +00:00
Chad Bentz
20e23f89a2 Merge pull request #2 from felickz/copilot/fix-1760475-601388369-59cd8e3d-0895-49ec-9025-a9864c8e5367
Fix generate-code-scanning-query-list.py to handle empty code-quality-extended suites
2025-11-03 11:55:55 -05:00
copilot-swe-agent[bot]
0fc25029bb Revert query file change and fix script to handle empty code-quality-extended suites
Co-authored-by: felickz <1760475+felickz@users.noreply.github.com>
2025-11-03 16:46:56 +00:00
copilot-swe-agent[bot]
7b6b703d06 Add quality tag to Actions maintainability query
Co-authored-by: felickz <1760475+felickz@users.noreply.github.com>
2025-11-03 16:31:04 +00:00
copilot-swe-agent[bot]
4346c61e97 Initial plan 2025-11-03 16:19:07 +00:00
Chad Bentz
50597685a2 Add 'code-quality-extended' to query packs list 2025-11-03 10:55:36 -05:00
Michael B. Gale
637e12e7a8 Merge pull request #20745 from github/release-prep/2.23.4
Release preparation for version 2.23.4
2025-11-03 15:15:25 +00:00
Michael B. Gale
e825a3acf7 C#: Minor changelog improvements 2025-11-03 15:03:46 +00:00
Geoffrey White
687cc6f544 Rust: Re-arrange models slightly. 2025-11-03 14:54:13 +00:00
github-actions[bot]
64fcdd1f2f Release preparation for version 2.23.4 2025-11-03 14:52:23 +00:00
Geoffrey White
5af83787d8 Rust: Move a few more models. 2025-11-03 13:35:27 +00:00
Geoffrey White
144fa7dd39 Rust: Deduplicate some models. 2025-11-03 13:33:37 +00:00
Geoffrey White
8a2c117a0e Rust: Move models between core.model.yml and alloc.model.yml. 2025-11-03 13:31:25 +00:00
Geoffrey White
1b435ed07d Rust: Move another model file into subdirectory. 2025-11-03 13:26:37 +00:00
Geoffrey White
4b3a1c5abb Rust: Move a model file into subdirectory. 2025-11-03 13:24:28 +00:00
Tom Hvitved
0ca62ca5b6 Fix copilot implementation 2025-11-03 14:15:16 +01:00
Michael Nebel
c1ede51fe8 C#: Add change note. 2025-11-03 12:52:27 +01:00
Geoffrey White
c381153125 Apply suggestions from code review
Co-authored-by: Tom Hvitved <hvitved@github.com>
2025-11-03 09:38:43 +00:00
Tom Hvitved
39dd3acd76 Rust: More path resolution tests 2025-11-03 10:34:50 +01:00
Jeroen Ketema
d354b0c97e Merge pull request #20732 from jketema/swift-6.2-elements
Swift: Support AST elements new in Swift 6.2
2025-10-31 19:33:13 +01:00
Geoffrey White
8548c167be Rust: Autoformat. 2025-10-31 17:30:04 +00:00
Geoffrey White
34f75952d0 Rust: Change note. 2025-10-31 16:40:02 +00:00
Geoffrey White
33efed92b8 Rust: Add integral type barrier for Regex injection. 2025-10-31 16:37:10 +00:00
Geoffrey White
2d4369ac6c Rust: Add numeric type barrier for log injection. 2025-10-31 16:32:32 +00:00
Geoffrey White
52397f0ce0 Rust: Add numeric type barrier for SQL injection. 2025-10-31 16:25:44 +00:00
Geoffrey White
6433bec699 Rust: Add a test for BuiltinTypes. 2025-10-31 16:24:51 +00:00
Geoffrey White
47019f7f24 Rust: Define NumericType, IntegralType and FloatingPointType in Builtins.qll. 2025-10-31 16:24:39 +00:00
Geoffrey White
aaa3b1bcb4 Rust: Add a couple of new test cases. 2025-10-31 16:20:52 +00:00
Ian Lynagh
7ff696bd2d Merge pull request #20726 from igfoo/igfoo/ClassInstanceStack
Kotlin: Avoid infinite recursion when extracting recursive interfaces
2025-10-31 16:18:39 +00:00
Anders Schack-Mulligen
bda6513fc1 Merge pull request #20737 from aschackmull/csharp/deprecate-abstractvalue
C#: Deprecate AbstractValue.
2025-10-31 15:20:24 +01:00
Ian Lynagh
06218d8acd Kotlin: Add a test for recursive interfaces 2025-10-31 13:42:44 +00:00
Ian Lynagh
9182da1d58 Kotlin: Add a test for nested types 2025-10-31 13:42:44 +00:00
Ian Lynagh
1efecc099c Kotlin: Avoid infinite recursion when extracting recursive interfaces 2025-10-31 13:42:43 +00:00
Anders Schack-Mulligen
fa20075a4d C#: Review fix and simplification. 2025-10-31 14:41:32 +01:00
Anders Schack-Mulligen
4f6528a9fb C#: Deprecate AbstractValue. 2025-10-31 14:23:23 +01:00
Anders Schack-Mulligen
eb93e8ed41 C#: Deprecate controlsBlock. 2025-10-31 14:22:11 +01:00
Anders Schack-Mulligen
4de564eb4e C#: Replace reference to controlsBlock and simplify. 2025-10-31 14:17:35 +01:00
Anders Schack-Mulligen
f6dfcf1ca4 C#: Delete splitting-aware controls implementation. 2025-10-31 14:17:35 +01:00
Anders Schack-Mulligen
ab2c2ef6ae C#: Update isUnreachableInCall in dataflow to use Guards library. 2025-10-31 14:17:34 +01:00
Anders Schack-Mulligen
e558c0219c Merge pull request #20734 from aschackmull/csharp/tweak-nullness
C#: Allow nullness sources with SSA at entry.
2025-10-31 14:14:43 +01:00
Anders Schack-Mulligen
09378b8499 Merge pull request #20665 from aschackmull/csharp/guards-replace
C#: Replace old Guards with the new shared implementation.
2025-10-31 14:12:47 +01:00
copilot-swe-agent[bot]
ad51b61a2b Fix trailing whitespace in documentation comments
Co-authored-by: hvitved <3667920+hvitved@users.noreply.github.com>
2025-10-31 13:07:04 +00:00
copilot-swe-agent[bot]
6011ecbef4 Add ConstAccess class with getConst() predicate and test cases
Co-authored-by: hvitved <3667920+hvitved@users.noreply.github.com>
2025-10-31 13:01:25 +00:00
copilot-swe-agent[bot]
09bef0f4df Initial plan 2025-10-31 12:51:08 +00:00
Tom Hvitved
95e60ad4a7 Merge pull request #20705 from hvitved/rust/type-inference-unit
Rust: Infer more `()` types
2025-10-31 13:43:10 +01:00
Geoffrey White
d8fff44048 Merge pull request #20712 from geoffw0/macrometric2
Rust: Exclude skipped files in rust/diagnostic/database-quality
2025-10-31 11:25:41 +00:00
Jeroen Ketema
2a8e3bee36 Swift: Add change note 2025-10-31 12:06:52 +01:00
Jeroen Ketema
94f8ea5612 Swift: Add upgrade and downgrade scripts 2025-10-31 11:35:50 +01:00
Anders Schack-Mulligen
5aa53287ce C#: Allow nullness sources with SSA at entry. 2025-10-31 11:25:37 +01:00
Tom Hvitved
f672f6b731 Merge pull request #20727 from hvitved/rust/variable-overlap-fix
Rust: Fix variable access overlap
2025-10-31 11:07:30 +01:00
Jeroen Ketema
7301bc74cf Swift: Fix key path numbering in upgrade and downgrade scripts 2025-10-31 11:01:04 +01:00
Jeroen Ketema
92ca0c2b62 Swift: Update expected test results 2025-10-31 10:53:11 +01:00
Tom Hvitved
6d64800e85 Rust: Move variable consistency check into AstConsistency.qll 2025-10-31 10:42:51 +01:00
Michael Nebel
ee6dd0f771 C#: Update integration tests expected output. 2025-10-31 10:37:49 +01:00
Jeroen Ketema
eab6579e12 Swift: sync files 2025-10-31 10:24:03 +01:00
Jeroen Ketema
f4d1e1c034 Swift: Handle InlineArrayTypes 2025-10-31 10:15:07 +01:00
Jeroen Ketema
72e8ec3951 Swift: Update comment for LocatableTypes 2025-10-31 10:02:12 +01:00
Jeroen Ketema
b9d0cb7746 Swift: Add basic support for experimental using decls
Note that we cannot write tests for these at the moment. Passing
```
-enable-experimental-feature DefaultIsolationPerFile
```
to the extractor results in:
```
error: experimental feature 'DefaultIsolationPerFile' cannot be enabled in production compile
```
2025-10-31 09:58:12 +01:00
Jeroen Ketema
67b6b9cd15 Swift: Support UnsafeExpr 2025-10-31 09:58:10 +01:00
Jeroen Ketema
119b058629 Swift: Handle method and initializer key path components in QL
Note that it does not seem to be possible to write test that exercise this
code. Passing `-enable-experimental-feature KeyPathWithMethodMembers` to the
extractor results in:
```
error: experimental feature 'KeyPathWithMethodMembers' cannot be enabled in production compiler
```
2025-10-31 09:58:09 +01:00
Jeroen Ketema
b08b123184 Swift: Support new accessors 2025-10-31 09:57:58 +01:00
Tom Hvitved
7d5664f2a8 Address review comment 2025-10-31 09:43:18 +01:00
Tom Hvitved
f850025583 Rust: Add another type inference test 2025-10-31 09:39:00 +01:00
Michael Nebel
ad02559b48 C#: Fix Binlog API breaking change. 2025-10-31 09:36:22 +01:00
Asger F
a1a9626eae Merge pull request #20421 from asgerf/js/compile-for-overlay-eval
JS: Add compileForOverlayEval: true
2025-10-31 09:21:16 +01:00
Michael Nebel
0484be6b5b C#: Update lock files. 2025-10-31 09:16:35 +01:00
Michael Nebel
f410c3c93a C#: Update Microsft.Build, Roslyn and Binlog dependencies. 2025-10-31 09:16:07 +01:00
Tom Hvitved
5a2467414c Rust: Fix variable access overlap 2025-10-30 21:52:36 +01:00
Tom Hvitved
3d7b60a439 Rust: Add variable consistency query 2025-10-30 21:40:37 +01:00
Tom Hvitved
d71f2dee9c Rust: Add more variable tests 2025-10-30 21:39:28 +01:00
Taus
e702d3bfc8 Python: Add change note
I wasn't entirely sure if this should be classified as `deprecated` or
`breaking`, but seeing as these changes technically _could_ break
existing queries (requiring a small rewrite), I opted for the latter.
2025-10-30 15:16:51 +00:00
Asger F
c583b480af JS: Add pragma[nomagic] just to be safe
The DIL is unchanged
2025-10-30 15:31:51 +01:00
Asger F
1f7671cf5e JS: Ensure integration test contains one valid file 2025-10-30 15:31:51 +01:00
Asger F
0acfacefbf JS: Recursively delete source archive so emptiness detection works 2025-10-30 15:31:51 +01:00
Asger F
a5819a14be JS: Fix bad join order in getNextToken() 2025-10-30 15:31:51 +01:00
Asger F
39f74d808b JS: Add compileForOverlayEval 2025-10-30 15:31:51 +01:00
Simon Friis Vindum
a25ae3922d Merge pull request #20682 from paldepind/rust/ti-condition
Rust: Refactor using shared constraint satisfaction
2025-10-30 15:19:16 +01:00
Taus
820d8e76c4 Python: Remove points-to from Module 2025-10-30 13:59:30 +00:00
Taus
b93ce98612 Python: Remove points-to from Expr 2025-10-30 13:58:59 +00:00
Simon Friis Vindum
c648aa69b8 Rust: Rename predicates 2025-10-30 14:35:17 +01:00
Taus
b434ce460e Python: Get rid of getLiteralValue
This had only two uses in our libraries, so I simply inlined the
predicate body in both places.
2025-10-30 13:30:04 +00:00
Taus
fef08afff9 Python: Remove points-to to from ControlFlowNode
Moves the existing points-to predicates to the newly added class
`ControlFlowNodeWithPointsTo` which resides in the `LegacyPointsTo`
module.

(Existing code that uses these predicates should import this module, and
references to `ControlFlowNode` should be changed to
`ControlFlowNodeWithPointsTo`.)

Also updates all existing points-to based code to do just this.
2025-10-30 13:30:04 +00:00
Tom Hvitved
cca458c2ac Rust: Address review comments and handle ! types in type inference 2025-10-30 13:30:42 +01:00
Geoffrey White
0e7d410163 Merge branch 'main' into macrometric2 2025-10-30 10:19:11 +00:00
Tom Hvitved
5697a7e612 Rust: More type inference tests 2025-10-30 10:43:44 +01:00
Simon Friis Vindum
b189f1fe3f Rust: Refactor using shared constraint satisfaction 2025-10-30 08:18:12 +01:00
Jeroen Ketema
26f59a8786 Merge pull request #20710 from jketema/swift-rsc
Swift: Do not include the embedded resources
2025-10-29 17:38:07 +01:00
Jeroen Ketema
cf2cd20884 Swift: Update resources 2025-10-29 15:54:17 +01:00
Jeroen Ketema
ea6b05eda3 Update docs/codeql/codeql-overview/system-requirements.rst 2025-10-29 15:49:53 +01:00
Tom Hvitved
bc53fee1c5 Rust: Infer more () types 2025-10-29 15:43:00 +01:00
Tom Hvitved
f395162afd Rust: More type inference tests 2025-10-29 15:41:23 +01:00
Tom Hvitved
3c663d8ebf Merge pull request #20715 from hvitved/rust/type-inference-overlap-test
Rust: Add type inference tests for method resolution overlap
2025-10-29 15:39:07 +01:00
Anders Schack-Mulligen
900d0d2477 C#: Accept test changes for assert split removal. 2025-10-29 15:17:34 +01:00
Tom Hvitved
6ed8bcbcf3 Rust: Add type inference tests for method resolution overlap 2025-10-29 14:53:28 +01:00
Tom Hvitved
e5f1238e26 Merge pull request #20707 from paldepind/rust/ti-self-trait
Rust: Improve handling of `Self` type parameter
2025-10-29 13:17:14 +01:00
Anders Schack-Mulligen
51a577a429 Merge pull request #20713 from aschackmull/dataflow/qldoc1
Dataflow: Minor drive-by qldoc addition.
2025-10-29 13:13:43 +01:00
Geoffrey White
7a864c5244 Rust: Implement suggestion from review. 2025-10-29 12:13:12 +00:00
Anders Schack-Mulligen
87d89fd00f C#: Fix CFG for assertion. 2025-10-29 13:04:33 +01:00
Anders Schack-Mulligen
e61ddf59d7 C#: Remove assertion splitting. 2025-10-29 13:04:32 +01:00
Anders Schack-Mulligen
b48d4d4834 C#: Recognize assertions as Guards. 2025-10-29 13:04:32 +01:00
Anders Schack-Mulligen
500fdb8723 Guards: Add support for assertions that exit rather than throw. 2025-10-29 13:04:29 +01:00
Anders Schack-Mulligen
72f1fe5d58 C#: Exclude nullness sources that are deemed non-null. 2025-10-29 13:03:51 +01:00
Anders Schack-Mulligen
0df0816c95 Guards: Minor improvement to implications. 2025-10-29 13:03:51 +01:00
Anders Schack-Mulligen
cbfb8fd110 C#: Accept some test changes. 2025-10-29 13:03:50 +01:00
Anders Schack-Mulligen
7241bedf05 C#: Replace Guards with the new implementation. 2025-10-29 13:03:50 +01:00
Anders Schack-Mulligen
8b3e62652c Guards: Only prune actually trivial guards. 2025-10-29 13:03:46 +01:00
Owen Mansel-Chan
7ad570b5f5 Pretty print models in test
Otherwise the test output changes when unrelated models are added.
2025-10-29 12:03:32 +00:00
Anders Schack-Mulligen
84b8b1c01f C#: Minor test tweak. 2025-10-29 13:02:08 +01:00
Anders Schack-Mulligen
dc4abc952f C#: Replace references to getANullCheck. 2025-10-29 13:02:08 +01:00
Anders Schack-Mulligen
46fc006c5f C#: Update NullCheck test to reflect what nullness use. 2025-10-29 13:02:07 +01:00
Anders Schack-Mulligen
1aa0e7c2da C#: Make private. 2025-10-29 13:02:07 +01:00
Anders Schack-Mulligen
e3fc3192ac C#: Remove tests referencing impliesStep. 2025-10-29 13:02:06 +01:00
Anders Schack-Mulligen
9776e8f828 C#: Remove an irrelevant reference to impliesStep. 2025-10-29 13:02:06 +01:00
Anders Schack-Mulligen
4ea90e06a5 Dataflow: Minor drive-by qldoc addition. 2025-10-29 12:58:56 +01:00
Geoffrey White
558ca74e9c Merge pull request #20702 from geoffw0/gen2
Rust: Generalize more models
2025-10-29 11:32:00 +00:00
Geoffrey White
5ca0bd071d Rust: Exclude skipped files from CallTargetStats and ExprTypeStats as well. 2025-10-29 10:42:04 +00:00
Geoffrey White
25e4b790a3 Rust: Exclude skipped files from MacroCallTargetStats. 2025-10-29 10:42:03 +00:00
Simon Friis Vindum
ce8cffc331 Rust: Address comments 2025-10-29 11:18:02 +01:00
Tom Hvitved
b7293541cd Merge pull request #20704 from hvitved/rust/fix-bad-joins
Rust: Fix two bad joins
2025-10-29 11:11:54 +01:00
Jeroen Ketema
6906c88781 Swift: Update change note 2025-10-29 11:08:16 +01:00
Jeroen Ketema
2505c8f3e3 Swift: Improve docs 2025-10-29 11:06:50 +01:00
Jeroen Ketema
9f498df9fa Swift: Do not include the embedded resources 2025-10-29 11:00:04 +01:00
Simon Friis Vindum
9022f996e8 Rust: Improve handling of occurrences of the Self type parameter 2025-10-29 10:41:46 +01:00
Simon Friis Vindum
9ff3c61c6e Rust: Add type inference tests involving Self 2025-10-29 10:41:44 +01:00
yoff
4461be180a Merge pull request #19539 from yoff/java/conflicting-access 2025-10-28 20:37:44 +01:00
Geoffrey White
6f1eca8be1 Rust: Make the QLDoc for fromSource a bit more precise. 2025-10-28 16:22:25 +00:00
Tom Hvitved
f2380d3ef1 Merge pull request #20612 from hvitved/rust/type-inference-blanket-non-satisfaction
Rust: Compute incompatible blanket implementations
2025-10-28 14:00:55 +01:00
Tom Hvitved
b3bbe78974 Rust: Fix bad join
Before
```
Pipeline standard for TypeInference::MethodCallMatching::directTypeMatch/6#f0fb0b61@31ee5u2w was evaluated in 821 iterations totaling 1057ms (delta sizes total: 689971).
           416937   ~1%    {6} r1 = SCAN `TypeInference::MethodCallMatching::directTypeMatch0/6#dfcc7717#prev_delta` OUTPUT In.0, In.3, In.1, In.2, In.4, In.5

           222757   ~2%    {8} r2 = JOIN r1 WITH `TypeInference::MethodCallMatchingInput::Access.getInferredNonSelfType/2#dispred#b181cb0a#prev` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.5, Rhs.3, _, Lhs.4, Rhs.2
                           {6}    | REWRITE WITH Tmp.5 := "", Out.5 := InverseAppend(In.6,Tmp.5,In.7) KEEPING 6
           164360   ~3%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.5, In.4, In.3

        315350783   ~1%    {6} r3 = SCAN `TypeInference::MethodCallMatching::directTypeMatch0/6#dfcc7717#prev` OUTPUT In.0, In.3, In.1, In.2, In.4, In.5

           593815   ~1%    {8} r4 = JOIN r3 WITH `TypeInference::MethodCallMatchingInput::Access.getInferredNonSelfType/2#dispred#b181cb0a#prev_delta` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.5, Rhs.3, _, Lhs.4, Rhs.2
                           {6}    | REWRITE WITH Tmp.5 := "", Out.5 := InverseAppend(In.6,Tmp.5,In.7) KEEPING 6
           342226   ~1%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.5, In.4, In.3

           826517   ~0%    {8} r5 = JOIN r1 WITH `TypeInference::MethodCallMatchingInput::Access.getInferredSelfType/3#dispred#45b2f893#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.5, Rhs.4, _, Lhs.4, Rhs.3
                           {6}    | REWRITE WITH Tmp.5 := "", Out.5 := InverseAppend(In.6,Tmp.5,In.7) KEEPING 6
           345294   ~1%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.5, In.4, In.3

            73715   ~0%    {8} r6 = JOIN r3 WITH `TypeInference::MethodCallMatchingInput::Access.getInferredSelfType/3#dispred#45b2f893#prev_delta` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.5, Rhs.4, _, Lhs.4, Rhs.3
                           {6}    | REWRITE WITH Tmp.5 := "", Out.5 := InverseAppend(In.6,Tmp.5,In.7) KEEPING 6
            47802   ~1%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.5, In.4, In.3

           899682   ~5%    {6} r7 = r2 UNION r4 UNION r5 UNION r6
           711040   ~6%    {6}    | AND NOT `TypeInference::MethodCallMatching::directTypeMatch/6#f0fb0b61#prev`(FIRST 6)
                           return r7
```

After
```
Pipeline standard for TypeInference::MethodCallMatching::directTypeMatch/6#f0fb0b61@ad458u2w was evaluated in 821 iterations totaling 374ms (delta sizes total: 691168).
        222757   ~2%    {8} r1 = JOIN `TypeInference::MethodCallMatching::directTypeMatch0/6#dfcc7717#prev_delta` WITH `TypeInference::MethodCallMatchingInput::Access.getInferredNonSelfType/2#dispred#b181cb0a#prev` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.5, Rhs.3, _, Lhs.4, Rhs.2
                        {6}    | REWRITE WITH Tmp.5 := "", Out.5 := InverseAppend(In.6,Tmp.5,In.7) KEEPING 6
        164360   ~3%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.5, In.4, In.3

        593815   ~1%    {8} r2 = JOIN `TypeInference::MethodCallMatching::directTypeMatch0/6#dfcc7717#prev` WITH `TypeInference::MethodCallMatchingInput::Access.getInferredNonSelfType/2#dispred#b181cb0a#prev_delta` ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.5, Rhs.3, _, Lhs.4, Rhs.2
                        {6}    | REWRITE WITH Tmp.5 := "", Out.5 := InverseAppend(In.6,Tmp.5,In.7) KEEPING 6
        342226   ~1%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.5, In.4, In.3

        826517   ~0%    {8} r3 = JOIN `TypeInference::MethodCallMatching::directTypeMatch0/6#dfcc7717#prev_delta` WITH `TypeInference::MethodCallMatchingInput::Access.getInferredSelfType/3#dispred#45b2f893#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.5, Rhs.4, _, Lhs.4, Rhs.3
                        {6}    | REWRITE WITH Tmp.5 := "", Out.5 := InverseAppend(In.6,Tmp.5,In.7) KEEPING 6
        345294   ~1%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.5, In.4, In.3

         73715   ~0%    {8} r4 = JOIN `TypeInference::MethodCallMatching::directTypeMatch0/6#dfcc7717#prev` WITH `TypeInference::MethodCallMatchingInput::Access.getInferredSelfType/3#dispred#45b2f893#prev_delta` ON FIRST 3 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.5, Rhs.4, _, Lhs.4, Rhs.3
                        {6}    | REWRITE WITH Tmp.5 := "", Out.5 := InverseAppend(In.6,Tmp.5,In.7) KEEPING 6
         47802   ~1%    {6}    | SCAN OUTPUT In.0, In.1, In.2, In.5, In.4, In.3

        899682   ~5%    {6} r5 = r1 UNION r2 UNION r3 UNION r4
        711095   ~6%    {6}    | AND NOT `TypeInference::MethodCallMatching::directTypeMatch/6#f0fb0b61#prev`(FIRST 6)
                        return r5
```
2025-10-28 13:09:39 +01:00
Tom Hvitved
104ba0e291 Rust: Fix bad join
Before
```
Pipeline standard for TypeInference::MethodCallMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#e8abf748@ada3a07w was evaluated in 801 iterations totaling 31ms (delta sizes total: 182871).
           50151   ~1%    {4} r1 = SCAN TypeInference::MethodCallMatching::AccessConstraint::MkRelevantAccess#7a01048b#prev_delta OUTPUT In.0, In.2, In.3, In.4
           39574   ~0%    {5}    | JOIN WITH `TypeInference::MethodCallMatchingInput::Access.getInferredNonSelfType/2#dispred#b181cb0a#prev` ON FIRST 2 OUTPUT Lhs.3, Rhs.3, _, Lhs.2, Rhs.2
                          {3}    | REWRITE WITH Tmp.2 := "", Out.2 := InverseAppend(In.3,Tmp.2,In.4) KEEPING 3
           36996   ~0%    {3}    | SCAN OUTPUT In.0, In.2, In.1

        36102333   ~0%    {4} r2 = SCAN TypeInference::MethodCallMatching::AccessConstraint::MkRelevantAccess#7a01048b#prev OUTPUT In.0, In.2, In.3, In.4
           90175   ~1%    {5}    | JOIN WITH `TypeInference::MethodCallMatchingInput::Access.getInferredNonSelfType/2#dispred#b181cb0a#prev_delta` ON FIRST 2 OUTPUT Lhs.3, Rhs.3, _, Lhs.2, Rhs.2
                          {3}    | REWRITE WITH Tmp.2 := "", Out.2 := InverseAppend(In.3,Tmp.2,In.4) KEEPING 3
           65014   ~1%    {3}    | SCAN OUTPUT In.0, In.2, In.1

           50151   ~1%    {5} r3 = SCAN TypeInference::MethodCallMatching::AccessConstraint::MkRelevantAccess#7a01048b#prev_delta OUTPUT In.2, In.0, In.1, In.3, In.4
           24208   ~1%    {4}    | JOIN WITH `FunctionType::FunctionPosition.isSelf/0#dispred#9e84d302` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4
           95022   ~0%    {9}    | JOIN WITH `TypeInference::MethodCallMatchingInput::Access.getInferredSelfType/3#dispred#45b2f893#prev` ON FIRST 1 OUTPUT Lhs.2, Lhs.3, Rhs.2, Rhs.3, Rhs.4, _, Rhs.1, Lhs.1, _
                          {6}    | REWRITE WITH Tmp.5 := ";", Tmp.5 := (In.6 ++ Tmp.5), Tmp.8 := "", Out.5 := InverseAppend(Tmp.5,Tmp.8,In.7) KEEPING 6
           93919   ~1%    {7}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _
                          {6}    | REWRITE WITH NOT [NOT [Tmp.6 := "borrow", TEST InOut.5 = Tmp.6, Tmp.6 := true, TEST InOut.2 = Tmp.6], NOT [Tmp.6 := "", TEST InOut.5 = Tmp.6, Tmp.6 := true, TEST InOut.2 != Tmp.6]] KEEPING 6
           81298   ~1%    {5}    | SCAN OUTPUT In.1, In.4, _, In.0, In.3
                          {3}    | REWRITE WITH Tmp.2 := "", Out.2 := InverseAppend(In.3,Tmp.2,In.4) KEEPING 3
           64110   ~1%    {3}    | SCAN OUTPUT In.0, In.2, In.1

        36102333   ~0%    {5} r4 = SCAN TypeInference::MethodCallMatching::AccessConstraint::MkRelevantAccess#7a01048b#prev OUTPUT In.2, In.0, In.1, In.3, In.4
        17473531   ~0%    {4}    | JOIN WITH `FunctionType::FunctionPosition.isSelf/0#dispred#9e84d302` ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4
           47409   ~1%    {9}    | JOIN WITH `TypeInference::MethodCallMatchingInput::Access.getInferredSelfType/3#dispred#45b2f893#prev_delta` ON FIRST 1 OUTPUT Lhs.2, Lhs.3, Rhs.2, Rhs.3, Rhs.4, _, Rhs.1, Lhs.1, _
                          {6}    | REWRITE WITH Tmp.5 := ";", Tmp.5 := (In.6 ++ Tmp.5), Tmp.8 := "", Out.5 := InverseAppend(Tmp.5,Tmp.8,In.7) KEEPING 6
           29885   ~0%    {7}    | SCAN OUTPUT In.0, In.1, In.2, In.3, In.4, In.5, _
                          {6}    | REWRITE WITH NOT [NOT [Tmp.6 := "borrow", TEST InOut.5 = Tmp.6, Tmp.6 := true, TEST InOut.2 = Tmp.6], NOT [Tmp.6 := "", TEST InOut.5 = Tmp.6, Tmp.6 := true, TEST InOut.2 != Tmp.6]] KEEPING 6
           16952   ~1%    {5}    | SCAN OUTPUT In.1, In.4, _, In.0, In.3
                          {3}    | REWRITE WITH Tmp.2 := "", Out.2 := InverseAppend(In.3,Tmp.2,In.4) KEEPING 3
           16829   ~0%    {3}    | SCAN OUTPUT In.0, In.2, In.1

          182949   ~1%    {3} r5 = r1 UNION r2 UNION r3 UNION r4
          182949   ~1%    {3}    | AND NOT `TypeInference::MethodCallMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#e8abf748#prev`(FIRST 3)
                          return r5
```

After
```
Pipeline standard for TypeInference::MethodCallMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#e8abf748@31ee547w was evaluated in 801 iterations totaling 19ms (delta sizes total: 182946).
         81298   ~0%    {5} r1 = JOIN TypeInference::MethodCallMatching::AccessConstraint::MkRelevantAccess#7a01048b#prev_delta WITH `TypeInference::MethodCallMatchingInput::Access.getInferredSelfType/3#dispred#45b2f893#prev` ON FIRST 3 OUTPUT Lhs.4, Rhs.4, _, Lhs.3, Rhs.3
                        {3}    | REWRITE WITH Tmp.2 := "", Out.2 := InverseAppend(In.3,Tmp.2,In.4) KEEPING 3
         64110   ~1%    {3}    | SCAN OUTPUT In.0, In.2, In.1

         39574   ~0%    {5} r2 = JOIN TypeInference::MethodCallMatching::AccessConstraint::MkRelevantAccess#7a01048b#prev_delta WITH `TypeInference::MethodCallMatchingInput::Access.getInferredNonSelfType/2#dispred#b181cb0a#prev` ON FIRST 2 OUTPUT Lhs.4, Rhs.3, _, Lhs.3, Rhs.2
                        {3}    | REWRITE WITH Tmp.2 := "", Out.2 := InverseAppend(In.3,Tmp.2,In.4) KEEPING 3
         36996   ~0%    {3}    | SCAN OUTPUT In.0, In.2, In.1

         16952   ~0%    {5} r3 = JOIN TypeInference::MethodCallMatching::AccessConstraint::MkRelevantAccess#7a01048b#prev WITH `TypeInference::MethodCallMatchingInput::Access.getInferredSelfType/3#dispred#45b2f893#prev_delta` ON FIRST 3 OUTPUT Lhs.4, Rhs.4, _, Lhs.3, Rhs.3
                        {3}    | REWRITE WITH Tmp.2 := "", Out.2 := InverseAppend(In.3,Tmp.2,In.4) KEEPING 3
         16829   ~0%    {3}    | SCAN OUTPUT In.0, In.2, In.1

         90175   ~0%    {5} r4 = JOIN TypeInference::MethodCallMatching::AccessConstraint::MkRelevantAccess#7a01048b#prev WITH `TypeInference::MethodCallMatchingInput::Access.getInferredNonSelfType/2#dispred#b181cb0a#prev_delta` ON FIRST 2 OUTPUT Lhs.4, Rhs.3, _, Lhs.3, Rhs.2
                        {3}    | REWRITE WITH Tmp.2 := "", Out.2 := InverseAppend(In.3,Tmp.2,In.4) KEEPING 3
         65014   ~0%    {3}    | SCAN OUTPUT In.0, In.2, In.1

        182949   ~1%    {3} r5 = r1 UNION r2 UNION r3 UNION r4
        182949   ~1%    {3}    | AND NOT `TypeInference::MethodCallMatching::AccessConstraint::RelevantAccess.getTypeAt/1#dispred#e8abf748#prev`(FIRST 3)
                        return r5
```
2025-10-28 13:09:32 +01:00
Nora Dimitrijević
727bddea19 Merge pull request #20607 from d10c/d10c/update-diff-informed-testing
Update diff-informed testing to always treat sources and sinks as alert locations
2025-10-28 11:52:31 +01:00
Tom Hvitved
409f7fb743 Address review comments 2025-10-28 11:48:45 +01:00
Geoffrey White
d6c4ab2724 Merge branch 'main' into gen2 2025-10-28 09:26:13 +00:00
Geoffrey White
abcc1712d5 Rust: Remove more redundant models. 2025-10-28 09:26:11 +00:00
Nora Dimitrijević
a0975e7e19 Constrain location overrides to actual sources/sinks 2025-10-28 09:42:20 +01:00
Nora Dimitrijević
96e1536769 C++/SqlTainted 2025-10-28 09:42:17 +01:00
Nora Dimitrijević
8e0c453c37 Rust/InsecureCookie 2025-10-28 09:42:14 +01:00
Nora Dimitrijević
4952cb27fb Rust/AccessAfterLifetime 2025-10-28 09:42:11 +01:00
Nora Dimitrijević
0f0bd0f455 Go/SSRF
go/ql/src/experimental/CWE-918/SSRF.ql
2025-10-28 09:42:09 +01:00
Nora Dimitrijević
d41268fc84 Go/UnhandledCloseWritableHandle 2025-10-28 09:42:06 +01:00
Nora Dimitrijević
ec63547925 C++/UseOfHttp 2025-10-28 09:42:03 +01:00
Nora Dimitrijević
a65d4d5997 C++/TaintedAllocationSize 2025-10-28 09:42:01 +01:00
Nora Dimitrijević
f3d51e0151 C++/ArithmeticUncontrolled 2025-10-28 09:41:57 +01:00
Nora Dimitrijević
1321cbb021 C++/DecompressionBombs 2025-10-28 09:41:55 +01:00
Nora Dimitrijević
bbe2bf2b7f C++/CleartextTransmission 2025-10-28 09:41:52 +01:00
Nora Dimitrijević
b0180409f4 C++/CleartextFileWrite 2025-10-28 09:41:49 +01:00
Nora Dimitrijević
d89aa0f19d C++/CleartextBufferWrite 2025-10-28 09:41:46 +01:00
Nora Dimitrijević
17b261a506 C++/AuthenticationBypass 2025-10-28 09:41:43 +01:00
Nora Dimitrijević
0ed27f4e81 C++/CleartextSqliteDatabase 2025-10-28 09:41:40 +01:00
Nora Dimitrijević
f7a1a4cf75 C++/NonConstantFormat 2025-10-28 09:41:38 +01:00
Nora Dimitrijević
2756e8255f C++/UnboundedWrite 2025-10-28 09:41:35 +01:00
Nora Dimitrijević
a4ac0392a6 C++/OverflowDestination 2025-10-28 09:41:32 +01:00
Nora Dimitrijević
65d79ff6fc C++/ExecTainted 2025-10-28 09:41:29 +01:00
Nora Dimitrijević
464f6cb096 C++/ConstantSizeArrayOffByOne 2025-10-28 09:41:26 +01:00
Nora Dimitrijević
974d174757 Actions/CodeInjectionQuery
actions/ql/src/Security/CWE-094/CodeInjectionMedium.ql

actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql
2025-10-28 09:41:24 +01:00
Nora Dimitrijević
62fde8f6e7 Actions/ArgumentInjectionQuery
actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql

actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionMedium.ql
2025-10-28 09:41:21 +01:00
Nora Dimitrijević
c40223319c Actions/EnvVarInjectionQuery
actions/ql/src/Security/CWE-077/EnvVarInjectionMedium.ql

actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql
2025-10-28 09:41:18 +01:00
Nora Dimitrijević
edc72d29d7 Actions/EnvPathInjectionQuery
actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.ql

actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql
2025-10-28 09:41:16 +01:00
Nora Dimitrijević
1f53ffbdd7 Actions/ArtifactPoisoningQuery
actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql

actions/ql/src/Security/CWE-829/ArtifactPoisoningMedium.ql
2025-10-28 09:41:13 +01:00
Nora Dimitrijević
8a750b3125 Swift/UnsafeUnpackQuery
swift/ql/src/experimental/Security/CWE-022/UnsafeUnpack.ql
2025-10-28 09:41:10 +01:00
Nora Dimitrijević
895bd93062 Swift/UnsafeJsEvalQuery
swift/ql/src/queries/Security/CWE-094/UnsafeJsEval.ql
2025-10-28 09:41:08 +01:00
Nora Dimitrijević
cd86e7d6f5 Swift/StringLengthConflationQuery
swift/ql/src/queries/Security/CWE-135/StringLengthConflation.ql
2025-10-28 09:41:05 +01:00
Nora Dimitrijević
5a6f731ab7 Swift/StaticInitializationVectorQuery
swift/ql/src/queries/Security/CWE-1204/StaticInitializationVector.ql
2025-10-28 09:41:02 +01:00
Nora Dimitrijević
7ba7c435f2 Swift/InsufficientHashIterationsQuery
swift/ql/src/queries/Security/CWE-916/InsufficientHashIterations.ql
2025-10-28 09:41:00 +01:00
Nora Dimitrijević
6c52d4ba91 Swift/ConstantPasswordQuery
swift/ql/src/queries/Security/CWE-259/ConstantPassword.ql
2025-10-28 09:40:57 +01:00
Nora Dimitrijević
c190fae737 Swift/CleartextStoragePreferencesQuery
swift/ql/src/queries/Security/CWE-312/CleartextStoragePreferences.ql
2025-10-28 09:40:54 +01:00
Nora Dimitrijević
2332cea330 Swift/CleartextStorageDatabaseQuery
swift/ql/src/queries/Security/CWE-311/CleartextStorageDatabase.ql
2025-10-28 09:40:51 +01:00
Nora Dimitrijević
462d8c5dc4 Shared: update qldoc 2025-10-28 09:40:48 +01:00
Nora Dimitrijević
6ede0a7950 Ruby/WeakFilePermissions 2025-10-28 09:40:46 +01:00
Nora Dimitrijević
495be51ae7 Ruby/WeakParams 2025-10-28 09:40:43 +01:00
Nora Dimitrijević
50f2540db1 Ruby/ManuallyCheckHttpVerb 2025-10-28 09:40:41 +01:00
Nora Dimitrijević
6519bd9909 Ruby/PolynomialReDoSQuery
ruby/ql/src/queries/security/cwe-1333/PolynomialReDoS.ql
2025-10-28 09:40:38 +01:00
Nora Dimitrijević
1ff24cbee8 Python/LdapInsecureAuth
python/ql/src/experimental/Security/CWE-522/LdapInsecureAuth.ql
2025-10-28 09:40:35 +01:00
Nora Dimitrijević
998de144ea Python/CorsBypass 2025-10-28 09:40:32 +01:00
Nora Dimitrijević
4bc9ede2e8 Python/UnsafeUsageOfClientSideEncryptionVersion 2025-10-28 09:40:30 +01:00
Nora Dimitrijević
6d57316862 Python/UnsafeUnpackQuery
python/ql/src/experimental/Security/CWE-022bis/UnsafeUnpack.ql
2025-10-28 09:40:27 +01:00
Nora Dimitrijević
37fff48dcd Python/ServerSideRequestForgeryQuery
python/ql/src/Security/CWE-918/PartialServerSideRequestForgery.ql
2025-10-28 09:40:24 +01:00
Nora Dimitrijević
baccdcc07f Python/PolynomialReDoSQuery
python/ql/src/Security/CWE-730/PolynomialReDoS.ql
2025-10-28 09:40:21 +01:00
Nora Dimitrijević
bb80d83276 JS/SSRF
javascript/ql/src/experimental/Security/CWE-918/SSRF.ql
2025-10-28 09:40:19 +01:00
Nora Dimitrijević
bcdbe0b50a JS/PolynomialReDoSQuery
javascript/ql/src/Performance/PolynomialReDoS.ql
2025-10-28 09:40:16 +01:00
Nora Dimitrijević
94343254e3 JS/ShellCommandInjectionFromEnvironmentQuery
javascript/ql/src/Security/CWE-078/ShellCommandInjectionFromEnvironment.ql
2025-10-28 09:40:14 +01:00
Nora Dimitrijević
71cf042607 JS/IndirectCommandInjectionQuery
javascript/ql/src/Security/CWE-078/IndirectCommandInjection.ql
2025-10-28 09:40:11 +01:00
Nora Dimitrijević
2a30ea923a JS/CommandInjectionQuery
javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-078/CommandInjection.ql

javascript/ql/src/Security/CWE-078/CommandInjection.ql
2025-10-28 09:40:09 +01:00
Nora Dimitrijević
f24a6f64ab Java/WebviewDebugEnabledQuery
java/ql/src/Security/CWE/CWE-489/WebviewDebuggingEnabled.ql
2025-10-28 09:40:06 +01:00
Nora Dimitrijević
518c0818a4 Java/UnsafeDeserializationQuery
java/ql/src/Security/CWE/CWE-502/UnsafeDeserialization.ql
2025-10-28 09:40:03 +01:00
Nora Dimitrijević
4439322e88 Java/TempDirLocalInformationDisclosureQuery
java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql
2025-10-28 09:40:01 +01:00
Nora Dimitrijević
2a889f4f98 Java/TaintedPermissionsCheckQuery
java/ql/src/Security/CWE/CWE-807/TaintedPermissionsCheck.ql
2025-10-28 09:39:58 +01:00
Nora Dimitrijević
697f428eae Java/TaintedEnvironmentVariableQuery
java/ql/src/Security/CWE/CWE-078/ExecTaintedEnvironment.ql
2025-10-28 09:39:55 +01:00
Nora Dimitrijević
72a97773b1 Java/NumericCastTaintedQuery
java/ql/src/Security/CWE/CWE-681/NumericCastTainted.ql
2025-10-28 09:39:52 +01:00
Nora Dimitrijević
247ae1d23c Java/MaybeBrokenCryptoAlgorithmQuery
java/ql/src/Security/CWE/CWE-327/MaybeBrokenCryptoAlgorithm.ql
2025-10-28 09:39:50 +01:00
Nora Dimitrijević
eebff9c282 Java/ImproperValidationOfArrayConstructionFlow
java/ql/src/Security/CWE/CWE-129/ImproperValidationOfArrayConstruction.ql
2025-10-28 09:39:47 +01:00
Nora Dimitrijević
9eeeec336e Java/ImproperValidationOfArrayConstructionCodeSpecifiedQuery
java/ql/src/Security/CWE/CWE-129/ImproperValidationOfArrayConstructionCodeSpecified.ql
2025-10-28 09:39:45 +01:00
Nora Dimitrijević
dc1dff98b0 Java/ConditionalBypass
java/ql/src/Security/CWE/CWE-807/ConditionalBypass.ql
2025-10-28 09:39:42 +01:00
Nora Dimitrijević
4482e831d7 Java/CommandLineQuery
85a4dd0325/java/ql/src/Security/CWE/CWE-078/ExecTainted.ql

857b51be58/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql

b6e56f26c7/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql
2025-10-28 09:39:39 +01:00
Nora Dimitrijević
b023880a0a Java/BrokenCryptoAlgorithmQuery
java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql
2025-10-28 09:39:37 +01:00
Nora Dimitrijević
1129230e10 Java/ArithmeticUncontrolledQuery
java/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql
2025-10-28 09:39:34 +01:00
Nora Dimitrijević
a228936c63 Java/ArithmeticTainted
java/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql
2025-10-28 09:39:31 +01:00
Nora Dimitrijević
913550f408 Java/ArbitraryApkInstallationQuery
java/ql/src/Security/CWE/CWE-094/ArbitraryApkInstallation.ql
2025-10-28 09:39:29 +01:00
Nora Dimitrijević
59a8e9b78c Go/InsufficientKeySize 2025-10-28 09:39:27 +01:00
Nora Dimitrijević
7722f31cb8 Go/DivideByZero 2025-10-28 09:39:24 +01:00
Nora Dimitrijević
ba22f0d7d2 C#/DontInstallRootCert 2025-10-28 09:39:21 +01:00
Nora Dimitrijević
ad31f1ab6d C++/WordexpTainted
Same file usees source and sink as endpoints
2025-10-28 09:39:19 +01:00
Nora Dimitrijević
5a1a887fd2 Actions/ReusableWorkflowsSummaries 2025-10-28 09:39:16 +01:00
Nora Dimitrijević
1243c6362d Actions/ReusableWorkflowsSources 2025-10-28 09:39:14 +01:00
Nora Dimitrijević
a972ef7e31 Actions/ReusableWorkflowsSinks
Same file uses source as endpoint
2025-10-28 09:39:11 +01:00
Nora Dimitrijević
9c24ce0650 Actions/CompositeActionsSummaries
Same file uses source as endpoint
2025-10-28 09:39:09 +01:00
Nora Dimitrijević
78f2cee51c Actions/CompositeActionsSources
Same file uses source as endpoint
2025-10-28 09:39:06 +01:00
Nora Dimitrijević
d36b721513 Actions/CompositeActionsSinks
Same file uses source as endpoint
2025-10-28 09:38:55 +01:00
Nora Dimitrijević
bb10307303 Actions/SecretExfiltrationQuery
actions/ql/src/experimental/Security/CWE-200/SecretExfiltration.ql uses source as endpoint
2025-10-28 09:38:38 +01:00
Nora Dimitrijević
890ca8e7d1 Actions/RequestForgeryQuery
actions/ql/src/experimental/Security/CWE-918/RequestForgery.ql uses source as endpoint
2025-10-28 09:38:21 +01:00
Nora Dimitrijević
3fa8259042 Actions/OutputClobberingQuery
actions/ql/src/experimental/Security/CWE-074/OutputClobberingHigh.ql uses source as endpoint
2025-10-28 09:38:01 +01:00
Asger F
8d49f26f3d Merge pull request #20397 from asgerf/js/build-artifact-leak-fp
JS: Fix FP in js/build-artifact-leak when keys come from an array of constants
2025-10-28 06:40:13 +01:00
Geoffrey White
b76f27d10b Rust: Remove redundant model. 2025-10-27 18:47:17 +00:00
Geoffrey White
03204b7881 Rust: Accept tests repaired. 2025-10-27 17:53:40 +00:00
Alexander Eyers-Taylor
227e1fcbde Merge pull request #20598 from github/alexet/overlay-query-libraries
Java: Make some query libraries local.
2025-10-27 17:52:27 +00:00
Geoffrey White
0c92b33b8f Revert "Rust: Generalize more models."
This reverts commit 56811d02ac.
2025-10-27 17:47:00 +00:00
Geoffrey White
a468b1d647 Rust: Accept regressions spotted by CI. 2025-10-27 17:46:01 +00:00
Paolo Tranquilli
630ea7bd0a Merge pull request #20641 from github/redsun82/fix-pytest-build-as-test-windows
Pytest: fix the `build-as-test` mode on Windows
2025-10-27 15:47:24 +01:00
Geoffrey White
56811d02ac Rust: Generalize more models. 2025-10-27 14:11:09 +00:00
Idriss Riouak
11a7d53002 Merge pull request #20657 from github/idrissrio/java-maven-fix
Java: Add integration test to reproduce regression
2025-10-27 15:09:41 +01:00
yoff
406e48b3bb java: fix aliasing FP
reorganise code, adding `LockField`
2025-10-27 14:30:25 +01:00
yoff
531b994819 java: add test for aliasing
found by triage
2025-10-27 14:27:32 +01:00
idrissrio
d473b36918 Java: Accept new test results after extractor changes 2025-10-27 14:26:48 +01:00
idrissrio
714b2ad565 Java: Add integration test for maven 2025-10-27 14:26:47 +01:00
Simon Friis Vindum
35b4a36f37 Merge pull request #20691 from paldepind/cpp/range-analysis-refactor
C++: A few small refactors to the simple range analysis library
2025-10-27 14:15:37 +01:00
Anders Schack-Mulligen
31428b2f66 Merge pull request #20700 from aschackmull/java/delete-old-ssa-consistency
Java: Remove old SSA consistency queries.
2025-10-27 14:12:09 +01:00
Paolo Tranquilli
105f810654 Merge pull request #20658 from github/redsun82/csharp-fix-xframe-options-in-location
Csharp: fix `cs/web/missing-x-frame-options` to also consider `location` elements
2025-10-27 13:49:09 +01:00
Geoffrey White
bd11873e0d Rust: Generalize a model of futures_io...poll_read. 2025-10-27 12:22:13 +00:00
Chris Smowton
2e0e9e0834 Merge pull request #20550 from github/smowton/admin/document-rails-5-csrf
Ruby: Update CSRF protection notes in documentation
2025-10-27 12:19:16 +00:00
Anders Schack-Mulligen
96fc1e889a Java: Accept .expected file. 2025-10-27 13:17:53 +01:00
Geoffrey White
c8b8046302 Rust: Generalize a model of alloc::boxed::Box. 2025-10-27 12:09:05 +00:00
Geoffrey White
d650ccb74b Rust: Generalize some std::io::Read models. 2025-10-27 12:09:04 +00:00
Anders Schack-Mulligen
02a942554d Java: Remove old SSA consistency queries. 2025-10-27 12:55:43 +01:00
Jeroen Ketema
47b26ddea4 Merge pull request #20446 from github/jketema/swift-6.2
Swift: Make extractor compile with Swift 6.2
2025-10-27 12:24:16 +01:00
Jeroen Ketema
be0d405f6d Swift: Update artifacts 2025-10-27 11:28:53 +01:00
yoff
83508ba661 java: adjust qhelp and examples for SafePublication 2025-10-27 11:25:51 +01:00
Jeroen Ketema
aabc8bc38b Swift: Fix typo in change note 2025-10-27 10:54:39 +01:00
Jeroen Ketema
2022dd833e Swift: Address review comments 2025-10-27 10:48:02 +01:00
Paolo Tranquilli
3f98d32124 C#: Update change note for location handling in query 2025-10-27 09:51:10 +01:00
Nicolas Will
d4787520fd Merge pull request #20690 from bdrodes/weak_symmetric_cipher_bug
Crypto: Fix bug in weak symmetric cipher query
2025-10-24 22:38:07 +02:00
Nicolas Will
e7bd435bee Merge pull request #20696 from bdrodes/bad_mac_decrypt_then_mac
Crypto: Adding bad decrypt then mac order query.
2025-10-24 22:07:26 +02:00
REDMOND\brodes
65d0ca9e53 Crypto: Simplifying expression for ql-for-ql alert. 2025-10-24 14:08:25 -04:00
REDMOND\brodes
0394816756 Crypto: typo fix 2025-10-24 14:06:52 -04:00
REDMOND\brodes
b20689fa46 Crypto: removing comments 2025-10-24 14:06:08 -04:00
REDMOND\brodes
0e624f51d5 Crypto: Adding bad decrypt then mac order query. Fixes to BadMacOrderMacOnEncryptPlaintext as well. 2025-10-24 12:44:28 -04:00
Simon Friis Vindum
d1ea1af945 C++: Make small trivial tweaks 2025-10-24 16:16:57 +02:00
Simon Friis Vindum
5709964fbf C++: Simplify boundFromGuard
The last disjunct in `boundFromGuard` is moved into `linearBoundFromGuard`. This avoids repeating the calculation for `boundValue`.

`getBounds` and `getExprTypeBounds` are turned into predicates with result. Their middle argument was the "output" which was confusing.
2025-10-24 16:12:05 +02:00
Simon Friis Vindum
383e6a44aa C++: Use or instead of if
The proposition in the true branch implied the condition, so `or` is more appropriate. Also eliminated an existentially quantified variable.
2025-10-24 16:08:35 +02:00
Simon Friis Vindum
3af9885489 C++: Fix typos in tests 2025-10-24 16:04:34 +02:00
Simon Friis Vindum
17e0dec08a C++: Add toString for RelationStrictness
This helps for debugging.
2025-10-24 16:01:38 +02:00
Simon Friis Vindum
a0a6f288b5 Merge pull request #20645 from paldepind/cpp/range-analysis-measure
C++: Range analysis measure bounds
2025-10-24 15:30:07 +02:00
Jeroen Ketema
74384bbeae Swift: Add change notes 2025-10-24 14:38:01 +02:00
Jeroen Ketema
e415772688 Swift: Add upgrade and downgrade scripts 2025-10-24 14:38:00 +02:00
Jeroen Ketema
2843761471 Swift: Special case the xcode-fails-spm-works test results on macOS 26
macOS 26 comes with Xcode 26, which does not call the compiler on the file
with the `#error` diagnostic directive.
2025-10-24 14:37:58 +02:00
Jeroen Ketema
79fd35a482 Swift: Remove flags related to explict modules in the tracer config
We have not found a good way to support these.
2025-10-24 14:37:57 +02:00
Jeroen Ketema
06d0d48416 Swift: Work around assertion failures in mangler 2025-10-24 14:37:55 +02:00
Jeroen Ketema
4d9827ff77 Swift: Update expected integration test results 2025-10-24 14:37:54 +02:00
Jeroen Ketema
192c9c3820 Swift: Document that tests disabled with Swift 6.1 are still broken with 6.2 2025-10-24 14:37:53 +02:00
Jeroen Ketema
b50ffe2e0c Swift: Update PoundDiagnosticDecl test
These elements are no longer present in the Swift 6.2 AST.
2025-10-24 14:37:52 +02:00
Jeroen Ketema
7890dc6030 Swift: Update expected test results after 6.2 update 2025-10-24 14:37:51 +02:00
Jeroen Ketema
bc835a310a Swift: Update KeyPathComponent for new kind values 2025-10-24 14:37:49 +02:00
Jeroen Ketema
d890feedda Swift: Compensate for backwards going locations 2025-10-24 14:37:48 +02:00
Jeroen Ketema
626bc55caf Swift: Fix AvailabilitySpec trap generation 2025-10-24 14:37:47 +02:00
Jeroen Ketema
300b5b15e7 Swift: Mangle function type lifetimes 2025-10-24 14:37:46 +02:00
Jeroen Ketema
e79c0b0405 Swift: Update generated files 2025-10-24 14:37:45 +02:00
Jeroen Ketema
22dddb0216 Swift: Fix unavailability checks after 6.2 upgrade 2025-10-24 14:37:43 +02:00
Jeroen Ketema
2ef8bb0c53 Swift: Make extractor compile with Swift 6.2 2025-10-24 14:37:42 +02:00
Tom Hvitved
32f21d6d49 Merge pull request #20688 from hvitved/java/request-forgery-matches-sanitizer
Java: Treat `x.matches(regexp)` as a sanitizer for request forgery
2025-10-24 14:34:32 +02:00
REDMOND\brodes
ed492c7d5a Crypto: Fixed bug in WeakSymmetricCipher.qll, forgot to not only filter if !=AES but the algorithm must still be a SymmetriCipher algorithm. 2025-10-24 08:16:22 -04:00
Tom Hvitved
a4eab484ce Address review comments 2025-10-24 13:32:39 +02:00
Joe Farebrother
8c277bd1d9 Merge pull request #20494 from joefarebrother/python-insecure-cookie-split
Python: Split Insecure Cookie query into multiple queries
2025-10-24 11:10:20 +01:00
Tom Hvitved
0e885e9297 Rust: Compute incompatible blanket implementations 2025-10-24 11:37:24 +02:00
Tom Hvitved
2a43a95049 Rust: More type inference tests 2025-10-24 11:37:22 +02:00
Tom Hvitved
672977acfa Merge pull request #20592 from hvitved/rust/type-inference-branch-propagation
Rust: Non-symmetric type propagation for lub coercions
2025-10-24 11:35:24 +02:00
Tom Hvitved
ce379161fc Add change note 2025-10-24 09:34:11 +02:00
Tom Hvitved
74411ff979 Merge pull request #20687 from hvitved/js/remove-invalid-qhelp-links
JS: Remove two invalid QHelp links
2025-10-24 09:22:33 +02:00
Tom Hvitved
7a9cb64e2e Java: Treat x.matches(regexp) as a sanitizer for request forgery 2025-10-24 09:06:57 +02:00
Anders Schack-Mulligen
3542cdab43 Merge pull request #20677 from aschackmull/csharp/disable-exc-split
C#: Delete exception splitting.
2025-10-24 08:46:33 +02:00
Tom Hvitved
eb9df008b0 JS: Remove two invalid QHelp links 2025-10-24 08:45:12 +02:00
Tom Hvitved
ff31f0e3df Address review comments 2025-10-23 20:17:28 +02:00
Geoffrey White
7acd214d7b Merge pull request #20673 from geoffw0/sourcestest
Rust: Split up the dataflow/sources test
2025-10-23 13:08:43 +01:00
Anders Schack-Mulligen
6f72234fec Merge pull request #20680 from aschackmull/shared/align-ssa-interface
Shared: Align SSA interfaces in Guards and ControlFlowReachability with shared SSA
2025-10-23 13:12:31 +02:00
Anders Schack-Mulligen
ebb50cd402 C#: Accept qltest changes. 2025-10-23 12:48:44 +02:00
Paolo Tranquilli
d11b44599e Merge pull request #20679 from github/redsun82/fix-rust-vendor-check
Bazel: upgrade `rules_rust`
2025-10-23 12:14:32 +02:00
Anders Schack-Mulligen
72d83cc966 ControlFlowReachability: Align the SSA signature with the one from shared SSA. 2025-10-23 10:57:21 +02:00
Paolo Tranquilli
8f5f65e5fa Bazel: upgrade rules_rust 2025-10-23 10:49:51 +02:00
Anders Schack-Mulligen
f257c7a570 Guards: Align the SSA signature with the one from shared SSA. 2025-10-23 10:23:22 +02:00
Anders Schack-Mulligen
f6cddc9db7 Merge pull request #20678 from aschackmull/shared/rename-cfg-reach
Shared/Java: Rename ControlFlowReachability library.
2025-10-23 10:22:15 +02:00
Geoffrey White
47334fbab7 Rust: Accept changes to the web_frameworks results. 2025-10-23 09:06:11 +01:00
Anders Schack-Mulligen
20147cdd2b Shared/Java: Rename ControlFlowReachability library. 2025-10-23 09:07:34 +02:00
Anders Schack-Mulligen
dff327ea16 C#: Delete exception splitting. 2025-10-23 08:56:56 +02:00
Anders Schack-Mulligen
8a3f62b9b6 Merge pull request #20558 from aschackmull/csharp/guards3
C#: Instantiate shared Guards and shared ControlFlowReachability and replace nullness
2025-10-23 08:43:14 +02:00
Nicolas Will
c7ef8a5ab3 Merge pull request #20605 from bdrodes/santander-java-crypto-check
Crypto: Add Java Cryptographic Analysis Queries
2025-10-23 01:30:50 +02:00
REDMOND\brodes
bdad95d810 Crypto: Fixed alphabetical ordering issue in not_included_in_qls.expected 2025-10-22 15:56:14 -04:00
REDMOND\brodes
08379393b3 Crypto: Fix off by one column issue in unit tests. 2025-10-22 15:50:33 -04:00
REDMOND\brodes
3561d01144 Crytpo: Trying to fix in pipeline test failure, experimentally altering a line to see if this forces the test to pass. The test is off by one column in the piepline 2025-10-22 14:16:12 -04:00
Tom Hvitved
65b706ab80 Rust: Non-symmetric type propagation for lub coercions 2025-10-22 19:57:38 +02:00
Tom Hvitved
00bf049c85 Rust: Add more type inference tests 2025-10-22 19:57:37 +02:00
Tom Hvitved
c84cec9d29 Merge pull request #20664 from hvitved/rust/callable-get-body
Rust: Add `Callable.getBody()`
2025-10-22 19:57:14 +02:00
Geoffrey White
e18bf1661a Rust: Accept result de-regression. 2025-10-22 17:52:12 +01:00
Geoffrey White
6b08297c2a Rust: Repair after merge. 2025-10-22 17:46:25 +01:00
Geoffrey White
bc4d8a8425 Merge branch 'main' into sourcestest 2025-10-22 17:31:25 +01:00
Ben Rodes
e16543ab6d Merge branch 'main' into santander-java-crypto-check 2025-10-22 11:51:13 -04:00
Geoffrey White
5d2ddbfa8e Merge pull request #20670 from geoffw0/missingmetric
Rust: Add expressions with known type metric
2025-10-22 15:42:48 +01:00
Tom Hvitved
4b6c39004f Rust: Add DB downgrade script 2025-10-22 16:40:56 +02:00
Tom Hvitved
8b10f68e28 Rust: Add DB upgrade scripts 2025-10-22 16:40:54 +02:00
Tom Hvitved
944ebc5267 Rust: Add Callable.getBody() 2025-10-22 16:40:53 +02:00
Tom Hvitved
7d0509b6af Merge pull request #20282 from hvitved/rust/type-inference-method-call-resolution-rework
Rust: Rework call resolution and type inference for calls
2025-10-22 16:37:26 +02:00
REDMOND\brodes
db6d3ad054 Crypto: Fix typo in not_included_in_qls.expected. 2025-10-22 10:31:19 -04:00
REDMOND\brodes
dd60cf9395 Crypto: Adjust output of bad mac order queries, update associated bad mac order expected results, fix erroneous change to ID for a slicing query, update model to specify elliptic curve type as a property, update associated graph test expected files, update the not_included_in_qls.expected to reflect all queries now under quantum. 2025-10-22 10:29:31 -04:00
Florin Coada
83f9fb14b9 Merge pull request #20660 from github/changedocs/2.23.3
Add changelog entry for CodeQL CLI version 2.23.3
2025-10-22 14:58:00 +01:00
Anders Schack-Mulligen
7d0e4f58f3 C#: Fix join-order issue in ConstantCondition. 2025-10-22 15:52:51 +02:00
Anders Schack-Mulligen
f172e36eee C#: Address more review comments. 2025-10-22 15:50:10 +02:00
Paolo Tranquilli
35990586ae Merge pull request #20672 from github/redsun82/copilot
Copilot: move instructions to path-specific files
2025-10-22 15:41:28 +02:00
Michael Nebel
83343e1031 Merge pull request #20663 from michaelnebel/csharp/dotnet10rc2traced
C#: Tracer support for invoking `csc` directly.
2025-10-22 15:36:34 +02:00
Tom Hvitved
cf05414a93 Address review comments (iv) 2025-10-22 15:29:57 +02:00
Geoffrey White
6878a43223 Rust: Add missing file. 2025-10-22 14:18:16 +01:00
Paolo Tranquilli
f0c56edfc7 Update .github/instructions/expected-files.instructions.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-22 15:14:51 +02:00
Paolo Tranquilli
31627b4eb9 Copilot: move instructions to path-specific files
This is now supported. See

https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions

for details.
2025-10-22 14:54:37 +02:00
Geoffrey White
8336a956c0 Rust: Add consistency check failures. 2025-10-22 13:50:49 +01:00
Michael Nebel
47c751be32 C#: Only run integration test on windows and linux. 2025-10-22 14:12:17 +02:00
Napalys Klicius
9c70ae04fb Add change note 2025-10-22 11:48:16 +00:00
Napalys Klicius
91b0aaa631 Java: Lower security-severity for Insecure Cookie query to 4.0 2025-10-22 11:45:04 +00:00
Napalys Klicius
fa47174013 CWE-020: Lower security-severity for OverlyLargeRange queries to 4.0 2025-10-22 11:32:33 +00:00
Napalys Klicius
7b6720ce2c JS: Align DOM XSS query severity with other XSS queries 2025-10-22 11:30:34 +00:00
Michael Nebel
6a02649334 Merge pull request #20555 from michaelnebel/csharp/staridlocationsbuildless
C#: `*` on Source locations in BMN.
2025-10-22 13:28:11 +02:00
Michael Nebel
7a414089e4 C#: Use autobuilder instead of supplying build command. 2025-10-22 13:25:23 +02:00
Michael Nebel
e14879ba33 C#: Add integration test for DB creation using .NET 10 RC 2. 2025-10-22 12:59:40 +02:00
Michael Nebel
d5ff9bf5d0 C#: Collapse tracer cases for csc, csc.exe and mcs.exe and remote quoting. 2025-10-22 11:58:02 +02:00
Owen Mansel-Chan
50e0ca8cb4 Merge pull request #20622 from owen-mc/docs/fix-dataflow-examples
Docs: add path query example to data flow docs
2025-10-22 10:57:42 +01:00
Tom Hvitved
2cc8b7f6dd Address review comments (iii) 2025-10-22 11:07:20 +02:00
Anders Schack-Mulligen
c44e6fc3f0 C#: Qldoc tweaks. 2025-10-22 10:22:26 +02:00
Geoffrey White
9b11ec53d4 Rust: Merge InlineFlow.ql test queries using .qlrefs. 2025-10-22 09:02:18 +01:00
Geoffrey White
4893f53607 Rust: Fix a comment. 2025-10-22 09:02:15 +01:00
Geoffrey White
42224fe642 Rust: Clean up the sources test directory. 2025-10-22 09:02:14 +01:00
Geoffrey White
7efd4d26a0 Rust: Accept result regression.
Presumably because of a change in context, e.g. the module wrapping
this test now, or the different inputs.  Either way we *should* be
able to get the result, and what we *actually* get in our analysis
doesn't change here either.  We've just slightly changed the test
and exposed a gap.
2025-10-22 09:02:12 +01:00
Geoffrey White
8a7e206401 Rust: Move the remaining test_futures_io test into net. 2025-10-22 09:02:11 +01:00
Geoffrey White
8c02cb2ed1 Rust: Split off sources/web_frameworks. 2025-10-22 09:02:10 +01:00
Geoffrey White
5ba331e986 Rust: Splits off sources/net. 2025-10-22 09:01:34 +01:00
Geoffrey White
7ddd441e5f Rust: Split off sources/database test. 2025-10-22 09:00:42 +01:00
Geoffrey White
81132beec0 Rust: Split off sources/stdin test. 2025-10-22 09:00:18 +01:00
Geoffrey White
0cc9331abf Rust: Split off sources/file test. 2025-10-22 08:59:50 +01:00
Geoffrey White
a631130030 Rust: Split off sources/env test. 2025-10-22 08:58:59 +01:00
Tom Hvitved
5550da4870 Address review comments (ii) 2025-10-21 20:53:39 +02:00
Tom Hvitved
41602d3efa Address review comments 2025-10-21 18:44:42 +02:00
Tom Hvitved
c2ba4ba3fc Rust: Add change note 2025-10-21 18:44:41 +02:00
Tom Hvitved
ee0467d74c Rust: Update expected output 2025-10-21 18:44:37 +02:00
Tom Hvitved
2f2c6866c4 Rust: Use doublyBoundedFastTC in TraitIsVisible 2025-10-21 17:58:54 +02:00
Tom Hvitved
4b70d20cd6 Rust: Rework call resolution and type inference for calls 2025-10-21 17:58:52 +02:00
Tom Hvitved
e12e9045a3 Rust: Add more type inference tests 2025-10-21 17:58:51 +02:00
Owen Mansel-Chan
c8c1c6e592 Address review comments 2025-10-21 16:54:28 +01:00
REDMOND\brodes
b374ba3d0c Crypto: Updating java 'location' information to be just a location's toString to be more verbose/precise. 2025-10-21 11:48:37 -04:00
Paolo Tranquilli
6d31c6abe0 Merge branch 'main' into redsun82/fix-pytest-build-as-test-windows 2025-10-21 17:04:57 +02:00
REDMOND\brodes
ddeb42cddb Crypto: Adding false positive to BadMacUse.java, we have no way to avoid this FP currently but should note it exists in the test case. 2025-10-21 11:04:57 -04:00
Paolo Tranquilli
a0d2005e1f Merge pull request #20655 from github/redsun82/rust-file-semantics-predicates
Rust: introduce `ExtractedFile::hasSemantics` and `::isSkippedByCompilation`
2025-10-21 17:02:28 +02:00
REDMOND\brodes
c50175bc9b Crypto: ql-for-ql alert fixes. 2025-10-21 10:32:00 -04:00
Geoffrey White
edabfa73bf Rust: Delete a no-longer-used test file. 2025-10-21 15:30:32 +01:00
Simon Friis Vindum
f207404b0d C++: Accept test changes 2025-10-21 16:03:12 +02:00
Geoffrey White
7da00b3e9d Rust: Change note. 2025-10-21 13:33:17 +01:00
Geoffrey White
751d62aefb Rust: Add the metric to rust/diagnostic/database-quality (with a very low threshold for the time being). 2025-10-21 13:29:46 +01:00
Geoffrey White
a4aa397ea0 Merge pull request #20634 from geoffw0/mysql2
Rust: Model mysql and mysql_async sources
2025-10-21 13:23:03 +01:00
yoff
9e77e5b046 java: add test with deeper paths
also format test files
2025-10-21 14:02:36 +02:00
yoff
f183a7223f java: add test for notFullyMonitored 2025-10-21 13:40:29 +02:00
yoff
f4878b3806 java: make as many predicates private as possible 2025-10-21 13:25:26 +02:00
yoff
de05bfbce3 java: address review comments
- do not use `getQualifiedName`
- use camelCase
- rework alert predicates
2025-10-21 13:25:26 +02:00
Michael Nebel
def522d122 C#: Make sure that the file exists before attempting to get version info. 2025-10-21 13:12:21 +02:00
Michael Nebel
af5622a60e C#: Address review comments. 2025-10-21 13:03:53 +02:00
Geoffrey White
d691c3215f Rust: Add expressions with unknown type metric (expected by DCA). 2025-10-21 12:00:25 +01:00
yoff
715acefacc Apply suggestions from code review
Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com>
2025-10-21 12:52:59 +02:00
Anders Schack-Mulligen
414e5ecbce Merge pull request #20646 from aschackmull/ssa/ssa-sig
SSA: Add a shared signature for SSA and a module to implement it.
2025-10-21 12:14:08 +02:00
Paolo Tranquilli
316225bb88 Csharp: rename predicate 2025-10-21 11:47:54 +02:00
Paolo Tranquilli
6f8b1f6f4c Csharp: address review 2025-10-21 11:43:58 +02:00
Michael Nebel
6bc15bcedc C#: Add change-note. 2025-10-21 11:42:19 +02:00
Michael Nebel
e560ac197f C#: Tracer support for invoking csc directly. 2025-10-21 11:16:55 +02:00
Paolo Tranquilli
c728503517 Merge branch 'main' into redsun82/csharp-fix-xframe-options-in-location 2025-10-21 11:15:46 +02:00
Anders Schack-Mulligen
242f12d4be SSA: Remove variable capture reference from shared class. 2025-10-21 10:52:49 +02:00
Simon Friis Vindum
0badcfd663 C++: Address review comments 2025-10-21 09:47:58 +02:00
REDMOND\brodes
22c0f9fa91 Crypto: Adding a proof of concept bad mac ordering predicate that takes in an ArtifactNode to be used for graph generation to intercept nodes with known mac ordering issues, in order to format the node and output error messages in the graph. 2025-10-20 16:24:31 -04:00
REDMOND\brodes
eff94ef91f Crypto: To allow for graph generation to have properties informed by assessments, altering a few queries weak/vuln/bad crypto to have qll files that can be accessed for other purposes, like graph generation. Also altering weak symmetric cipher to look for non-aes algorithms to be more comprehensive. 2025-10-20 15:51:07 -04:00
REDMOND\brodes
cc436e897d Merge branch 'santander-java-crypto-check' of https://github.com/bdrodes/codeql into santander-java-crypto-check 2025-10-20 15:24:40 -04:00
REDMOND\brodes
354effe829 Crypto: Missing hash algorithms for HMAC operations in jca. 2025-10-20 15:24:18 -04:00
Taus
9efa20dfc7 Merge pull request #20654 from github/tausbn/add-query-history-patcher
Misc: Add script for patching the query history
2025-10-20 17:46:39 +02:00
Florin Coada
2c31090cf6 Update codeql-cli-2.23.3.rst 2025-10-20 14:20:17 +01:00
Florin Coada
aeee30b0c6 Add changelog entry for CodeQL CLI version 2.23.3 2025-10-20 14:17:40 +01:00
Geoffrey White
e4e7b1c528 Merge branch 'main' into mysql2 2025-10-20 14:06:48 +01:00
Anders Schack-Mulligen
be626bf0ce SSA: Address some review comments. 2025-10-20 14:02:56 +02:00
Geoffrey White
1047c3e014 Merge pull request #20652 from geoffw0/gen1
Rust: Generalize some models
2025-10-20 12:37:53 +01:00
Asger F
d7cf5ef645 Merge pull request #20647 from asgerf/js/type-resolution-cache
JS: Avoid magic and improve a join in type resolution
2025-10-20 11:50:23 +02:00
Geoffrey White
7b32cd4868 Merge pull request #20649 from geoffw0/mv1
Rust: Move rust/weak-sensitive-data-hashing
2025-10-20 10:17:40 +01:00
Tom Hvitved
85abcddd0e Merge pull request #20614 from hvitved/dataflow/debug-predicates
Data flow: Add various debug predicates
2025-10-20 11:01:41 +02:00
Michael B. Gale
4441303623 Merge pull request #20625 from github/mbg/csharp/proxy-log-messages 2025-10-20 10:00:58 +01:00
Tom Hvitved
f71cfac40a Data flow: Add various debug predicates 2025-10-20 09:59:40 +02:00
Ben Rodes
2b683c210f Merge branch 'main' into santander-java-crypto-check 2025-10-18 17:56:43 -04:00
REDMOND\brodes
c01c060476 Crypto: more ID renaming to include "examples", fix singleton issues with ql-for-ql, use formatted test for WeakAsymmetricKeyGenSize (add post processing in the qlref), misc expected files updated (test passed locally but on rerun vscode reports failures, known bug with vscode unit tests). 2025-10-17 14:13:53 -04:00
REDMOND\brodes
540daa6df2 Crypto: weak symmetric cipher tests. 2025-10-17 13:40:15 -04:00
REDMOND\brodes
b06e05362b Crypto: altering all query IDs in examples to have "examples" in the ID, to make clear the query is not intended for production. 2025-10-17 13:39:50 -04:00
REDMOND\brodes
1b205d8673 Removing WeakRSA, this is redundant with weak asymmetric key size. 2025-10-17 13:39:05 -04:00
REDMOND\brodes
b4ecb91c83 Crypto: Add missing cipher algorithms to JCA. Update node tests to account for missing cipher algorithms. 2025-10-17 13:38:47 -04:00
REDMOND\brodes
f480d90a68 Crypto: Add missing block mode JCA Models, add block mode unit tests 2025-10-17 13:13:14 -04:00
REDMOND\brodes
e12734162f Crypto: WeakKDFKeySize tests. 2025-10-17 12:32:24 -04:00
REDMOND\brodes
628bab92fc Crypto: Modify BadMacOrderMacOnEncryptPlaintext to be a path query that traces through any intermediate encrypt or mac to the final encrypt or mac. 2025-10-17 12:06:34 -04:00
REDMOND\brodes
ff7840dc9f Crypto: removing precision tags on experimental queries. 2025-10-17 10:52:32 -04:00
Paolo Tranquilli
4b04b49ca9 Merge branch 'main' into redsun82/rust-file-semantics-predicates 2025-10-17 15:10:55 +02:00
Paolo Tranquilli
6a6015e0eb Rust: accept test changes 2025-10-17 15:10:49 +02:00
Owen Mansel-Chan
66f95bcbcd Merge pull request #20603 from owen-mc/update-broken-algo-qhelp
Many languages: Update broken algo qhelp
2025-10-17 12:30:43 +01:00
Paolo Tranquilli
0c719af33c Csharp: add change note 2025-10-17 12:05:52 +02:00
Paolo Tranquilli
c3fd06c8a4 Csharp: fix cs/web/missing-x-frame-options to also consider location elements
As explained in

https://learn.microsoft.com/en-us/previous-versions/aspnet/ms178692(v=vs.100),

it is possible to add `system.webServer` elements nested inside
`location` elements in `Web.config`.
2025-10-17 11:27:31 +02:00
Simon Friis Vindum
979b05cc1a C++: Apply suggested fixes from review 2025-10-17 09:50:36 +02:00
yoff
3a0a8999d5 java: fix ql alerts 2025-10-17 01:52:23 +02:00
yoff
61a3e9630f java: rewrite conflict detection
- favour unary predicates over binary ones
(the natural "conflicting access" is binary)
- switch to a dual solution to trade recursion through forall for simple existentials.

Co-authored-by: Anders Schack-Mulligen <aschackmull@github.com>
2025-10-17 01:43:04 +02:00
REDMOND\brodes
ef6f0222f2 Crypto: Addressing FPs in BadMacOrderMacOnEncryptPlaintext 2025-10-16 16:11:42 -04:00
REDMOND\brodes
5923e5cbb0 Crypto: Bad expected files in last push. 2025-10-16 15:45:27 -04:00
REDMOND\brodes
700f34e53a Crypto: Bad Mac use tests, and fix for BadMacOrderMacOnEncryptPlaintext (barriers were blocking flow through an encrypt to a subsequent mac on the same plaintext) 2025-10-16 15:44:57 -04:00
REDMOND\brodes
b9b0037e07 Crypto: Comment todo for observed missing modeled case. Tests for weak and unknown KDF iteration count. 2025-10-16 14:07:45 -04:00
Paolo Tranquilli
4aef1ba9d1 Rust: clean up 2025-10-16 17:20:41 +02:00
REDMOND\brodes
3f36b09b3c Crypto: Rename tests for weak asymmetric key gen size. 2025-10-16 11:18:36 -04:00
Paolo Tranquilli
a9ae583e14 Rust: introduce File::hasSemantics and File::isSkippedByCompilation 2025-10-16 17:08:12 +02:00
REDMOND\brodes
a64a24d25d Crypto: Comment in Language.qll 2025-10-16 11:03:49 -04:00
REDMOND\brodes
79ccef3a58 Crypto: Initial sketch for unknown hash, the model needs to recognize unknowns but where the algorithm category (e.g., hashing) is known. 2025-10-16 11:03:16 -04:00
Taus
3c2635767e Misc: Add script for patching the query history
Adds `patch_query_history.py` in the `misc/scripts` directory. Its
function is to extend the existing VSCode query history with a new entry
whose JSON evaluator log summary points at a log that was created
outside of VSCode.

This enables the use of e.g. the Performance Comparison View on runs
that were not initiated from within VSCode.
2025-10-16 15:00:43 +00:00
REDMOND\brodes
d2598d4f5d Crypto: Updating weak hash tests 2025-10-16 10:56:08 -04:00
REDMOND\brodes
4860034d41 Crypto: Weak Hash test cases update and expected file. 2025-10-16 10:40:53 -04:00
Geoffrey White
5d95fad467 Rust: Changes suggested by Copilot (with effect on tests). 2025-10-16 14:59:06 +01:00
Simon Friis Vindum
68d4240c26 C++: Add change note 2025-10-16 15:56:11 +02:00
Simon Friis Vindum
9502d83f2c C++: Add debug predicates 2025-10-16 15:05:48 +02:00
Simon Friis Vindum
c1f0f3da96 C++: Handle guard phi nodes differently 2025-10-16 15:05:46 +02:00
Simon Friis Vindum
99103a5741 C++: Add additional test for range analysis 2025-10-16 15:05:45 +02:00
Simon Friis Vindum
8896a7210b C++: Add number of bounds test to simple range analysis 2025-10-16 15:05:44 +02:00
Simon Friis Vindum
7eacd87343 C++: Apply widening based on number of bounds measure 2025-10-16 15:05:42 +02:00
Geoffrey White
397563dd0e Rust: Accept consistency check .expected changes. 2025-10-16 13:54:11 +01:00
Nora Dimitrijević
e120e5c3ba Merge pull request #20337 from d10c/d10c/python-overlay-compilation-plus-extractor
Python: enable overlay compilation + extractor overlay support
2025-10-16 14:49:01 +02:00
Geoffrey White
d4a599c51d Rust: Accept more minor test expectation changes. 2025-10-16 12:41:49 +01:00
Geoffrey White
b933f8df89 Merge branch 'main' into gen1 2025-10-16 12:38:59 +01:00
Geoffrey White
8f7d3798ad Rust: Allow rows to be direct sources of taint as well. 2025-10-16 12:14:50 +01:00
Geoffrey White
f310d535ae Rust: Add models. 2025-10-16 12:07:54 +01:00
Geoffrey White
08ca643cd3 Rust: Test sources for mysql and mysql_async. 2025-10-16 11:55:24 +01:00
Geoffrey White
75a34a4881 Merge pull request #20631 from geoffw0/mysql
Rust: Model mysql and mysql_async query sinks
2025-10-16 11:42:33 +01:00
Geoffrey White
ee86655742 Rust: Update another affected test. 2025-10-16 11:37:57 +01:00
Geoffrey White
c56de30248 Rust: Fix merge conflict in .expected file. 2025-10-16 11:16:54 +01:00
Geoffrey White
c30e9a96d4 Rust: Accept changes to other test expectations. 2025-10-16 11:00:29 +01:00
Geoffrey White
217508e2c2 Merge branch 'main' into gen1 2025-10-16 09:35:29 +01:00
Geoffrey White
1936abaaee Merge pull request #20650 from geoffw0/mv2
Rust: Rename stdlib model files to be consistent with others.
2025-10-16 08:47:47 +01:00
Simon Friis Vindum
744b11e421 Merge pull request #20543 from paldepind/rust/model-actix-web
Rust: Add models for actix-web
2025-10-16 08:48:06 +02:00
REDMOND\brodes
25599e9b4b crypto: Update JCA model macs to take into consideration update calls (use prior pattern for signatures). Misc. bug fixes. 2025-10-15 16:25:36 -04:00
Geoffrey White
510597666a Rust: Change note. 2025-10-15 20:31:47 +01:00
Geoffrey White
612e95b7a4 Rust: More deduplication. 2025-10-15 20:31:46 +01:00
Geoffrey White
483ab5929a Rust: Combine and expand some of the models. 2025-10-15 20:31:43 +01:00
REDMOND\brodes
15e266db94 Crypto: Tweaks to bad crypto ordering queries. 2025-10-15 14:20:40 -04:00
REDMOND\brodes
9a6aac1300 Crypto: To get unreferenced parameters as general sources for Java, I've included the caveat that if a function is called, all the calls appear to be in test files. 2025-10-15 14:20:16 -04:00
REDMOND\brodes
c6174fbb93 Crypto: remove precision tag 2025-10-15 14:10:16 -04:00
Geoffrey White
ea6c7cfba0 Rust: Generalize stdlib 'a as b' models. 2025-10-15 19:08:05 +01:00
Geoffrey White
072eca233d Rust: Update consistency check .expected. 2025-10-15 16:50:47 +01:00
Geoffrey White
eb1555c45e Rust: Update the suite list .expected files. 2025-10-15 16:08:08 +01:00
Geoffrey White
f4a6efa9e0 Rust: Rename stdlib model files to be consistent with others. 2025-10-15 16:02:42 +01:00
REDMOND\brodes
631e482fd6 Crytpo: when key encapsulation or cipher operations have multiple modes at a node, the node name must reflect that it may be any mode. 2025-10-15 11:01:49 -04:00
Geoffrey White
c68112fb60 Rust: Move the CWE-328 test. 2025-10-15 15:24:25 +01:00
Geoffrey White
c7f0e41660 Rust: Move the existing CWE-327 test. 2025-10-15 15:24:14 +01:00
Geoffrey White
9dcc0a0d81 Rust: Move rust/weak-sensitive-data-hashing to CWE-327. 2025-10-15 15:14:16 +01:00
Geoffrey White
48ca04bc40 Rust: Repair test annotations following format and accept .expected changes. 2025-10-15 15:00:28 +01:00
Geoffrey White
28c139abfb Rust: Format the test. 2025-10-15 14:42:12 +01:00
Geoffrey White
5544dfff6d Update rust/ql/test/query-tests/security/CWE-089/mysql.rs
Co-authored-by: Simon Friis Vindum <paldepind@github.com>
2025-10-15 14:31:10 +01:00
REDMOND\brodes
c7be23e1fe Crypto: Remove all precision tags from all experimental queries. Precision is largely in flux while the models are being developed. 2025-10-15 09:22:04 -04:00
REDMOND\brodes
bf9a249624 Crypto: Experimental queries for mac ordering 2025-10-15 08:06:50 -04:00
REDMOND\brodes
ee08385e31 Crytpo: Update JCA keyagreement to type conversion, XDH is a type of ECDH. 2025-10-15 08:06:19 -04:00
Jeroen Ketema
129c8bf2e0 Merge pull request #20639 from jketema/swift-trace
Swift: Make tracer config handle resource-dirs passed to clang
2025-10-15 13:16:15 +02:00
Asger F
c6577c8590 JS: Avoid magic and improve a join in type resolution 2025-10-15 11:54:28 +02:00
Simon Friis Vindum
70a8c4f37f C++: Add range analysis examples that explode 2025-10-15 11:42:17 +02:00
Joe Farebrother
f57526eedc Merge pull request #20572 from joefarebrother/java-httponly-cookie-promote
Java: Promote Sensitive Cookie without HttpOnly query from experimental
2025-10-15 10:28:40 +01:00
Simon Friis Vindum
8aaf9f696a C++: Factor out widening of bounds 2025-10-15 11:11:45 +02:00
Anders Schack-Mulligen
b196714794 SSA: Add a shared signature for SSA and a module to implement it. 2025-10-15 11:01:58 +02:00
Jeroen Ketema
9fc8faa048 Swift: Address review comments 2025-10-15 10:09:13 +02:00
Napalys Klicius
7bf677d056 Merge pull request #20644 from Napalys/napalys/remove_quality_syntax_err
JS: remove quality tag from SyntaxError query
2025-10-15 09:45:02 +02:00
Napalys Klicius
45e8164f14 JS: remove quality tag from SyntaxError query 2025-10-15 09:07:11 +02:00
Joe Farebrother
e95e1a0386 Update integration test 2025-10-14 16:27:28 +01:00
Joe Farebrother
d8b37d0cde Review suggestions - update comments and description 2025-10-14 16:03:40 +01:00
Paolo Tranquilli
b6aee67b42 Pytest: fix the build-as-test mode on Windows
This mode (enabled with `--codeql=build-as-test` or setting
`PYTEST_CODEQL=build-as-test` in the environment) is an experimental
mode that makes the pytest dist installation run as a test. This
allows to avoid running the installation in case nothing changed in the
dist, leveraging bazel's test caching mechanism, and accelrating the
dev loop when working on integration test code. This mode might become
the default for devs in the future.

Up until now, this mode was only working on POSIX systems. This commit
fixes it on Windows. The issue was `native_test` being unable to wrap
a `py_binary` target because of an `.exe` suffix mismatch. Turning the
`native_test` into a full-fledged `py_test` solves the issue.
2025-10-14 15:44:07 +02:00
Owen Mansel-Chan
2e0915ebed Add missing links to "Creating path queries" 2025-10-14 13:21:52 +01:00
Henry Mercer
c2309a9aca Merge pull request #20638 from github/post-release-prep/codeql-cli-2.23.3
Post-release preparation for codeql-cli-2.23.3
2025-10-14 13:03:22 +01:00
Jeroen Ketema
b6b3767460 Swift: Make tracer config handle resource-dirs passed to clang 2025-10-14 13:50:36 +02:00
Anders Schack-Mulligen
da0b168b2e Merge pull request #20627 from hvitved/csharp/property-descriptor-get-value-neutral
C#: Add neutral model for `System.ComponentModel.PropertyDescriptor.GetValue`
2025-10-14 13:31:40 +02:00
github-actions[bot]
6dd07790ac Post-release preparation for codeql-cli-2.23.3 2025-10-14 11:16:33 +00:00
REDMOND\brodes
55bbcee301 Crypto: Make WeakAsymmetricKeyGenSize a path problem. 2025-10-13 17:04:29 -04:00
REDMOND\brodes
7e8acd76c3 Crypto: Update WeakAsymmetricKeyGenSize to a path problem. 2025-10-13 15:48:32 -04:00
REDMOND\brodes
8b5a42328e Crypto: Convert ReusedNonce.ql into a path problem. 2025-10-13 15:34:41 -04:00
REDMOND\brodes
7847e92670 Crypto: Update KDF iteration and count to be path problems 2025-10-13 15:30:53 -04:00
REDMOND\brodes
76128ed8dc Crypto: Update InsecureIVorNonce to be a path problem. 2025-10-13 15:29:57 -04:00
Geoffrey White
93eb7ce1af Rust: Accept test changes following suggested edit. 2025-10-13 19:28:40 +01:00
Geoffrey White
35f3fbf357 Rust: Accept consistency regressions. 2025-10-13 19:19:18 +01:00
REDMOND\brodes
bd068c2a69 Crypto: Updating expected file for weak asymmetric key gen size. 2025-10-13 12:08:07 -04:00
REDMOND\brodes
4b241d7065 Crypto: adding initial weak hash query overhaul and tests, but no expected file yet. 2025-10-13 12:04:51 -04:00
REDMOND\brodes
08abdb8c85 Crypto: Adding a "javaConstant" concept to handle config files. 2025-10-13 12:03:41 -04:00
Geoffrey White
1d7ccb6f2b Update rust/ql/lib/codeql/rust/frameworks/mysql.model.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-13 16:42:36 +01:00
Simon Friis Vindum
d9c76f258e Rust: Add suggested model for into_inner for tuples 2025-10-13 16:22:03 +02:00
Simon Friis Vindum
9e2ee04879 Merge branch 'main' into rust/model-actix-web 2025-10-13 16:04:12 +02:00
Joe Farebrother
9cb593b020 Update tests 2025-10-13 14:51:37 +01:00
Joe Farebrother
093b04f79f Update comments 2025-10-13 14:51:30 +01:00
Joe Farebrother
696ec29dae Upgrade integration tests 2025-10-13 14:51:24 +01:00
Joe Farebrother
1c54296545 Add change note 2025-10-13 14:51:17 +01:00
Joe Farebrother
c4781146c0 Remove experimental query and tests 2025-10-13 14:51:10 +01:00
Joe Farebrother
c799f93811 Update tests and add inline expectations 2025-10-13 14:51:04 +01:00
Joe Farebrother
e1cf3d30d2 Update documentation, rename things and add more comments to explain how the implementation works, remove filter for test code (prefer to filter in code scanning ui than in query logic) 2025-10-13 14:50:57 +01:00
Joe Farebrother
54aefe0dce Copy experimental query to main 2025-10-13 14:50:51 +01:00
Tom Hvitved
2577452849 C#: Add neutral model for System.ComponentModel.PropertyDescriptor.GetValue 2025-10-12 09:06:54 +02:00
REDMOND\brodes
e76ced1513 Crypto: Updating weak asymmetric key gen to include key exchange. 2025-10-10 15:32:39 -04:00
REDMOND\brodes
d68f3cff8b Crypto: InsecureIVorNonceSource now ignored null to avoid being too noisy. 2025-10-10 14:51:16 -04:00
REDMOND\brodes
ffd191d0e1 Crypto: missing new endpoint to get the creating operation for a key if known. 2025-10-10 14:50:50 -04:00
REDMOND\brodes
36673659ad Crypto: Weak asymmetric key gen size fixes and test. 2025-10-10 14:49:35 -04:00
REDMOND\brodes
758759a304 Crypto: Reused nonce query updates and test updates to address false positives. 2025-10-10 12:25:31 -04:00
Geoffrey White
106bad2764 Rust: Add test cases for bad use of prepared statements as well. 2025-10-10 17:17:08 +01:00
Geoffrey White
c102ce41b7 Rust: Claim support for the two libraries. 2025-10-10 17:12:48 +01:00
Geoffrey White
859c1ef55d Rust: Change note. 2025-10-10 17:11:20 +01:00
Geoffrey White
f16742bf74 Rust: Add models. 2025-10-10 17:09:46 +01:00
Michael B. Gale
47632cdbd1 C#: Improve log messages in DotNetCliInvoker 2025-10-10 17:08:24 +01:00
Owen Mansel-Chan
944e116cc0 Add path query example to other lang data flow docs 2025-10-10 16:22:50 +01:00
Geoffrey White
f15a34f361 Rust: Add test cases for transactions as well. 2025-10-10 16:10:57 +01:00
Geoffrey White
883e00558a Rust: Add test cases for the mysql_async library. 2025-10-10 16:10:56 +01:00
Geoffrey White
ef93b364da Rust: Add test cases for the mysql library. 2025-10-10 15:05:21 +01:00
Owen Mansel-Chan
3c80690ba8 Fix link syntax 2025-10-10 13:58:19 +01:00
Michael Nebel
9ec0c9d5f2 C#: Add change note. 2025-10-10 14:06:45 +02:00
Michael Nebel
56ff0baba3 C#: Use * IDs for source locations. 2025-10-10 14:03:49 +02:00
Owen Mansel-Chan
100463572b Add path query example to python data flow docs 2025-10-10 10:37:09 +01:00
Owen Mansel-Chan
2930e793f1 Fix mistakes in Go data flow examples in docs 2025-10-10 10:36:23 +01:00
REDMOND\brodes
fba80870a6 Crypto: Example query reorg - moving queries of this PR into 'examples' subdirectories. 2025-10-09 09:03:00 -04:00
REDMOND\brodes
deb43735be Crypto: Minor fixes to WeakSymmetricCipher, change to a singular name for consistency. 2025-10-09 08:39:39 -04:00
yoff
5109babd92 java: add qldoc
These interfaces were previously in a .ql file.
Also, use the XXAccess variants.
2025-10-09 14:20:28 +02:00
REDMOND\brodes
3dedda4233 Merge branch 'santander-java-crypto-check' of https://github.com/bdrodes/codeql into santander-java-crypto-check 2025-10-09 08:18:04 -04:00
REDMOND\brodes
c6cc4fff51 Crypto: Minor fixes to WeakBlockModes, WeakHash to consider SHA3 ok, Added unknown hash. 2025-10-09 08:16:28 -04:00
Nicolas Will
fdba3acc4b Crypto: Fix QL-for-QL alert and auto-format 2025-10-09 13:59:51 +02:00
yoff
1ad239459f java: move shared code into Concurrency.qll 2025-10-09 13:36:35 +02:00
yoff
f90e9dbb5e java: favour inline_late over inline
This gives much greater control over the join-order
2025-10-09 13:01:25 +02:00
yoff
26c1b2f143 java: adjust test expectations; new queries are enabled in extended 2025-10-09 12:29:42 +02:00
yoff
830f02af1f java: fixes from the CI bots 2025-10-09 09:37:31 +02:00
yoff
93fc287ef1 java: add auto-generated overlay annotations 2025-10-09 09:25:57 +02:00
yoff
a1671ea8af java: small cleanups
- add missing qldoc
- remove use of `getErasure`
- remove use of `getTypeDescriptor`
- define `ExposedField`
2025-10-09 09:16:25 +02:00
yoff
821b1de5b3 java: inline char pred 2025-10-09 09:16:25 +02:00
yoff
01ddc11fa7 java: address some review comments 2025-10-09 09:16:25 +02:00
yoff
77734f83d5 java: better detection of thread safe fields.
Identified by triage of DCA results.
Previously, we did not use the erased type, so would not recgnize `CompletableFuture<R>`.
We now also recognize safe initializers.
2025-10-09 09:16:25 +02:00
yoff
bf138693a3 java: update expectations for java-code-quality suite 2025-10-09 09:16:07 +02:00
yoff
096d5f2a56 java: implement SCC contraction of the call graph
Our monitor analysis would be fooled by cycles in the call graph,
since it required all edges on a path to a conflicting access to be either
 - targetting a method where the access is monitored (recursively) or
 - monitored locally, that is the call is monitored in the calling method
For access to be monitored (first case) all outgoing edges (towards an access) need
to satisfy this property. For a loop, that is too strong, only edges out of the loop
actually need to be protected. This led to FPs.
2025-10-09 09:14:16 +02:00
yoff
5b30153113 java: add Escaping query (P1) 2025-10-09 09:14:16 +02:00
yoff
328b53576a java: add SafePublication query (P2) 2025-10-09 09:14:16 +02:00
yoff
fe487e8bf0 java: add ThreadSafe query (P3)
Co-authored-by: Raúl Pardo <raul.pardo@protonmail.com>
Co-authored-by: SimonJorgensenMancofi <simon.jorgensen@mancofi.dk>
Co-authored-by: Bjørnar Haugstad Jåtten <bjornjaat@hotmail.com>
2025-10-09 09:14:16 +02:00
REDMOND\brodes
f524de4afc Crypto: Updating insecure iv/nonce to consider if an operation is known for it, and if so do not alert on non-secure random if it is tied to decryption 2025-10-08 16:27:18 -04:00
REDMOND\brodes
7a57496c54 Crypto: Missing test update. 2025-10-08 14:16:47 -04:00
REDMOND\brodes
11e81395b5 Crypto: Updated default flows to use taint tracking (this is needed to fix false positives in the unknown IV/Nonce query). Add the unknown IV/Nonce query and associated test cases. Fix unknown IV/Nonce query to focus on cases where the oepration isn't known or the operation subtype is not encrypt or wrap. 2025-10-08 14:14:17 -04:00
REDMOND\brodes
75b5a9fda8 Crypto: Update general regression test results to account for removal of JCA random source. 2025-10-08 12:55:11 -04:00
REDMOND\brodes
8e10e1937d Crypto: Adding query for unknown IV initialization. 2025-10-08 12:49:54 -04:00
REDMOND\brodes
83ff70bcd8 Crypto: Adding tests for insecure iv or nonce. Updating generic literal sources to include array literals. 2025-10-08 12:47:58 -04:00
Owen Mansel-Chan
2f22acdd06 Remove hashing example when not covered by query 2025-10-08 16:48:57 +01:00
REDMOND\brodes
bd34b6ce02 Crypto: Removing JCA model of random, need to reassess this as this impacts the insecure IV/Nonce query. Updated name of the Insecure nonce query to be InsecureIVorNonce 2025-10-08 11:41:21 -04:00
REDMOND\brodes
143be8cc35 Crypto: Remove redundant queries. 2025-10-08 10:26:05 -04:00
REDMOND\brodes
1b1b333e8b Crypto: Modify suggested queries per misc. side conversations on standards. Remove redundant query. Fix QL-for-QL issues. 2025-10-08 10:21:06 -04:00
REDMOND\brodes
cf88e3f52d Crypto: Standardize naming where use of "family" and "type" have been used. Prefer 'type'. 2025-10-08 09:54:53 -04:00
REDMOND\brodes
bba541c016 Merge remote-tracking branch 'upstream/java-crypto-check' into santander-java-crypto-check 2025-10-08 09:30:26 -04:00
Owen Mansel-Chan
0bcdb91639 Improve qhelp for broken crypto algo queries
Previously it focussed too much on the risk of data being decrypted,
and didn't explain why using weak algorithms is a problem in other
contexts.
2025-10-08 14:10:54 +01:00
Owen Mansel-Chan
2a1c9d8ec1 Remove erroneous comma 2025-10-08 14:08:36 +01:00
Owen Mansel-Chan
90db349f4b State that ruby broken crypto algo doesn't deal with hashing 2025-10-08 14:05:00 +01:00
Alex Eyers-Taylor
77d4af153d Java: Make some query libraries local. 2025-10-07 18:24:37 +01:00
Nora Dimitrijević
c749607db8 Bump python extractor version to 7.1.5 2025-10-07 11:22:16 +02:00
Nora Dimitrijević
ece121070b Add change note. 2025-10-06 12:31:21 +02:00
Nora Dimitrijević
9d7c52423a Basic python overlay tests
The base source is in basic-overlay-eval/orig_src,
the overlay source is in basic-full-eval.

We run two tests: a full evaluation test in basic-full-eval,
and an overlay evaluation test in basic-overlay-eval.

The test source and expected results are the SAME,
due to the .qlref, meaning we expect the same results
for full and overlay evaluation.
2025-10-06 12:30:08 +02:00
Nora Dimitrijević
20d4e429ca Add consistency query (exactly one path for every entity) 2025-10-06 11:47:56 +02:00
Nora Dimitrijević
7174d4c8ba Overlay.qll: discard predicates
for dbscheme elements with direct or indirect location links in dbscheme.

- Unify discardable entities under one Discardable superclass.
- Two discard predicates depending on TRAP ID type.
- Future-proof the XML and Yaml discard predicates for when their
  extractors become incremental.
2025-10-06 11:47:51 +02:00
Nora Dimitrijević
1a9683f986 Add @top database type 2025-10-06 11:47:14 +02:00
Nora Dimitrijević
6f208e9dec Write overlay metadata at end of extraction. 2025-10-06 11:47:12 +02:00
Nora Dimitrijević
49b18db044 Python extractor: in overlay mode, traverse only changed files
- fall back to full extraction on overlay changes json read error
- we filter both root modules and (transitive) imports against the overlay-changes json.
2025-10-06 11:47:09 +02:00
Nora Dimitrijević
e0cf719cb9 Path transformer: handle Windows-style paths
And don't add slash to start of path patterns on Windows.
2025-10-06 11:37:04 +02:00
Nora Dimitrijević
29b1a7403b Support CODEQL_PATH_TRANSFORMER env var in python path renamer
The new name is required by overlay support.
2025-10-06 11:37:02 +02:00
Nora Dimitrijević
1574b5fd91 Add synthetic data to dbscheme.stats for databaseMetadata/overlayChangedFiles 2025-10-06 11:37:00 +02:00
Nora Dimitrijević
1c3a7f2b1e Add database upgrade/downgrade scripts 2025-10-06 11:36:58 +02:00
Nora Dimitrijević
a88d3397cd Add overlay builtins to python dbscheme 2025-10-06 11:36:56 +02:00
Nora Dimitrijević
4c9ca93cdf Turn on overlay support in codeql-extractor.yml 2025-10-06 11:36:54 +02:00
Nora Dimitrijević
dac50fa0c1 Enable overlay compilation in lib/qlpack.yml 2025-10-06 11:36:51 +02:00
Anders Schack-Mulligen
84a65bef43 C#: Add change note. 2025-10-03 16:29:56 +02:00
Anders Schack-Mulligen
fad49ffbfb C++: Accept qltest change (useless guard tautology removed). 2025-10-03 15:59:54 +02:00
Anders Schack-Mulligen
613c789378 C#: Remove some obsolete tests. 2025-10-03 15:29:36 +02:00
Anders Schack-Mulligen
b392767252 C#: Accept qltest changes. 2025-10-03 15:29:35 +02:00
Anders Schack-Mulligen
df6172b1f3 C#: Update nullness qltest 2025-10-03 15:29:35 +02:00
Anders Schack-Mulligen
64810f6fb5 C#: Improve ConstantCondition.ql 2025-10-03 15:29:34 +02:00
Anders Schack-Mulligen
587901bc8a C#: Replace NullMaybe.ql implementation. 2025-10-03 15:29:34 +02:00
Anders Schack-Mulligen
6cfadbfe90 C#: Clean up. 2025-10-03 15:29:33 +02:00
Anders Schack-Mulligen
c2d21e95b9 C#: Instantiate ControlFlowReachability and implement new nullness. 2025-10-03 15:29:33 +02:00
Anders Schack-Mulligen
449059f1ac C#: Disable FinallySplit, BooleanSplit, and LoopSplit 2025-10-03 15:29:32 +02:00
Anders Schack-Mulligen
b52a9a818c C#: Instantiate shared Guards. 2025-10-03 15:29:32 +02:00
Anders Schack-Mulligen
c01ac307b0 Guards: Disregard more trivial guards. 2025-10-03 15:29:31 +02:00
Anders Schack-Mulligen
ca7d56023a ControlFlow: Rename getAPhiInput to getAnInput. 2025-10-03 15:29:31 +02:00
Anders Schack-Mulligen
64caae554a Guards: Refactor representation of false. 2025-10-03 15:29:30 +02:00
Mark C
f38ab45e94 removed all @security.severity ratings to keep the main impartial 2025-10-01 17:49:45 +01:00
Mark C
c5cf0ffa75 added java cryptographic check queries 2025-10-01 11:55:51 +01:00
Chris Smowton
ff4b97bf2d Reword 2025-09-30 13:08:03 +01:00
Chris Smowton
f1239352ce Note issue in related query 2025-09-29 18:43:59 +01:00
Chris Smowton
18c5cb10d9 Ruby: Update CSRF protection notes in documentation
Autofix is confused about how the `protect_from_forgery` method works in Rails >= 5: GPT-5 says:

> In modern Rails versions (>=5, including 6 and 7 which this gem permits), ActionController::Base already enables CSRF protection by default with the `:exception` strategy; an explicit call to `protect_from_forgery` without options does not weaken security.

This is false: manual testing confirms that it actually does downgrade from `:exception` to `:null-session` behaviour when a manual call is made.

I can't find any authoritative source showing this gotcha, so I can see how the AI is confused and how humans might also struggle to verify the truth.
2025-09-29 18:42:11 +01:00
Simon Friis Vindum
84c6a3a376 Rust: Add change note for actix-web models 2025-09-29 13:03:10 +02:00
Simon Friis Vindum
6b7d5d2902 Rust: Add models for actix-web 2025-09-29 09:14:03 +02:00
Joe Farebrother
cb7b1efe81 Update alert message 2025-09-25 09:52:27 +01:00
Joe Farebrother
9f5bfeb7f4 Update test output 2025-09-24 15:03:40 +01:00
Joe Farebrother
654ed9ca12 Update integration tests 2025-09-24 10:58:53 +01:00
Joe Farebrother
85f886932d Update changenote 2025-09-23 15:51:31 +01:00
Joe Farebrother
55fd7c85c6 Update documentation 2025-09-23 15:50:27 +01:00
Joe Farebrother
1208195d8a Align alert messages across languages. 2025-09-23 15:46:53 +01:00
Joe Farebrother
2cffb21604 Update and fix tests 2025-09-23 15:41:09 +01:00
Joe Farebrother
d28e8004fd Add sensitive data heuristic 2025-09-23 10:08:08 +01:00
Joe Farebrother
6eac6b7258 Rename qhelp file 2025-09-19 17:03:19 +01:00
Joe Farebrother
a9a258e743 Add changenote 2025-09-19 15:11:02 +01:00
Joe Farebrother
2e95c2b3c2 Split test cases for insecure cookie queries 2025-09-19 14:41:02 +01:00
Joe Farebrother
04316d306f Update qhelp 2025-09-19 12:42:30 +01:00
Joe Farebrother
7eabed6594 Split insecure cookies queries into 3 queries 2025-09-18 13:34:10 +01:00
Asger F
2a4d6830ec JS: An array of constants should be considered "filtered" 2025-09-10 11:07:32 +02:00
Asger F
602dae0592 JS: Add test showing FP 2025-09-10 10:58:34 +02:00
Asger F
36e18c2a89 JS: Enable inline expectations in BuildArtifactLeak
The tests already have the annotations, it just seems to have been disable by accident
2025-09-10 10:56:34 +02:00
2160 changed files with 167700 additions and 63859 deletions

3
.gitattributes vendored
View File

@@ -82,9 +82,6 @@
/csharp/paket.main.bzl linguist-generated=true
/csharp/paket.main_extension.bzl linguist-generated=true
# ripunzip tool
/misc/ripunzip/ripunzip-* filter=lfs diff=lfs merge=lfs -text
# swift prebuilt resources
/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

@@ -1,4 +0,0 @@
When reviewing code:
* do not review changes in files with `.expected` extension (they are automatically ensured to be correct).
* in `.ql` and `.qll` files, do not try to review the code itself as you don't understand the programming language
well enough to make comments in these languages. You can still check for typos or comment improvements.

View File

@@ -0,0 +1,4 @@
---
applyTo: "**/*.expected"
---
Ignore these files. These are generated to be correct by running the tests, and should not be edited manually.

View File

@@ -0,0 +1,6 @@
---
applyTo: "**/*.ql,**/*.qll"
---
When reviewing these QL files, do not make any comment on the code itself. You don't understand the QL programming language well enough yet. You can only make comments about the following aspects:
* comments (lines starting with `//` or block comments enclosed in `/* ... */`): you can suggest improvements to the clarity of comments, or point out spelling mistakes
* typos in identifiers

View File

@@ -1,74 +0,0 @@
name: Build runzip
on:
workflow_dispatch:
inputs:
ripunzip-version:
description: "what reference to checktout from google/runzip"
required: false
default: v2.0.2
openssl-version:
description: "what reference to checkout from openssl/openssl for Linux"
required: false
default: openssl-3.5.0
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, macos-13, windows-2022]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v5
with:
repository: google/ripunzip
ref: ${{ inputs.ripunzip-version }}
# we need to avoid ripunzip dynamically linking into libssl
# see https://github.com/sfackler/rust-openssl/issues/183
- if: runner.os == 'Linux'
name: checkout openssl
uses: actions/checkout@v5
with:
repository: openssl/openssl
path: openssl
ref: ${{ inputs.openssl-version }}
- if: runner.os == 'Linux'
name: build and install openssl with fPIC
shell: bash
working-directory: openssl
run: |
./config -fPIC --prefix=$HOME/.local --openssldir=$HOME/.local/ssl
make -j $(nproc)
make install_sw -j $(nproc)
- if: runner.os == 'Linux'
name: build (linux)
shell: bash
run: |
env OPENSSL_LIB_DIR=$HOME/.local/lib64 OPENSSL_INCLUDE_DIR=$HOME/.local/include OPENSSL_STATIC=yes cargo build --release
mv target/release/ripunzip ripunzip-linux
- if: runner.os == 'Windows'
name: build (windows)
shell: bash
run: |
cargo build --release
mv target/release/ripunzip ripunzip-windows
- name: build (macOS)
if: runner.os == 'macOS'
shell: bash
run: |
rustup target install x86_64-apple-darwin
rustup target install aarch64-apple-darwin
cargo build --target x86_64-apple-darwin --release
cargo build --target aarch64-apple-darwin --release
lipo -create -output ripunzip-macos \
-arch x86_64 target/x86_64-apple-darwin/release/ripunzip \
-arch arm64 target/aarch64-apple-darwin/release/ripunzip
- uses: actions/upload-artifact@v4
with:
name: ripunzip-${{ runner.os }}
path: ripunzip-*
- name: Check built binary
shell: bash
run: |
./ripunzip-* --version

View File

@@ -5,19 +5,29 @@
/actions/ @github/codeql-dynamic
/cpp/ @github/codeql-c-analysis
/csharp/ @github/codeql-csharp
/csharp/autobuilder/Semmle.Autobuild.Cpp @github/codeql-c-extractor
/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests @github/codeql-c-extractor
/csharp/autobuilder/Semmle.Autobuild.Cpp @github/codeql-c-extractor @github/code-scanning-language-coverage
/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests @github/codeql-c-extractor @github/code-scanning-language-coverage
/go/ @github/codeql-go
/go/codeql-tools/ @github/codeql-go @github/code-scanning-language-coverage
/go/downgrades/ @github/codeql-go @github/code-scanning-language-coverage
/go/extractor/ @github/codeql-go @github/code-scanning-language-coverage
/go/extractor-smoke-test/ @github/codeql-go @github/code-scanning-language-coverage
/go/ql/test/extractor-tests/ @github/codeql-go @github/code-scanning-language-coverage
/java/ @github/codeql-java
/javascript/ @github/codeql-javascript
/javascript/extractor/ @github/codeql-javascript @github/code-scanning-language-coverage
/python/ @github/codeql-python
/python/extractor/ @github/codeql-python @github/code-scanning-language-coverage
/ql/ @github/codeql-ql-for-ql-reviewers
/ruby/ @github/codeql-ruby
/ruby/extractor/ @github/codeql-ruby @github/code-scanning-language-coverage
/rust/ @github/codeql-rust
/rust/extractor/ @github/codeql-rust @github/code-scanning-language-coverage
/shared/ @github/codeql-shared-libraries-reviewers
/swift/ @github/codeql-swift
/swift/extractor/ @github/codeql-swift @github/code-scanning-language-coverage
/misc/codegen/ @github/codeql-swift
/java/kotlin-extractor/ @github/codeql-kotlin
/java/kotlin-extractor/ @github/codeql-kotlin @github/code-scanning-language-coverage
/java/ql/test-kotlin1/ @github/codeql-kotlin
/java/ql/test-kotlin2/ @github/codeql-kotlin

View File

@@ -10,4 +10,3 @@ members = [
"rust/ast-generator",
"rust/autobuild",
]
exclude = ["mad-generation-build"]

View File

@@ -19,8 +19,8 @@ bazel_dep(name = "rules_go", version = "0.56.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.40.0")
bazel_dep(name = "rules_shell", version = "0.3.0")
bazel_dep(name = "bazel_skylib", version = "1.7.1")
bazel_dep(name = "rules_shell", version = "0.5.0")
bazel_dep(name = "bazel_skylib", version = "1.8.1")
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")
@@ -28,7 +28,7 @@ bazel_dep(name = "rules_kotlin", version = "2.1.3-codeql.1")
bazel_dep(name = "gazelle", version = "0.40.0")
bazel_dep(name = "rules_dotnet", version = "0.19.2-codeql.1")
bazel_dep(name = "googletest", version = "1.14.0.bcr.1")
bazel_dep(name = "rules_rust", version = "0.63.0")
bazel_dep(name = "rules_rust", version = "0.66.0")
bazel_dep(name = "zstd", version = "1.5.5.bcr.1")
bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True)
@@ -269,24 +269,16 @@ 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")
lfs_archive = use_repo_rule("//misc/bazel:lfs.bzl", "lfs_archive")
ripunzip_archive = use_repo_rule("//misc/ripunzip:ripunzip.bzl", "ripunzip_archive")
lfs_archive(
name = "ripunzip-linux",
src = "//misc/ripunzip:ripunzip-Linux.zip",
build_file = "//misc/ripunzip:BUILD.ripunzip.bazel",
)
lfs_archive(
name = "ripunzip-windows",
src = "//misc/ripunzip:ripunzip-Windows.zip",
build_file = "//misc/ripunzip:BUILD.ripunzip.bazel",
)
lfs_archive(
name = "ripunzip-macos",
src = "//misc/ripunzip:ripunzip-macOS.zip",
build_file = "//misc/ripunzip:BUILD.ripunzip.bazel",
# go to https://github.com/GoogleChrome/ripunzip/releases to find latest version and corresponding sha256s
ripunzip_archive(
name = "ripunzip",
sha256_linux = "ee0e8a957687a5dc3a66b2a4b25883bf762df4c9c07f0651af527a32a405054b",
sha256_macos_arm = "8a88eea54eac232d162a72a42065e0429b82dbf4f05e9642915dff9d7a81f846",
sha256_macos_intel = "4457a18bfcc5feabe09f5ea3d1157128e07b4873392cb404a870e611924abf64",
sha256_windows = "66d0c1375301bf5ab815348048f43b110631d3fa7200acd50d50a8ed8655ca62",
version = "2.0.3",
)
register_toolchains(

View File

@@ -1,3 +1,11 @@
## 0.4.21
No user-facing changes.
## 0.4.20
No user-facing changes.
## 0.4.19
No user-facing changes.

View File

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

View File

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

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 0.4.19
lastReleaseVersion: 0.4.21

View File

@@ -100,8 +100,6 @@ private module ArgumentInjectionConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
result = sink.getLocation()
or

View File

@@ -333,8 +333,6 @@ private module ArtifactPoisoningConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
result = sink.getLocation()
or

View File

@@ -80,8 +80,6 @@ private module CodeInjectionConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
result = sink.getLocation()
or

View File

@@ -130,8 +130,6 @@ private module EnvPathInjectionConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
result = sink.getLocation()
or

View File

@@ -184,8 +184,6 @@ private module EnvVarInjectionConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
result = sink.getLocation()
or

View File

@@ -212,8 +212,6 @@ private module OutputClobberingConfig implements DataFlow::ConfigSig {
}
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
/** Tracks flow of unsafe user input that is used to construct and evaluate an environment variable. */

View File

@@ -18,8 +18,6 @@ private module RequestForgeryConfig implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) { sink instanceof RequestForgerySink }
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
/** Tracks flow of unsafe user input that is used to construct and evaluate a system command. */

View File

@@ -17,8 +17,6 @@ private module SecretExfiltrationConfig implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) { sink instanceof SecretExfiltrationSink }
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
/** Tracks flow of unsafe user input that is used in a context where it may lead to a secret exfiltration. */

View File

@@ -1,5 +1,5 @@
name: codeql/actions-all
version: 0.4.19
version: 0.4.22-dev
library: true
warnOnImplicitThis: true
dependencies:

View File

@@ -1,3 +1,11 @@
## 0.6.13
No user-facing changes.
## 0.6.12
No user-facing changes.
## 0.6.11
No user-facing changes.

View File

@@ -26,8 +26,6 @@ private module MyConfig implements DataFlow::ConfigSig {
}
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
module MyFlow = TaintTracking::Global<MyConfig>;

View File

@@ -36,8 +36,6 @@ private module MyConfig implements DataFlow::ConfigSig {
}
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
module MyFlow = TaintTracking::Global<MyConfig>;

View File

@@ -27,8 +27,6 @@ private module MyConfig implements DataFlow::ConfigSig {
}
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
module MyFlow = TaintTracking::Global<MyConfig>;

View File

@@ -26,8 +26,6 @@ private module MyConfig implements DataFlow::ConfigSig {
}
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
module MyFlow = TaintTracking::Global<MyConfig>;

View File

@@ -36,8 +36,6 @@ private module MyConfig implements DataFlow::ConfigSig {
}
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
module MyFlow = TaintTracking::Global<MyConfig>;

View File

@@ -27,8 +27,6 @@ private module MyConfig implements DataFlow::ConfigSig {
}
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sink) { none() }
}
module MyFlow = TaintTracking::Global<MyConfig>;

View File

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

View File

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

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 0.6.11
lastReleaseVersion: 0.6.13

View File

@@ -1,5 +1,5 @@
name: codeql/actions-queries
version: 0.6.11
version: 0.6.14-dev
library: false
warnOnImplicitThis: true
groups: [actions, queries]

View File

@@ -9,6 +9,7 @@
"fragments": [
"/*- Compilations -*/",
"/*- External data -*/",
"/*- Overlay support -*/",
"/*- Files and folders -*/",
"/*- Diagnostic messages -*/",
"/*- Diagnostic messages: severity -*/",

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: Support expanded compilation argument lists
compatibility: full
compilation_expanded_args.rel: delete

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,2 @@
description: Fix decltype qualifier issue
compatibility: full

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,4 @@
description: Add databaseMetadata and overlayChangedFiles relations
compatibility: full
databaseMetadata.rel: delete
overlayChangedFiles.rel: delete

View File

@@ -1,3 +1,17 @@
## 6.1.0
### New Features
* New predicates `getAnExpandedArgument` and `getExpandedArgument` were added to the `Compilation` class, yielding compilation arguments after expansion of response files.
### Bug Fixes
* Improve performance of the range analysis in cases where it would otherwise take an exorbitant amount of time.
## 6.0.1
No user-facing changes.
## 6.0.0
### Breaking Changes

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* The class `DataFlow::FieldContent` now covers both `union` and `struct`/`class` types. A new predicate `FieldContent.getAField` has been added to access the union members associated with the `FieldContent`. The old `FieldContent` has been renamed to `NonUnionFieldContent`.

View File

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

View File

@@ -0,0 +1,9 @@
## 6.1.0
### New Features
* New predicates `getAnExpandedArgument` and `getExpandedArgument` were added to the `Compilation` class, yielding compilation arguments after expansion of response files.
### Bug Fixes
* Improve performance of the range analysis in cases where it would otherwise take an exorbitant amount of time.

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 6.0.0
lastReleaseVersion: 6.1.0

View File

@@ -40,7 +40,7 @@ class KnownOpenSslEllipticCurveConstantAlgorithmInstance extends OpenSslAlgorith
result = this.(Call).getTarget().getName()
}
override Crypto::EllipticCurveFamilyType getEllipticCurveFamilyType() {
override Crypto::EllipticCurveType getEllipticCurveType() {
if
Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.getParsedEllipticCurveName(), _,
_)

View File

@@ -72,7 +72,7 @@ class KnownOpenSslHashConstantAlgorithmInstance extends OpenSslAlgorithmInstance
override OpenSslAlgorithmValueConsumer getAvc() { result = getterCall }
override Crypto::THashType getHashFamily() {
override Crypto::THashType getHashType() {
knownOpenSslConstantToHashFamilyType(this, result)
or
not knownOpenSslConstantToHashFamilyType(this, _) and result = Crypto::OtherHashType()

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
- ["", "", False, "tolower", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["std", "", False, "tolower", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["", "", False, "toupper", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["std", "", False, "toupper", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]

View File

@@ -0,0 +1,7 @@
extensions:
- addsTo:
pack: codeql/cpp-all
extensible: summaryModel
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
- ["", "", False, "iconv", "", "", "Argument[**1]", "Argument[**3]", "value", "manual"]

View File

@@ -1,5 +1,5 @@
name: codeql/cpp-all
version: 6.0.0
version: 6.1.1-dev
groups: cpp
dbscheme: semmlecode.cpp.dbscheme
extractor: cpp
@@ -21,3 +21,4 @@ dataExtensions:
- ext/deallocation/*.model.yml
- ext/allocation/*.model.yml
warnOnImplicitThis: true
compileForOverlayEval: true

View File

@@ -94,6 +94,25 @@ class Compilation extends @compilation {
*/
string getArgument(int i) { compilation_args(this, i, result) }
/**
* Gets an expanded argument passed to the extractor on this invocation.
*/
string getAnExpandedArgument() { result = this.getExpandedArgument(_) }
/**
* Gets the `i`th expanded argument passed to the extractor on this
* invocation.
*
* This is similar to `getArgument`, but for a `@someFile` argument, it
* includes the arguments from that file, rather than just taking the
* argument literally.
*/
string getExpandedArgument(int i) {
if exists(string arg | compilation_expanded_args(this, _, arg))
then compilation_expanded_args(this, i, result)
else result = this.getArgument(i)
}
/**
* Gets the total amount of CPU time spent processing all the files in the
* front-end and extractor.

View File

@@ -171,12 +171,14 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function {
* Gets the nth parameter of this function. There is no result for the
* implicit `this` parameter, and there is no `...` varargs pseudo-parameter.
*/
pragma[nomagic]
Parameter getParameter(int n) { params(unresolveElement(result), underlyingElement(this), n, _) }
/**
* Gets a parameter of this function. There is no result for the implicit
* `this` parameter, and there is no `...` varargs pseudo-parameter.
*/
pragma[nomagic]
Parameter getAParameter() { params(unresolveElement(result), underlyingElement(this), _, _) }
/**

View File

@@ -144,14 +144,14 @@ class NameQualifiableElement extends Element, @namequalifiableelement {
class NameQualifyingElement extends Element, @namequalifyingelement {
/**
* Gets a name qualifier for which this is the qualifying namespace or
* user-defined type. For example: class `X` is the
* user-defined type, or decltype. For example: class `X` is the
* `NameQualifyingElement` and `X::` is the `NameQualifier`.
*/
NameQualifier getANameQualifier() {
namequalifiers(unresolveElement(result), _, underlyingElement(this), _)
}
/** Gets the name of this namespace or user-defined type. */
/** Gets the name of this namespace, user-defined type, or decltype. */
string getName() { none() }
}

View File

@@ -1146,7 +1146,7 @@ class DerivedType extends Type, @derivedtype {
* decltype(a) b;
* ```
*/
class Decltype extends Type {
class Decltype extends Type, NameQualifyingElement {
Decltype() { decltypes(underlyingElement(this), _, 0, _, _) }
override string getAPrimaryQlClass() { result = "Decltype" }
@@ -1187,7 +1187,7 @@ class Decltype extends Type {
override string toString() { result = "decltype(...)" }
override string getName() { none() }
override string getName() { result = "decltype(...)" }
override int getSize() { result = this.getBaseType().getSize() }
@@ -1247,7 +1247,7 @@ class TypeofType extends Type {
override string toString() { result = "typeof(...)" }
override string getName() { none() }
override string getName() { result = "typeof(...)" }
override int getSize() { result = this.getBaseType().getSize() }
@@ -1311,8 +1311,6 @@ class TypeofTypeType extends TypeofType {
Type getType() { type_operators(underlyingElement(this), unresolveElement(result), _, _) }
override string getAPrimaryQlClass() { result = "TypeofTypeType" }
override string toString() { result = "typeof(...)" }
}
/**
@@ -1394,7 +1392,7 @@ class IntrinsicTransformedType extends Type {
override Type resolveTypedefs() { result = this.getBaseType().resolveTypedefs() }
override string getName() { none() }
override string getName() { result = this.getIntrinsicName() + "(...)" }
override int getSize() { result = this.getBaseType().getSize() }

View File

@@ -380,18 +380,20 @@ private module LogicInput_v1 implements GuardsImpl::LogicInputSig {
GuardsInput::Expr getARead() { result = this.getAUse().getDef() }
}
class SsaWriteDefinition extends SsaDefinition instanceof ExplicitDefinition {
GuardsInput::Expr getDefinition() { result = super.getAssignedInstruction() }
class SsaExplicitWrite extends SsaDefinition instanceof ExplicitDefinition {
GuardsInput::Expr getValue() { result = super.getAssignedInstruction() }
}
class SsaPhiNode extends SsaDefinition instanceof PhiNode {
class SsaPhiDefinition extends SsaDefinition instanceof PhiNode {
predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb) {
super.hasInputFromBlock(inp, bb)
}
}
predicate parameterDefinition(GuardsInput::Parameter p, SsaDefinition def) {
def.isParameterDefinition(p)
class SsaParameterInit extends SsaDefinition {
SsaParameterInit() { this.isParameterDefinition(_) }
GuardsInput::Parameter getParameter() { this.isParameterDefinition(result) }
}
predicate additionalImpliesStep(
@@ -701,6 +703,7 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl
)
}
pragma[nomagic]
override predicate comparesLt(
Cpp::Expr left, Cpp::Expr right, int k, boolean isLessThan, boolean testIsTrue
) {
@@ -711,6 +714,7 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl
)
}
pragma[nomagic]
override predicate comparesLt(Cpp::Expr e, int k, boolean isLessThan, GuardValue value) {
exists(GuardValue partValue, GuardCondition part |
this.(Cpp::BinaryLogicalOperation)
@@ -736,6 +740,7 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl
)
}
pragma[nomagic]
override predicate comparesEq(
Cpp::Expr left, Cpp::Expr right, int k, boolean areEqual, boolean testIsTrue
) {
@@ -755,6 +760,7 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl
)
}
pragma[nomagic]
override predicate comparesEq(Cpp::Expr e, int k, boolean areEqual, GuardValue value) {
exists(GuardValue partValue, GuardCondition part |
this.(Cpp::BinaryLogicalOperation)

View File

@@ -656,6 +656,7 @@ private string getTypeNameWithoutFunctionTemplates(Function f, int n, int remain
* Normalize the `n`'th parameter of `f` by replacing template names
* with `class:N` (where `N` is the index of the template).
*/
pragma[nomagic]
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 |
@@ -727,6 +728,7 @@ private string getSignatureWithoutClassTemplateNames(
* - The `remaining` number of template arguments in `partiallyNormalizedSignature`
* with their index in `nameArgs`.
*/
pragma[nomagic]
private string getSignatureWithoutFunctionTemplateNames(
string partiallyNormalizedSignature, string typeArgs, string nameArgs, int remaining
) {
@@ -770,6 +772,7 @@ private string getSignatureWithoutFunctionTemplateNames(
* ```
* In this case, `normalizedSignature` will be `"(const func:0 &,int,class:1,class:0 *)"`.
*/
pragma[nomagic]
private predicate elementSpecWithArguments(
string signature, string type, string name, string normalizedSignature, string typeArgs,
string nameArgs
@@ -789,6 +792,35 @@ private string getSignatureParameterName(string signature, string type, string n
)
}
/**
* Gets a `Function` identified by the `(namespace, type, name)` components.
*
* If `subtypes` is `true` then the result may be an override of the function
* identified by the components.
*/
pragma[nomagic]
private Function getFunction(string namespace, string type, boolean subtypes, string name) {
elementSpec(namespace, type, subtypes, name, _, _) and
(
funcHasQualifiedName(result, namespace, name) and
subtypes = false and
type = ""
or
exists(Class namedClass, Class classWithMethod |
hasClassAndName(classWithMethod, result, name) and
classHasQualifiedName(namedClass, namespace, type)
|
// member declared in the named type or a subtype of it
subtypes = true and
classWithMethod = namedClass.getADerivedClass*()
or
// member declared directly in the named type
subtypes = false and
classWithMethod = namedClass
)
)
}
/**
* Holds if the suffix containing the entries in `signature` starting at entry
* `i` matches the suffix containing the parameters of `func` starting at entry `i`.
@@ -812,13 +844,17 @@ private string getSignatureParameterName(string signature, string type, string n
* is `func:n` then the signature name is compared with the `n`'th name
* in `name`.
*/
private predicate signatureMatches(Function func, string signature, string type, string name, int i) {
pragma[nomagic]
private predicate signatureMatches(
Function func, string namespace, string signature, string type, string name, int i
) {
func = getFunction(namespace, type, _, name) and
exists(string s |
s = getSignatureParameterName(signature, type, name, i) and
s = getParameterTypeName(func, i)
) and
if exists(getParameterTypeName(func, i + 1))
then signatureMatches(func, signature, type, name, i + 1)
then signatureMatches(func, namespace, signature, type, name, i + 1)
else i = count(signature.indexOf(","))
}
@@ -833,7 +869,7 @@ module ExternalFlowDebug {
*
* Exposed for testing purposes.
*/
predicate signatureMatches_debug = signatureMatches/5;
predicate signatureMatches_debug = signatureMatches/6;
/**
* INTERNAL: Do not use.
@@ -883,6 +919,7 @@ private predicate parseParens(string s, string betweenParens) { s = "(" + betwee
* - `signatureWithoutParens` equals `signature`, but with the surrounding
* parentheses removed.
*/
pragma[nomagic]
private predicate elementSpecWithArguments0(
string signature, string type, string name, string signatureWithoutParens, string typeArgs,
string nameArgs
@@ -909,7 +946,7 @@ private predicate elementSpecMatchesSignature(
) {
elementSpec(namespace, pragma[only_bind_into](type), subtypes, pragma[only_bind_into](name),
pragma[only_bind_into](signature), _) and
signatureMatches(func, signature, type, name, 0)
signatureMatches(func, namespace, signature, type, name, 0)
}
/**
@@ -953,7 +990,7 @@ private predicate funcHasQualifiedName(Function func, string namespace, string n
* Holds if `namedClass` is in namespace `namespace` and has
* name `type` (excluding any template parameters).
*/
bindingset[type, namespace]
bindingset[type]
pragma[inline_late]
private predicate classHasQualifiedName(Class namedClass, string namespace, string type) {
exists(string typeWithoutArgs |
@@ -969,17 +1006,14 @@ private predicate classHasQualifiedName(Class namedClass, string namespace, stri
* are also returned.
* 3. The element has name `name`
* 4. If `signature` is non-empty, then the element has a list of parameter types described by `signature`.
*
* NOTE: `namespace` is currently not used (since we don't properly extract modules yet).
*/
pragma[nomagic]
private Element interpretElement0(
string namespace, string type, boolean subtypes, string name, string signature
) {
result = getFunction(namespace, type, subtypes, name) and
(
// Non-member functions
funcHasQualifiedName(result, namespace, name) and
subtypes = false and
type = "" and
(
elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature)
@@ -989,52 +1023,36 @@ private Element interpretElement0(
)
or
// Member functions
exists(Class namedClass, Class classWithMethod |
hasClassAndName(classWithMethod, result, name) and
classHasQualifiedName(namedClass, namespace, type)
|
(
elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature)
or
signature = "" and
elementSpec(namespace, type, subtypes, name, "", _)
) and
(
// member declared in the named type or a subtype of it
subtypes = true and
classWithMethod = namedClass.getADerivedClass*()
or
// member declared directly in the named type
subtypes = false and
classWithMethod = namedClass
)
)
elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature)
or
elementSpec(namespace, type, subtypes, name, signature, _) and
// Member variables
signature = "" and
exists(Class namedClass, Class classWithMember, MemberVariable member |
member.getName() = name and
member = classWithMember.getAMember() and
namedClass.hasQualifiedName(namespace, type) and
result = member
|
// field declared in the named type or a subtype of it (or an extension of any)
subtypes = true and
classWithMember = namedClass.getADerivedClass*()
or
// field declared directly in the named type (or an extension of it)
subtypes = false and
classWithMember = namedClass
)
or
// Global or namespace variables
elementSpec(namespace, type, subtypes, name, signature, _) and
signature = "" and
type = "" and
subtypes = false and
result = any(GlobalOrNamespaceVariable v | v.hasQualifiedName(namespace, name))
elementSpec(namespace, type, subtypes, name, signature, _)
)
or
// Member variables
elementSpec(namespace, type, subtypes, name, signature, _) and
signature = "" and
exists(Class namedClass, Class classWithMember, MemberVariable member |
member.getName() = name and
member = classWithMember.getAMember() and
namedClass.hasQualifiedName(namespace, type) and
result = member
|
// field declared in the named type or a subtype of it (or an extension of any)
subtypes = true and
classWithMember = namedClass.getADerivedClass*()
or
// field declared directly in the named type (or an extension of it)
subtypes = false and
classWithMember = namedClass
)
or
// Global or namespace variables
elementSpec(namespace, type, subtypes, name, signature, _) and
signature = "" and
type = "" and
subtypes = false and
result = any(GlobalOrNamespaceVariable v | v.hasQualifiedName(namespace, name))
}
cached

View File

@@ -750,6 +750,16 @@ class SizeofPackTypeOperator extends SizeofPackOperator {
*/
class SizeofOperator extends Expr, @runtime_sizeof {
override int getPrecedence() { result = 16 }
/**
* Gets the contained type of this `sizeof`. For example,
* the result is `int` in both cases below:
* ```
* sizeof(int);
* sizeof(42);
* ```
*/
Type getTypeOperand() { none() } // overridden in subclasses
}
/**
@@ -766,6 +776,8 @@ class SizeofExprOperator extends SizeofOperator {
/** Gets the contained expression. */
Expr getExprOperand() { result = this.getChild(0) }
override Type getTypeOperand() { result = this.getExprOperand().getType() }
override string toString() { result = "sizeof(<expr>)" }
override predicate mayBeImpure() { this.getExprOperand().mayBeImpure() }
@@ -784,8 +796,7 @@ class SizeofTypeOperator extends SizeofOperator {
override string getAPrimaryQlClass() { result = "SizeofTypeOperator" }
/** Gets the contained type. */
Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) }
override Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) }
override string toString() { result = "sizeof(" + this.getTypeOperand().getName() + ")" }
@@ -842,6 +853,16 @@ class AlignofTypeOperator extends AlignofOperator {
*/
class DatasizeofOperator extends Expr, @datasizeof {
override int getPrecedence() { result = 16 }
/**
* Gets the contained type of this `__datasizeof`. For example,
* the result is `int` in both cases below:
* ```
* __datasizeof(int);
* __datasizeof(42);
* ```
*/
Type getTypeOperand() { none() }
}
/**
@@ -855,6 +876,8 @@ class DatasizeofExprOperator extends DatasizeofOperator {
/** Gets the contained expression. */
Expr getExprOperand() { result = this.getChild(0) }
override Type getTypeOperand() { result = this.getExprOperand().getType() }
override string toString() { result = "__datasizeof(<expr>)" }
override predicate mayBeImpure() { this.getExprOperand().mayBeImpure() }
@@ -870,8 +893,7 @@ class DatasizeofTypeOperator extends DatasizeofOperator {
override string getAPrimaryQlClass() { result = "DatasizeofTypeOperator" }
/** Gets the contained type. */
Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) }
override Type getTypeOperand() { sizeof_bind(underlyingElement(this), unresolveElement(result)) }
override string toString() { result = "__datasizeof(" + this.getTypeOperand().getName() + ")" }

View File

@@ -861,6 +861,10 @@ predicate jumpStep(Node n1, Node n2) {
n2.(FlowSummaryNode).getSummaryNode())
}
bindingset[c]
pragma[inline_late]
private int getIndirectionIndexLate(Content c) { result = c.getIndirectionIndex() }
/**
* Holds if data can flow from `node1` to `node2` via an assignment to `f`.
* Thus, `node2` references an object with a field `f` that contains the
@@ -873,23 +877,17 @@ predicate jumpStep(Node n1, Node n2) {
predicate storeStepImpl(Node node1, Content c, Node node2, boolean certain) {
exists(
PostFieldUpdateNode postFieldUpdate, int indirectionIndex1, int numberOfLoads,
StoreInstruction store
StoreInstruction store, FieldContent fc
|
postFieldUpdate = node2 and
nodeHasInstruction(node1, store, pragma[only_bind_into](indirectionIndex1)) and
fc = c and
nodeHasInstruction(node1, pragma[only_bind_into](store),
pragma[only_bind_into](indirectionIndex1)) and
postFieldUpdate.getIndirectionIndex() = 1 and
numberOfLoadsFromOperand(postFieldUpdate.getFieldAddress(),
store.getDestinationAddressOperand(), numberOfLoads, certain)
|
exists(FieldContent fc | fc = c |
fc.getField() = postFieldUpdate.getUpdatedField() and
fc.getIndirectionIndex() = 1 + indirectionIndex1 + numberOfLoads
)
or
exists(UnionContent uc | uc = c |
uc.getAField() = postFieldUpdate.getUpdatedField() and
uc.getIndirectionIndex() = 1 + indirectionIndex1 + numberOfLoads
)
store.getDestinationAddressOperand(), numberOfLoads, certain) and
fc.getAField() = postFieldUpdate.getUpdatedField() and
getIndirectionIndexLate(fc) = 1 + indirectionIndex1 + numberOfLoads
)
or
// models-as-data summarized flow
@@ -965,22 +963,17 @@ predicate nodeHasInstruction(Node node, Instruction instr, int indirectionIndex)
* `node2`.
*/
predicate readStep(Node node1, ContentSet c, Node node2) {
exists(FieldAddress fa1, Operand operand, int numberOfLoads, int indirectionIndex2 |
exists(
FieldAddress fa1, Operand operand, int numberOfLoads, int indirectionIndex2, FieldContent fc
|
fc = c and
nodeHasOperand(node2, operand, indirectionIndex2) and
// The `1` here matches the `node2.getIndirectionIndex() = 1` conjunct
// in `storeStep`.
nodeHasOperand(node1, fa1.getObjectAddressOperand(), 1) and
numberOfLoadsFromOperand(fa1, operand, numberOfLoads, _)
|
exists(FieldContent fc | fc = c |
fc.getField() = fa1.getField() and
fc.getIndirectionIndex() = indirectionIndex2 + numberOfLoads
)
or
exists(UnionContent uc | uc = c |
uc.getAField() = fa1.getField() and
uc.getIndirectionIndex() = indirectionIndex2 + numberOfLoads
)
numberOfLoadsFromOperand(fa1, operand, numberOfLoads, _) and
fc.getAField() = fa1.getField() and
getIndirectionIndexLate(fc) = indirectionIndex2 + numberOfLoads
)
or
// models-as-data summarized flow
@@ -1574,7 +1567,7 @@ pragma[inline]
ContentApprox getContentApprox(Content c) {
exists(string prefix, Field f |
prefix = result.(FieldApproxContent).getPrefix() and
f = c.(FieldContent).getField() and
f = c.(NonUnionFieldContent).getField() and
fieldHasApproxName(f, prefix)
)
or

View File

@@ -2093,8 +2093,8 @@ private Field getAFieldWithSize(Union u, int bytes) {
cached
private newtype TContent =
TFieldContent(Field f, int indirectionIndex) {
// the indirection index for field content starts at 1 (because `TFieldContent` is thought of as
TNonUnionContent(Field f, int indirectionIndex) {
// the indirection index for field content starts at 1 (because `TNonUnionContent` is thought of as
// the address of the field, `FieldAddress` in the IR).
indirectionIndex = [1 .. SsaImpl::getMaxIndirectionsForType(f.getUnspecifiedType())] and
// Reads and writes of union fields are tracked using `UnionContent`.
@@ -2124,14 +2124,14 @@ private newtype TContent =
*/
class Content extends TContent {
/** Gets a textual representation of this element. */
abstract string toString();
string toString() { none() } // overridden in subclasses
predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) {
path = "" and sl = 0 and sc = 0 and el = 0 and ec = 0
}
/** Gets the indirection index of this `Content`. */
abstract int getIndirectionIndex();
int getIndirectionIndex() { none() } // overridden in subclasses
/**
* INTERNAL: Do not use.
@@ -2142,7 +2142,7 @@ class Content extends TContent {
* For example, a write to a field `f` implies that any content of
* the form `*f` is also cleared.
*/
abstract predicate impliesClearOf(Content c);
predicate impliesClearOf(Content c) { none() } // overridden in subclasses
}
/**
@@ -2162,22 +2162,42 @@ private module ContentStars {
private import ContentStars
/** A reference through a non-union instance field. */
private class TFieldContent = TNonUnionContent or TUnionContent;
/**
* A `Content` that references a `Field`. This may be a field of a `struct`,
* `class`, or `union`. In the case of a `union` there may be multiple fields
* associated with the same `Content`.
*/
class FieldContent extends Content, TFieldContent {
/** Gets a `Field` of this `Content`. */
Field getAField() { none() }
/**
* Gets the field associated with this `Content`, if a unique one exists.
*/
final Field getField() { result = unique( | | this.getAField()) }
override int getIndirectionIndex() { none() } // overridden in subclasses
override string toString() { none() } // overridden in subclasses
override predicate impliesClearOf(Content c) { none() } // overridden in subclasses
}
/** A reference through a non-union instance field. */
class NonUnionFieldContent extends FieldContent, TNonUnionContent {
private Field f;
private int indirectionIndex;
FieldContent() { this = TFieldContent(f, indirectionIndex) }
NonUnionFieldContent() { this = TNonUnionContent(f, indirectionIndex) }
override string toString() { result = contentStars(this) + f.toString() }
Field getField() { result = f }
override Field getAField() { result = f }
/** Gets the indirection index of this `FieldContent`. */
pragma[inline]
override int getIndirectionIndex() {
pragma[only_bind_into](result) = pragma[only_bind_out](indirectionIndex)
}
override int getIndirectionIndex() { result = indirectionIndex }
override predicate impliesClearOf(Content c) {
exists(FieldContent fc |
@@ -2191,7 +2211,7 @@ class FieldContent extends Content, TFieldContent {
}
/** A reference through an instance field of a union. */
class UnionContent extends Content, TUnionContent {
class UnionContent extends FieldContent, TUnionContent {
private Union u;
private int indirectionIndex;
private int bytes;
@@ -2201,16 +2221,13 @@ class UnionContent extends Content, TUnionContent {
override string toString() { result = contentStars(this) + u.toString() }
/** Gets a field of the underlying union of this `UnionContent`, if any. */
Field getAField() { result = u.getAField() and getFieldSize(result) = bytes }
override Field getAField() { result = u.getAField() and getFieldSize(result) = bytes }
/** Gets the underlying union of this `UnionContent`. */
Union getUnion() { result = u }
/** Gets the indirection index of this `UnionContent`. */
pragma[inline]
override int getIndirectionIndex() {
pragma[only_bind_into](result) = pragma[only_bind_out](indirectionIndex)
}
override int getIndirectionIndex() { result = indirectionIndex }
override predicate impliesClearOf(Content c) {
exists(UnionContent uc |
@@ -2234,10 +2251,7 @@ class ElementContent extends Content, TElementContent {
ElementContent() { this = TElementContent(indirectionIndex) }
pragma[inline]
override int getIndirectionIndex() {
pragma[only_bind_into](result) = pragma[only_bind_out](indirectionIndex)
}
override int getIndirectionIndex() { result = indirectionIndex }
override predicate impliesClearOf(Content c) { none() }

View File

@@ -12,8 +12,8 @@ import semmle.code.cpp.models.interfaces.Taint
import semmle.code.cpp.models.interfaces.NonThrowing
/**
* The standard functions `memcpy`, `memmove` and `bcopy`; and the gcc variant
* `__builtin___memcpy_chk`.
* The standard functions `memcpy`, `memmove` and `bcopy`; and variants such as
* `__builtin___memcpy_chk` and `__builtin___memmove_chk`.
*/
private class MemcpyFunction extends ArrayFunction, DataFlowFunction, SideEffectFunction,
AliasFunction, NonCppThrowingFunction
@@ -27,7 +27,9 @@ private class MemcpyFunction extends ArrayFunction, DataFlowFunction, SideEffect
// bcopy(src, dest, num)
// mempcpy(dest, src, num)
// memccpy(dest, src, c, n)
this.hasGlobalName(["bcopy", mempcpy(), "memccpy", "__builtin___memcpy_chk"])
this.hasGlobalName([
"bcopy", mempcpy(), "memccpy", "__builtin___memcpy_chk", "__builtin___memmove_chk"
])
}
/**

View File

@@ -19,7 +19,8 @@ private class MemsetFunctionModel extends ArrayFunction, DataFlowFunction, Alias
this.hasGlobalOrStdName("wmemset")
or
this.hasGlobalName([
bzero(), "__builtin_memset", "__builtin_memset_chk", "RtlZeroMemory", "RtlSecureZeroMemory"
bzero(), "__builtin_memset", "__builtin_memset_chk", "__builtin___memset_chk",
"RtlZeroMemory", "RtlSecureZeroMemory"
])
}
@@ -32,7 +33,7 @@ private class MemsetFunctionModel extends ArrayFunction, DataFlowFunction, Alias
or
this.hasGlobalOrStdName("wmemset")
or
this.hasGlobalName(["__builtin_memset", "__builtin_memset_chk"])
this.hasGlobalName(["__builtin_memset", "__builtin_memset_chk", "__builtin___memset_chk"])
) and
result = 1
}

View File

@@ -30,7 +30,9 @@ class StrcatFunction extends TaintFunction, DataFlowFunction, ArrayFunction, Sid
"_mbsncat", // _mbsncat(dst, src, max_amount)
"_mbsncat_l", // _mbsncat_l(dst, src, max_amount, locale)
"_mbsnbcat", // _mbsnbcat(dest, src, count)
"_mbsnbcat_l" // _mbsnbcat_l(dest, src, count, locale)
"_mbsnbcat_l", // _mbsnbcat_l(dest, src, count, locale)
"__builtin___strcat_chk", // __builtin___strcat_chk (dest, src, magic)
"__builtin___strncat_chk" // __builtin___strncat_chk (dest, src, max_amount, magic)
])
}
@@ -56,7 +58,7 @@ class StrcatFunction extends TaintFunction, DataFlowFunction, ArrayFunction, Sid
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
(
this.getName() = ["strncat", "wcsncat", "_mbsncat", "_mbsncat_l"] and
this.getName() = ["strncat", "wcsncat", "_mbsncat", "_mbsncat_l", "__builtin___strncat_chk"] and
input.isParameter(2)
or
this.getName() = ["_mbsncat_l", "_mbsnbcat_l"] and

View File

@@ -36,7 +36,11 @@ class StrcpyFunction extends ArrayFunction, DataFlowFunction, TaintFunction, Sid
"_mbsnbcpy", // _mbsnbcpy(dest, src, max_amount)
"stpcpy", // stpcpy(dest, src)
"stpncpy", // stpncpy(dest, src, max_amount)
"strlcpy" // strlcpy(dst, src, dst_size)
"strlcpy", // strlcpy(dst, src, dst_size)
"__builtin___strcpy_chk", // __builtin___strcpy_chk (dest, src, magic)
"__builtin___stpcpy_chk", // __builtin___stpcpy_chk (dest, src, magic)
"__builtin___stpncpy_chk", // __builtin___stpncpy_chk(dest, src, max_amount, magic)
"__builtin___strncpy_chk" // __builtin___strncpy_chk (dest, src, max_amount, magic)
])
or
(

View File

@@ -1,10 +1,10 @@
import cpp
/**
* Describes whether a relation is 'strict' (that is, a `<` or `>`
* The strictness of a relation. Either 'strict' (that is, a `<` or `>`
* relation) or 'non-strict' (a `<=` or `>=` relation).
*/
newtype RelationStrictness =
newtype TRelationStrictness =
/**
* Represents that a relation is 'strict' (that is, a `<` or `>` relation).
*/
@@ -14,6 +14,19 @@ newtype RelationStrictness =
*/
Nonstrict()
/**
* The strictness of a relation. Either 'strict' (that is, a `<` or `>`
* relation) or 'non-strict' (a `<=` or `>=` relation).
*/
class RelationStrictness extends TRelationStrictness {
/** Gets the string representation of this relation strictness. */
string toString() {
this = Strict() and result = "strict"
or
this = Nonstrict() and result = "non-strict"
}
}
/**
* Describes whether a relation is 'greater' (that is, a `>` or `>=`
* relation) or 'lesser' (a `<` or `<=` relation).
@@ -105,10 +118,10 @@ predicate relOpWithSwap(
*
* This allows for the relation to be either as written, or with its
* arguments reversed; for example, if `rel` is `x < 5` then
* `relOpWithSwapAndNegate(rel, x, 5, Lesser(), Strict(), true)`,
* `relOpWithSwapAndNegate(rel, 5, x, Greater(), Strict(), true)`,
* `relOpWithSwapAndNegate(rel, x, 5, Greater(), Nonstrict(), false)` and
* `relOpWithSwapAndNegate(rel, 5, x, Lesser(), Nonstrict(), false)` hold.
* - `relOpWithSwapAndNegate(rel, x, 5, Lesser(), Strict(), true)`,
* - `relOpWithSwapAndNegate(rel, 5, x, Greater(), Strict(), true)`,
* - `relOpWithSwapAndNegate(rel, x, 5, Greater(), Nonstrict(), false)` and
* - `relOpWithSwapAndNegate(rel, 5, x, Lesser(), Nonstrict(), false)` hold.
*/
predicate relOpWithSwapAndNegate(
RelationalOperation rel, Expr a, Expr b, RelationDirection dir, RelationStrictness strict,

View File

@@ -93,31 +93,42 @@ private float wideningUpperBounds(ArithmeticType t) {
result = 1.0 / 0.0 // +Inf
}
/** Gets the widened lower bound for a given type and lower bound. */
bindingset[type, lb]
float widenLowerBound(Type type, float lb) {
result = max(float widenLB | widenLB = wideningLowerBounds(type) and widenLB <= lb | widenLB)
}
/** Gets the widened upper bound for a given type and upper bound. */
bindingset[type, ub]
float widenUpperBound(Type type, float ub) {
result = min(float widenUB | widenUB = wideningUpperBounds(type) and widenUB >= ub | widenUB)
}
/**
* Gets the value of the expression `e`, if it is a constant.
* This predicate also handles the case of constant variables initialized in different
* compilation units, which doesn't necessarily have a getValue() result from the extractor.
*/
private string getValue(Expr e) {
if exists(e.getValue())
then result = e.getValue()
else
/*
* It should be safe to propagate the initialization value to a variable if:
* The type of v is const, and
* The type of v is not volatile, and
* Either:
* v is a local/global variable, or
* v is a static member variable
*/
result = e.getValue()
or
not exists(e.getValue()) and
/*
* It should be safe to propagate the initialization value to a variable if:
* The type of v is const, and
* The type of v is not volatile, and
* Either:
* v is a local/global variable, or
* v is a static member variable
*/
exists(VariableAccess access, StaticStorageDurationVariable v |
not v.getUnderlyingType().isVolatile() and
v.getUnderlyingType().isConst() and
e = access and
v = access.getTarget() and
result = getValue(v.getAnAssignedValue())
)
exists(StaticStorageDurationVariable v |
not v.getUnderlyingType().isVolatile() and
v.getUnderlyingType().isConst() and
v = e.(VariableAccess).getTarget() and
result = getValue(v.getAnAssignedValue())
)
}
/**
@@ -505,6 +516,336 @@ private predicate isRecursiveExpr(Expr e) {
)
}
/**
* Provides predicates that estimate the number of bounds that the range
* analysis might produce.
*/
private module BoundsEstimate {
/**
* Gets the limit beyond which we enable widening. That is, if the estimated
* number of bounds exceeds this limit, we enable widening such that the limit
* will not be reached.
*/
float getBoundsLimit() {
// This limit is arbitrary, but low enough that it prevents timeouts on
// specific observed customer databases (and the in the tests).
result = 2.0.pow(40)
}
/** Gets the maximum number of bounds possible for `t` when widening is used. */
private int getNrOfWideningBounds(ArithmeticType t) {
result = strictcount(wideningLowerBounds(t)).maximum(strictcount(wideningUpperBounds(t)))
}
/**
* Holds if `boundFromGuard(guard, v, _, branch)` holds, but without
* relying on range analysis (which would cause non-monotonic recursion
* elsewhere).
*/
private predicate hasBoundFromGuard(Expr guard, VariableAccess v, boolean branch) {
exists(Expr lhs | linearAccess(lhs, v, _, _) |
relOpWithSwapAndNegate(guard, lhs, _, _, _, branch)
or
eqOpWithSwapAndNegate(guard, lhs, _, true, branch)
or
eqZeroWithNegate(guard, lhs, true, branch)
)
}
/** Holds if `def` is a guard phi node for `v` with a bound from a guard. */
predicate isGuardPhiWithBound(RangeSsaDefinition def, StackVariable v, VariableAccess access) {
exists(Expr guard, boolean branch |
def.isGuardPhi(v, access, guard, branch) and
hasBoundFromGuard(guard, access, branch)
)
}
/**
* Gets the number of bounds for `def` when `def` is a guard phi node for the
* variable `v`.
*/
language[monotonicAggregates]
private float nrOfBoundsPhiGuard(RangeSsaDefinition def, StackVariable v) {
// If we have
//
// if (x < c) { e1 }
// e2
//
// then `e2` is both a guard phi node (guarded by `x < c`) and a normal
// phi node (control is merged after the `if` statement).
//
// Assume `x` has `n` bounds. Then `n` bounds are propagated to the guard
// phi node `{ e1 }` and, since `{ e1 }` is input to `e2` as a normal phi
// node, `n` bounds are propagated to `e2`. If we also propagate the `n`
// bounds to `e2` as a guard phi node, then we square the number of
// bounds.
//
// However in practice `x < c` is going to cut down the number of bounds:
// The tracked bounds can't flow to both branches as that would require
// them to simultaneously be greater and smaller than `c`. To approximate
// this better, the contribution from a guard phi node that is also a
// normal phi node is 1.
exists(def.getAPhiInput(v)) and
isGuardPhiWithBound(def, v, _) and
result = 1
or
not exists(def.getAPhiInput(v)) and
// If there's different `access`es, then they refer to the same variable
// with the same lower bounds. Hence adding these guards make no sense (the
// implementation will take the union, but they'll be removed by
// deduplication). Hence we use `max` as an approximation.
result =
max(VariableAccess access | isGuardPhiWithBound(def, v, access) | nrOfBoundsExpr(access))
or
def.isPhiNode(v) and
not isGuardPhiWithBound(def, v, _) and
result = 0
}
/**
* Gets the number of bounds for `def` when `def` is a normal phi node for the
* variable `v`.
*/
language[monotonicAggregates]
private float nrOfBoundsPhiNormal(RangeSsaDefinition def, StackVariable v) {
result =
strictsum(RangeSsaDefinition inputDef |
inputDef = def.getAPhiInput(v)
|
nrOfBoundsDef(inputDef, v)
)
or
def.isPhiNode(v) and
not exists(def.getAPhiInput(v)) and
result = 0
}
/**
* Gets the number of bounds for `def` when `def` is an NE phi node for the
* variable `v`.
*/
language[monotonicAggregates]
float nrOfBoundsNEPhi(RangeSsaDefinition def, StackVariable v) {
// If there's different `access`es, then they refer to the same variable
// with the same lower bounds. Hence adding these guards make no sense (the
// implementation will take the union, but they'll be removed by
// deduplication). Hence we use `max` as an approximation.
result = max(VariableAccess access | isNEPhi(v, def, access, _) | nrOfBoundsExpr(access))
or
def.isPhiNode(v) and
not isNEPhi(v, def, _, _) and
result = 0
}
/**
* Gets the number of bounds for `def` when `def` is an unsupported guard phi
* node for the variable `v`.
*/
language[monotonicAggregates]
private float nrOfBoundsUnsupportedGuardPhi(RangeSsaDefinition def, StackVariable v) {
// If there's different `access`es, then they refer to the same variable
// with the same lower bounds. Hence adding these guards make no sense (the
// implementation will take the union, but they'll be removed by
// deduplication). Hence we use `max` as an approximation.
result =
max(VariableAccess access | isUnsupportedGuardPhi(v, def, access) | nrOfBoundsExpr(access))
or
def.isPhiNode(v) and
not isUnsupportedGuardPhi(v, def, _) and
result = 0
}
private float nrOfBoundsPhi(RangeSsaDefinition def, StackVariable v) {
// The cases for phi nodes are not mutually exclusive. For instance a phi
// node can be both a guard phi node and a normal phi node. To handle this
// we sum the contributions from the different cases.
result =
nrOfBoundsPhiGuard(def, v) + nrOfBoundsPhiNormal(def, v) + nrOfBoundsNEPhi(def, v) +
nrOfBoundsUnsupportedGuardPhi(def, v)
}
/** Gets the estimated number of bounds for `def` and `v`. */
float nrOfBoundsDef(RangeSsaDefinition def, StackVariable v) {
// Recursive definitions are already widened, so we simply estimate them as
// having the number of widening bounds available. This is crucial as it
// ensures that we don't follow recursive cycles when calculating the
// estimate. Had that not been the case the estimate itself would be at risk
// of causing performance issues and being non-functional.
if isRecursiveDef(def, v)
then result = getNrOfWideningBounds(getVariableRangeType(v))
else (
// Definitions with a defining value
exists(Expr defExpr | assignmentDef(def, v, defExpr) and result = nrOfBoundsExpr(defExpr))
or
// Assignment operations with a defining value
exists(AssignOperation assignOp |
def = assignOp and
assignOp.getLValue() = v.getAnAccess() and
result = nrOfBoundsExpr(assignOp)
)
or
// Phi nodes
result = nrOfBoundsPhi(def, v)
or
unanalyzableDefBounds(def, v, _, _) and result = 1
)
}
/**
* Gets a naive estimate of the number of bounds for `e`.
*
* The estimate is like an abstract interpretation of the range analysis,
* where the abstract value is the number of bounds. For instance,
* `nrOfBoundsExpr(12) = 1` and `nrOfBoundsExpr(x + y) = nrOfBoundsExpr(x) *
* nrOfBoundsExpr(y)`.
*
* The estimated number of bounds will usually be greater than the actual
* number of bounds, as the estimate can not detect cases where bounds are cut
* down when tracked precisely. For instance, in
* ```c
* int x = 1;
* if (cond) { x = 1; }
* int y = x + x;
* ```
* the actual number of bounds for `y` is 1. However, the estimate will be 4
* as the conditional assignment to `x` gives two bounds for `x` on the last
* line and the addition gives 2 * 2 bounds. There are two sources of inaccuracies:
*
* 1. Without tracking the lower bounds we can't see that `x` is assigned a
* value that is equal to its lower bound.
* 2. Had the conditional assignment been `x = 2` then the estimate of two
* bounds for `x` would have been correct. However, the estimate of 4 for `y`
* would still be incorrect. Summing the actual bounds `{1,2}` with itself
* gives `{2,3,4}` which is only three bounds. Again, we can't realise this
* without tracking the bounds.
*
* Since these inaccuracies compound the estimated number of bounds can often
* be _much_ greater than the actual number of bounds. Do note though that the
* estimate is not _guaranteed_ to be an upper bound. In some cases the
* approximations might underestimate the number of bounds.
*
* This predicate is functional. This is crucial as:
*
* - It ensures that the computing the estimate itself is fast.
* - Our use of monotonic aggregates assumes functionality.
*
* Any non-functional case should be considered a bug.
*/
float nrOfBoundsExpr(Expr e) {
// Similarly to what we do for definitions, we do not attempt to measure the
// number of bounds for recursive expressions.
if isRecursiveExpr(e)
then result = getNrOfWideningBounds(e.getUnspecifiedType())
else
if analyzableExpr(e)
then
// The cases here are an abstraction of and mirrors the cases inside
// `getLowerBoundsImpl`/`getUpperBoundsImpl`.
result = 1 and exists(getValue(e).toFloat())
or
exists(Expr operand | result = nrOfBoundsExpr(operand) |
effectivelyMultipliesByPositive(e, operand, _)
or
effectivelyMultipliesByNegative(e, operand, _)
)
or
exists(ConditionalExpr condExpr |
e = condExpr and
result = nrOfBoundsExpr(condExpr.getThen()) * nrOfBoundsExpr(condExpr.getElse())
)
or
exists(BinaryOperation binop |
e = binop and
result = nrOfBoundsExpr(binop.getLeftOperand()) * nrOfBoundsExpr(binop.getRightOperand())
|
e instanceof MaxExpr or
e instanceof MinExpr or
e instanceof AddExpr or
e instanceof SubExpr or
e instanceof UnsignedMulExpr or
e instanceof UnsignedBitwiseAndExpr
)
or
exists(AssignExpr assign | e = assign and result = nrOfBoundsExpr(assign.getRValue()))
or
exists(AssignArithmeticOperation assignOp |
e = assignOp and
result = nrOfBoundsExpr(assignOp.getLValue()) * nrOfBoundsExpr(assignOp.getRValue())
|
e instanceof AssignAddExpr or
e instanceof AssignSubExpr or
e instanceof UnsignedAssignMulExpr
)
or
// Handles `AssignMulByPositiveConstantExpr` and `AssignMulByNegativeConstantExpr`
exists(AssignMulByConstantExpr mulExpr |
e = mulExpr and
result = nrOfBoundsExpr(mulExpr.getLValue())
)
or
// Handles the prefix and postfix increment and decrement operators.
exists(CrementOperation crementOp |
e = crementOp and result = nrOfBoundsExpr(crementOp.getOperand())
)
or
exists(RemExpr remExpr | e = remExpr | result = nrOfBoundsExpr(remExpr.getRightOperand()))
or
exists(Conversion convExpr |
e = convExpr and
if convExpr.getUnspecifiedType() instanceof BoolType
then result = 1
else result = nrOfBoundsExpr(convExpr.getExpr())
)
or
exists(RangeSsaDefinition def, StackVariable v |
e = def.getAUse(v) and
result = nrOfBoundsDef(def, v) and
// Avoid returning two numbers when `e` is a use with a constant value.
not exists(getValue(e).toFloat())
)
or
exists(RShiftExpr rsExpr |
e = rsExpr and
exists(getValue(rsExpr.getRightOperand().getFullyConverted()).toInt()) and
result = nrOfBoundsExpr(rsExpr.getLeftOperand())
)
else (
exists(exprMinVal(e)) and result = 1
)
}
}
/**
* Holds if `v` is a variable for which widening should be used, as otherwise a
* very large number of bounds might be generated during the range analysis for
* `v`.
*/
private predicate varHasTooManyBounds(StackVariable v) {
exists(RangeSsaDefinition def |
def.getAVariable() = v and
BoundsEstimate::nrOfBoundsDef(def, v) > BoundsEstimate::getBoundsLimit()
)
}
/**
* Holds if `e` is an expression for which widening should be used, as otherwise
* a very large number of bounds might be generated during the range analysis
* for `e`.
*/
private predicate exprHasTooManyBounds(Expr e) {
BoundsEstimate::nrOfBoundsExpr(e) > BoundsEstimate::getBoundsLimit()
or
// A subexpressions of an expression with too many bounds may itself not have
// to many bounds. For instance, `x + y` can have too many bounds without `x`
// having as well. But in these cases, still want to consider `e` as having
// too many bounds since:
// - The overall result is widened anyway, so widening `e` as well is unlikely
// to cause further precision loss.
// - The number of bounds could be very large but still below the arbitrary
// limit. Hence widening `e` can improve performance.
exists(Expr pe | exprHasTooManyBounds(pe) and e.getParent() = pe)
}
/**
* Holds if `binop` is a binary operation that's likely to be assigned a
* quadratic (or more) number of candidate bounds during the analysis. This can
@@ -655,13 +996,8 @@ private float getTruncatedLowerBounds(Expr expr) {
if exprMinVal(expr) <= newLB and newLB <= exprMaxVal(expr)
then
// Apply widening where we might get a combinatorial explosion.
if isRecursiveBinary(expr)
then
result =
max(float widenLB |
widenLB = wideningLowerBounds(expr.getUnspecifiedType()) and
not widenLB > newLB
)
if isRecursiveBinary(expr) or exprHasTooManyBounds(expr)
then result = widenLowerBound(expr.getUnspecifiedType(), newLB)
else result = newLB
else result = exprMinVal(expr)
) and
@@ -714,13 +1050,8 @@ private float getTruncatedUpperBounds(Expr expr) {
if exprMinVal(expr) <= newUB and newUB <= exprMaxVal(expr)
then
// Apply widening where we might get a combinatorial explosion.
if isRecursiveBinary(expr)
then
result =
min(float widenUB |
widenUB = wideningUpperBounds(expr.getUnspecifiedType()) and
not widenUB < newUB
)
if isRecursiveBinary(expr) or exprHasTooManyBounds(expr)
then result = widenUpperBound(expr.getUnspecifiedType(), newUB)
else result = newUB
else result = exprMaxVal(expr)
)
@@ -890,7 +1221,7 @@ private float getLowerBoundsImpl(Expr expr) {
// equal to `min(-y + 1,y - 1)`.
exists(float childLB |
childLB = getFullyConvertedLowerBounds(remExpr.getAnOperand()) and
not childLB >= 0
childLB < 0
|
result = getFullyConvertedLowerBounds(remExpr.getRightOperand()) - 1
or
@@ -1102,8 +1433,7 @@ private float getUpperBoundsImpl(Expr expr) {
// adding `-rhsLB` to the set of upper bounds.
exists(float rhsLB |
rhsLB = getFullyConvertedLowerBounds(remExpr.getRightOperand()) and
not rhsLB >= 0
|
rhsLB < 0 and
result = -rhsLB + 1
)
)
@@ -1248,8 +1578,7 @@ private float getPhiLowerBounds(StackVariable v, RangeSsaDefinition phi) {
exists(VariableAccess access, Expr guard, boolean branch, float defLB, float guardLB |
phi.isGuardPhi(v, access, guard, branch) and
lowerBoundFromGuard(guard, access, guardLB, branch) and
defLB = getFullyConvertedLowerBounds(access)
|
defLB = getFullyConvertedLowerBounds(access) and
// Compute the maximum of `guardLB` and `defLB`.
if guardLB > defLB then result = guardLB else result = defLB
)
@@ -1273,8 +1602,7 @@ private float getPhiUpperBounds(StackVariable v, RangeSsaDefinition phi) {
exists(VariableAccess access, Expr guard, boolean branch, float defUB, float guardUB |
phi.isGuardPhi(v, access, guard, branch) and
upperBoundFromGuard(guard, access, guardUB, branch) and
defUB = getFullyConvertedUpperBounds(access)
|
defUB = getFullyConvertedUpperBounds(access) and
// Compute the minimum of `guardUB` and `defUB`.
if guardUB < defUB then result = guardUB else result = defUB
)
@@ -1438,8 +1766,7 @@ private predicate upperBoundFromGuard(Expr guard, VariableAccess v, float ub, bo
}
/**
* This predicate simplifies the results returned by
* `linearBoundFromGuard`.
* This predicate simplifies the results returned by `linearBoundFromGuard`.
*/
private predicate boundFromGuard(
Expr guard, VariableAccess v, float boundValue, boolean isLowerBound,
@@ -1447,22 +1774,10 @@ private predicate boundFromGuard(
) {
exists(float p, float q, float r, boolean isLB |
linearBoundFromGuard(guard, v, p, q, r, isLB, strictness, branch) and
boundValue = (r - q) / p
|
boundValue = (r - q) / p and
// If the multiplier is negative then the direction of the comparison
// needs to be flipped.
p > 0 and isLowerBound = isLB
or
p < 0 and isLowerBound = isLB.booleanNot()
)
or
// When `!e` is true, we know that `0 <= e <= 0`
exists(float p, float q, Expr e |
linearAccess(e, v, p, q) and
eqZeroWithNegate(guard, e, true, branch) and
boundValue = (0.0 - q) / p and
isLowerBound = [false, true] and
strictness = Nonstrict()
if p < 0 then isLowerBound = isLB.booleanNot() else isLowerBound = isLB
)
}
@@ -1472,54 +1787,57 @@ private predicate boundFromGuard(
* lower or upper bound for `v`.
*/
private predicate linearBoundFromGuard(
ComparisonOperation guard, VariableAccess v, float p, float q, float boundValue,
Expr guard, VariableAccess v, float p, float q, float r,
boolean isLowerBound, // Is this a lower or an upper bound?
RelationStrictness strictness, boolean branch // Which control-flow branch is this bound valid on?
) {
// For the comparison x < RHS, we create two bounds:
//
// 1. x < upperbound(RHS)
// 2. x >= typeLowerBound(RHS.getUnspecifiedType())
//
exists(Expr lhs, Expr rhs, RelationDirection dir, RelationStrictness st |
linearAccess(lhs, v, p, q) and
relOpWithSwapAndNegate(guard, lhs, rhs, dir, st, branch)
|
isLowerBound = directionIsGreater(dir) and
strictness = st and
getBounds(rhs, boundValue, isLowerBound)
exists(Expr lhs | linearAccess(lhs, v, p, q) |
// For the comparison x < RHS, we create the following bounds:
// 1. x < upperbound(RHS)
// 2. x >= typeLowerBound(RHS.getUnspecifiedType())
exists(Expr rhs, RelationDirection dir, RelationStrictness st |
relOpWithSwapAndNegate(guard, lhs, rhs, dir, st, branch)
|
isLowerBound = directionIsGreater(dir) and
strictness = st and
r = getBounds(rhs, isLowerBound)
or
isLowerBound = directionIsLesser(dir) and
strictness = Nonstrict() and
r = getExprTypeBounds(rhs, isLowerBound)
)
or
isLowerBound = directionIsLesser(dir) and
strictness = Nonstrict() and
exprTypeBounds(rhs, boundValue, isLowerBound)
)
or
// For x == RHS, we create the following bounds:
//
// 1. x <= upperbound(RHS)
// 2. x >= lowerbound(RHS)
//
exists(Expr lhs, Expr rhs |
linearAccess(lhs, v, p, q) and
eqOpWithSwapAndNegate(guard, lhs, rhs, true, branch) and
getBounds(rhs, boundValue, isLowerBound) and
// For x == RHS, we create the following bounds:
// 1. x <= upperbound(RHS)
// 2. x >= lowerbound(RHS)
exists(Expr rhs |
eqOpWithSwapAndNegate(guard, lhs, rhs, true, branch) and
r = getBounds(rhs, isLowerBound) and
strictness = Nonstrict()
)
or
// When `x` is equal to 0 we create the following bounds:
// 1. x <= 0
// 2. x >= 0
eqZeroWithNegate(guard, lhs, true, branch) and
r = 0.0 and
isLowerBound = [false, true] and
strictness = Nonstrict()
)
// x != RHS and !x are handled elsewhere
}
/** Get the fully converted lower or upper bounds of `expr` based on `isLowerBound`. */
private float getBounds(Expr expr, boolean isLowerBound) {
isLowerBound = true and result = getFullyConvertedLowerBounds(expr)
or
isLowerBound = false and result = getFullyConvertedUpperBounds(expr)
}
/** Utility for `linearBoundFromGuard`. */
private predicate getBounds(Expr expr, float boundValue, boolean isLowerBound) {
isLowerBound = true and boundValue = getFullyConvertedLowerBounds(expr)
private float getExprTypeBounds(Expr expr, boolean isLowerBound) {
isLowerBound = true and result = exprMinVal(expr.getFullyConverted())
or
isLowerBound = false and boundValue = getFullyConvertedUpperBounds(expr)
}
/** Utility for `linearBoundFromGuard`. */
private predicate exprTypeBounds(Expr expr, float boundValue, boolean isLowerBound) {
isLowerBound = true and boundValue = exprMinVal(expr.getFullyConverted())
or
isLowerBound = false and boundValue = exprMaxVal(expr.getFullyConverted())
isLowerBound = false and result = exprMaxVal(expr.getFullyConverted())
}
/**
@@ -1810,18 +2128,12 @@ module SimpleRangeAnalysisInternal {
|
// Widening: check whether the new lower bound is from a source which
// depends recursively on the current definition.
if isRecursiveDef(def, v)
if isRecursiveDef(def, v) or varHasTooManyBounds(v)
then
// The new lower bound is from a recursive source, so we round
// down to one of a limited set of values to prevent the
// recursion from exploding.
result =
max(float widenLB |
widenLB = wideningLowerBounds(getVariableRangeType(v)) and
not widenLB > truncatedLB
|
widenLB
)
result = widenLowerBound(getVariableRangeType(v), truncatedLB)
else result = truncatedLB
)
or
@@ -1840,18 +2152,12 @@ module SimpleRangeAnalysisInternal {
|
// Widening: check whether the new upper bound is from a source which
// depends recursively on the current definition.
if isRecursiveDef(def, v)
if isRecursiveDef(def, v) or varHasTooManyBounds(v)
then
// The new upper bound is from a recursive source, so we round
// up to one of a fixed set of values to prevent the recursion
// from exploding.
result =
min(float widenUB |
widenUB = wideningUpperBounds(getVariableRangeType(v)) and
not widenUB < truncatedUB
|
widenUB
)
result = widenUpperBound(getVariableRangeType(v), truncatedUB)
else result = truncatedUB
)
or
@@ -1859,4 +2165,60 @@ module SimpleRangeAnalysisInternal {
// bound is `typeUpperBound`.
defMightOverflowNegatively(def, v) and result = varMaxVal(v)
}
/** Gets the estimate of the number of bounds for `e`. */
float estimateNrOfBounds(Expr e) { result = BoundsEstimate::nrOfBoundsExpr(e) }
}
/** Provides predicates for debugging the simple range analysis library. */
private module Debug {
Locatable getRelevantLocatable() {
exists(string filepath, int startline |
result.getLocation().hasLocationInfo(filepath, startline, _, _, _) and
filepath.matches("%/test.c") and
startline = [621 .. 639]
)
}
float debugGetLowerBoundsImpl(Expr e) {
e = getRelevantLocatable() and
result = getLowerBoundsImpl(e)
}
float debugGetUpperBoundsImpl(Expr e) {
e = getRelevantLocatable() and
result = getUpperBoundsImpl(e)
}
/**
* Counts the number of lower bounds for a given expression. This predicate is
* useful for identifying performance issues in the range analysis.
*/
predicate countGetLowerBoundsImpl(Expr e, int n) {
e = getRelevantLocatable() and
n = strictcount(float lb | lb = getLowerBoundsImpl(e) | lb)
}
float debugNrOfBounds(Expr e) {
e = getRelevantLocatable() and
result = BoundsEstimate::nrOfBoundsExpr(e)
}
/**
* Finds any expressions for which `nrOfBounds` is not functional. The result
* should be empty, so this predicate is useful to debug non-functional cases.
*/
int nonFunctionalNrOfBounds(Expr e) {
strictcount(BoundsEstimate::nrOfBoundsExpr(e)) > 1 and
result = BoundsEstimate::nrOfBoundsExpr(e)
}
/**
* Holds if `e` is an expression that has a lower bound, but where
* `nrOfBounds` does not compute an estimate.
*/
predicate missingNrOfBounds(Expr e, float n) {
n = lowerBound(e) and
not exists(BoundsEstimate::nrOfBoundsExpr(e))
}
}

View File

@@ -1,3 +1,4 @@
/*- Compilations -*/
/**
@@ -47,6 +48,19 @@ compilation_args(
string arg : string ref
);
/**
* The expanded arguments that were passed to the extractor for a
* compiler invocation. This is similar to `compilation_args`, but
* for a `@someFile` argument, it includes the arguments from that
* file, rather than just taking the argument literally.
*/
#keyset[id, num]
compilation_expanded_args(
int id : @compilation ref,
int num : int ref,
string arg : string ref
);
/**
* Optionally, record the build mode for each compilation.
*/
@@ -1327,7 +1341,8 @@ specialnamequalifyingelements(
@namequalifiableelement = @expr | @namequalifier;
@namequalifyingelement = @namespace
| @specialnamequalifyingelement
| @usertype;
| @usertype
| @decltype;
namequalifiers(
unique int id: @namequalifier,
@@ -2364,6 +2379,24 @@ link_parent(
int link_target : @link_target ref
);
/**
* The CLI will automatically emit applicable tuples for this table,
* such as `databaseMetadata("isOverlay", "true")` when building an
* overlay database.
*/
databaseMetadata(
string metadataKey: string ref,
string value: string ref
);
/**
* The CLI will automatically emit tuples for each new/modified/deleted file
* when building an overlay database.
*/
overlayChangedFiles(
string path: string ref
);
/*- XML Files -*/
xmlEncoding(

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,2 @@
description: Add databaseMetadata and overlayChangedFiles relations
compatibility: full

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Support expanded compilation argument lists
compatibility: backwards

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Fix decltype qualifier issue
compatibility: full

View File

@@ -1,3 +1,11 @@
## 1.5.4
No user-facing changes.
## 1.5.3
No user-facing changes.
## 1.5.2
No user-facing changes.

View File

@@ -85,10 +85,8 @@ module OverflowDestinationConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(FunctionCall fc | result = fc.getLocation() |
exists(FunctionCall fc | result = [fc.getLocation(), sink.getLocation()] |
sourceSized(fc, sink.asIndirectConvertedExpr())
)
}

View File

@@ -171,12 +171,10 @@ module NonConstFlowConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
result = sink.getLocation()
or
exists(FormattingFunctionCall call, Expr formatString | result = call.getLocation() |
exists(FormattingFunctionCall call, Expr formatString |
result = [call.getLocation(), sink.getLocation()]
|
isSinkImpl(sink, formatString) and
call.getArgument(call.getFormatParameterIndex()) = formatString
)

View File

@@ -155,7 +155,7 @@ module ExecTaintConfig implements DataFlow::StateConfigSig {
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(DataFlow::Node concatResult, Expr command, ExecState state |
result = [concatResult.getLocation(), command.getLocation()] and
result = [concatResult.getLocation(), command.getLocation(), sink.getLocation()] and
isSink(sink, state) and
isSinkImpl(sink, command, _) and
concatResult = state.getOutgoingNode()

View File

@@ -58,7 +58,9 @@ module SqlTaintedConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(Expr taintedArg | result = taintedArg.getLocation() | taintedArg = asSinkExpr(sink))
exists(Expr taintedArg | result = [taintedArg.getLocation(), sink.getLocation()] |
taintedArg = asSinkExpr(sink)
)
}
}

View File

@@ -128,7 +128,7 @@ module Config implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(BufferWrite bw | result = bw.getLocation() | isSink(sink, bw, _))
exists(BufferWrite bw | result = [bw.getLocation(), sink.getLocation()] | isSink(sink, bw, _))
}
}

View File

@@ -124,7 +124,8 @@ module UncontrolledArithConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) {
result = getExpr(source).getLocation()
isSource(source) and
result = [getExpr(source).getLocation(), source.getLocation()]
}
}

View File

@@ -95,7 +95,7 @@ module TaintedAllocationSizeConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(Expr alloc | result = alloc.getLocation() | allocSink(alloc, sink))
exists(Expr alloc | result = [alloc.getLocation(), sink.getLocation()] | allocSink(alloc, sink))
}
}

View File

@@ -76,7 +76,9 @@ module Config implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(Expr condition | result = condition.getLocation() | isSink(sink, condition))
exists(Expr condition | result = [condition.getLocation(), sink.getLocation()] |
isSink(sink, condition)
)
}
}

View File

@@ -51,7 +51,9 @@ module ToBufferConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(SensitiveBufferWrite w | result = w.getLocation() | isSinkImpl(sink, w))
exists(SensitiveBufferWrite w | result = [w.getLocation(), sink.getLocation()] |
isSinkImpl(sink, w)
)
}
}

View File

@@ -35,11 +35,13 @@ module FromSensitiveConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node sourceNode) {
exists(SensitiveExpr source | result = source.getLocation() | isSourceImpl(sourceNode, source))
exists(SensitiveExpr source | result = [source.getLocation(), sourceNode.getLocation()] |
isSourceImpl(sourceNode, source)
)
}
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(FileWrite w | result = w.getLocation() | isSinkImpl(sink, w, _))
exists(FileWrite w | result = [w.getLocation(), sink.getLocation()] | isSinkImpl(sink, w, _))
}
}

View File

@@ -249,7 +249,9 @@ module FromSensitiveConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(NetworkSendRecv networkSendRecv | result = networkSendRecv.getLocation() |
exists(NetworkSendRecv networkSendRecv |
result = [networkSendRecv.getLocation(), sink.getLocation()]
|
isSinkSendRecv(sink, networkSendRecv)
)
}

View File

@@ -127,13 +127,13 @@ module FromSensitiveConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) {
exists(SensitiveExpr sensitive | result = sensitive.getLocation() |
exists(SensitiveExpr sensitive | result = [sensitive.getLocation(), source.getLocation()] |
isSourceImpl(source, sensitive)
)
}
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(SqliteFunctionCall sqliteCall | result = sqliteCall.getLocation() |
exists(SqliteFunctionCall sqliteCall | result = [sqliteCall.getLocation(), sink.getLocation()] |
isSinkImpl(sink, sqliteCall, _)
)
}

View File

@@ -91,10 +91,9 @@ module HttpStringToUrlOpenConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) {
result = source.asIndirectExpr().getLocation()
isSource(source) and
result = [source.asIndirectExpr().getLocation(), source.getLocation()]
}
Location getASelectedSinkLocation(DataFlow::Node sink) { none() }
}
module HttpStringToUrlOpen = TaintTracking::Global<HttpStringToUrlOpenConfig>;

View File

@@ -3,11 +3,15 @@
"qhelp.dtd">
<qhelp>
<overview>
<p>Using broken or weak cryptographic algorithms can leave data vulnerable to being decrypted.</p>
<p>Using broken or weak cryptographic algorithms may compromise security guarantees such as confidentiality, integrity, and authenticity.</p>
<p>Many cryptographic algorithms provided by cryptography libraries are known to be weak, or
flawed. Using such an algorithm means that an attacker may be able to easily decrypt the encrypted
data.</p>
<p>Many cryptographic algorithms are known to be weak or flawed. The security guarantees of a system often rely on the underlying cryptography, so using a weak algorithm can have severe consequences. For example:
</p>
<ul>
<li>If a weak encryption algorithm is used, an attacker may be able to decrypt sensitive data.</li>
<li>If a weak hashing algorithm is used to protect data integrity, an attacker may be able to craft a malicious input that has the same hash as a benign one.</li>
<li>If a weak algorithm is used for digital signatures, an attacker may be able to forge signatures and impersonate legitimate users.</li>
</ul>
</overview>
<recommendation>

View File

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

View File

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

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 1.5.2
lastReleaseVersion: 1.5.4

View File

@@ -50,8 +50,6 @@ module WordexpTaintConfig implements DataFlow::ConfigSig {
}
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
}
module WordexpTaint = TaintTracking::Global<WordexpTaintConfig>;

View File

@@ -187,12 +187,14 @@ module ArrayAddressToDerefConfig implements DataFlow::StateConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) {
exists(Variable v | result = v.getLocation() | isSourceImpl(source, v))
exists(Variable v | result = v.getLocation() or result = source.getLocation() |
isSourceImpl(source, v)
)
}
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(PointerArithmeticInstruction pai, Instruction deref |
result = [pai, deref].getLocation() and
result = [[pai, deref].getLocation(), sink.getLocation()] and
isInvalidPointerDerefSink2(sink, deref, _) and
isSink(sink, ArrayAddressToDerefConfig::TOverflowArithmetic(pai))
)

View File

@@ -31,8 +31,6 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig {
predicate observeDiffInformedIncrementalMode() { any() }
Location getASelectedSourceLocation(DataFlow::Node source) { none() }
Location getASelectedSinkLocation(DataFlow::Node sink) {
exists(FunctionCall fc | result = [sink.getLocation(), fc.getLocation()] | isSink(fc, sink))
}

View File

@@ -1,5 +1,5 @@
name: codeql/cpp-queries
version: 1.5.2
version: 1.5.5-dev
groups:
- cpp
- queries

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