copilot-swe-agent[bot]
6e4ac3915d
Address code review: remove ECMAScript-incompatible comment groups, fix comments
...
- Remove `(?#...)` comment group support from ParseRegExp.qll (not in ECMAScript)
- Remove `commentGroupStart` predicate
- Remove `#` from `nonCapturingGroupStart` character list
- Remove `commentGroupStart` call from `groupStart`
- Fix misleading comment in test.cpp line 64
- Clarify RegExpConfig.qll documentation to accurately describe `any()` behavior
2026-07-21 09:07:28 +00:00
copilot-swe-agent[bot]
cc12bba930
Add C++ ECMAScript regex parser and tree view (initial implementation)
...
Ports the Ruby regex library to C++/ECMAScript (`std::regex` default dialect):
- `cpp/ql/lib/semmle/code/cpp/regex/internal/ParseRegExp.qll`: ECMAScript-adapted parser over `StringLiteral`
- `cpp/ql/lib/semmle/code/cpp/regex/RegexTreeView.qll`: tree view implementing `RegexTreeViewSig`
- `cpp/ql/lib/qlpack.yml`: add `codeql/regex` dependency (already present)
- `cpp/ql/test/library-tests/regex/`: hermetic test corpus (test.cpp with std:: stubs), parse.ql, regexp.ql, RegExpConfig.qll
- `cpp/ql/lib/change-notes/released/12.1.0.md`: minorAnalysis change note
Note: .expected files are placeholders; run `codeql test run --accept` after database generation to populate them.
2026-07-21 09:01:50 +00:00
Mathias Vorreiter Pedersen
4f4cdf434b
Merge pull request #22061 from MathiasVP/mad-write-through-model
...
Shared: Support flow summaries from `ReturnValue`s
2026-07-02 12:38:44 +01:00
Mathias Vorreiter Pedersen
f37b3e77ff
Merge branch 'main' into remove-mad-support-for-variables
2026-06-30 17:38:37 +01:00
Mathias Vorreiter Pedersen
b7b731bab7
Merge branch 'main' into mad-write-through-model
2026-06-30 15:12:02 +01:00
Mathias Vorreiter Pedersen
06f54d1bbb
C++: Add a TODO comment to remove support for unqualified field names.
2026-06-30 13:55:26 +01:00
Mathias Vorreiter Pedersen
396bea6e6a
Update cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll
...
Co-authored-by: Tom Hvitved <hvitved@github.com >
2026-06-30 13:44:14 +01:00
Mathias Vorreiter Pedersen
fc954c3e1a
C++: Remove support for marking variables as sources and sinks in MaD.
2026-06-30 12:30:40 +01:00
Mathias Vorreiter Pedersen
caaed72288
C++: Hide summary nodes that should be hidden and accept test changes.
2026-06-29 18:30:03 +01:00
Mathias Vorreiter Pedersen
2625c304bf
C++: Support fully qualified field names in MaD.
2026-06-29 18:02:20 +01:00
Mathias Vorreiter Pedersen
662f522032
C++: Properly instantiate the new reverse flow feature.
2026-06-23 20:33:31 +01:00
Mathias Vorreiter Pedersen
076b01cbfc
C++: Fixes after changes to the flow summary API.
2026-06-23 20:33:08 +01:00
Jeroen Ketema
6d0968744b
C++: Fix NameQualifyingElement db inconsistency
2026-06-10 14:35:36 +02:00
Mathias Vorreiter Pedersen
2d581504f7
C++: Fix Copilot comments.
2026-05-28 13:34:18 +02:00
Mathias Vorreiter Pedersen
8393b40b59
C++: Use the new extensionals to map template functions and classes to their fully templated versions.
2026-05-28 13:34:12 +02:00
Mathias Vorreiter Pedersen
5f54a8691d
C++: Small cleanup. This has no effect on semantics.
2026-05-27 17:16:22 +02:00
Jeroen Ketema
7862922e5c
C++: Remove deprecated code
2026-05-26 17:54:51 +02:00
Jeroen Ketema
3c4e22a8ba
Merge pull request #21870 from jketema/jketema/generated
...
C++: Add ability to see if one template was generated from another
2026-05-22 15:46:06 +02:00
Mathias Vorreiter Pedersen
a7405bddaa
Merge pull request #21856 from MathiasVP/scanf-safe-functions
...
C++: Model secure versions of `scanf` as flow sources
2026-05-22 12:34:54 +01:00
Jeroen Ketema
0e6257de2d
C++: Fix QLDoc wording
2026-05-22 13:13:25 +02:00
Jeroen Ketema
a027665ab4
C++: Add ability to see if one template was generated from another
2026-05-22 13:13:21 +02:00
Mathias Vorreiter Pedersen
a33af09244
C++: Add models for _fscanf_s_l, fwscanf_s and _fwscanf_s_l.
2026-05-20 18:59:04 +01:00
Mathias Vorreiter Pedersen
25d20399f3
C++: Add models for _scanf_s_l, wscanf_s and _wscanf_s_l.
2026-05-20 18:43:07 +01:00
Mathias Vorreiter Pedersen
157424cca3
Merge pull request #21836 from MathiasVP/uncertain-def-more-complete
...
C++: Support reasoning about whether a phi node overwrites the entire buffer
2026-05-20 13:04:37 +01:00
Mathias Vorreiter Pedersen
f5113b1932
C++: Fix internal SCC edges and accept test changes.
2026-05-19 15:39:32 +01:00
Mathias Vorreiter Pedersen
c6ce13a012
C++: Simplify recursion in 'PhiCycle::isCertain' and do not restrict the definition to be a 'PhiNode'.
2026-05-19 15:27:23 +01:00
Mathias Vorreiter Pedersen
d93de54397
C++: Consistent use of 'this.getIndirection()' in 'toString'.
2026-05-19 12:16:37 +01:00
Jeroen Ketema
22a8123ee1
Merge pull request #21860 from jketema/jketema/alias-template
...
C++: Support alias templates
2026-05-19 10:46:56 +02:00
Mathias Vorreiter Pedersen
2c156994de
C++: Add two more 'fopen'-like models.
2026-05-18 14:47:11 +01:00
Mathias Vorreiter Pedersen
5f10a88208
C++: Handle size arguments in 'getOutputArgument'.
2026-05-18 14:06:18 +01:00
Mathias Vorreiter Pedersen
5add24be59
C++: Add scanf_s models.
2026-05-18 14:06:16 +01:00
Mathias Vorreiter Pedersen
16235d7aca
C++: Add a 'call' column to 'hasRemoteFlowSource' and 'hasLocalFlowSource' to support modeling of 'scanf_s'.
2026-05-18 14:06:05 +01:00
Jeroen Ketema
d14b8064b0
Update cpp/ql/lib/semmle/code/cpp/TypedefType.qll
2026-05-18 15:04:03 +02:00
Jeroen Ketema
7636bf560e
Potential fix for pull request finding
...
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-05-18 15:02:34 +02:00
Jeroen Ketema
c2e2770bbf
C++: Simplify type alias class naming
2026-05-18 14:22:04 +02:00
Jeroen Ketema
336bbc229e
C++: Add support for alias templates
...
Add other missing cases to `isFromTemplateInstantiationRec` and
`isFromUninstantiatedTemplateRec` while here.
2026-05-16 09:11:54 +02:00
Mathias Vorreiter Pedersen
4396e66f35
C++: Fix FP by providing an implementation of 'hasSocketInput'.
2026-05-15 21:12:34 +01:00
Mathias Vorreiter Pedersen
25c4d9d09b
Potential fix for pull request finding
...
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-05-13 13:27:04 +01:00
Mathias Vorreiter Pedersen
f40d42c575
C++: Perform an SCC reduction to simulate greatest fixed-point semantics.
2026-05-13 13:14:20 +01:00
Mathias Vorreiter Pedersen
8585bb616d
C++: Some writes are always certain regardless of the address.
2026-05-13 13:14:13 +01:00
Mathias Vorreiter Pedersen
fc80a2472d
C++: Slightly refactor certainty computation with a newtype.
2026-05-13 13:09:12 +01:00
Mathias Vorreiter Pedersen
6d5d57acca
C++: Add missing overrides.
2026-05-13 13:09:10 +01:00
Mathias Vorreiter Pedersen
b753e7d228
C++: Make 'toString' on 'Ssa::Definition' more clear.
2026-05-13 13:09:01 +01:00
Jeroen Ketema
29dd56f83f
C++: Make formatting of switch statement examples more uniform
2026-04-28 16:36:54 +02:00
Jeroen Ketema
0bc23c3af1
C++: Match example with text
2026-04-28 16:33:17 +02:00
Jeroen Ketema
f634b328ee
C++: Fix join-order problem in getNextSwitchCase
...
Before on `neovim`:
```
[2026-04-28 14:54:20] Evaluated non-recursive predicate Stmt::SwitchCase.getNextSwitchCase/0#dispred#2d3cb6d3@ac8178o2 in 68ms (size: 20848).
Evaluated relational algebra for predicate Stmt::SwitchCase.getNextSwitchCase/0#dispred#2d3cb6d3@ac8178o2 with tuple counts:
21888 ~0% {2} r1 = SCAN switch_case OUTPUT In.2, In.0
21888 ~0% {4} | JOIN WITH #switch_caseMerge_21#join_rhs ON FIRST 1 OUTPUT Lhs.1, Lhs.0, _, Rhs.1
21888 ~4% {3} | REWRITE WITH Tmp.2 := 1, Out.2 := (In.3 - Tmp.2) KEEPING 3
24091916 ~0% {3} | JOIN WITH switch_case ON FIRST 1 OUTPUT Lhs.2, Rhs.2, Lhs.1
20848 ~2% {2} | JOIN WITH #switch_caseMerge_12#join_rhs ON FIRST 2 OUTPUT Lhs.1, Lhs.2
return r1
```
After:
```
[2026-04-28 15:30:53] Evaluated non-recursive predicate Stmt::SwitchCase.getNextSwitchCase/0#dispred#2d3cb6d3@bf9801oj in 0ms (size: 20848).
Evaluated relational algebra for predicate Stmt::SwitchCase.getNextSwitchCase/0#dispred#2d3cb6d3@bf9801oj with tuple counts:
21888 ~0% {4} r1 = SCAN switch_case OUTPUT In.0, _, In.2, In.1
21888 ~1% {3} | REWRITE WITH Tmp.1 := 1, Out.1 := (In.3 + Tmp.1) KEEPING 3
20848 ~2% {2} | JOIN WITH switch_case ON FIRST 2 OUTPUT Lhs.2, Rhs.2
return r1
```
2026-04-28 15:44:53 +02:00
Jeroen Ketema
fa8c1d6226
C++: Add a getSwitchCase predicate to SwitchStmt
2026-04-28 15:44:12 +02:00
Jeroen Ketema
ae89b2ee79
Merge pull request #21747 from jketema/join-order
...
Fix two `QualifiedName` join orders
2026-04-24 08:05:24 +02:00
Mathias Vorreiter Pedersen
14efb4502b
C++: Fix join in getVariable.
2026-04-23 12:10:09 +01:00
Jeroen Ketema
076b020dc4
Fix two QualifiedName join orders
...
Before on `StanfordLegion__legion` with `cpp/throwing-pointer`:
```
Pipeline standard for QualifiedName::Namespace.getQualifiedName/0#cbc0648a@7ff329j5 was evaluated in 2 iterations totaling 0ms (delta sizes total: 70).
162061 ~0% {2} r1 = JOIN `QualifiedName::Namespace.getQualifiedName/0#cbc0648a#prev_delta` WITH namespacembrs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
70 ~2% {4} | JOIN WITH namespaces ON FIRST 1 OUTPUT Lhs.0, _, Lhs.1, Rhs.1
70 ~0% {2} | REWRITE WITH Tmp.1 := "::", Out.1 := (In.2 ++ Tmp.1 ++ In.3) KEEPING 2
70 ~0% {2} | AND NOT `QualifiedName::Namespace.getQualifiedName/0#cbc0648a#prev`(FIRST 2)
return r1
Pipeline standard for QualifiedName::Namespace.getAQualifierForMembers/0#132b16e1@cfd47189 was evaluated in 2 iterations totaling 3ms (delta sizes total: 85).
12 ~0% {2} r1 = JOIN `QualifiedName::Namespace.getAQualifierForMembers/0#132b16e1#prev_delta` WITH _#namespace_inlineMerge_#namespacembrsMerge#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
162417 ~0% {2} r2 = JOIN `QualifiedName::Namespace.getAQualifierForMembers/0#132b16e1#prev_delta` WITH namespacembrs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
73 ~1% {4} | JOIN WITH namespaces ON FIRST 1 OUTPUT Lhs.0, _, Lhs.1, Rhs.1
73 ~0% {2} | REWRITE WITH Tmp.1 := "::", Out.1 := (In.2 ++ Tmp.1 ++ In.3) KEEPING 2
85 ~0% {2} r3 = r1 UNION r2
85 ~0% {2} | AND NOT `QualifiedName::Namespace.getAQualifierForMembers/0#132b16e1#prev`(FIRST 2)
return r3
```
After:
```
Pipeline standard for QualifiedName::Namespace.getQualifiedName/0#cbc0648a@91677d3f was evaluated in 2 iterations totaling 0ms (delta sizes total: 70).
70 ~0% {4} r1 = JOIN `QualifiedName::Namespace.getQualifiedName/0#cbc0648a#prev_delta` WITH _#namespacembrsMerge_1#antijoin_rhs_#namespacembrsMerge_10#join_rhs_#namespacesMerge#join_rhs ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1, Rhs.2
70 ~0% {2} | REWRITE WITH Tmp.1 := "::", Out.1 := (In.2 ++ Tmp.1 ++ In.3) KEEPING 2
70 ~0% {2} | AND NOT `QualifiedName::Namespace.getQualifiedName/0#cbc0648a#prev`(FIRST 2)
return r1
Pipeline standard for QualifiedName::Namespace.getAQualifierForMembers/0#132b16e1@3bbc99mb was evaluated in 2 iterations totaling 0ms (delta sizes total: 85).
12 ~0% {2} r1 = JOIN `QualifiedName::Namespace.getAQualifierForMembers/0#132b16e1#prev_delta` WITH _#namespace_inlineMerge_#namespacembrsMerge_1#antijoin_rhs__#namespacembrsMerge_#namespacembrsMerge___#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
73 ~0% {4} r2 = JOIN `QualifiedName::Namespace.getAQualifierForMembers/0#132b16e1#prev_delta` WITH _#namespacembrsMerge_1#antijoin_rhs_#namespacesMerge__#namespacembrsMerge_#namespacembrsMerge_10#joi__#join_rhs ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1, Rhs.2
73 ~1% {2} | REWRITE WITH Tmp.1 := "::", Out.1 := (In.2 ++ Tmp.1 ++ In.3) KEEPING 2
85 ~0% {2} r3 = r1 UNION r2
85 ~0% {2} | AND NOT `QualifiedName::Namespace.getAQualifierForMembers/0#132b16e1#prev`(FIRST 2)
return r3
```
2026-04-23 10:37:12 +02:00