Compare commits

..

657 Commits

Author SHA1 Message Date
Óscar San José
dce6d0e222 Merge pull request #20955 from github/release-prep/2.23.7
Release preparation for version 2.23.7
2025-12-02 17:06:20 +01:00
github-actions[bot]
a045b317ac Release preparation for version 2.23.7 2025-12-02 15:31:27 +00:00
Óscar San José
871d5c9045 Merge pull request #20944 from github/release-prep/2.23.7
Release preparation for version 2.23.7
2025-12-01 19:34:17 +01:00
github-actions[bot]
19a13467e0 Release preparation for version 2.23.7 2025-12-01 16:07:37 +00:00
Óscar San José
f1aaefc107 Merge pull request #20943 from github/oscarsj/update-codeql-cli-2.23.7
Update branch with previous release notes, and fix date format in change note file
2025-12-01 17:05:45 +01:00
Florin Coada
10a53e61cf Merge pull request #20927 from github/changedocs/2.23.6
Add changelog entry for CodeQL CLI version 2.23.6
2025-12-01 15:40:22 +01:00
Óscar San José
1cc5b3444a Fix date format in change note file 2025-12-01 15:39:37 +01:00
Asger F
b8cff77cab Merge pull request #20873 from github/shared-xml-discard
Share XML discard predicates
2025-12-01 10:06:02 +01:00
Paolo Tranquilli
50929ef566 Merge pull request #20872 from github/redsun82/update-fmt
Swift: update `fmt`
2025-12-01 08:23:48 +01:00
Michael Nebel
1d56f17059 Merge pull request #20935 from michaelnebel/csharp/flakynet10
C#: Pin tests and disable .NET 10 tests.
2025-11-28 15:29:27 +01:00
Idriss Riouak
9fd31bf685 Merge pull request #20909 from github/idrissrio/cpp/overlay/overlay.qll
C/C++ overlay: Add basic `Overlay.qll` file
2025-11-28 15:09:39 +01:00
Michael Nebel
6c9d15879f C#: Skip .NET 10 tests for now. 2025-11-28 14:20:06 +01:00
idrissrio
4ad25e4d92 C/C++ overlay: Address review comments 2025-11-28 14:16:10 +01:00
Michael Nebel
af41ca0b1c C#: Fix syntax error. 2025-11-28 14:13:17 +01:00
Michael Nebel
a69e78185b C#: Pin tests and mark .NET 10 tests as flaky. 2025-11-28 13:59:30 +01:00
idrissrio
eac06ddd8f C/C++ overlay: Address review comments
Split the discard predicate into two: one for single-location elements and one for multi-location elements.
2025-11-28 11:31:16 +01:00
Owen Mansel-Chan
c43b03ba34 Merge pull request #20931 from owen-mc/go/fix-misc-ql
Go/Java: fix miscellaneous trivial issues highlighted by ql-for-ql
2025-11-28 09:42:00 +00:00
Asger F
6257bed089 Sync OverlayXml.qll 2025-11-28 09:23:49 +01:00
Asger F
38a1bb0e29 Use string instead of @file in XML discards 2025-11-28 09:23:27 +01:00
Simon Friis Vindum
86eb949673 Merge pull request #20902 from paldepind/rust/xss-query
Rust: Add new query for XSS vulnerabilities
2025-11-28 09:09:14 +01:00
Owen Mansel-Chan
992bd68d4b Use set literals #2 2025-11-28 03:48:50 +00:00
Owen Mansel-Chan
220fd08428 Improve formatting of tags #2 2025-11-28 03:34:30 +00:00
Owen Mansel-Chan
22b614ac48 Use set literals 2025-11-28 03:34:17 +00:00
Owen Mansel-Chan
62238fcbd7 Fix variable name in qldoc 2025-11-28 03:33:18 +00:00
Owen Mansel-Chan
b8ccaf3b11 Improve formatting of tags metadata 2025-11-28 02:26:58 +00:00
Owen Mansel-Chan
fe1c4e2eee Make class qldoc start with "A". 2025-11-28 02:26:39 +00:00
Owen Mansel-Chan
0b79087782 Make predicate name start with has instead of get 2025-11-28 02:26:14 +00:00
Owen Mansel-Chan
303deab608 Remove redundant conjunct 2025-11-28 02:12:12 +00:00
Owen Mansel-Chan
fb0b4071a7 Remove redundant import 2025-11-28 02:09:17 +00:00
Owen Mansel-Chan
2058c4a79c Remove redundant char pred 2025-11-28 02:08:19 +00:00
Taus
0c358acc24 Merge pull request #20908 from akoeplinger/patch-1
Fix KeyError: 'name' in python/extractor/imp.py on Python 3.14
2025-11-27 15:29:54 +01:00
Taus
f55ff96674 Python: Bump extractor version and add change note 2025-11-27 13:52:37 +00:00
Asger F
0896be0df6 Merge pull request #20844 from Eliav2/20823-globalVarRef-document-defaultView
javascript: Add support for `document.defaultView` in global variable references
2025-11-27 11:50:23 +01:00
Simon Friis Vindum
97dad2db17 Rust: Apply suggestions from docs review
Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com>
2025-11-27 11:43:41 +01:00
Geoffrey White
7db06ca573 Merge pull request #20876 from szsam/fix-CWE-119-tests
C++: Fix CWE-119 memcpy tests
2025-11-27 10:18:23 +00:00
Geoffrey White
2371b65d11 Merge pull request #20925 from geoffw0/barrier-doc
Rust: Fix a few comments.
2025-11-27 10:16:40 +00:00
Geoffrey White
803e9fcb88 Merge branch 'main' into fix-CWE-119-tests 2025-11-27 09:57:23 +00:00
Geoffrey White
e8cb6b8f54 Rust: Fix a couple of comments. 2025-11-27 09:24:34 +00:00
Asger F
d8027fb6d6 Merge pull request #20885 from asgerf/js/local-module-exports
JS: Split module exports into a local and global variant
2025-11-27 10:05:22 +01:00
Tom Hvitved
f0cac321b2 Merge pull request #20236 from hvitved/rust/type-inference-async-dyn-future
Rust: Model `async` return types as `dyn Future`
2025-11-27 09:41:02 +01:00
idrissrio
3d69286382 C/C++ overlay: Address review comments 2025-11-27 09:22:33 +01:00
idrissrio
6c09325838 C/C++ Overlay: Preserve entities that have at least one location in an unchanged file
Previously, an entity would be discarded if it had any location in a changed
file. This caused issues for entities with multiple declaration entries, such
as extern variables declared in one file and defined in another.

For example, given:
  // a.c (changed)       // b.c (unchanged)
  extern int x;          int x;

The variable `x` should be preserved because it has a location in the
unchanged file b.c, even though it also has a location in the changed file a.c.
2025-11-27 09:22:31 +01:00
idrissrio
39136f3827 C/C++ overlay: Add basic Overlay.qll file 2025-11-27 09:22:29 +01:00
Simon Friis Vindum
8b32679475 Merge pull request #20921 from paldepind/rust/barrier-tweaks
Rust: Tweaks and improvements to data flow barriers
2025-11-27 08:56:04 +01:00
Mingjie Shen
25a46a82ba C++: Use appropriate sizeof in CWE-119 memcpy tests
Signed-off-by: Mingjie Shen <shen497@purdue.edu>
2025-11-27 05:15:51 +00:00
Eliav2
69ba764e9d Merge branch 'main' into 20823-globalVarRef-document-defaultView 2025-11-26 23:26:26 +02:00
Tom Hvitved
a9b58b8db3 Rust: Model async return types as dyn Future 2025-11-26 21:03:03 +01:00
Jeroen Ketema
982950ffc6 Merge pull request #20923 from github/felicity-fix-query-names
Remove trailing periods from @name metadata in query files
2025-11-26 17:08:02 +01:00
Jeroen Ketema
4a8fbba521 Merge branch 'main' into felicity-fix-query-names 2025-11-26 16:01:34 +01:00
Simon Friis Vindum
329df20e55 Rust: Fix typo
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-26 15:48:34 +01:00
Felicity Chapman
caf6b950ac Remove trailing periods from @name metadata in query files
Fixed 73 .ql query files where the @name metadata contained an ending period.
This ensures consistency with the CodeQL query metadata style guidelines.
2025-11-26 14:29:51 +00:00
Mathias Vorreiter Pedersen
d869b00672 Merge pull request #20899 from MathiasVP/ignore-non-type-template-params
C++: Ignore non-type template parameters when matching signatures in MaD
2025-11-26 14:26:45 +00:00
Jeroen Ketema
adc13e374e Merge pull request #20920 from jketema/feature-incorrect
C++: Remove incorrect tests
2025-11-26 15:01:50 +01:00
Simon Friis Vindum
815af34c66 Rust: Add additional barriers to queries 2025-11-26 14:54:11 +01:00
Simon Friis Vindum
081ab499c2 Rust: Add barrier for fieldless enum types 2025-11-26 14:46:58 +01:00
Simon Friis Vindum
6050a0e1a8 Rust: Split boolean from number barriers 2025-11-26 14:45:31 +01:00
Jeroen Ketema
33c7057066 C++: Remove incorrect tests
`__has_feature` is not available in GCC versions before GCC 14.

Our frontend was exposing `__has_feature` when emulating earlier versions of
GCC. This will be fixed with the latest major frontend update though.
2025-11-26 13:42:43 +01:00
Simon Friis Vindum
1c8cc39a6a Merge pull request #20906 from paldepind/rust/enum-fieldless
Rust: Add predicates for fieldless and unit-only enums
2025-11-26 12:52:28 +01:00
Asger F
dbf14c190a Factor XML discard predicates into OverlayXml.qll 2025-11-26 11:48:32 +01:00
Asger F
b33af5b377 JS: Fix typo 2025-11-26 11:40:41 +01:00
Owen Mansel-Chan
0414555e43 Merge pull request #20741 from aegilops/java-kotlin-sensitive-logging-substring-barriers
java: Added Java/Kotlin Sensitive Logging barriers (substrings)
2025-11-26 09:55:14 +00:00
Asger F
0245b9d609 Merge pull request #20911 from asgerf/js/next-folders
JS: Fix project layout detection for Next.js apps
2025-11-26 09:09:54 +01:00
Simon Friis Vindum
7278bc75ca Rust: Remove unused function in XSS tests 2025-11-26 08:57:47 +01:00
Owen Mansel-Chan
f0dec21b9b Merge branch 'main' into java-kotlin-sensitive-logging-substring-barriers 2025-11-25 23:24:58 +00:00
Joe Farebrother
85cb3e026c Merge pull request #20762 from joefarebrother/go-insecure-cookie
Go: Promote non-httponly cookie query, and add insecure cookie query
2025-11-25 16:39:45 +00:00
Mathias Vorreiter Pedersen
295dc6971f Merge branch 'main' into ignore-non-type-template-params 2025-11-25 15:37:25 +00:00
Simon Friis Vindum
7c7663629e Rust: Fix typo in change note for XSS query
Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
2025-11-25 16:13:11 +01:00
Asger F
5b4e114955 JS: Add test 2025-11-25 16:04:30 +01:00
Mathias Vorreiter Pedersen
73b6fa69a9 C++: Fix Code Scanning alert. 2025-11-25 15:03:26 +00:00
Mathias Vorreiter Pedersen
0deac833e4 C++: Accept test changes. 2025-11-25 14:59:09 +00:00
Asger F
a91969b7e1 JS: Change note 2025-11-25 15:58:11 +01:00
Mathias Vorreiter Pedersen
05737af165 C++: Only support non-type template parameters in tail position. 2025-11-25 14:55:44 +00:00
Mathias Vorreiter Pedersen
faa55f50e7 C++: Add another test with a template function whose non-type template parameter is in tail position. 2025-11-25 14:55:18 +00:00
Asger F
e95b3590f0 JS: Fix project layout detection for Next.js apps
Some parts of the code did not handle case where 'pages' was located at 'app/pages'.
2025-11-25 15:54:45 +01:00
Joe Farebrother
cece73bdbf Remove references to gorilla 2025-11-25 14:36:16 +00:00
Joe Farebrother
c7b16a043e Address reviews - update comments, remove unneeded stubs 2025-11-25 14:36:00 +00:00
Joe Farebrother
c6110ed541 Split SecureCookies into query specific files 2025-11-25 14:35:47 +00:00
Joe Farebrother
5b702d963e Refactor parts of SensitiveCookieNameConfig 2025-11-25 14:35:42 +00:00
Joe Farebrother
03d63dec2e Address reviews - rename and update doc comments 2025-11-25 14:35:29 +00:00
Joe Farebrother
1bd5005fc1 Fix typos 2025-11-25 14:35:17 +00:00
Joe Farebrother
6282c34396 Update formatting 2025-11-25 14:35:09 +00:00
Joe Farebrother
a25861d8a3 Update integration test 2025-11-25 14:35:02 +00:00
Joe Farebrother
ed483dd5b2 Add change note 2025-11-25 14:34:57 +00:00
Joe Farebrother
d633120f4d Update integration tests 2025-11-25 14:34:48 +00:00
Joe Farebrother
536e885f18 Remove experimental query 2025-11-25 14:34:41 +00:00
Joe Farebrother
fa30041498 Add qhelp & fix tests 2025-11-25 14:34:28 +00:00
Joe Farebrother
2b1cd846b3 Fixes and doc updates 2025-11-25 14:34:10 +00:00
Joe Farebrother
8d544e5b15 Add tests 2025-11-25 14:33:51 +00:00
Joe Farebrother
5094784a4b Add modeling for gin 2025-11-25 14:33:43 +00:00
Joe Farebrother
74c424dc4c Fixes, add secure query 2025-11-25 14:33:33 +00:00
Joe Farebrother
7d76619bea Implement cookie write concepts and httponly query 2025-11-25 14:33:23 +00:00
Mathias Vorreiter Pedersen
26e5320a80 Merge pull request #20901 from MathiasVP/canonical-content
C++: Don't use `Field`s to define `FieldContent`
2025-11-25 13:54:19 +00:00
Simon Friis Vindum
9ae4c14ffb Rust: Address PR feedback 2025-11-25 14:20:17 +01:00
Jeroen Ketema
861ca7526e Merge branch 'main' into canonical-content 2025-11-25 14:08:42 +01:00
Mathias Vorreiter Pedersen
2024f32e81 C++: Add an example with missing flow. 2025-11-25 12:36:29 +00:00
Simon Friis Vindum
4f13ae3fc9 Rust: Add qldoc 2025-11-25 13:35:14 +01:00
Simon Friis Vindum
393da4567e Rust: Add tests for Enum 2025-11-25 13:35:12 +01:00
Simon Friis Vindum
50e8d0ca20 Rust: Add isFieldless and isUnitOnly to Enum 2025-11-25 13:35:11 +01:00
Simon Friis Vindum
b4ae58871a Rust: Tweak existing isStruct predicates 2025-11-25 13:35:10 +01:00
Mathias Vorreiter Pedersen
47ab307410 C++: Respond to review comments. 2025-11-25 12:06:58 +00:00
Alexander Köplinger
458f8570e8 Fix KeyError: 'name' in python/extractor/imp.py on Python 3.14
Follow-up to https://github.com/github/codeql/pull/20630

The fix didn't fully work since when we raise the ImportError in `find_module` we don't pass a named argument into the format string which causes a `KeyError`.

We need to use a format string without named arguments, like Python 3.13 and earlier did.
2025-11-25 12:38:55 +01:00
Geoffrey White
1c2d8bb70e Merge pull request #20851 from geoffw0/access-invalid-pointer-fp
Rust: Improve rust/access-invalid-pointer
2025-11-25 09:49:07 +00:00
Simon Friis Vindum
411d1fa861 Rust: Fix grammar and typos
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-25 09:31:00 +01:00
Simon Friis Vindum
ce25def71e Rust: Update integration test expected files 2025-11-25 08:23:52 +01: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
Mathias Vorreiter Pedersen
eb6b08591d Update cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-24 15:01:09 +00:00
Mathias Vorreiter Pedersen
2e53370716 Update cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-24 15:01:00 +00:00
Simon Friis Vindum
597c81d659 Rust: Add change note for XSS query 2025-11-24 15:46:27 +01:00
Simon Friis Vindum
9c2858d69b Rust: Add qhelp for XSS query 2025-11-24 15:46:26 +01:00
Simon Friis Vindum
9e2bf76a7f Rust: Add XSS sinks for Actix and Warp 2025-11-24 15:46:25 +01:00
Simon Friis Vindum
ae9c753371 Rust: Add XSS query 2025-11-24 15:46:24 +01:00
Simon Friis Vindum
0f4561efc3 Rust: Add XSS examples 2025-11-24 15:46:23 +01: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
Owen Mansel-Chan
1a59839f3c Range library recognises long literals now 2025-11-24 14:10:54 +00:00
Owen Mansel-Chan
e37336d550 No need for getUnderlyingExpr to look through casts 2025-11-24 14:10:20 +00:00
Mathias Vorreiter Pedersen
0487e0622a C++: Accept test changes from tests that use getAQlClass. 2025-11-24 14:04:35 +00:00
Mathias Vorreiter Pedersen
6bae58e29c C++: Accept more test changes. 2025-11-24 12:35:19 +00:00
Mathias Vorreiter Pedersen
ecb80cb4fc C++: Represent field content using a column that is shared by all template instantiations. 2025-11-24 12:29:49 +00:00
Mathias Vorreiter Pedersen
fd566780a6 Update cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-24 12:17:06 +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
Mathias Vorreiter Pedersen
98879d0f1a C++: Accept test changes. 2025-11-24 12:06:38 +00:00
Mathias Vorreiter Pedersen
732e55df11 C++: Ignore template non-type parameters in MaD signature matching. 2025-11-24 12:06:24 +00: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
Mathias Vorreiter Pedersen
c9e9322143 C++: Add an example of missing MaD supporrt for non-type template parameters. 2025-11-24 12:02:54 +00:00
Eliav2
192f254b41 Merge branch 'main' into 20823-globalVarRef-document-defaultView 2025-11-23 22:03:30 +02: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
988aca1f85 Rust: Correct QLDoc comment. 2025-11-21 18:13:08 +00:00
Geoffrey White
03fc4cb0aa Merge remote-tracking branch 'upstream/main' into access-invalid-pointer-fp 2025-11-21 17:39:56 +00:00
Geoffrey White
9db1722060 Rust: Accept consistency check changes. 2025-11-21 17:35:34 +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
Owen Mansel-Chan
d2fc6a7b5b Merge branch 'main' into java-kotlin-sensitive-logging-substring-barriers 2025-11-21 12:20:04 +00:00
Asger F
51e1bda608 JS: Move isTypeOnly() check into a direct check, instead of an override 2025-11-21 13:10:32 +01:00
Anders Schack-Mulligen
298e4cfcc5 Java: Recognize int-sized long literals. 2025-11-21 12:53:39 +01:00
Asger F
9c4f85f15b JS: Split getSourceNode into getDirectSourceNode and getReExportedSourceNode 2025-11-21 12:42:30 +01:00
Asger F
94566e5e1e JS: Remove unnecessary override in OriginalExportDeclaration 2025-11-21 12:42:10 +01:00
Asger F
3a393ecd54 Fixup! qldoc for reExportsAs 2025-11-21 12:41:34 +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
Asger F
78c8ab11f2 JS: Split exportsAs into exportsDirectlyAs and reExportsAs 2025-11-21 12:31:34 +01:00
Asger F
74d725ef21 JS: Remove unnecessary override in OriginalExportDeclaration 2025-11-21 12:31:09 +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
Asger F
ce9986c449 JS: Change signature of isShadowedFromBulkExport 2025-11-21 12:30:31 +01:00
Owen Mansel-Chan
ec381e4ec5 Use range analysis and improve tests 2025-11-21 10:31:50 +00: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
aegilops
ce136684e6 Fixed formatting 2025-11-20 17:39:32 +00:00
aegilops
e904520779 Fixed formatting 2025-11-20 17:34:42 +00:00
aegilops
29a5b27b13 Removed bounds checking and only using literals - bounded() predicate did not work 2025-11-20 17:31:56 +00:00
Paolo Tranquilli
794b328802 Bazel: remove unneeded file from registry 2025-11-20 17:07:09 +01:00
Paolo Tranquilli
195a7234d3 Merge branch 'main' into redsun82/update-fmt 2025-11-20 17:06:24 +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
Eliav2
6df789d114 Merge branch 'main' into 20823-globalVarRef-document-defaultView 2025-11-20 15:18:15 +02:00
eliav
91451b73ef javascript: Update expected results for global variable references 2025-11-20 15:15:06 +02: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
Paul Hodgkinson
801cd72965 Merge branch 'main' into java-kotlin-sensitive-logging-substring-barriers 2025-11-20 12:24:22 +00:00
aegilops
1e67907516 Merge commit 2025-11-20 12:22:39 +00:00
aegilops
62ee6d3a33 Made changes requested by reviewers - bounded() for range checking, style and better comments 2025-11-20 11:46:42 +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
Paolo Tranquilli
b54abc7a6d C++: move -DFMT_UNICODE into a module patch 2025-11-20 10:47:54 +01:00
eliav
08dfb95155 javascript: Add change note for document.defaultView aliasing window
Introduced a new change note detailing that `DataFlow::globalVarRef` now recognizes `document.defaultView` as an alias of `window`, enhancing the modeling of data flows involving `history` in queries.
2025-11-20 00:17:14 +02:00
Mingjie Shen
b293dfe3a6 C++: Fix CWE-119 memcpy tests
sizeof(pointer) only gives the pointer size, not the buffer
size, so use explicit 10/20 lengths in tests.cpp and update
OverflowBuffer.expected to accept the resulting memcpy diagnostics.

Signed-off-by: Mingjie Shen <shen497@purdue.edu>
2025-11-19 22:06:06 +00: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
Paolo Tranquilli
83b3711973 Swift: update fmt 2025-11-19 14:32:37 +01: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
Geoffrey White
81096131b6 Rust: Correct + clarify qldoc. 2025-11-17 15:27:49 +00:00
Geoffrey White
7c8e44db8e Rust: Change note. 2025-11-17 15:09:57 +00:00
Geoffrey White
725899389b Rust: Clean up the query slightly. 2025-11-17 15:08:53 +00:00
Geoffrey White
41a6bf079d Rust: Add barrier for null pointer checks to the query. 2025-11-17 15:00:22 +00:00
Geoffrey White
d804229158 Rust: Add missing model. 2025-11-17 14:41:14 +00:00
Geoffrey White
6c3566ab52 Rust: It turns out we need test cases for immutable pointers as well. 2025-11-17 14:32:57 +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
Paul Hodgkinson
7b25e22a37 Merge branch 'main' into java-kotlin-sensitive-logging-substring-barriers 2025-11-17 11:03:39 +00:00
aegilops
528c451007 Added change note, adjusted spacing in comment 2025-11-17 11:02:59 +00: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
eliav
8047450668 javascript: Update property access for `document.defaultView as getAPropertyRead
Changed the method for accessing `defaultView` from `getAPropertyReference` to `getAPropertyRead` to improve accuracy in data flow analysis for global variable references.
2025-11-17 01:05:58 +02:00
eliav
bd18e862eb javascript: add change note 2025-11-17 01:02:21 +02:00
eliav
30cc91421d javascript: Add support for document.defaultView in global variable references
Updated the data flow analysis to include `document.defaultView` as a source node for global variable references. Added a new test file `tst4.js` and updated existing tests to verify the inclusion of `defaultView` and its properties in the expected results.
2025-11-17 00:52:06 +02: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
aegilops
0c0fbc1457 Fixed sensitive logging barriers for substring to allow single-arg use 2025-11-14 18:12:05 +00:00
aegilops
fa703e3e60 Test cases for sensitive logging sanitizer 2025-11-14 16:53:46 +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
Geoffrey White
e0f0305ace Rust: Add test cases for rust/access-invalid-pointer based on real world FPs. 2025-11-13 16:07:22 +00: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
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
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
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
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
Mathias Vorreiter Pedersen
6a2debba96 C++: Fix bad magic. 2025-11-07 17:38:18 +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
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
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
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
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
Geoffrey White
687cc6f544 Rust: Re-arrange models slightly. 2025-11-03 14:54:13 +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
aegilops
d1eceee9d4 Fixed format/docs issues 2025-10-31 18:19:27 +00:00
aegilops
26087f6060 Added java-kotlin Sensitive Logging barriers (substrings) 2025-10-31 17:56:04 +00: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
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
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
Michael Nebel
ee6dd0f771 C#: Update integration tests expected output. 2025-10-31 10:37:49 +01:00
Michael Nebel
ad02559b48 C#: Fix Binlog API breaking change. 2025-10-31 09:36:22 +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
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
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
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
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
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
1343 changed files with 94709 additions and 38638 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,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

@@ -23,7 +23,7 @@ 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")
bazel_dep(name = "fmt", version = "12.1.0-codeql.1")
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")
@@ -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,15 @@
## 0.4.23
No user-facing changes.
## 0.4.22
No user-facing changes.
## 0.4.21
No user-facing changes.
## 0.4.20
No user-facing changes.

View File

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

View File

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

View File

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

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 0.4.20
lastReleaseVersion: 0.4.23

View File

@@ -1,5 +1,5 @@
name: codeql/actions-all
version: 0.4.20
version: 0.4.23
library: true
warnOnImplicitThis: true
dependencies:

View File

@@ -1,3 +1,15 @@
## 0.6.15
No user-facing changes.
## 0.6.14
No user-facing changes.
## 0.6.13
No user-facing changes.
## 0.6.12
No user-facing changes.

View File

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

View File

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

View File

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

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 0.6.12
lastReleaseVersion: 0.6.15

View File

@@ -1,5 +1,5 @@
/**
* @name Artifact Poisoning (Path Traversal).
* @name Artifact Poisoning (Path Traversal)
* @description An attacker may be able to poison the workflow's artifacts and influence on consequent steps.
* @kind problem
* @problem.severity error

View File

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

View File

@@ -276,5 +276,12 @@
"Python model summaries test extension": [
"python/ql/test/library-tests/dataflow/model-summaries/InlineTaintTest.ext.yml",
"python/ql/test/library-tests/dataflow/model-summaries/NormalDataflowTest.ext.yml"
],
"XML discard predicates": [
"javascript/ql/lib/semmle/javascript/internal/OverlayXml.qll",
"java/ql/lib/semmle/code/java/internal/OverlayXml.qll",
"go/ql/lib/semmle/go/internal/OverlayXml.qll",
"python/ql/lib/semmle/python/internal/OverlayXml.qll",
"csharp/ql/lib/semmle/code/csharp/internal/OverlayXml.qll"
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
description: 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,23 @@
## 6.1.2
No user-facing changes.
## 6.1.1
### Minor Analysis Improvements
* 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`.
## 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.
@@ -259,8 +279,8 @@ No user-facing changes.
### Breaking Changes
* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`.
* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`.
* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`.
* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`.
* Deleted the deprecated `hasQualifiedName` and `isDefined` predicates from the `Declaration` class, use `hasGlobalName` and `hasDefinition` respectively instead.
* Deleted the `getFullSignature` predicate from the `Function` class, use `getIdentityString(Declaration)` from `semmle.code.cpp.Print` instead.
* Deleted the deprecated `freeCall` predicate from `Alloc.qll`. Use `DeallocationExpr` instead.
@@ -294,7 +314,7 @@ No user-facing changes.
* A `getTemplateClass` predicate was added to the `DeductionGuide` class to get the class template for which the deduction guide is a guide.
* An `isExplicit` predicate was added to the `Function` class that determines whether the function was declared as explicit.
* A `getExplicitExpr` predicate was added to the `Function` class that yields the constant boolean expression (if any) that conditionally determines whether the function is explicit.
* A `isDestroyingDeleteDeallocation` predicate was added to the `NewOrNewArrayExpr` and `DeleteOrDeleteArrayExpr` classes to indicate whether the deallocation function is a destroying delete.
* A `isDestroyingDeleteDeallocation` predicate was added to the `NewOrNewArrayExpr` and `DeleteOrDeleteArrayExpr` classes to indicate whether the deallocation function is a destroying delete.
### Minor Analysis Improvements
@@ -372,9 +392,9 @@ No user-facing changes.
### New Features
* Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field.
* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant.
* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant.
* Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant.
* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant.
* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant.
* Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant.
* Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement.
@@ -490,7 +510,7 @@ No user-facing changes.
* Functions that do not return due to calling functions that don't return (e.g. `exit`) are now detected as
non-returning in the IR and dataflow.
* Treat functions that reach the end of the function as returning in the IR.
They used to be treated as unreachable but it is allowed in C.
They used to be treated as unreachable but it is allowed in C.
* The `DataFlow::asDefiningArgument` predicate now takes its argument from the range starting at `1` instead of `2`. Queries that depend on the single-parameter version of `DataFlow::asDefiningArgument` should have their arguments updated accordingly.
## 0.9.3
@@ -539,7 +559,7 @@ No user-facing changes.
### New Features
* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`.
* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`.
Hence it is no longer needed to provide `none()` implementations of these predicates if they are not needed.
### Minor Analysis Improvements
@@ -733,7 +753,7 @@ No user-facing changes.
### Deprecated APIs
* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide.
* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide.
The old name still exists as a deprecated alias.
### New Features
@@ -750,7 +770,7 @@ No user-facing changes.
### Deprecated APIs
* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide.
* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide.
The old name still exists as a deprecated alias.
### New Features
@@ -849,7 +869,7 @@ No user-facing changes.
### Deprecated APIs
* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide.
* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide.
The old name still exists as a deprecated alias.
### New Features

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

@@ -0,0 +1,5 @@
## 6.1.1
### Minor Analysis Improvements
* 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.1.2
No user-facing changes.

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 6.0.1
lastReleaseVersion: 6.1.2

View File

@@ -74,3 +74,4 @@ import semmle.code.cpp.Preprocessor
import semmle.code.cpp.Iteration
import semmle.code.cpp.NameQualifiers
import DefaultOptions
private import semmle.code.cpp.internal.Overlay

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.1
version: 6.1.2
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

@@ -703,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
) {
@@ -713,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)
@@ -738,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
) {
@@ -757,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

@@ -15,16 +15,17 @@
* reading.
* 1. The `namespace` column selects a namespace.
* 2. The `type` column selects a type within that namespace. This column can
* introduce template names that can be mentioned in the `signature` column.
* introduce template type names that can be mentioned in the `signature` column.
* For example, `vector<T,Allocator>` introduces the template names `T` and
* `Allocator`.
* `Allocator`. Non-type template parameters cannot be specified.
* 3. The `subtypes` is a boolean that indicates whether to jump to an
* arbitrary subtype of that type. Set this to `false` if leaving the `type`
* blank (for example, a free function).
* 4. The `name` column optionally selects a specific named member of the type.
* Like the `type` column, this column can introduce template names that can
* be mentioned in the `signature` column. For example, `insert<InputIt>`
* introduces the template name `InputIt`.
* Like the `type` column, this column can introduce template type names
* that can be mentioned in the `signature` column. For example,
* `insert<InputIt>` introduces the template name `InputIt`. Non-type
* template parameters cannot be specified.
* 5. The `signature` column optionally restricts the named member. If
* `signature` is blank then no such filtering is done. The format of the
* signature is a comma-separated list of types enclosed in parentheses. The
@@ -633,6 +634,28 @@ string getParameterTypeWithoutTemplateArguments(Function f, int n, boolean canon
canonical = true
}
/**
* Gets the largest index of a template parameter of `templateFunction` that
* is a type template parameter.
*/
private int getLastTypeTemplateFunctionParameterIndex(Function templateFunction) {
result =
max(int index | templateFunction.getTemplateArgument(index) instanceof TypeTemplateParameter)
}
/** Gets the number of supported template parameters for `templateFunction`. */
private int getNumberOfSupportedFunctionTemplateArguments(Function templateFunction) {
result = count(int i | exists(getSupportedFunctionTemplateArgument(templateFunction, i)) | i)
}
/** Gets the `i`'th supported template parameter for `templateFunction`. */
private Locatable getSupportedFunctionTemplateArgument(Function templateFunction, int i) {
result = templateFunction.getTemplateArgument(i) and
// We don't yet support non-type template parameters in the middle of a
// template parameter list
i <= getLastTypeTemplateFunctionParameterIndex(templateFunction)
}
/**
* Normalize the `n`'th parameter of `f` by replacing template names
* with `func:N` (where `N` is the index of the template).
@@ -640,27 +663,51 @@ string getParameterTypeWithoutTemplateArguments(Function f, int n, boolean canon
private string getTypeNameWithoutFunctionTemplates(Function f, int n, int remaining) {
exists(Function templateFunction |
templateFunction = getFullyTemplatedFunction(f) and
remaining = templateFunction.getNumberOfTemplateArguments() and
remaining = getNumberOfSupportedFunctionTemplateArguments(templateFunction) and
result = getParameterTypeWithoutTemplateArguments(templateFunction, n, _)
)
or
exists(string mid, TypeTemplateParameter tp, Function templateFunction |
mid = getTypeNameWithoutFunctionTemplates(f, n, remaining + 1) and
templateFunction = getFullyTemplatedFunction(f) and
tp = templateFunction.getTemplateArgument(remaining) and
tp = getSupportedFunctionTemplateArgument(templateFunction, remaining)
|
result = mid.replaceAll(tp.getName(), "func:" + remaining.toString())
)
}
/**
* Gets the largest index of a template parameter of `templateClass` that
* is a type template parameter.
*/
private int getLastTypeTemplateClassParameterIndex(Class templateClass) {
result =
max(int index | templateClass.getTemplateArgument(index) instanceof TypeTemplateParameter)
}
/** Gets the `i`'th supported template parameter for `templateClass`. */
private Locatable getSupportedClassTemplateArgument(Class templateClass, int i) {
result = templateClass.getTemplateArgument(i) and
// We don't yet support non-type template parameters in the middle of a
// template parameter list
i <= getLastTypeTemplateClassParameterIndex(templateClass)
}
/** Gets the number of supported template parameters for `templateClass`. */
private int getNumberOfSupportedClassTemplateArguments(Class templateClass) {
result = count(int i | exists(getSupportedClassTemplateArgument(templateClass, i)) | i)
}
/**
* 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 |
isClassConstructedFrom(f.getDeclaringType(), template) and
remaining = template.getNumberOfTemplateArguments() and
remaining = getNumberOfSupportedClassTemplateArguments(template) and
result = getTypeNameWithoutFunctionTemplates(f, n, 0)
)
or
@@ -672,7 +719,8 @@ private string getTypeNameWithoutClassTemplates(Function f, int n, int remaining
exists(string mid, TypeTemplateParameter tp, Class template |
mid = getTypeNameWithoutClassTemplates(f, n, remaining + 1) and
isClassConstructedFrom(f.getDeclaringType(), template) and
tp = template.getTemplateArgument(remaining) and
tp = getSupportedClassTemplateArgument(template, remaining)
|
result = mid.replaceAll(tp.getName(), "class:" + remaining.toString())
)
}
@@ -727,6 +775,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 +819,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 +839,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 +891,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 +916,7 @@ module ExternalFlowDebug {
*
* Exposed for testing purposes.
*/
predicate signatureMatches_debug = signatureMatches/5;
predicate signatureMatches_debug = signatureMatches/6;
/**
* INTERNAL: Do not use.
@@ -883,6 +966,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 +993,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 +1037,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 +1053,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 +1070,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

@@ -0,0 +1,60 @@
/**
* Defines entity discard predicates for C++ overlay analysis.
*/
/**
* Holds always for the overlay variant and never for the base variant.
* This local predicate is used to define local predicates that behave
* differently for the base and overlay variant.
*/
overlay[local]
predicate isOverlay() { databaseMetadata("isOverlay", "true") }
overlay[local]
private string getLocationFilePath(@location_default loc) {
exists(@file file | locations_default(loc, file, _, _, _, _) | files(file, result))
}
/**
* Gets the file path for an element with a single location.
*/
overlay[local]
private string getSingleLocationFilePath(@element e) {
// @var_decl has a direct location in the var_decls relation
exists(@location_default loc | var_decls(e, _, _, _, loc) | result = getLocationFilePath(loc))
//TODO: add other kinds of elements with single locations
}
/**
* Gets the file path for an element with potentially multiple locations.
*/
overlay[local]
private string getMultiLocationFilePath(@element e) {
// @variable gets its location(s) from its @var_decl(s)
exists(@var_decl vd, @location_default loc | var_decls(vd, e, _, _, loc) |
result = getLocationFilePath(loc)
)
//TODO: add other kinds of elements with multiple locations
}
/**
* A local helper predicate that holds in the base variant and never in the
* overlay variant.
*/
overlay[local]
private predicate holdsInBase() { not isOverlay() }
/**
* Discards an element from the base variant if:
* - It has a single location in a changed file, or
* - All of its locations are in changed files.
*/
overlay[discard_entity]
private predicate discardElement(@element e) {
holdsInBase() and
(
overlayChangedFiles(getSingleLocationFilePath(e))
or
forex(string path | path = getMultiLocationFilePath(e) | overlayChangedFiles(path))
)
}

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

@@ -2078,38 +2078,151 @@ predicate localExprFlow(Expr e1, Expr e2) {
localExprFlowPlus(e1, e2)
}
/**
* A canonical representation of a field.
*
* For performance reasons we want a unique `Content` that represents
* a given field across any template instantiation of a class.
*
* This is possible in _almost_ all cases, but there are cases where it is
* not possible to map between a field in the uninstantiated template to a
* field in the instantiated template. This happens in the case of local class
* definitions (because the local class is not the template that constructs
* the instantiation - it is the enclosing function). So this abstract class
* has two implementations: a non-local case (where we can represent a
* canonical field as the field declaration from an uninstantiated class
* template or a non-templated class), and a local case (where we simply use
* the field from the instantiated class).
*/
abstract private class CanonicalField extends Field {
/** Gets a field represented by this canonical field. */
abstract Field getAField();
/**
* Gets a class that declares a field represented by this canonical field.
*/
abstract Class getADeclaringType();
/**
* Gets a type that this canonical field may have. Note that this may
* not be a unique type. For example, consider this case:
* ```
* template<typename T>
* struct S { T x; };
*
* S<int> s1;
* S<char> s2;
* ```
* In this case the canonical field corresponding to `S::x` has two types:
* `int` and `char`.
*/
Type getAType() { result = this.getAField().getType() }
Type getAnUnspecifiedType() { result = this.getAType().getUnspecifiedType() }
}
private class NonLocalCanonicalField extends CanonicalField {
Class declaringType;
NonLocalCanonicalField() {
declaringType = this.getDeclaringType() and
not declaringType.isFromTemplateInstantiation(_) and
not declaringType.isLocal() // handled in LocalCanonicalField
}
override Field getAField() {
exists(Class c | result.getDeclaringType() = c |
// Either the declaring class of the field is a template instantiation
// that has been constructed from this canonical declaration
c.isConstructedFrom(declaringType) and
pragma[only_bind_out](result.getName()) = pragma[only_bind_out](this.getName())
or
// or this canonical declaration is not a template.
not c.isConstructedFrom(_) and
result = this
)
}
override Class getADeclaringType() {
result = this.getDeclaringType()
or
result.isConstructedFrom(this.getDeclaringType())
}
}
private class LocalCanonicalField extends CanonicalField {
Class declaringType;
LocalCanonicalField() {
declaringType = this.getDeclaringType() and
declaringType.isLocal()
}
override Field getAField() { result = this }
override Class getADeclaringType() { result = declaringType }
}
/**
* A canonical representation of a `Union`. See `CanonicalField` for the explanation for
* why we need a canonical representation.
*/
abstract private class CanonicalUnion extends Union {
/** Gets a union represented by this canonical union. */
abstract Union getAUnion();
/** Gets a canonical field of this canonical union. */
CanonicalField getACanonicalField() { result.getDeclaringType() = this }
}
private class NonLocalCanonicalUnion extends CanonicalUnion {
NonLocalCanonicalUnion() { not this.isFromTemplateInstantiation(_) and not this.isLocal() }
override Union getAUnion() {
result = this
or
result.isConstructedFrom(this)
}
}
private class LocalCanonicalUnion extends CanonicalUnion {
LocalCanonicalUnion() { this.isLocal() }
override Union getAUnion() { result = this }
}
bindingset[f]
pragma[inline_late]
private int getFieldSize(Field f) { result = f.getType().getSize() }
private int getFieldSize(CanonicalField f) { result = max(f.getAType().getSize()) }
/**
* Gets a field in the union `u` whose size
* is `bytes` number of bytes.
*/
private Field getAFieldWithSize(Union u, int bytes) {
result = u.getAField() and
private CanonicalField getAFieldWithSize(CanonicalUnion u, int bytes) {
result = u.getACanonicalField() and
bytes = getFieldSize(result)
}
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(CanonicalField 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
indirectionIndex = [1 .. max(SsaImpl::getMaxIndirectionsForType(f.getAnUnspecifiedType()))] and
// Reads and writes of union fields are tracked using `UnionContent`.
not f.getDeclaringType() instanceof Union
} or
TUnionContent(Union u, int bytes, int indirectionIndex) {
exists(Field f |
f = u.getAField() and
TUnionContent(CanonicalUnion u, int bytes, int indirectionIndex) {
exists(CanonicalField f |
f = u.getACanonicalField() and
bytes = getFieldSize(f) and
// We key `UnionContent` by the union instead of its fields since a write to one
// field can be read by any read of the union's fields. Again, the indirection index
// is 1-based (because 0 is considered the address).
indirectionIndex =
[1 .. max(SsaImpl::getMaxIndirectionsForType(getAFieldWithSize(u, bytes)
.getUnspecifiedType())
.getAnUnspecifiedType())
)]
)
} or
@@ -2124,14 +2237,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 +2255,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,37 +2275,62 @@ 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 {
private Field f;
/** Gets a `Field` of this `Content`. */
Field getAField() { none() }
/**
* Gets the field associated with this `Content`, if a unique one exists.
*
* For fields from template instantiations this predicate may still return
* more than one field, but all the fields will be constructed from the same
* template.
*/
Field getField() { none() } // overridden in subclasses
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 CanonicalField 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 }
final override Field getField() { result = f.getAField() }
override Field getAField() { result = this.getField() }
/** 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 |
fc = c and
fc.getField() = f and
exists(int i |
c = TNonUnionContent(f, i) and
// If `this` is `f` then `c` is cleared if it's of the
// form `*f`, `**f`, etc.
fc.getIndirectionIndex() >= indirectionIndex
i >= indirectionIndex
)
}
}
/** A reference through an instance field of a union. */
class UnionContent extends Content, TUnionContent {
private Union u;
class UnionContent extends FieldContent, TUnionContent {
private CanonicalUnion u;
private int indirectionIndex;
private int bytes;
@@ -2200,27 +2338,31 @@ class UnionContent extends Content, TUnionContent {
override string toString() { result = contentStars(this) + u.toString() }
final override Field getField() { result = unique( | | u.getACanonicalField()).getAField() }
/** Gets a field of the underlying union of this `UnionContent`, if any. */
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 Field getAField() {
exists(CanonicalField cf |
cf = u.getACanonicalField() and
result = cf.getAField() and
getFieldSize(cf) = bytes
)
}
/** Gets the underlying union of this `UnionContent`. */
Union getUnion() { result = u.getAUnion() }
/** Gets the indirection index of this `UnionContent`. */
override int getIndirectionIndex() { result = indirectionIndex }
override predicate impliesClearOf(Content c) {
exists(UnionContent uc |
uc = c and
uc.getUnion() = u and
exists(int i |
c = TUnionContent(u, _, i) and
// If `this` is `u` then `c` is cleared if it's of the
// form `*u`, `**u`, etc. (and we ignore `bytes` because
// we know the entire union is overwritten because it's a
// union).
uc.getIndirectionIndex() >= indirectionIndex
i >= indirectionIndex
)
}
}
@@ -2234,10 +2376,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

@@ -93,6 +93,18 @@ 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
@@ -504,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
@@ -654,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
@@ -713,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)
)
@@ -1796,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
@@ -1826,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
@@ -1845,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,15 @@
## 1.5.6
No user-facing changes.
## 1.5.5
No user-facing changes.
## 1.5.4
No user-facing changes.
## 1.5.3
No user-facing changes.

View File

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

View File

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

View File

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

View File

@@ -1,2 +1,2 @@
---
lastReleaseVersion: 1.5.3
lastReleaseVersion: 1.5.6

View File

@@ -1,5 +1,5 @@
/**
* @name Dangerous use convert function.
* @name Dangerous use convert function
* @description Using convert function with an invalid length argument can result in an out-of-bounds access error or unexpected result.
* @kind problem
* @id cpp/dangerous-use-convert-function

View File

@@ -1,5 +1,5 @@
/**
* @name Dangerous use of transformation after operation.
* @name Dangerous use of transformation after operation
* @description By using the transformation after the operation, you are doing a pointless and dangerous action.
* @kind problem
* @id cpp/dangerous-use-of-transformation-after-operation

View File

@@ -1,5 +1,5 @@
/**
* @name Writing to a file without setting permissions.
* @name Writing to a file without setting permissions
* @description Lack of restriction on file access rights can be unsafe.
* @kind problem
* @id cpp/work-with-file-without-permissions-rights

View File

@@ -1,5 +1,5 @@
/**
* @name Find work with changing working directories, with security errors.
* @name Find work with changing working directories, with security errors
* @description Not validating the return value or pinning the directory can be unsafe.
* @kind problem
* @id cpp/work-with-changing-working-directories

View File

@@ -1,5 +1,5 @@
/**
* @name Find the wrong use of the umask function.
* @name Find the wrong use of the umask function
* @description Incorrectly evaluated argument to the umask function may have security implications.
* @kind problem
* @id cpp/wrong-use-of-the-umask

View File

@@ -1,5 +1,5 @@
/**
* @name Insecure generation of filenames.
* @name Insecure generation of filenames
* @description Using a predictable filename when creating a temporary file can lead to an attacker-controlled input.
* @kind problem
* @id cpp/insecure-generation-of-filename

View File

@@ -1,5 +1,5 @@
/**
* @name Dangerous use of exception blocks.
* @name Dangerous use of exception blocks
* @description When clearing the data in the catch block, you must be sure that the memory was allocated before the exception.
* @kind problem
* @id cpp/dangerous-use-of-exception-blocks

View File

@@ -1,5 +1,5 @@
/**
* @name Dangerous use SSL_shutdown.
* @name Dangerous use SSL_shutdown
* @description Incorrect closing of the connection leads to the creation of different states for the server and client, which can be exploited by an attacker.
* @kind problem
* @id cpp/dangerous-use-of-ssl-shutdown

View File

@@ -1,5 +1,5 @@
name: codeql/cpp-queries
version: 1.5.3
version: 1.5.6
groups:
- cpp
- queries

View File

@@ -1,5 +1,5 @@
/**
* @name Capture content based summary models.
* @name Capture content based summary models
* @description Finds applicable content based summary models to be used by other queries.
* @kind diagnostic
* @id cpp/utils/modelgenerator/contentbased-summary-models

View File

@@ -1,5 +1,5 @@
/**
* @name Capture neutral models.
* @name Capture neutral models
* @description Finds neutral models to be used by other queries.
* @kind diagnostic
* @id cpp/utils/modelgenerator/neutral-models

View File

@@ -1,5 +1,5 @@
/**
* @name Capture sink models.
* @name Capture sink models
* @description Finds public methods that act as sinks as they flow into a known sink.
* @kind diagnostic
* @id cpp/utils/modelgenerator/sink-models

View File

@@ -1,5 +1,5 @@
/**
* @name Capture source models.
* @name Capture source models
* @description Finds APIs that act as sources as they expose already known sources.
* @kind diagnostic
* @id cpp/utils/modelgenerator/source-models

View File

@@ -1,5 +1,5 @@
/**
* @name Capture summary models.
* @name Capture summary models
* @description Finds applicable summary models to be used by other queries.
* @kind diagnostic
* @id cpp/utils/modelgenerator/summary-models

View File

@@ -190,7 +190,7 @@ module ModelGeneratorCommonInput implements ModelGeneratorCommonInputSig<Cpp::Lo
predicate isRelevantType(Type t) { any() }
Type getUnderlyingContentType(DataFlow::ContentSet c) {
result = c.(DataFlow::FieldContent).getField().getUnspecifiedType() or
result = c.(DataFlow::NonUnionFieldContent).getField().getUnspecifiedType() or
result = c.(DataFlow::UnionContent).getUnion().getUnspecifiedType()
}
@@ -340,12 +340,7 @@ private module SummaryModelGeneratorInput implements SummaryModelGeneratorInputS
)
}
predicate isField(DataFlow::ContentSet cs) {
exists(DataFlow::Content c | cs.isSingleton(c) |
c instanceof DataFlow::FieldContent or
c instanceof DataFlow::UnionContent
)
}
predicate isField(DataFlow::ContentSet cs) { cs.isSingleton(any(DataFlow::FieldContent fc)) }
predicate isCallback(DataFlow::ContentSet c) { none() }

View File

@@ -1,4 +1,2 @@
| clang421.c:1:12:1:19 | clang421 | 0 |
| clang450.c:1:12:1:19 | clang450 | 1 |
| gcc421.c:1:12:1:17 | gcc421 | 0 |
| gcc450.c:1:12:1:17 | gcc450 | 1 |

View File

@@ -1,2 +0,0 @@
static int gcc421 = __has_feature(attribute_deprecated_with_message);
// semmle-extractor-options: --gnu_version 40201

View File

@@ -1,2 +0,0 @@
static int gcc450 = __has_feature(attribute_deprecated_with_message);
// semmle-extractor-options: --gnu_version 40500

View File

@@ -30,13 +30,14 @@ models
| 29 | Summary: ; ; false; RtlMoveMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual |
| 30 | Summary: ; ; false; RtlMoveVolatileMemory; ; ; Argument[*@1]; Argument[*@0]; value; manual |
| 31 | Summary: ; ; false; callWithArgument; ; ; Argument[1]; Argument[0].Parameter[0]; value; manual |
| 32 | Summary: ; ; false; pthread_create; ; ; Argument[@3]; Argument[2].Parameter[@0]; value; manual |
| 33 | Summary: ; ; false; ymlStepGenerated; ; ; Argument[0]; ReturnValue; taint; df-generated |
| 34 | Summary: ; ; false; ymlStepManual; ; ; Argument[0]; ReturnValue; taint; manual |
| 35 | Summary: ; ; false; ymlStepManual_with_body; ; ; Argument[0]; ReturnValue; taint; manual |
| 36 | Summary: boost::asio; ; false; buffer; ; ; Argument[*0]; ReturnValue; taint; manual |
| 32 | Summary: ; ; false; callWithNonTypeTemplate<T>; (const T &); ; Argument[*0]; ReturnValue; value; manual |
| 33 | Summary: ; ; false; pthread_create; ; ; Argument[@3]; Argument[2].Parameter[@0]; value; manual |
| 34 | Summary: ; ; false; ymlStepGenerated; ; ; Argument[0]; ReturnValue; taint; df-generated |
| 35 | Summary: ; ; false; ymlStepManual; ; ; Argument[0]; ReturnValue; taint; manual |
| 36 | Summary: ; ; false; ymlStepManual_with_body; ; ; Argument[0]; ReturnValue; taint; manual |
| 37 | Summary: boost::asio; ; false; buffer; ; ; Argument[*0]; ReturnValue; taint; manual |
edges
| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | provenance | MaD:36 |
| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | provenance | MaD:37 |
| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:17 |
| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:93:29:93:39 | *recv_buffer | provenance | Src:MaD:17 Sink:MaD:2 |
| asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:98:7:98:14 | send_str | provenance | TaintFunction |
@@ -45,10 +46,10 @@ edges
| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:101:7:101:17 | send_buffer | provenance | |
| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | *send_buffer | provenance | Sink:MaD:2 |
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | provenance | |
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:36 |
| test.cpp:4:5:4:17 | [summary param] 0 in ymlStepManual | test.cpp:4:5:4:17 | [summary] to write: ReturnValue in ymlStepManual | provenance | MaD:34 |
| test.cpp:5:5:5:20 | [summary param] 0 in ymlStepGenerated | test.cpp:5:5:5:20 | [summary] to write: ReturnValue in ymlStepGenerated | provenance | MaD:33 |
| test.cpp:6:5:6:27 | [summary param] 0 in ymlStepManual_with_body | test.cpp:6:5:6:27 | [summary] to write: ReturnValue in ymlStepManual_with_body | provenance | MaD:35 |
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:37 |
| test.cpp:4:5:4:17 | [summary param] 0 in ymlStepManual | test.cpp:4:5:4:17 | [summary] to write: ReturnValue in ymlStepManual | provenance | MaD:35 |
| test.cpp:5:5:5:20 | [summary param] 0 in ymlStepGenerated | test.cpp:5:5:5:20 | [summary] to write: ReturnValue in ymlStepGenerated | provenance | MaD:34 |
| test.cpp:6:5:6:27 | [summary param] 0 in ymlStepManual_with_body | test.cpp:6:5:6:27 | [summary] to write: ReturnValue in ymlStepManual_with_body | provenance | MaD:36 |
| test.cpp:7:47:7:52 | value2 | test.cpp:7:64:7:69 | value2 | provenance | |
| test.cpp:7:64:7:69 | value2 | test.cpp:7:5:7:30 | *ymlStepGenerated_with_body | provenance | |
| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:10:10:10:18 | call to ymlSource | provenance | Src:MaD:16 |
@@ -60,15 +61,15 @@ edges
| test.cpp:17:10:17:22 | call to ymlStepManual | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | |
| test.cpp:17:10:17:22 | call to ymlStepManual | test.cpp:18:10:18:10 | y | provenance | Sink:MaD:1 |
| test.cpp:17:24:17:24 | x | test.cpp:4:5:4:17 | [summary param] 0 in ymlStepManual | provenance | |
| test.cpp:17:24:17:24 | x | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | MaD:34 |
| test.cpp:17:24:17:24 | x | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | MaD:35 |
| test.cpp:21:10:21:25 | call to ymlStepGenerated | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | |
| test.cpp:21:10:21:25 | call to ymlStepGenerated | test.cpp:22:10:22:10 | z | provenance | Sink:MaD:1 |
| test.cpp:21:27:21:27 | x | test.cpp:5:5:5:20 | [summary param] 0 in ymlStepGenerated | provenance | |
| test.cpp:21:27:21:27 | x | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | MaD:33 |
| test.cpp:21:27:21:27 | x | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | MaD:34 |
| test.cpp:25:11:25:33 | call to ymlStepManual_with_body | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | |
| test.cpp:25:11:25:33 | call to ymlStepManual_with_body | test.cpp:26:10:26:11 | y2 | provenance | Sink:MaD:1 |
| test.cpp:25:35:25:35 | x | test.cpp:6:5:6:27 | [summary param] 0 in ymlStepManual_with_body | provenance | |
| test.cpp:25:35:25:35 | x | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | MaD:35 |
| test.cpp:25:35:25:35 | x | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | MaD:36 |
| test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | provenance | |
| test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | test.cpp:33:10:33:11 | z2 | provenance | Sink:MaD:1 |
| test.cpp:32:41:32:41 | x | test.cpp:7:47:7:52 | value2 | provenance | |
@@ -76,7 +77,7 @@ edges
| test.cpp:46:30:46:32 | *arg [x] | test.cpp:47:12:47:19 | *arg [x] | provenance | |
| test.cpp:47:12:47:19 | *arg [x] | test.cpp:48:13:48:13 | *s [x] | provenance | |
| test.cpp:48:13:48:13 | *s [x] | test.cpp:48:16:48:16 | x | provenance | Sink:MaD:1 |
| test.cpp:52:5:52:18 | [summary param] *3 in pthread_create [x] | test.cpp:52:5:52:18 | [summary] to write: Argument[2].Parameter[*0] in pthread_create [x] | provenance | MaD:32 |
| test.cpp:52:5:52:18 | [summary param] *3 in pthread_create [x] | test.cpp:52:5:52:18 | [summary] to write: Argument[2].Parameter[*0] in pthread_create [x] | provenance | MaD:33 |
| test.cpp:52:5:52:18 | [summary] to write: Argument[2].Parameter[*0] in pthread_create [x] | test.cpp:46:30:46:32 | *arg [x] | provenance | |
| test.cpp:56:2:56:2 | *s [post update] [x] | test.cpp:59:55:59:64 | *& ... [x] | provenance | |
| test.cpp:56:2:56:18 | ... = ... | test.cpp:56:2:56:2 | *s [post update] [x] | provenance | |
@@ -103,6 +104,13 @@ edges
| test.cpp:101:26:101:26 | x | test.cpp:63:6:63:21 | [summary param] 1 in callWithArgument | provenance | |
| test.cpp:103:63:103:63 | x | test.cpp:63:6:63:21 | [summary param] 1 in callWithArgument | provenance | |
| test.cpp:104:62:104:62 | x | test.cpp:63:6:63:21 | [summary param] 1 in callWithArgument | provenance | |
| test.cpp:111:3:111:25 | [summary param] *0 in callWithNonTypeTemplate | test.cpp:111:3:111:25 | [summary] to write: ReturnValue in callWithNonTypeTemplate | provenance | MaD:32 |
| test.cpp:114:10:114:18 | call to ymlSource | test.cpp:114:10:114:18 | call to ymlSource | provenance | Src:MaD:16 |
| test.cpp:114:10:114:18 | call to ymlSource | test.cpp:118:44:118:44 | *x | provenance | |
| test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | provenance | |
| test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | test.cpp:119:10:119:11 | y2 | provenance | Sink:MaD:1 |
| test.cpp:118:44:118:44 | *x | test.cpp:111:3:111:25 | [summary param] *0 in callWithNonTypeTemplate | provenance | |
| test.cpp:118:44:118:44 | *x | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | provenance | MaD:32 |
| windows.cpp:17:8:17:25 | [summary param] *0 in CommandLineToArgvA | windows.cpp:17:8:17:25 | [summary] to write: ReturnValue[**] in CommandLineToArgvA | provenance | MaD:18 |
| windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:22:15:22:29 | *call to GetCommandLineA | provenance | Src:MaD:3 |
| windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:24:8:24:11 | * ... | provenance | |
@@ -314,6 +322,14 @@ nodes
| test.cpp:101:26:101:26 | x | semmle.label | x |
| test.cpp:103:63:103:63 | x | semmle.label | x |
| test.cpp:104:62:104:62 | x | semmle.label | x |
| test.cpp:111:3:111:25 | [summary param] *0 in callWithNonTypeTemplate | semmle.label | [summary param] *0 in callWithNonTypeTemplate |
| test.cpp:111:3:111:25 | [summary] to write: ReturnValue in callWithNonTypeTemplate | semmle.label | [summary] to write: ReturnValue in callWithNonTypeTemplate |
| test.cpp:114:10:114:18 | call to ymlSource | semmle.label | call to ymlSource |
| test.cpp:114:10:114:18 | call to ymlSource | semmle.label | call to ymlSource |
| test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | semmle.label | call to callWithNonTypeTemplate |
| test.cpp:118:11:118:42 | call to callWithNonTypeTemplate | semmle.label | call to callWithNonTypeTemplate |
| test.cpp:118:44:118:44 | *x | semmle.label | *x |
| test.cpp:119:10:119:11 | y2 | semmle.label | y2 |
| windows.cpp:17:8:17:25 | [summary param] *0 in CommandLineToArgvA | semmle.label | [summary param] *0 in CommandLineToArgvA |
| windows.cpp:17:8:17:25 | [summary] to write: ReturnValue[**] in CommandLineToArgvA | semmle.label | [summary] to write: ReturnValue[**] in CommandLineToArgvA |
| windows.cpp:22:15:22:29 | *call to GetCommandLineA | semmle.label | *call to GetCommandLineA |
@@ -472,6 +488,7 @@ subpaths
| test.cpp:21:27:21:27 | x | test.cpp:5:5:5:20 | [summary param] 0 in ymlStepGenerated | test.cpp:5:5:5:20 | [summary] to write: ReturnValue in ymlStepGenerated | test.cpp:21:10:21:25 | call to ymlStepGenerated |
| test.cpp:25:35:25:35 | x | test.cpp:6:5:6:27 | [summary param] 0 in ymlStepManual_with_body | test.cpp:6:5:6:27 | [summary] to write: ReturnValue in ymlStepManual_with_body | test.cpp:25:11:25:33 | call to ymlStepManual_with_body |
| test.cpp:32:41:32:41 | x | test.cpp:7:47:7:52 | value2 | test.cpp:7:5:7:30 | *ymlStepGenerated_with_body | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body |
| test.cpp:118:44:118:44 | *x | test.cpp:111:3:111:25 | [summary param] *0 in callWithNonTypeTemplate | test.cpp:111:3:111:25 | [summary] to write: ReturnValue in callWithNonTypeTemplate | test.cpp:118:11:118:42 | call to callWithNonTypeTemplate |
| windows.cpp:27:36:27:38 | *cmd | windows.cpp:17:8:17:25 | [summary param] *0 in CommandLineToArgvA | windows.cpp:17:8:17:25 | [summary] to write: ReturnValue[**] in CommandLineToArgvA | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA |
| windows.cpp:537:40:537:41 | *& ... | windows.cpp:473:17:473:37 | [summary param] *1 in RtlCopyVolatileMemory | windows.cpp:473:17:473:37 | [summary param] *0 in RtlCopyVolatileMemory [Return] | windows.cpp:537:27:537:37 | RtlCopyVolatileMemory output argument |
| windows.cpp:542:38:542:39 | *& ... | windows.cpp:479:17:479:35 | [summary param] *1 in RtlCopyDeviceMemory | windows.cpp:479:17:479:35 | [summary param] *0 in RtlCopyDeviceMemory [Return] | windows.cpp:542:25:542:35 | RtlCopyDeviceMemory output argument |

View File

@@ -17,4 +17,5 @@ extensions:
- ["", "", False, "ymlStepGenerated", "", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["", "", False, "ymlStepManual_with_body", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["", "", False, "ymlStepGenerated_with_body", "", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["", "", False, "callWithArgument", "", "", "Argument[1]", "Argument[0].Parameter[0]", "value", "manual"]
- ["", "", False, "callWithArgument", "", "", "Argument[1]", "Argument[0].Parameter[0]", "value", "manual"]
- ["", "", False, "callWithNonTypeTemplate<T>", "(const T &)", "", "Argument[*0]", "ReturnValue", "value", "manual"]

View File

@@ -13,3 +13,5 @@
| test.cpp:75:11:75:11 | y | test-sink |
| test.cpp:83:11:83:11 | y | test-sink |
| test.cpp:89:11:89:11 | y | test-sink |
| test.cpp:116:10:116:11 | y1 | test-sink |
| test.cpp:119:10:119:11 | y2 | test-sink |

View File

@@ -2,6 +2,7 @@
| test.cpp:10:10:10:18 | call to ymlSource | local |
| test.cpp:56:8:56:16 | call to ymlSource | local |
| test.cpp:94:10:94:18 | call to ymlSource | local |
| test.cpp:114:10:114:18 | call to ymlSource | local |
| windows.cpp:22:15:22:29 | *call to GetCommandLineA | local |
| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | local |
| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | local |

View File

@@ -102,4 +102,19 @@ void test_callWithArgument() {
}
callWithArgument(StructWithOperatorCall_has_constructor_2(), x);
callWithArgument(StructWithOperatorCall_no_constructor_2(), x);
}
}
template<int N, typename T>
T callWithNonTypeTemplate(const T&);
template<typename T, int N>
T callWithNonTypeTemplate(const T&);
void test_callWithNonTypeTemplate() {
int x = ymlSource();
int y1 = callWithNonTypeTemplate<10, int>(x);
ymlSink(y1); // $ MISSING: ir
int y2 = callWithNonTypeTemplate<int, 10>(x);
ymlSink(y2); // $ ir
}

View File

@@ -142,6 +142,7 @@ postWithInFlow
| simple.cpp:92:7:92:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
| simple.cpp:118:7:118:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
| simple.cpp:124:5:124:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. |
| simple.cpp:167:9:167:9 | x [post update] | PostUpdateNode should not be the target of local flow. |
viableImplInCallContextTooLarge
uniqueParameterNodeAtPosition
uniqueParameterNodePosition

View File

@@ -308,3 +308,5 @@ WARNING: module 'DataFlow' has been deprecated and may be removed in future (par
| simple.cpp:124:5:124:6 | * ... | AST only |
| simple.cpp:131:14:131:14 | a | IR only |
| simple.cpp:136:10:136:10 | a | IR only |
| simple.cpp:167:9:167:9 | x | AST only |
| simple.cpp:168:8:168:12 | u_int | IR only |

View File

@@ -670,6 +670,8 @@
| simple.cpp:131:14:131:14 | a |
| simple.cpp:135:20:135:20 | q |
| simple.cpp:136:10:136:10 | a |
| simple.cpp:167:3:167:7 | u_int |
| simple.cpp:168:8:168:12 | u_int |
| struct_init.c:15:8:15:9 | ab |
| struct_init.c:15:12:15:12 | a |
| struct_init.c:16:8:16:9 | ab |

View File

@@ -597,6 +597,8 @@ WARNING: module 'DataFlow' has been deprecated and may be removed in future (par
| simple.cpp:118:7:118:7 | i |
| simple.cpp:124:5:124:6 | * ... |
| simple.cpp:135:20:135:20 | q |
| simple.cpp:167:3:167:7 | u_int |
| simple.cpp:167:9:167:9 | x |
| struct_init.c:15:8:15:9 | ab |
| struct_init.c:15:12:15:12 | a |
| struct_init.c:16:8:16:9 | ab |

View File

@@ -136,4 +136,36 @@ void alias_with_fields(bool b) {
sink(a.i); // $ MISSING: ast,ir
}
template<typename T>
union U_with_two_instantiations_of_different_size {
int x;
T y;
};
struct LargeStruct {
int data[64];
};
void test_union_with_two_instantiations_of_different_sizes() {
// A union's fields is partitioned into "chunks" for field-flow in order to
// improve performance (so that a write to a field of a union does not flow
// to too many reads that don't happen at runtime). The partitioning is based
// the size of the types in the union. So a write to a field of size k only
// flows to a read of size k.
// Since field-flow is based on uninstantiated types a field can have
// multiple sizes if the union is instantiated with types of
// different sizes. So to compute the partition we pick the maximum size.
// Because of this there are `Content`s corresponding to the union
// `U_with_two_instantiations_of_different_size<T>`: The one for size
// `sizeof(int)`, and the one for size `sizeof(LargeStruct)` (because
// `LargeStruct` is larger than `int`). So the write to `x` writes to the
// `Content` for size `sizeof(int)`, and the read of `y` reads from the
// `Content` for size `sizeof(LargeStruct)`.
U_with_two_instantiations_of_different_size<int> u_int;
U_with_two_instantiations_of_different_size<LargeStruct> u_very_large;
u_int.x = user_input();
sink(u_int.y); // $ MISSING: ir
}
} // namespace Simple

View File

@@ -7988,6 +7988,26 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future
| taint.cpp:841:21:841:35 | call to indirect_source | taint.cpp:843:16:843:17 | fp | |
| taint.cpp:842:11:842:12 | ref arg fp | taint.cpp:843:16:843:17 | fp | |
| taint.cpp:842:15:842:16 | | taint.cpp:842:11:842:12 | ref arg fp | TAINT |
| taint.cpp:851:10:851:15 | call to source | taint.cpp:852:18:852:18 | s | |
| taint.cpp:851:10:851:15 | call to source | taint.cpp:854:18:854:18 | s | |
| taint.cpp:852:10:852:16 | call to toupper | taint.cpp:853:7:853:7 | u | |
| taint.cpp:854:10:854:16 | call to tolower | taint.cpp:855:7:855:7 | l | |
| taint.cpp:861:24:861:27 | size | taint.cpp:866:16:866:19 | size | |
| taint.cpp:862:12:862:26 | call to indirect_source | taint.cpp:866:12:866:12 | s | |
| taint.cpp:863:7:863:9 | out | taint.cpp:864:12:864:14 | out | |
| taint.cpp:864:12:864:14 | out | taint.cpp:866:23:866:23 | p | |
| taint.cpp:864:12:864:14 | out | taint.cpp:867:8:867:8 | p | |
| taint.cpp:865:9:865:16 | size_out | taint.cpp:866:27:866:34 | size_out | |
| taint.cpp:866:11:866:12 | ref arg & ... | taint.cpp:866:12:866:12 | s [inner post update] | |
| taint.cpp:866:12:866:12 | s | taint.cpp:866:11:866:12 | & ... | |
| taint.cpp:866:15:866:19 | ref arg & ... | taint.cpp:866:16:866:19 | size [inner post update] | |
| taint.cpp:866:16:866:19 | size | taint.cpp:866:15:866:19 | & ... | |
| taint.cpp:866:22:866:23 | ref arg & ... | taint.cpp:866:23:866:23 | p [inner post update] | |
| taint.cpp:866:22:866:23 | ref arg & ... | taint.cpp:867:8:867:8 | p | |
| taint.cpp:866:23:866:23 | p | taint.cpp:866:22:866:23 | & ... | |
| taint.cpp:866:26:866:34 | ref arg & ... | taint.cpp:866:27:866:34 | size_out [inner post update] | |
| taint.cpp:866:27:866:34 | size_out | taint.cpp:866:26:866:34 | & ... | |
| taint.cpp:867:8:867:8 | p | taint.cpp:867:7:867:8 | * ... | TAINT |
| thread.cpp:10:27:10:27 | s | thread.cpp:10:27:10:27 | s | |
| thread.cpp:10:27:10:27 | s | thread.cpp:11:8:11:8 | s | |
| thread.cpp:14:26:14:26 | s | thread.cpp:15:8:15:8 | s | |

View File

@@ -842,4 +842,27 @@ int f7(void)
fprintf(fp, "");
indirect_sink(fp); // $ ir MISSING: ast
return 0;
}
int toupper(int);
int tolower(int);
void test_toupper_and_tolower() {
int s = source();
int u = toupper(s);
sink(u); // $ ir MISSING: ast
int l = tolower(s);
sink(l); // $ ir MISSING: ast
}
typedef int iconv_t;
size_t iconv(iconv_t cd, char **, size_t *, char **, size_t *);
void test_iconv(size_t size) {
char* s = indirect_source();
char out[10];
char* p = out;
size_t size_out;
iconv(0, &s, &size, &p, &size_out);
sink(*p); // $ ast,ir
}

View File

@@ -2,7 +2,7 @@ import cpp
import semmle.code.cpp.dataflow.ExternalFlow
import ExternalFlowDebug
query predicate signatureMatches = signatureMatches_debug/5;
query predicate signatureMatches = signatureMatches_debug/6;
query predicate getSignatureParameterName = getSignatureParameterName_debug/4;

View File

@@ -485,197 +485,529 @@
| test.c:411:59:411:59 | k | 0.205191 |
| test.c:411:63:411:63 | l | 0.132041 |
| test.c:413:10:413:15 | output | 1.842468 |
| test.c:418:20:418:20 | x | 0 |
| test.c:418:30:418:30 | x | 0 |
| test.c:421:3:421:4 | y1 | 0 |
| test.c:421:11:421:11 | y | 0 |
| test.c:421:14:421:14 | y | 1 |
| test.c:422:3:422:4 | y2 | 0 |
| test.c:422:9:422:9 | y | 1 |
| test.c:422:14:422:14 | y | 2 |
| test.c:422:22:422:22 | y | 5 |
| test.c:423:10:423:11 | y1 | 1 |
| test.c:423:15:423:16 | y2 | 5 |
| test.c:431:3:431:3 | i | -2147483648 |
| test.c:432:7:432:7 | i | 10 |
| test.c:434:3:434:3 | i | -2147483648 |
| test.c:435:3:435:3 | i | 10 |
| test.c:436:7:436:7 | i | 20 |
| test.c:438:3:438:3 | i | -2147483648 |
| test.c:439:3:439:3 | i | 40 |
| test.c:440:7:440:7 | i | 30 |
| test.c:442:3:442:3 | i | -2147483648 |
| test.c:442:7:442:7 | j | -2147483648 |
| test.c:443:7:443:7 | i | 40 |
| test.c:445:3:445:3 | i | -2147483648 |
| test.c:445:8:445:8 | j | 40 |
| test.c:446:7:446:7 | i | 50 |
| test.c:448:3:448:3 | i | -2147483648 |
| test.c:448:13:448:13 | j | 50 |
| test.c:449:7:449:7 | i | 60 |
| test.c:456:12:456:12 | a | 0 |
| test.c:456:17:456:17 | a | 3 |
| test.c:456:33:456:33 | b | 0 |
| test.c:456:38:456:38 | b | 5 |
| test.c:457:13:457:13 | a | 3 |
| test.c:457:15:457:15 | b | 5 |
| test.c:458:5:458:9 | total | 0 |
| test.c:458:14:458:14 | r | 15 |
| test.c:460:12:460:12 | a | 0 |
| test.c:460:17:460:17 | a | 3 |
| test.c:460:33:460:33 | b | 0 |
| test.c:460:38:460:38 | b | 0 |
| test.c:461:13:461:13 | a | 3 |
| test.c:461:15:461:15 | b | 0 |
| test.c:462:5:462:9 | total | 0 |
| test.c:462:14:462:14 | r | 0 |
| test.c:464:12:464:12 | a | 0 |
| test.c:464:17:464:17 | a | 3 |
| test.c:464:34:464:34 | b | 0 |
| test.c:464:39:464:39 | b | 13 |
| test.c:465:13:465:13 | a | 3 |
| test.c:465:15:465:15 | b | 13 |
| test.c:466:5:466:9 | total | 0 |
| test.c:466:14:466:14 | r | 39 |
| test.c:469:10:469:14 | total | 0 |
| test.c:475:12:475:12 | b | 0 |
| test.c:475:17:475:17 | b | 5 |
| test.c:476:16:476:16 | b | 5 |
| test.c:477:5:477:9 | total | 0 |
| test.c:477:14:477:14 | r | 55 |
| test.c:479:12:479:12 | b | 0 |
| test.c:479:17:479:17 | b | 0 |
| test.c:480:16:480:16 | b | 0 |
| test.c:481:5:481:9 | total | 0 |
| test.c:481:14:481:14 | r | 0 |
| test.c:483:13:483:13 | b | 0 |
| test.c:483:18:483:18 | b | 13 |
| test.c:484:16:484:16 | b | 13 |
| test.c:485:5:485:9 | total | 0 |
| test.c:485:14:485:14 | r | 143 |
| test.c:488:10:488:14 | total | 0 |
| test.c:493:3:493:3 | x | 0 |
| test.c:493:7:493:7 | y | 0 |
| test.c:494:3:494:4 | xy | 0 |
| test.c:494:8:494:8 | x | 1000000003 |
| test.c:494:12:494:12 | y | 1000000003 |
| test.c:495:10:495:11 | xy | 1000000006000000000 |
| test.c:500:3:500:3 | x | 0 |
| test.c:501:3:501:3 | y | 0 |
| test.c:502:3:502:4 | xy | 0 |
| test.c:502:8:502:8 | x | 274177 |
| test.c:502:12:502:12 | y | 67280421310721 |
| test.c:503:10:503:11 | xy | 18446744073709551616 |
| test.c:507:7:507:8 | ui | 0 |
| test.c:508:43:508:44 | ui | 10 |
| test.c:508:48:508:49 | ui | 10 |
| test.c:509:12:509:17 | result | 100 |
| test.c:511:7:511:8 | ul | 0 |
| test.c:512:28:512:29 | ul | 10 |
| test.c:512:33:512:34 | ul | 10 |
| test.c:513:12:513:17 | result | 0 |
| test.c:519:7:519:8 | ui | 0 |
| test.c:519:19:519:20 | ui | 0 |
| test.c:520:5:520:6 | ui | 2 |
| test.c:520:11:520:12 | ui | 2 |
| test.c:521:12:521:13 | ui | 4 |
| test.c:525:3:525:9 | uiconst | 10 |
| test.c:528:3:528:9 | ulconst | 10 |
| test.c:529:10:529:16 | uiconst | 40 |
| test.c:529:20:529:26 | ulconst | 40 |
| test.c:533:7:533:7 | i | -2147483648 |
| test.c:533:18:533:18 | i | -1 |
| test.c:534:5:534:5 | i | -2147483648 |
| test.c:534:13:534:13 | i | -1 |
| test.c:535:9:535:9 | i | -5 |
| test.c:537:5:537:5 | i | -2147483648 |
| test.c:537:9:537:9 | i | -5 |
| test.c:538:9:538:9 | i | -30 |
| test.c:540:5:540:5 | i | -30 |
| test.c:541:9:541:9 | i | -210 |
| test.c:543:5:543:5 | i | -210 |
| test.c:544:9:544:9 | i | -1155 |
| test.c:546:7:546:7 | i | -2147483648 |
| test.c:547:5:547:5 | i | -2147483648 |
| test.c:547:9:547:9 | i | -1 |
| test.c:548:9:548:9 | i | 1 |
| test.c:550:3:550:3 | i | -2147483648 |
| test.c:550:7:550:7 | i | -2147483648 |
| test.c:551:10:551:10 | i | -2147483648 |
| test.c:554:3:554:3 | i | -2147483648 |
| test.c:554:10:554:11 | sc | 1 |
| test.c:556:7:556:7 | i | -128 |
| test.c:563:7:563:7 | n | 0 |
| test.c:565:7:565:7 | n | 0 |
| test.c:566:9:566:9 | n | 1 |
| test.c:569:7:569:7 | n | 0 |
| test.c:570:9:570:9 | n | 1 |
| test.c:572:9:572:9 | n | 0 |
| test.c:575:8:575:8 | n | 0 |
| test.c:576:9:576:9 | n | 0 |
| test.c:578:9:578:9 | n | 1 |
| test.c:581:10:581:10 | n | 0 |
| test.c:582:5:582:5 | n | 1 |
| test.c:585:7:585:7 | n | 0 |
| test.c:589:7:589:7 | n | -32768 |
| test.c:592:7:592:7 | n | 0 |
| test.c:593:9:593:9 | n | 0 |
| test.c:595:9:595:9 | n | 1 |
| test.c:598:7:598:7 | n | 0 |
| test.c:599:9:599:9 | n | 1 |
| test.c:601:9:601:9 | n | 0 |
| test.c:604:10:604:10 | n | 0 |
| test.c:605:5:605:5 | n | 1 |
| test.c:608:7:608:7 | n | 0 |
| test.c:612:7:612:7 | n | -32768 |
| test.c:613:9:613:9 | n | -32768 |
| test.c:614:11:614:11 | n | 0 |
| test.c:618:7:618:7 | n | -32768 |
| test.c:619:13:619:13 | n | 5 |
| test.c:622:9:622:9 | n | 6 |
| test.c:625:7:625:7 | n | -32768 |
| test.c:625:22:625:22 | n | -32767 |
| test.c:626:9:626:9 | n | -32766 |
| test.c:629:7:629:7 | n | -32768 |
| test.c:630:5:630:5 | n | 0 |
| test.c:630:10:630:10 | n | 1 |
| test.c:630:14:630:14 | n | 0 |
| test.c:631:6:631:6 | n | 0 |
| test.c:631:10:631:10 | n | 0 |
| test.c:631:14:631:14 | n | 1 |
| test.c:642:7:642:8 | ss | -32768 |
| test.c:643:9:643:10 | ss | 0 |
| test.c:646:7:646:8 | ss | -32768 |
| test.c:647:9:647:10 | ss | -32768 |
| test.c:650:14:650:15 | us | 0 |
| test.c:651:9:651:10 | us | 0 |
| test.c:654:14:654:15 | us | 0 |
| test.c:655:9:655:10 | us | 0 |
| test.c:658:7:658:8 | ss | -32768 |
| test.c:659:9:659:10 | ss | -32768 |
| test.c:662:7:662:8 | ss | -32768 |
| test.c:663:9:663:10 | ss | -1 |
| test.c:669:8:669:8 | s | -2147483648 |
| test.c:669:15:669:15 | s | 0 |
| test.c:669:23:669:23 | s | 0 |
| test.c:670:18:670:18 | s | 0 |
| test.c:670:22:670:22 | s | 0 |
| test.c:671:9:671:14 | result | 0 |
| test.c:677:7:677:7 | i | 0 |
| test.c:678:9:678:9 | i | -2147483648 |
| test.c:682:7:682:7 | u | 0 |
| test.c:683:9:683:9 | u | 0 |
| test.c:688:12:688:12 | s | -2147483648 |
| test.c:689:7:689:8 | s2 | -4 |
| test.c:694:7:694:7 | x | -2147483648 |
| test.c:695:9:695:9 | y | -2147483648 |
| test.c:699:7:699:7 | y | -2147483648 |
| test.c:708:7:708:7 | x | -2147483648 |
| test.c:713:7:713:7 | x | -2147483648 |
| test.c:720:8:720:8 | x | 2147483647 |
| test.c:720:12:720:12 | y | 256 |
| test.c:721:9:721:9 | x | 2147483647 |
| test.c:722:9:722:9 | y | 256 |
| test.c:420:7:420:9 | rhs | 0 |
| test.c:420:19:420:21 | rhs | 0 |
| test.c:421:7:421:9 | rhs | 0 |
| test.c:421:19:421:21 | rhs | 0 |
| test.c:422:7:422:9 | rhs | 0 |
| test.c:422:19:422:21 | rhs | 0 |
| test.c:423:7:423:9 | rhs | 0 |
| test.c:423:19:423:21 | rhs | 0 |
| test.c:424:7:424:9 | rhs | 0 |
| test.c:424:19:424:21 | rhs | 0 |
| test.c:425:10:425:12 | rhs | 0 |
| test.c:429:7:429:7 | a | -2147483648 |
| test.c:430:9:430:9 | b | -2147483648 |
| test.c:431:7:431:7 | a | 17 |
| test.c:431:12:431:12 | b | 23 |
| test.c:433:9:433:9 | a | 17 |
| test.c:434:7:434:7 | b | -2147483648 |
| test.c:439:11:439:11 | a | -2147483648 |
| test.c:439:15:439:15 | b | -2147483648 |
| test.c:440:10:440:10 | a | -2147483648 |
| test.c:440:14:440:14 | b | -2147483648 |
| test.c:447:10:447:11 | ip | 0 |
| test.c:447:20:447:21 | ip | 0 |
| test.c:447:40:447:41 | ip | 0 |
| test.c:448:14:448:15 | ip | 1 |
| test.c:449:14:449:15 | ip | 0 |
| test.c:449:34:449:35 | ip | 0 |
| test.c:450:11:450:12 | ip | 0 |
| test.c:451:13:451:14 | ip | 0 |
| test.c:452:14:452:15 | ip | 0 |
| test.c:453:14:453:15 | ip | 0 |
| test.c:454:15:454:16 | ip | 0 |
| test.c:454:41:454:42 | ip | 0 |
| test.c:454:52:454:53 | ip | 0 |
| test.c:454:67:454:68 | ip | 0 |
| test.c:454:78:454:79 | ip | 0 |
| test.c:455:18:455:19 | ip | 0 |
| test.c:456:23:456:24 | ip | 0 |
| test.c:456:34:456:35 | ip | 0 |
| test.c:457:25:457:26 | ip | 0 |
| test.c:458:20:458:21 | ip | 0 |
| test.c:459:11:459:12 | ip | 0 |
| test.c:459:26:459:27 | ip | 0 |
| test.c:460:16:460:17 | ip | 0 |
| test.c:461:16:461:17 | ip | 0 |
| test.c:462:16:462:17 | ip | 0 |
| test.c:463:17:463:18 | ip | 0 |
| test.c:464:22:464:23 | ip | 0 |
| test.c:464:33:464:34 | ip | 0 |
| test.c:464:48:464:49 | ip | 0 |
| test.c:464:59:464:60 | ip | 0 |
| test.c:465:20:465:21 | ip | 0 |
| test.c:466:25:466:26 | ip | 0 |
| test.c:466:36:466:37 | ip | 0 |
| test.c:467:27:467:28 | ip | 0 |
| test.c:468:22:468:23 | ip | 0 |
| test.c:469:15:469:16 | ip | 0 |
| test.c:469:30:469:31 | ip | 0 |
| test.c:470:11:470:12 | ip | 0 |
| test.c:471:12:471:13 | ip | 0 |
| test.c:472:12:472:13 | ip | 0 |
| test.c:473:13:473:14 | ip | 0 |
| test.c:473:39:473:40 | ip | 0 |
| test.c:473:50:473:51 | ip | 0 |
| test.c:473:65:473:66 | ip | 0 |
| test.c:473:76:473:77 | ip | 0 |
| test.c:474:16:474:17 | ip | 0 |
| test.c:475:21:475:22 | ip | 0 |
| test.c:475:32:475:33 | ip | 0 |
| test.c:476:23:476:24 | ip | 0 |
| test.c:477:18:477:19 | ip | 0 |
| test.c:478:11:478:12 | ip | 0 |
| test.c:478:17:478:18 | ip | 0 |
| test.c:478:37:478:38 | ip | 0 |
| test.c:478:43:478:44 | ip | 0 |
| test.c:479:14:479:15 | ip | 0 |
| test.c:480:14:480:15 | ip | 0 |
| test.c:481:14:481:15 | ip | 0 |
| test.c:482:15:482:16 | ip | 0 |
| test.c:482:41:482:42 | ip | 0 |
| test.c:482:52:482:53 | ip | 0 |
| test.c:482:67:482:68 | ip | 0 |
| test.c:482:78:482:79 | ip | 0 |
| test.c:483:18:483:19 | ip | 0 |
| test.c:484:23:484:24 | ip | 0 |
| test.c:484:34:484:35 | ip | 0 |
| test.c:485:25:485:26 | ip | 0 |
| test.c:486:20:486:21 | ip | 0 |
| test.c:487:14:487:15 | ip | 0 |
| test.c:487:20:487:21 | ip | 0 |
| test.c:488:16:488:17 | ip | 0 |
| test.c:489:12:489:13 | ip | 0 |
| test.c:490:14:490:15 | ip | 0 |
| test.c:491:15:491:16 | ip | 0 |
| test.c:492:16:492:17 | ip | 0 |
| test.c:493:16:493:17 | ip | 0 |
| test.c:494:17:494:18 | ip | 0 |
| test.c:495:22:495:23 | ip | 0 |
| test.c:495:33:495:34 | ip | 0 |
| test.c:495:48:495:49 | ip | 0 |
| test.c:495:59:495:60 | ip | 0 |
| test.c:496:20:496:21 | ip | 0 |
| test.c:497:25:497:26 | ip | 0 |
| test.c:497:36:497:37 | ip | 0 |
| test.c:498:27:498:28 | ip | 0 |
| test.c:499:22:499:23 | ip | 0 |
| test.c:500:13:500:14 | ip | 0 |
| test.c:500:28:500:29 | ip | 0 |
| test.c:501:18:501:19 | ip | 0 |
| test.c:502:18:502:19 | ip | 0 |
| test.c:503:18:503:19 | ip | 0 |
| test.c:504:19:504:20 | ip | 0 |
| test.c:505:24:505:25 | ip | 0 |
| test.c:505:35:505:36 | ip | 0 |
| test.c:505:50:505:51 | ip | 0 |
| test.c:505:61:505:62 | ip | 0 |
| test.c:506:22:506:23 | ip | 0 |
| test.c:507:27:507:28 | ip | 0 |
| test.c:507:38:507:39 | ip | 0 |
| test.c:508:29:508:30 | ip | 0 |
| test.c:509:24:509:25 | ip | 0 |
| test.c:510:17:510:18 | ip | 0 |
| test.c:510:32:510:33 | ip | 0 |
| test.c:511:14:511:15 | ip | 0 |
| test.c:512:18:512:19 | ip | 0 |
| test.c:513:18:513:19 | ip | 0 |
| test.c:514:19:514:20 | ip | 0 |
| test.c:515:24:515:25 | ip | 0 |
| test.c:515:35:515:36 | ip | 0 |
| test.c:515:50:515:51 | ip | 0 |
| test.c:515:61:515:62 | ip | 0 |
| test.c:516:22:516:23 | ip | 0 |
| test.c:517:27:517:28 | ip | 0 |
| test.c:517:38:517:39 | ip | 0 |
| test.c:518:29:518:30 | ip | 0 |
| test.c:519:24:519:25 | ip | 0 |
| test.c:520:17:520:18 | ip | 0 |
| test.c:520:23:520:24 | ip | 0 |
| test.c:520:43:520:44 | ip | 0 |
| test.c:520:49:520:50 | ip | 0 |
| test.c:521:16:521:17 | ip | 0 |
| test.c:522:16:522:17 | ip | 0 |
| test.c:523:16:523:17 | ip | 0 |
| test.c:524:17:524:18 | ip | 0 |
| test.c:525:22:525:23 | ip | 0 |
| test.c:525:33:525:34 | ip | 0 |
| test.c:525:48:525:49 | ip | 0 |
| test.c:525:59:525:60 | ip | 0 |
| test.c:526:20:526:21 | ip | 0 |
| test.c:527:25:527:26 | ip | 0 |
| test.c:527:36:527:37 | ip | 0 |
| test.c:528:27:528:28 | ip | 0 |
| test.c:529:22:529:23 | ip | 0 |
| test.c:530:16:530:17 | ip | 0 |
| test.c:530:22:530:23 | ip | 0 |
| test.c:531:18:531:19 | ip | 0 |
| test.c:532:14:532:15 | ip | 0 |
| test.c:533:14:533:15 | ip | 0 |
| test.c:533:24:533:25 | ip | 0 |
| test.c:533:44:533:45 | ip | 0 |
| test.c:534:16:534:17 | ip | 1 |
| test.c:535:16:535:17 | ip | 0 |
| test.c:535:36:535:37 | ip | 0 |
| test.c:536:14:536:15 | ip | 0 |
| test.c:537:19:537:20 | ip | 0 |
| test.c:538:20:538:21 | ip | 0 |
| test.c:539:20:539:21 | ip | 0 |
| test.c:540:21:540:22 | ip | 0 |
| test.c:541:26:541:27 | ip | 0 |
| test.c:541:37:541:38 | ip | 0 |
| test.c:541:52:541:53 | ip | 0 |
| test.c:541:63:541:64 | ip | 0 |
| test.c:542:24:542:25 | ip | 0 |
| test.c:543:29:543:30 | ip | 0 |
| test.c:543:40:543:41 | ip | 0 |
| test.c:544:31:544:32 | ip | 0 |
| test.c:545:26:545:27 | ip | 0 |
| test.c:546:17:546:18 | ip | 0 |
| test.c:546:32:546:33 | ip | 0 |
| test.c:547:22:547:23 | ip | 0 |
| test.c:548:22:548:23 | ip | 0 |
| test.c:549:22:549:23 | ip | 0 |
| test.c:550:23:550:24 | ip | 0 |
| test.c:551:28:551:29 | ip | 0 |
| test.c:551:39:551:40 | ip | 0 |
| test.c:551:54:551:55 | ip | 0 |
| test.c:551:65:551:66 | ip | 0 |
| test.c:552:26:552:27 | ip | 0 |
| test.c:553:31:553:32 | ip | 0 |
| test.c:553:42:553:43 | ip | 0 |
| test.c:554:33:554:34 | ip | 0 |
| test.c:555:28:555:29 | ip | 0 |
| test.c:556:21:556:22 | ip | 0 |
| test.c:556:36:556:37 | ip | 0 |
| test.c:557:17:557:18 | ip | 0 |
| test.c:558:18:558:19 | ip | 0 |
| test.c:559:18:559:19 | ip | 0 |
| test.c:560:19:560:20 | ip | 0 |
| test.c:561:24:561:25 | ip | 0 |
| test.c:561:35:561:36 | ip | 0 |
| test.c:561:50:561:51 | ip | 0 |
| test.c:561:61:561:62 | ip | 0 |
| test.c:562:22:562:23 | ip | 0 |
| test.c:563:27:563:28 | ip | 0 |
| test.c:563:38:563:39 | ip | 0 |
| test.c:564:29:564:30 | ip | 0 |
| test.c:565:24:565:25 | ip | 0 |
| test.c:566:17:566:18 | ip | 0 |
| test.c:566:23:566:24 | ip | 0 |
| test.c:566:43:566:44 | ip | 0 |
| test.c:566:49:566:50 | ip | 0 |
| test.c:567:20:567:21 | ip | 0 |
| test.c:568:20:568:21 | ip | 0 |
| test.c:569:20:569:21 | ip | 0 |
| test.c:570:21:570:22 | ip | 0 |
| test.c:571:26:571:27 | ip | 0 |
| test.c:571:37:571:38 | ip | 0 |
| test.c:571:52:571:53 | ip | 0 |
| test.c:571:63:571:64 | ip | 0 |
| test.c:572:24:572:25 | ip | 0 |
| test.c:573:29:573:30 | ip | 0 |
| test.c:573:40:573:41 | ip | 0 |
| test.c:574:31:574:32 | ip | 0 |
| test.c:575:26:575:27 | ip | 0 |
| test.c:576:20:576:21 | ip | 0 |
| test.c:576:26:576:27 | ip | 0 |
| test.c:577:22:577:23 | ip | 0 |
| test.c:578:18:578:19 | ip | 0 |
| test.c:579:16:579:17 | ip | 0 |
| test.c:580:17:580:18 | ip | 0 |
| test.c:581:18:581:19 | ip | 0 |
| test.c:582:18:582:19 | ip | 0 |
| test.c:583:19:583:20 | ip | 0 |
| test.c:584:24:584:25 | ip | 0 |
| test.c:584:35:584:36 | ip | 0 |
| test.c:584:50:584:51 | ip | 0 |
| test.c:584:61:584:62 | ip | 0 |
| test.c:585:22:585:23 | ip | 0 |
| test.c:586:27:586:28 | ip | 0 |
| test.c:586:38:586:39 | ip | 0 |
| test.c:587:29:587:30 | ip | 0 |
| test.c:588:24:588:25 | ip | 0 |
| test.c:589:15:589:16 | ip | 0 |
| test.c:589:30:589:31 | ip | 0 |
| test.c:590:20:590:21 | ip | 0 |
| test.c:591:20:591:21 | ip | 0 |
| test.c:592:20:592:21 | ip | 0 |
| test.c:593:21:593:22 | ip | 0 |
| test.c:594:26:594:27 | ip | 0 |
| test.c:594:37:594:38 | ip | 0 |
| test.c:594:52:594:53 | ip | 0 |
| test.c:594:63:594:64 | ip | 0 |
| test.c:595:24:595:25 | ip | 0 |
| test.c:596:29:596:30 | ip | 0 |
| test.c:596:40:596:41 | ip | 0 |
| test.c:597:31:597:32 | ip | 0 |
| test.c:598:26:598:27 | ip | 0 |
| test.c:599:19:599:20 | ip | 0 |
| test.c:599:34:599:35 | ip | 0 |
| test.c:600:16:600:17 | ip | 0 |
| test.c:601:20:601:21 | ip | 0 |
| test.c:602:20:602:21 | ip | 0 |
| test.c:603:21:603:22 | ip | 0 |
| test.c:604:26:604:27 | ip | 0 |
| test.c:604:37:604:38 | ip | 0 |
| test.c:604:52:604:53 | ip | 0 |
| test.c:604:63:604:64 | ip | 0 |
| test.c:605:24:605:25 | ip | 0 |
| test.c:606:29:606:30 | ip | 0 |
| test.c:606:40:606:41 | ip | 0 |
| test.c:607:31:607:32 | ip | 0 |
| test.c:608:26:608:27 | ip | 0 |
| test.c:609:19:609:20 | ip | 0 |
| test.c:609:25:609:26 | ip | 0 |
| test.c:609:45:609:46 | ip | 0 |
| test.c:609:51:609:52 | ip | 0 |
| test.c:610:18:610:19 | ip | 0 |
| test.c:611:18:611:19 | ip | 0 |
| test.c:612:18:612:19 | ip | 0 |
| test.c:613:19:613:20 | ip | 0 |
| test.c:614:24:614:25 | ip | 0 |
| test.c:614:35:614:36 | ip | 0 |
| test.c:614:50:614:51 | ip | 0 |
| test.c:614:61:614:62 | ip | 0 |
| test.c:615:22:615:23 | ip | 0 |
| test.c:616:27:616:28 | ip | 0 |
| test.c:616:38:616:39 | ip | 0 |
| test.c:617:29:617:30 | ip | 0 |
| test.c:618:24:618:25 | ip | 0 |
| test.c:619:18:619:19 | ip | 0 |
| test.c:619:24:619:25 | ip | 0 |
| test.c:620:20:620:21 | ip | 0 |
| test.c:621:16:621:17 | ip | 0 |
| test.c:622:10:622:23 | special_number | 0 |
| test.c:630:7:630:8 | c1 | -2147483648 |
| test.c:630:13:630:13 | x | 0 |
| test.c:631:7:631:8 | c2 | -2147483648 |
| test.c:631:13:631:13 | x | 0 |
| test.c:632:7:632:8 | c3 | -2147483648 |
| test.c:632:13:632:13 | x | 0 |
| test.c:633:7:633:8 | c4 | -2147483648 |
| test.c:633:13:633:13 | x | 0 |
| test.c:634:7:634:8 | c5 | -2147483648 |
| test.c:634:13:634:13 | x | 0 |
| test.c:635:7:635:8 | c1 | -2147483648 |
| test.c:635:13:635:14 | c2 | -2147483648 |
| test.c:635:19:635:19 | x | 0 |
| test.c:636:7:636:8 | c1 | -2147483648 |
| test.c:636:13:636:14 | c3 | -2147483648 |
| test.c:636:19:636:19 | x | 0 |
| test.c:637:7:637:8 | c1 | -2147483648 |
| test.c:637:13:637:14 | c4 | -2147483648 |
| test.c:637:19:637:19 | x | 0 |
| test.c:638:7:638:8 | c1 | -2147483648 |
| test.c:638:13:638:14 | c5 | -2147483648 |
| test.c:638:19:638:19 | x | 0 |
| test.c:639:7:639:8 | c2 | -2147483648 |
| test.c:639:13:639:14 | c3 | -2147483648 |
| test.c:639:19:639:19 | x | 0 |
| test.c:641:11:641:11 | x | 0 |
| test.c:641:15:641:15 | x | 0 |
| test.c:641:19:641:19 | x | 0 |
| test.c:641:23:641:23 | x | 0 |
| test.c:641:27:641:27 | x | 0 |
| test.c:641:31:641:31 | x | 0 |
| test.c:641:35:641:35 | x | 0 |
| test.c:641:39:641:39 | x | 0 |
| test.c:641:43:641:43 | x | 0 |
| test.c:641:47:641:47 | x | 0 |
| test.c:641:51:641:51 | x | 0 |
| test.c:641:55:641:55 | x | 0 |
| test.c:642:10:642:10 | y | -2147483648 |
| test.c:647:20:647:20 | x | 0 |
| test.c:647:30:647:30 | x | 0 |
| test.c:650:3:650:4 | y1 | 0 |
| test.c:650:11:650:11 | y | 0 |
| test.c:650:14:650:14 | y | 1 |
| test.c:651:3:651:4 | y2 | 0 |
| test.c:651:9:651:9 | y | 1 |
| test.c:651:14:651:14 | y | 2 |
| test.c:651:22:651:22 | y | 5 |
| test.c:652:10:652:11 | y1 | 1 |
| test.c:652:15:652:16 | y2 | 5 |
| test.c:660:3:660:3 | i | -2147483648 |
| test.c:661:7:661:7 | i | 10 |
| test.c:663:3:663:3 | i | -2147483648 |
| test.c:664:3:664:3 | i | 10 |
| test.c:665:7:665:7 | i | 20 |
| test.c:667:3:667:3 | i | -2147483648 |
| test.c:668:3:668:3 | i | 40 |
| test.c:669:7:669:7 | i | 30 |
| test.c:671:3:671:3 | i | -2147483648 |
| test.c:671:7:671:7 | j | -2147483648 |
| test.c:672:7:672:7 | i | 40 |
| test.c:674:3:674:3 | i | -2147483648 |
| test.c:674:8:674:8 | j | 40 |
| test.c:675:7:675:7 | i | 50 |
| test.c:677:3:677:3 | i | -2147483648 |
| test.c:677:13:677:13 | j | 50 |
| test.c:678:7:678:7 | i | 60 |
| test.c:685:12:685:12 | a | 0 |
| test.c:685:17:685:17 | a | 3 |
| test.c:685:33:685:33 | b | 0 |
| test.c:685:38:685:38 | b | 5 |
| test.c:686:13:686:13 | a | 3 |
| test.c:686:15:686:15 | b | 5 |
| test.c:687:5:687:9 | total | 0 |
| test.c:687:14:687:14 | r | 15 |
| test.c:689:12:689:12 | a | 0 |
| test.c:689:17:689:17 | a | 3 |
| test.c:689:33:689:33 | b | 0 |
| test.c:689:38:689:38 | b | 0 |
| test.c:690:13:690:13 | a | 3 |
| test.c:690:15:690:15 | b | 0 |
| test.c:691:5:691:9 | total | 0 |
| test.c:691:14:691:14 | r | 0 |
| test.c:693:12:693:12 | a | 0 |
| test.c:693:17:693:17 | a | 3 |
| test.c:693:34:693:34 | b | 0 |
| test.c:693:39:693:39 | b | 13 |
| test.c:694:13:694:13 | a | 3 |
| test.c:694:15:694:15 | b | 13 |
| test.c:695:5:695:9 | total | 0 |
| test.c:695:14:695:14 | r | 39 |
| test.c:698:10:698:14 | total | 0 |
| test.c:704:12:704:12 | b | 0 |
| test.c:704:17:704:17 | b | 5 |
| test.c:705:16:705:16 | b | 5 |
| test.c:706:5:706:9 | total | 0 |
| test.c:706:14:706:14 | r | 55 |
| test.c:708:12:708:12 | b | 0 |
| test.c:708:17:708:17 | b | 0 |
| test.c:709:16:709:16 | b | 0 |
| test.c:710:5:710:9 | total | 0 |
| test.c:710:14:710:14 | r | 0 |
| test.c:712:13:712:13 | b | 0 |
| test.c:712:18:712:18 | b | 13 |
| test.c:713:16:713:16 | b | 13 |
| test.c:714:5:714:9 | total | 0 |
| test.c:714:14:714:14 | r | 143 |
| test.c:717:10:717:14 | total | 0 |
| test.c:722:3:722:3 | x | 0 |
| test.c:722:7:722:7 | y | 0 |
| test.c:723:3:723:4 | xy | 0 |
| test.c:723:8:723:8 | x | 1000000003 |
| test.c:723:12:723:12 | y | 1000000003 |
| test.c:724:10:724:11 | xy | 1000000006000000000 |
| test.c:729:3:729:3 | x | 0 |
| test.c:730:3:730:3 | y | 0 |
| test.c:731:3:731:4 | xy | 0 |
| test.c:731:8:731:8 | x | 274177 |
| test.c:731:12:731:12 | y | 67280421310721 |
| test.c:732:10:732:11 | xy | 18446744073709551616 |
| test.c:736:7:736:8 | ui | 0 |
| test.c:737:43:737:44 | ui | 10 |
| test.c:737:48:737:49 | ui | 10 |
| test.c:738:12:738:17 | result | 100 |
| test.c:740:7:740:8 | ul | 0 |
| test.c:741:28:741:29 | ul | 10 |
| test.c:741:33:741:34 | ul | 10 |
| test.c:742:12:742:17 | result | 0 |
| test.c:748:7:748:8 | ui | 0 |
| test.c:748:19:748:20 | ui | 0 |
| test.c:749:5:749:6 | ui | 2 |
| test.c:749:11:749:12 | ui | 2 |
| test.c:750:12:750:13 | ui | 4 |
| test.c:754:3:754:9 | uiconst | 10 |
| test.c:757:3:757:9 | ulconst | 10 |
| test.c:758:10:758:16 | uiconst | 40 |
| test.c:758:20:758:26 | ulconst | 40 |
| test.c:762:7:762:7 | i | -2147483648 |
| test.c:762:18:762:18 | i | -1 |
| test.c:763:5:763:5 | i | -2147483648 |
| test.c:763:13:763:13 | i | -1 |
| test.c:764:9:764:9 | i | -5 |
| test.c:766:5:766:5 | i | -2147483648 |
| test.c:766:9:766:9 | i | -5 |
| test.c:767:9:767:9 | i | -30 |
| test.c:769:5:769:5 | i | -30 |
| test.c:770:9:770:9 | i | -210 |
| test.c:772:5:772:5 | i | -210 |
| test.c:773:9:773:9 | i | -1155 |
| test.c:775:7:775:7 | i | -2147483648 |
| test.c:776:5:776:5 | i | -2147483648 |
| test.c:776:9:776:9 | i | -1 |
| test.c:777:9:777:9 | i | 1 |
| test.c:779:3:779:3 | i | -2147483648 |
| test.c:779:7:779:7 | i | -2147483648 |
| test.c:780:10:780:10 | i | -2147483648 |
| test.c:783:3:783:3 | i | -2147483648 |
| test.c:783:10:783:11 | sc | 1 |
| test.c:785:7:785:7 | i | -128 |
| test.c:792:7:792:7 | n | 0 |
| test.c:794:7:794:7 | n | 0 |
| test.c:795:9:795:9 | n | 1 |
| test.c:798:7:798:7 | n | 0 |
| test.c:799:9:799:9 | n | 1 |
| test.c:801:9:801:9 | n | 0 |
| test.c:804:8:804:8 | n | 0 |
| test.c:805:9:805:9 | n | 0 |
| test.c:807:9:807:9 | n | 1 |
| test.c:810:10:810:10 | n | 0 |
| test.c:811:5:811:5 | n | 1 |
| test.c:814:7:814:7 | n | 0 |
| test.c:818:7:818:7 | n | -32768 |
| test.c:821:7:821:7 | n | 0 |
| test.c:822:9:822:9 | n | 0 |
| test.c:824:9:824:9 | n | 1 |
| test.c:827:7:827:7 | n | 0 |
| test.c:828:9:828:9 | n | 1 |
| test.c:830:9:830:9 | n | 0 |
| test.c:833:10:833:10 | n | 0 |
| test.c:834:5:834:5 | n | 1 |
| test.c:837:7:837:7 | n | 0 |
| test.c:841:7:841:7 | n | -32768 |
| test.c:842:9:842:9 | n | -32768 |
| test.c:843:11:843:11 | n | 0 |
| test.c:847:7:847:7 | n | -32768 |
| test.c:848:13:848:13 | n | 5 |
| test.c:851:9:851:9 | n | 6 |
| test.c:854:7:854:7 | n | -32768 |
| test.c:854:22:854:22 | n | -32767 |
| test.c:855:9:855:9 | n | -32766 |
| test.c:858:7:858:7 | n | -32768 |
| test.c:859:5:859:5 | n | 0 |
| test.c:859:10:859:10 | n | 1 |
| test.c:859:14:859:14 | n | 0 |
| test.c:860:6:860:6 | n | 0 |
| test.c:860:10:860:10 | n | 0 |
| test.c:860:14:860:14 | n | 1 |
| test.c:871:7:871:8 | ss | -32768 |
| test.c:872:9:872:10 | ss | 0 |
| test.c:875:7:875:8 | ss | -32768 |
| test.c:876:9:876:10 | ss | -32768 |
| test.c:879:14:879:15 | us | 0 |
| test.c:880:9:880:10 | us | 0 |
| test.c:883:14:883:15 | us | 0 |
| test.c:884:9:884:10 | us | 0 |
| test.c:887:7:887:8 | ss | -32768 |
| test.c:888:9:888:10 | ss | -32768 |
| test.c:891:7:891:8 | ss | -32768 |
| test.c:892:9:892:10 | ss | -1 |
| test.c:898:8:898:8 | s | -2147483648 |
| test.c:898:15:898:15 | s | 0 |
| test.c:898:23:898:23 | s | 0 |
| test.c:899:18:899:18 | s | 0 |
| test.c:899:22:899:22 | s | 0 |
| test.c:900:9:900:14 | result | 0 |
| test.c:906:7:906:7 | i | 0 |
| test.c:907:9:907:9 | i | -2147483648 |
| test.c:911:7:911:7 | u | 0 |
| test.c:912:9:912:9 | u | 0 |
| test.c:917:12:917:12 | s | -2147483648 |
| test.c:918:7:918:8 | s2 | -4 |
| test.c:923:7:923:7 | x | -2147483648 |
| test.c:924:9:924:9 | y | -2147483648 |
| test.c:928:7:928:7 | y | -2147483648 |
| test.c:937:7:937:7 | x | -2147483648 |
| test.c:942:7:942:7 | x | -2147483648 |
| test.c:949:8:949:8 | x | 2147483647 |
| test.c:949:12:949:12 | y | 256 |
| test.c:950:9:950:9 | x | 2147483647 |
| test.c:951:9:951:9 | y | 256 |
| test.cpp:10:7:10:7 | b | -2147483648 |
| test.cpp:11:5:11:5 | x | -2147483648 |
| test.cpp:13:10:13:10 | x | -2147483648 |

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