mirror of
https://github.com/github/codeql.git
synced 2026-05-16 20:27:06 +02:00
Compare commits
328 Commits
ginsbach/O
...
rust-ti-im
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f4bf764d6 | ||
|
|
781be8df42 | ||
|
|
152ad2ea6e | ||
|
|
c8e564b2ba | ||
|
|
389f15e670 | ||
|
|
8ebbfb198e | ||
|
|
c7e4853c38 | ||
|
|
1c1ccdacb8 | ||
|
|
da5d799152 | ||
|
|
9958cc7784 | ||
|
|
ba89a5de6f | ||
|
|
52bd99b852 | ||
|
|
97532525d8 | ||
|
|
7106475033 | ||
|
|
eb7cd3d221 | ||
|
|
2c95f00432 | ||
|
|
64145ab98a | ||
|
|
6de38b1827 | ||
|
|
069902888b | ||
|
|
280ce058a9 | ||
|
|
abbf753a09 | ||
|
|
f5a295c24e | ||
|
|
eae1e1cb02 | ||
|
|
e40b93b8a3 | ||
|
|
299b3f7af4 | ||
|
|
acb9c20a76 | ||
|
|
d498eb0c2f | ||
|
|
4a9841d47d | ||
|
|
ea288320f5 | ||
|
|
89fd9a4dd5 | ||
|
|
e5d296180b | ||
|
|
daf953fabe | ||
|
|
d784473dcd | ||
|
|
02115f676a | ||
|
|
1694050f37 | ||
|
|
6e64a22579 | ||
|
|
e73031c688 | ||
|
|
a408e216ae | ||
|
|
966b7463ee | ||
|
|
b91a2cc159 | ||
|
|
50f7ee1158 | ||
|
|
2e0699ab2b | ||
|
|
69bc12dd4f | ||
|
|
a46f8fb0d9 | ||
|
|
e3f33f192f | ||
|
|
8b53f8f2a6 | ||
|
|
b4c98b40a5 | ||
|
|
0bb0b5c587 | ||
|
|
73309fb9dd | ||
|
|
654177daa7 | ||
|
|
f7f9fb823a | ||
|
|
42d5b80e81 | ||
|
|
f69037c176 | ||
|
|
05e4677fd1 | ||
|
|
e6450a17ec | ||
|
|
ded3865722 | ||
|
|
ca7f8f21cd | ||
|
|
f9d8be1ef7 | ||
|
|
8bc965641a | ||
|
|
318bfc6d73 | ||
|
|
f3fa0e715f | ||
|
|
f6e7d79f62 | ||
|
|
625354c46e | ||
|
|
35939ec3b1 | ||
|
|
b61a87a2a3 | ||
|
|
2d6457e4d3 | ||
|
|
e942ec9964 | ||
|
|
6466a5dbaf | ||
|
|
70a3fe3e33 | ||
|
|
152d6f3c29 | ||
|
|
6dd8114f00 | ||
|
|
8857f0d0f2 | ||
|
|
4ac104060e | ||
|
|
aafd7f8418 | ||
|
|
bcc65e13b0 | ||
|
|
14445a3d46 | ||
|
|
987af4ce1d | ||
|
|
46fb041c50 | ||
|
|
89a9ae8bf4 | ||
|
|
7592ce47e3 | ||
|
|
91a794433a | ||
|
|
5172a4d6ec | ||
|
|
9cfa451477 | ||
|
|
d4b083b5c0 | ||
|
|
de122225e8 | ||
|
|
a589014243 | ||
|
|
d05f604390 | ||
|
|
f6135d507b | ||
|
|
d187a7d144 | ||
|
|
32125d2291 | ||
|
|
21553960b0 | ||
|
|
71d0409bb7 | ||
|
|
7e51dae743 | ||
|
|
08f7caaf39 | ||
|
|
1d6c367049 | ||
|
|
539a06dcb4 | ||
|
|
da99c75a13 | ||
|
|
7801fc321d | ||
|
|
2a0097ea56 | ||
|
|
f78be91af2 | ||
|
|
2357a69d55 | ||
|
|
ae70c76a07 | ||
|
|
fa5162fb13 | ||
|
|
2a8fe53b04 | ||
|
|
3437210d32 | ||
|
|
d9a6a630e5 | ||
|
|
ed690972d4 | ||
|
|
e71e7a08bb | ||
|
|
998e64baf3 | ||
|
|
c54b684132 | ||
|
|
a4a24470c8 | ||
|
|
522dd51416 | ||
|
|
4c9aee2cc7 | ||
|
|
432435f1a6 | ||
|
|
e805d1ee90 | ||
|
|
cafe1efefa | ||
|
|
79c03100f8 | ||
|
|
2f265395af | ||
|
|
63b0dd68c9 | ||
|
|
9396f0ee55 | ||
|
|
ac3c3ae13a | ||
|
|
0b5a4a9133 | ||
|
|
8b95e0ee4a | ||
|
|
e8eac810b4 | ||
|
|
e79a906426 | ||
|
|
a991ef0f87 | ||
|
|
7e205366ab | ||
|
|
6c1e80df3a | ||
|
|
b197de8db4 | ||
|
|
05243bd855 | ||
|
|
aabbfce010 | ||
|
|
f9172ff493 | ||
|
|
5920925041 | ||
|
|
a5a21b1ddd | ||
|
|
21170a1f6d | ||
|
|
21c97085a1 | ||
|
|
55a8a4444d | ||
|
|
6df5a1ef80 | ||
|
|
69b87a63b8 | ||
|
|
0cd859c559 | ||
|
|
ea83ecf802 | ||
|
|
063bff073b | ||
|
|
42c4252a3d | ||
|
|
0357f3959b | ||
|
|
46b21af3ef | ||
|
|
4093afbaab | ||
|
|
17f58c90bd | ||
|
|
65ac951964 | ||
|
|
dcf11c2d4b | ||
|
|
b6d2f14b9b | ||
|
|
22ae3e7992 | ||
|
|
f2dddd6d5c | ||
|
|
6de5920172 | ||
|
|
042c7e5186 | ||
|
|
930bb6b515 | ||
|
|
39abd5c004 | ||
|
|
f31235db43 | ||
|
|
11dffc6647 | ||
|
|
8fb5fe97aa | ||
|
|
1d9d8780b3 | ||
|
|
f73b7429c6 | ||
|
|
175e4ecb74 | ||
|
|
327ddb07a1 | ||
|
|
9cfd6e30b9 | ||
|
|
68f93492b1 | ||
|
|
91f1183dfd | ||
|
|
e72aba76f6 | ||
|
|
cad695868d | ||
|
|
8086ef48c7 | ||
|
|
eea963e3f4 | ||
|
|
a74b38c0ec | ||
|
|
59faf9fbdf | ||
|
|
10d86c9708 | ||
|
|
9a21b0dc5c | ||
|
|
e135f5ddf6 | ||
|
|
b6076c0481 | ||
|
|
1b21e4c667 | ||
|
|
36672f44b9 | ||
|
|
7834a3d9e4 | ||
|
|
30242ed6fb | ||
|
|
4fc5a73bac | ||
|
|
1ac47a892b | ||
|
|
0c313463b4 | ||
|
|
a3e0c15c10 | ||
|
|
e97f9495d0 | ||
|
|
df3282c204 | ||
|
|
2e0ce44fde | ||
|
|
37bcedcf11 | ||
|
|
4abdc13f79 | ||
|
|
617f4729d8 | ||
|
|
808141f7e8 | ||
|
|
d6f1bd9792 | ||
|
|
9e9a580d02 | ||
|
|
07d8f8dd0d | ||
|
|
008dd3f4e3 | ||
|
|
62cb4bfd02 | ||
|
|
959a79f995 | ||
|
|
97ca2afa7a | ||
|
|
2439b1e89a | ||
|
|
1cf10d8f9f | ||
|
|
4483a24133 | ||
|
|
ed99088c2b | ||
|
|
7ee862a3af | ||
|
|
adb58e304d | ||
|
|
03ce2b0867 | ||
|
|
375ec8f948 | ||
|
|
40390d1ada | ||
|
|
fdfdcc0d93 | ||
|
|
a211998bc9 | ||
|
|
c11ed6d119 | ||
|
|
ae5ac11387 | ||
|
|
63402ea581 | ||
|
|
00661b62dc | ||
|
|
d05e90518c | ||
|
|
ce5c48192e | ||
|
|
c2cab184ac | ||
|
|
3aa6b49204 | ||
|
|
72d49f21ee | ||
|
|
07a694e804 | ||
|
|
02ded89d84 | ||
|
|
2b9160526a | ||
|
|
3fd760c632 | ||
|
|
6fcf56e6e1 | ||
|
|
f6f5f97109 | ||
|
|
e55f94c364 | ||
|
|
9cba91c682 | ||
|
|
0ce6ab5444 | ||
|
|
5462dcdf75 | ||
|
|
1f43e51be4 | ||
|
|
1465058da0 | ||
|
|
09ebd6e87d | ||
|
|
f241e4b537 | ||
|
|
3d48b23428 | ||
|
|
7f5b48d485 | ||
|
|
254789c89a | ||
|
|
22b3ef7f20 | ||
|
|
53bd2361af | ||
|
|
48f9e5a96d | ||
|
|
8d60e82ec0 | ||
|
|
43069f139d | ||
|
|
ed2d06bcd7 | ||
|
|
7e108a8a29 | ||
|
|
e1bddb6152 | ||
|
|
372ba5c9a5 | ||
|
|
9da6d9435e | ||
|
|
77d3c95d6e | ||
|
|
6431228d37 | ||
|
|
7bfd5f161e | ||
|
|
2f87630ded | ||
|
|
a4b1c2bbdc | ||
|
|
db4306d0c1 | ||
|
|
0545f782e0 | ||
|
|
5cfbedc114 | ||
|
|
b24fbe8db9 | ||
|
|
cec95ae875 | ||
|
|
a7ccba9aeb | ||
|
|
2c31363680 | ||
|
|
432d4b0eca | ||
|
|
39a875e751 | ||
|
|
c561da4536 | ||
|
|
fea82d4d6a | ||
|
|
40a5db6736 | ||
|
|
c06f340bd8 | ||
|
|
bfe9cdfed5 | ||
|
|
0b10d34cae | ||
|
|
5c3556da66 | ||
|
|
9b194ea613 | ||
|
|
c175081698 | ||
|
|
f1a3293f4c | ||
|
|
bdd5717c09 | ||
|
|
a8b552200a | ||
|
|
24bcd041b8 | ||
|
|
f11aec3592 | ||
|
|
c15d1ab3bd | ||
|
|
2e7e276806 | ||
|
|
8d571672e9 | ||
|
|
7a9ea52bc7 | ||
|
|
4f9f550ba6 | ||
|
|
258c1afe27 | ||
|
|
cef3cd9b54 | ||
|
|
64f37ea24c | ||
|
|
6c01709048 | ||
|
|
e26695fc51 | ||
|
|
cc85a09b39 | ||
|
|
719456e27d | ||
|
|
7703b1fab5 | ||
|
|
a578f44af4 | ||
|
|
e210be7bb2 | ||
|
|
0f78e11376 | ||
|
|
ded27bcee4 | ||
|
|
798907dc50 | ||
|
|
77eeab33a6 | ||
|
|
fc21abc7e4 | ||
|
|
0380279c39 | ||
|
|
05d7b9a19a | ||
|
|
6ade97892f | ||
|
|
1a2c34dd28 | ||
|
|
c4b8396333 | ||
|
|
e621f9fd49 | ||
|
|
faeb7ab890 | ||
|
|
0ccbe3ef7f | ||
|
|
416643ce39 | ||
|
|
e458aca806 | ||
|
|
92cdddf604 | ||
|
|
caf21a8202 | ||
|
|
3631df03c7 | ||
|
|
ed22a16f32 | ||
|
|
f73eda0c38 | ||
|
|
2e25498143 | ||
|
|
44445dbeb8 | ||
|
|
dd57d1aec6 | ||
|
|
c689a0e9b7 | ||
|
|
d9482ae334 | ||
|
|
9a6e241f54 | ||
|
|
56ea9b6523 | ||
|
|
e169c21f8b | ||
|
|
b9bf192c09 | ||
|
|
0f002624d6 | ||
|
|
dca4c58b29 | ||
|
|
37092f4411 | ||
|
|
35b647839c | ||
|
|
4d7bed6181 | ||
|
|
3e13f0ed41 | ||
|
|
640096c822 | ||
|
|
ed57bc7858 | ||
|
|
b08c8d020d | ||
|
|
f17e7266cf | ||
|
|
ccbe77eb09 |
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
ql/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.ql
|
||||
ql/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql
|
||||
ql/actions/ql/src/Security/CWE-285/ImproperAccessControl.ql
|
||||
ql/actions/ql/src/Security/CWE-312/ExcessiveSecretsExposure.ql
|
||||
ql/actions/ql/src/Security/CWE-312/SecretsInArtifacts.ql
|
||||
ql/actions/ql/src/Security/CWE-312/UnmaskedSecretExposure.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaDirectCache.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaPoisonableStep.ql
|
||||
ql/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUHigh.ql
|
||||
ql/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.ql
|
||||
@@ -0,0 +1,27 @@
|
||||
ql/actions/ql/src/Debug/SyntaxError.ql
|
||||
ql/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.ql
|
||||
ql/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-077/EnvVarInjectionMedium.ql
|
||||
ql/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-094/CodeInjectionMedium.ql
|
||||
ql/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.ql
|
||||
ql/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql
|
||||
ql/actions/ql/src/Security/CWE-285/ImproperAccessControl.ql
|
||||
ql/actions/ql/src/Security/CWE-312/ExcessiveSecretsExposure.ql
|
||||
ql/actions/ql/src/Security/CWE-312/SecretsInArtifacts.ql
|
||||
ql/actions/ql/src/Security/CWE-312/UnmaskedSecretExposure.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaDirectCache.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaPoisonableStep.ql
|
||||
ql/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUHigh.ql
|
||||
ql/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueHigh.ql
|
||||
ql/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-829/ArtifactPoisoningMedium.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UnpinnedActionsTag.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.ql
|
||||
ql/actions/ql/src/Violations Of Best Practice/CodeQL/UnnecessaryUseOfAdvancedConfig.ql
|
||||
@@ -0,0 +1,23 @@
|
||||
ql/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.ql
|
||||
ql/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-077/EnvVarInjectionMedium.ql
|
||||
ql/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-094/CodeInjectionMedium.ql
|
||||
ql/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.ql
|
||||
ql/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql
|
||||
ql/actions/ql/src/Security/CWE-285/ImproperAccessControl.ql
|
||||
ql/actions/ql/src/Security/CWE-312/ExcessiveSecretsExposure.ql
|
||||
ql/actions/ql/src/Security/CWE-312/SecretsInArtifacts.ql
|
||||
ql/actions/ql/src/Security/CWE-312/UnmaskedSecretExposure.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaDirectCache.ql
|
||||
ql/actions/ql/src/Security/CWE-349/CachePoisoningViaPoisonableStep.ql
|
||||
ql/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUHigh.ql
|
||||
ql/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-829/ArtifactPoisoningMedium.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UnpinnedActionsTag.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.ql
|
||||
ql/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.ql
|
||||
@@ -0,0 +1,17 @@
|
||||
ql/actions/ql/src/Debug/partial.ql
|
||||
ql/actions/ql/src/Models/CompositeActionsSinks.ql
|
||||
ql/actions/ql/src/Models/CompositeActionsSources.ql
|
||||
ql/actions/ql/src/Models/CompositeActionsSummaries.ql
|
||||
ql/actions/ql/src/Models/ReusableWorkflowsSinks.ql
|
||||
ql/actions/ql/src/Models/ReusableWorkflowsSources.ql
|
||||
ql/actions/ql/src/Models/ReusableWorkflowsSummaries.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-074/OutputClobberingHigh.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-078/CommandInjectionMedium.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionMedium.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-200/SecretExfiltration.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-284/CodeExecutionOnSelfHostedRunner.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-829/UnversionedImmutableAction.ql
|
||||
ql/actions/ql/src/experimental/Security/CWE-918/RequestForgery.ql
|
||||
14
actions/ql/integration-tests/query-suite/test.py
Normal file
14
actions/ql/integration-tests/query-suite/test.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import runs_on
|
||||
import pytest
|
||||
from query_suites import *
|
||||
|
||||
well_known_query_suites = ['actions-code-quality.qls', 'actions-security-and-quality.qls', 'actions-security-extended.qls', 'actions-code-scanning.qls']
|
||||
|
||||
@runs_on.posix
|
||||
@pytest.mark.parametrize("query_suite", well_known_query_suites)
|
||||
def test(codeql, actions, check_query_suite, query_suite):
|
||||
check_query_suite(query_suite)
|
||||
|
||||
@runs_on.posix
|
||||
def test_not_included_queries(codeql, actions, check_queries_not_included):
|
||||
check_queries_not_included('actions', well_known_query_suites)
|
||||
@@ -1,3 +1,7 @@
|
||||
## 0.4.8
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 0.4.7
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
3
actions/ql/lib/change-notes/released/0.4.8.md
Normal file
3
actions/ql/lib/change-notes/released/0.4.8.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 0.4.8
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 0.4.7
|
||||
lastReleaseVersion: 0.4.8
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/actions-all
|
||||
version: 0.4.8-dev
|
||||
version: 0.4.9-dev
|
||||
library: true
|
||||
warnOnImplicitThis: true
|
||||
dependencies:
|
||||
|
||||
@@ -1,3 +1,23 @@
|
||||
## 0.6.0
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
* The following queries have been removed from the `security-and-quality` suite.
|
||||
They are not intended to produce user-facing
|
||||
alerts describing vulnerabilities.
|
||||
Any existing alerts for these queries will be closed automatically.
|
||||
* `actions/composite-action-sinks`
|
||||
* `actions/composite-action-sources`
|
||||
* `actions/composite-action-summaries`
|
||||
* `actions/reusable-workflow-sinks`
|
||||
(renamed from `actions/reusable-wokflow-sinks`)
|
||||
* `actions/reusable-workflow-sources`
|
||||
* `actions/reusable-workflow-summaries`
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Assigned a `security-severity` to the query `actions/excessive-secrets-exposure`.
|
||||
|
||||
## 0.5.4
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* @problem.severity warning
|
||||
* @security-severity 9.3
|
||||
* @precision high
|
||||
* @id actions/reusable-wokflow-sinks
|
||||
* @id actions/reusable-workflow-sinks
|
||||
* @tags actions
|
||||
* model-generator
|
||||
* external/cwe/cwe-020
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: fix
|
||||
---
|
||||
* Assigned a `security-severity` to the query `actions/excessive-secrets-exposure`.
|
||||
19
actions/ql/src/change-notes/released/0.6.0.md
Normal file
19
actions/ql/src/change-notes/released/0.6.0.md
Normal file
@@ -0,0 +1,19 @@
|
||||
## 0.6.0
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
* The following queries have been removed from the `security-and-quality` suite.
|
||||
They are not intended to produce user-facing
|
||||
alerts describing vulnerabilities.
|
||||
Any existing alerts for these queries will be closed automatically.
|
||||
* `actions/composite-action-sinks`
|
||||
* `actions/composite-action-sources`
|
||||
* `actions/composite-action-summaries`
|
||||
* `actions/reusable-workflow-sinks`
|
||||
(renamed from `actions/reusable-wokflow-sinks`)
|
||||
* `actions/reusable-workflow-sources`
|
||||
* `actions/reusable-workflow-summaries`
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Assigned a `security-severity` to the query `actions/excessive-secrets-exposure`.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 0.5.4
|
||||
lastReleaseVersion: 0.6.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/actions-queries
|
||||
version: 0.5.5-dev
|
||||
version: 0.6.1-dev
|
||||
library: false
|
||||
warnOnImplicitThis: true
|
||||
groups: [actions, queries]
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
|
||||
|
||||
def process_single_file(filename):
|
||||
if not filename.endswith(".qll"):
|
||||
return
|
||||
|
||||
with open(filename, 'r') as file_in:
|
||||
lines = [line for line in file_in]
|
||||
|
||||
configuresDataflow = any(
|
||||
"implements DataFlow::ConfigSig" in line for line in lines)
|
||||
|
||||
moduleAnnotations = ""
|
||||
if any(line for line in lines if line.rstrip().endswith("module;")):
|
||||
for line in lines:
|
||||
moduleAnnotations += line
|
||||
if line.rstrip().endswith("module;"):
|
||||
break
|
||||
|
||||
moduleAnnotations = strip_comments(moduleAnnotations)
|
||||
|
||||
isFileLevelAnnotated = ("overlay[local]" in moduleAnnotations or
|
||||
"overlay[local?]" in moduleAnnotations)
|
||||
|
||||
if configuresDataflow or isFileLevelAnnotated or filename.endswith("Query.qll"):
|
||||
if isFileLevelAnnotated and configuresDataflow:
|
||||
print("WARNING: file \""+filename +
|
||||
"\" configures dataflow, but is annotated local")
|
||||
elif configuresDataflow and not filename.endswith("Query.qll"):
|
||||
print("WARNING: file \""+filename +
|
||||
"\" configures dataflow but is not a [...]Query.qll file")
|
||||
elif filename.endswith("Query.qll") and not configuresDataflow:
|
||||
print("WARNING: file \""+filename +
|
||||
"\" is a [...]Query.qll file that does not configure dataflow")
|
||||
elif isFileLevelAnnotated and filename.endswith("Query.qll"):
|
||||
print("WARNING: file \""+filename +
|
||||
"\" is a [...]Query.qll file, but is annotated local")
|
||||
elif any(line for line in lines if line.rstrip().endswith("module;")):
|
||||
print("file \""+filename +
|
||||
" was annotated using an existing file-level module statment")
|
||||
with open(filename, "w") as file_out:
|
||||
for line in lines:
|
||||
if line.rstrip().endswith("module;"):
|
||||
file_out.write("overlay[local?]\n")
|
||||
file_out.write(line)
|
||||
elif (lines[0].startswith("import ") or lines[0].startswith("private ") or
|
||||
lines[0].startswith("newtype ") or lines[0].startswith("module ") or
|
||||
lines[0].startswith("signature ")):
|
||||
print("file \""+filename+" was annotated at the very start of the file")
|
||||
with open(filename, "w") as file_out:
|
||||
file_out.write("overlay[local?]\nmodule;\n\n")
|
||||
for line in lines:
|
||||
file_out.write(line)
|
||||
elif (strip_comments("".join(lines)).lstrip().startswith("import") or
|
||||
strip_comments("".join(lines)).lstrip().startswith("private import")):
|
||||
print("file \""+filename+" was annotated at the first import statement")
|
||||
with open(filename, "w") as file_out:
|
||||
firstImport = True
|
||||
addEmptyLine = ""
|
||||
for line in lines:
|
||||
if not line.strip():
|
||||
if addEmptyLine:
|
||||
file_out.write(addEmptyLine)
|
||||
addEmptyLine = line
|
||||
else:
|
||||
if firstImport and (line.startswith("import") or line.startswith("private")):
|
||||
file_out.write("overlay[local?]\nmodule;\n")
|
||||
firstImport = False
|
||||
|
||||
if addEmptyLine:
|
||||
file_out.write(addEmptyLine)
|
||||
addEmptyLine = ""
|
||||
file_out.write(line)
|
||||
elif (len(lines) > 2 and lines[0].startswith("/** ") and lines[0].endswith(" */\n") and
|
||||
not lines[1].strip() and lines[2].startswith("/**")):
|
||||
print("file \""+filename+" was annotated after single-line file module qldoc")
|
||||
with open(filename, "w") as file_out:
|
||||
file_out.write(lines[0])
|
||||
file_out.write("overlay[local?]\nmodule;\n")
|
||||
for line in lines[1:]:
|
||||
file_out.write(line)
|
||||
else:
|
||||
print("ERROR: failure to annotate file \""+filename+"\"")
|
||||
|
||||
|
||||
def strip_comments(str):
|
||||
prev = ""
|
||||
in_multiline = False
|
||||
in_singleline = False
|
||||
|
||||
result = ""
|
||||
for c in str:
|
||||
if c == '*' and prev == '/':
|
||||
in_multiline = True
|
||||
prev = ""
|
||||
elif c == '/' and prev == '/':
|
||||
in_singleline = True
|
||||
prev = ""
|
||||
elif in_multiline and c == '/' and prev == '*':
|
||||
in_multiline = False
|
||||
prev = ""
|
||||
elif in_singleline and c == '\n':
|
||||
in_singleline = False
|
||||
result += '\n'
|
||||
prev = ""
|
||||
else:
|
||||
if not in_multiline and not in_singleline:
|
||||
if prev == '/':
|
||||
result += '/'
|
||||
if c != '/':
|
||||
result += c
|
||||
prev = c
|
||||
return result
|
||||
|
||||
|
||||
for roots in ["java/ql/lib/semmle/code", "shared"]:
|
||||
for dirpath, dirnames, filenames in os.walk(roots):
|
||||
for filename in filenames:
|
||||
if filename.endswith(".qll"):
|
||||
process_single_file(os.path.join(dirpath, filename))
|
||||
@@ -0,0 +1,11 @@
|
||||
class Type extends @type {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Expr extends @expr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
from Type decltype, Expr expr, Type basetype, boolean parentheses
|
||||
where decltypes(decltype, expr, _, basetype, parentheses)
|
||||
select decltype, expr, basetype, parentheses
|
||||
@@ -0,0 +1,19 @@
|
||||
class Type extends @type {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
predicate derivedType(Type type, string name, int kind, Type type_id) {
|
||||
derivedtypes(type, name, kind, type_id)
|
||||
}
|
||||
|
||||
predicate typeTransformation(Type type, string name, int kind, Type type_id) {
|
||||
type_operators(type, _, _, type_id) and
|
||||
name = "" and
|
||||
kind = 3 // @type_with_specifiers
|
||||
}
|
||||
|
||||
from Type type, string name, int kind, Type type_id
|
||||
where
|
||||
derivedType(type, name, kind, type_id) or
|
||||
typeTransformation(type, name, kind, type_id)
|
||||
select type, name, kind, type_id
|
||||
2491
cpp/downgrades/9a7c3c14c1076f64b871719117a558733d987b48/old.dbscheme
Normal file
2491
cpp/downgrades/9a7c3c14c1076f64b871719117a558733d987b48/old.dbscheme
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
description: Support C23 typeof and typeof_unqual
|
||||
compatibility: backwards
|
||||
decltypes.rel: run decltypes.qlo
|
||||
derivedtypes.rel: run derivedtypes.qlo
|
||||
type_operators.rel: delete
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
ql/cpp/ql/src/Critical/DoubleFree.ql
|
||||
ql/cpp/ql/src/Critical/IncorrectCheckScanf.ql
|
||||
ql/cpp/ql/src/Critical/NewFreeMismatch.ql
|
||||
ql/cpp/ql/src/Critical/OverflowStatic.ql
|
||||
ql/cpp/ql/src/Critical/UseAfterFree.ql
|
||||
ql/cpp/ql/src/Diagnostics/ExtractedFiles.ql
|
||||
ql/cpp/ql/src/Diagnostics/ExtractionWarnings.ql
|
||||
ql/cpp/ql/src/Diagnostics/FailedExtractorInvocations.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/SignedOverflowCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/SnprintfOverflow.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/WrongNumberOfFormatArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/AllocaInLoop.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/PointerOverflow.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql
|
||||
ql/cpp/ql/src/Likely Bugs/RedundantNullCheckSimple.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Underspecified Functions/TooFewArguments.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-014/MemsetMayBeDeleted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/BadlyBoundedWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/VeryLikelyOverrunWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-131/NoSpaceForZeroTerminator.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-253/HResultBooleanConversion.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-327/OpenSslHeartbleed.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRace.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/UseOfStringAfterLifetimeEnds.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-497/ExposedSystemData.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-676/DangerousFunctionOverflow.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-676/DangerousUseOfCin.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-704/WcharCharConversion.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql
|
||||
ql/cpp/ql/src/Summary/LinesOfCode.ql
|
||||
ql/cpp/ql/src/Summary/LinesOfUserCode.ql
|
||||
ql/cpp/ql/src/Telemetry/CompilerErrors.ql
|
||||
ql/cpp/ql/src/Telemetry/DatabaseQuality.ql
|
||||
ql/cpp/ql/src/Telemetry/ExtractionMetrics.ql
|
||||
ql/cpp/ql/src/Telemetry/MissingIncludes.ql
|
||||
ql/cpp/ql/src/Telemetry/SucceededIncludes.ql
|
||||
@@ -0,0 +1,181 @@
|
||||
ql/cpp/ql/src/Best Practices/BlockWithTooManyStatements.ql
|
||||
ql/cpp/ql/src/Best Practices/ComplexCondition.ql
|
||||
ql/cpp/ql/src/Best Practices/Exceptions/AccidentalRethrow.ql
|
||||
ql/cpp/ql/src/Best Practices/Exceptions/CatchingByValue.ql
|
||||
ql/cpp/ql/src/Best Practices/Exceptions/LeakyCatch.ql
|
||||
ql/cpp/ql/src/Best Practices/Exceptions/ThrowingPointers.ql
|
||||
ql/cpp/ql/src/Best Practices/GuardedFree.ql
|
||||
ql/cpp/ql/src/Best Practices/Hiding/DeclarationHidesParameter.ql
|
||||
ql/cpp/ql/src/Best Practices/Hiding/DeclarationHidesVariable.ql
|
||||
ql/cpp/ql/src/Best Practices/Hiding/LocalVariableHidesGlobalVariable.ql
|
||||
ql/cpp/ql/src/Best Practices/Likely Errors/CommaBeforeMisleadingIndentation.ql
|
||||
ql/cpp/ql/src/Best Practices/Likely Errors/EmptyBlock.ql
|
||||
ql/cpp/ql/src/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql
|
||||
ql/cpp/ql/src/Best Practices/Likely Errors/Slicing.ql
|
||||
ql/cpp/ql/src/Best Practices/RuleOfTwo.ql
|
||||
ql/cpp/ql/src/Best Practices/SloppyGlobal.ql
|
||||
ql/cpp/ql/src/Best Practices/SwitchLongCase.ql
|
||||
ql/cpp/ql/src/Best Practices/Unused Entities/UnusedLocals.ql
|
||||
ql/cpp/ql/src/Best Practices/Unused Entities/UnusedStaticFunctions.ql
|
||||
ql/cpp/ql/src/Best Practices/Unused Entities/UnusedStaticVariables.ql
|
||||
ql/cpp/ql/src/Best Practices/UseOfGoto.ql
|
||||
ql/cpp/ql/src/Critical/DeadCodeGoto.ql
|
||||
ql/cpp/ql/src/Critical/DoubleFree.ql
|
||||
ql/cpp/ql/src/Critical/IncorrectCheckScanf.ql
|
||||
ql/cpp/ql/src/Critical/LargeParameter.ql
|
||||
ql/cpp/ql/src/Critical/MissingCheckScanf.ql
|
||||
ql/cpp/ql/src/Critical/NewArrayDeleteMismatch.ql
|
||||
ql/cpp/ql/src/Critical/NewDeleteArrayMismatch.ql
|
||||
ql/cpp/ql/src/Critical/NewFreeMismatch.ql
|
||||
ql/cpp/ql/src/Critical/OverflowStatic.ql
|
||||
ql/cpp/ql/src/Critical/SizeCheck.ql
|
||||
ql/cpp/ql/src/Critical/SizeCheck2.ql
|
||||
ql/cpp/ql/src/Critical/UseAfterFree.ql
|
||||
ql/cpp/ql/src/Diagnostics/ExtractedFiles.ql
|
||||
ql/cpp/ql/src/Diagnostics/ExtractionWarnings.ql
|
||||
ql/cpp/ql/src/Diagnostics/FailedExtractorInvocations.ql
|
||||
ql/cpp/ql/src/Documentation/CommentedOutCode.ql
|
||||
ql/cpp/ql/src/Documentation/FixmeComments.ql
|
||||
ql/cpp/ql/src/Documentation/UncommentedFunction.ql
|
||||
ql/cpp/ql/src/Header Cleanup/Cleanup-DuplicateIncludeGuard.ql
|
||||
ql/cpp/ql/src/Likely Bugs/AmbiguouslySignedBitField.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/BadCheckOdd.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/BitwiseSignCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/ComparisonPrecedence.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/FloatComparison.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/PointlessComparison.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/PointlessSelfComparison.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/SignedOverflowCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/UnsignedGEZero.ql
|
||||
ql/cpp/ql/src/Likely Bugs/ContinueInFalseLoop.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/ArrayArgSizeMismatch.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/ImplicitDowncastFromBitfield.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/LossyFunctionResultCast.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/LossyPointerCast.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/SnprintfOverflow.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/TooManyFormatArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/WrongNumberOfFormatArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/InconsistentCallOnResult.ql
|
||||
ql/cpp/ql/src/Likely Bugs/InconsistentCheckReturnNull.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Leap Year/Adding365DaysPerYear.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/AssignWhereCompareMeant.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/CompareWhereAssignMeant.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/DubiousNullCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/ExprHasNoEffect.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/FutileConditional.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/MissingEnumCaseInSwitch.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/ShortCircuitBitMask.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/UsingStrcpyAsBoolean.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/inconsistentLoopDirection.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/AllocaInLoop.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/PointerOverflow.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/ReturnCstrOfLocalStdString.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/StackAddressEscapes.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/StrncpyFlippedArgs.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousSizeof.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/UnsafeUseOfStrcat.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql
|
||||
ql/cpp/ql/src/Likely Bugs/NestedLoopSameVar.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/IncorrectConstructorDelegation.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/NonVirtualDestructorInBaseClass.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/ThrowInDestructor.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql
|
||||
ql/cpp/ql/src/Likely Bugs/RedundantNullCheckSimple.ql
|
||||
ql/cpp/ql/src/Likely Bugs/ReturnConstType.ql
|
||||
ql/cpp/ql/src/Likely Bugs/ReturnConstTypeMember.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Underspecified Functions/TooFewArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Underspecified Functions/TooManyArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/UseInOwnInitializer.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-014/MemsetMayBeDeleted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-114/UncontrolledProcessOperation.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-119/OverflowBuffer.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-119/OverrunWriteProductFlow.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/BadlyBoundedWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/OverrunWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/OverrunWriteFloat.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/VeryLikelyOverrunWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-121/UnterminatedVarargsCall.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-131/NoSpaceForZeroTerminator.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-193/InvalidPointerDeref.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-253/HResultBooleanConversion.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-327/OpenSslHeartbleed.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRace.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/UseOfStringAfterLifetimeEnds.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-468/IncorrectPointerScaling.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-497/ExposedSystemData.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-497/PotentiallyExposedSystemData.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-676/DangerousFunctionOverflow.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-676/DangerousUseOfCin.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-676/PotentiallyDangerousFunction.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-704/WcharCharConversion.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql
|
||||
ql/cpp/ql/src/Summary/LinesOfCode.ql
|
||||
ql/cpp/ql/src/Summary/LinesOfUserCode.ql
|
||||
ql/cpp/ql/src/Telemetry/CompilerErrors.ql
|
||||
ql/cpp/ql/src/Telemetry/DatabaseQuality.ql
|
||||
ql/cpp/ql/src/Telemetry/ExtractionMetrics.ql
|
||||
ql/cpp/ql/src/Telemetry/MissingIncludes.ql
|
||||
ql/cpp/ql/src/Telemetry/SucceededIncludes.ql
|
||||
ql/cpp/ql/src/jsf/4.06 Pre-Processing Directives/AV Rule 32.ql
|
||||
ql/cpp/ql/src/jsf/4.07 Header Files/AV Rule 35.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 71.1.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 79.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 82.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 88.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 89.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 95.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 97.ql
|
||||
ql/cpp/ql/src/jsf/4.13 Functions/AV Rule 107.ql
|
||||
ql/cpp/ql/src/jsf/4.13 Functions/AV Rule 114.ql
|
||||
ql/cpp/ql/src/jsf/4.16 Initialization/AV Rule 145.ql
|
||||
ql/cpp/ql/src/jsf/4.17 Types/AV Rule 148.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 166.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 196.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 197.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 201.ql
|
||||
@@ -0,0 +1,97 @@
|
||||
ql/cpp/ql/src/Best Practices/Likely Errors/CommaBeforeMisleadingIndentation.ql
|
||||
ql/cpp/ql/src/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql
|
||||
ql/cpp/ql/src/Critical/DoubleFree.ql
|
||||
ql/cpp/ql/src/Critical/IncorrectCheckScanf.ql
|
||||
ql/cpp/ql/src/Critical/MissingCheckScanf.ql
|
||||
ql/cpp/ql/src/Critical/NewFreeMismatch.ql
|
||||
ql/cpp/ql/src/Critical/OverflowStatic.ql
|
||||
ql/cpp/ql/src/Critical/SizeCheck.ql
|
||||
ql/cpp/ql/src/Critical/SizeCheck2.ql
|
||||
ql/cpp/ql/src/Critical/UseAfterFree.ql
|
||||
ql/cpp/ql/src/Diagnostics/ExtractedFiles.ql
|
||||
ql/cpp/ql/src/Diagnostics/ExtractionWarnings.ql
|
||||
ql/cpp/ql/src/Diagnostics/FailedExtractorInvocations.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/SignedOverflowCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/SnprintfOverflow.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/WrongNumberOfFormatArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/AllocaInLoop.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/PointerOverflow.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/StrncpyFlippedArgs.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousSizeof.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/UnsafeUseOfStrcat.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/UsingExpiredStackAddress.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql
|
||||
ql/cpp/ql/src/Likely Bugs/RedundantNullCheckSimple.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Underspecified Functions/TooFewArguments.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-014/MemsetMayBeDeleted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-114/UncontrolledProcessOperation.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-119/OverflowBuffer.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-119/OverrunWriteProductFlow.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/BadlyBoundedWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/OverrunWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/OverrunWriteFloat.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-120/VeryLikelyOverrunWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-121/UnterminatedVarargsCall.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-131/NoSpaceForZeroTerminator.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-193/InvalidPointerDeref.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-253/HResultBooleanConversion.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-327/OpenSslHeartbleed.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRace.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/UseOfStringAfterLifetimeEnds.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-468/IncorrectPointerScaling.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-497/ExposedSystemData.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-497/PotentiallyExposedSystemData.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-676/DangerousFunctionOverflow.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-676/DangerousUseOfCin.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-676/PotentiallyDangerousFunction.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-704/WcharCharConversion.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql
|
||||
ql/cpp/ql/src/Summary/LinesOfCode.ql
|
||||
ql/cpp/ql/src/Summary/LinesOfUserCode.ql
|
||||
ql/cpp/ql/src/Telemetry/CompilerErrors.ql
|
||||
ql/cpp/ql/src/Telemetry/DatabaseQuality.ql
|
||||
ql/cpp/ql/src/Telemetry/ExtractionMetrics.ql
|
||||
ql/cpp/ql/src/Telemetry/MissingIncludes.ql
|
||||
ql/cpp/ql/src/Telemetry/SucceededIncludes.ql
|
||||
@@ -0,0 +1,447 @@
|
||||
ql/cpp/ql/src/AlertSuppression.ql
|
||||
ql/cpp/ql/src/Architecture/FeatureEnvy.ql
|
||||
ql/cpp/ql/src/Architecture/General Class-Level Information/ClassHierarchies.ql
|
||||
ql/cpp/ql/src/Architecture/General Class-Level Information/HubClasses.ql
|
||||
ql/cpp/ql/src/Architecture/General Class-Level Information/InheritanceDepthDistribution.ql
|
||||
ql/cpp/ql/src/Architecture/General Namespace-Level Information/CyclicNamespaces.ql
|
||||
ql/cpp/ql/src/Architecture/General Namespace-Level Information/GlobalNamespaceClasses.ql
|
||||
ql/cpp/ql/src/Architecture/General Namespace-Level Information/NamespaceDependencies.ql
|
||||
ql/cpp/ql/src/Architecture/General Top-Level Information/GeneralStatistics.ql
|
||||
ql/cpp/ql/src/Architecture/InappropriateIntimacy.ql
|
||||
ql/cpp/ql/src/Architecture/Refactoring Opportunities/ClassesWithManyDependencies.ql
|
||||
ql/cpp/ql/src/Architecture/Refactoring Opportunities/ClassesWithManyFields.ql
|
||||
ql/cpp/ql/src/Architecture/Refactoring Opportunities/ComplexFunctions.ql
|
||||
ql/cpp/ql/src/Architecture/Refactoring Opportunities/CyclomaticComplexity.ql
|
||||
ql/cpp/ql/src/Architecture/Refactoring Opportunities/FunctionsWithManyParameters.ql
|
||||
ql/cpp/ql/src/Best Practices/Magic Constants/JapaneseEraDate.ql
|
||||
ql/cpp/ql/src/Best Practices/Magic Constants/MagicConstantsNumbers.ql
|
||||
ql/cpp/ql/src/Best Practices/Magic Constants/MagicConstantsString.ql
|
||||
ql/cpp/ql/src/Best Practices/Magic Constants/MagicNumbersUseConstant.ql
|
||||
ql/cpp/ql/src/Best Practices/Magic Constants/MagicStringsUseConstant.ql
|
||||
ql/cpp/ql/src/Best Practices/NVI.ql
|
||||
ql/cpp/ql/src/Best Practices/NVIHub.ql
|
||||
ql/cpp/ql/src/Best Practices/RuleOfThree.ql
|
||||
ql/cpp/ql/src/Best Practices/Unused Entities/UnusedIncludes.ql
|
||||
ql/cpp/ql/src/Critical/DeadCodeCondition.ql
|
||||
ql/cpp/ql/src/Critical/DeadCodeFunction.ql
|
||||
ql/cpp/ql/src/Critical/DescriptorMayNotBeClosed.ql
|
||||
ql/cpp/ql/src/Critical/DescriptorNeverClosed.ql
|
||||
ql/cpp/ql/src/Critical/FileMayNotBeClosed.ql
|
||||
ql/cpp/ql/src/Critical/FileNeverClosed.ql
|
||||
ql/cpp/ql/src/Critical/GlobalUseBeforeInit.ql
|
||||
ql/cpp/ql/src/Critical/InconsistentNullnessTesting.ql
|
||||
ql/cpp/ql/src/Critical/InitialisationNotRun.ql
|
||||
ql/cpp/ql/src/Critical/LateNegativeTest.ql
|
||||
ql/cpp/ql/src/Critical/MemoryMayNotBeFreed.ql
|
||||
ql/cpp/ql/src/Critical/MemoryNeverFreed.ql
|
||||
ql/cpp/ql/src/Critical/MissingNegativityTest.ql
|
||||
ql/cpp/ql/src/Critical/MissingNullTest.ql
|
||||
ql/cpp/ql/src/Critical/NotInitialised.ql
|
||||
ql/cpp/ql/src/Critical/OverflowCalculated.ql
|
||||
ql/cpp/ql/src/Critical/OverflowDestination.ql
|
||||
ql/cpp/ql/src/Critical/ReturnStackAllocatedObject.ql
|
||||
ql/cpp/ql/src/Critical/ReturnValueIgnored.ql
|
||||
ql/cpp/ql/src/Critical/Unused.ql
|
||||
ql/cpp/ql/src/Diagnostics/Internal/ExtractionErrors.ql
|
||||
ql/cpp/ql/src/Documentation/DocumentApi.ql
|
||||
ql/cpp/ql/src/Documentation/TodoComments.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 03/ExitNonterminatingLoop.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 03/LoopBounds.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 04/Recursion.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 05/HeapMemory.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 07/ThreadSafety.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 09/AvoidNestedSemaphores.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 09/AvoidSemaphores.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 09/OutOfOrderLocks.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 09/ReleaseLocksWhenAcquired.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 11/SimpleControlFlowGoto.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 11/SimpleControlFlowJmp.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-2/Rule 12/EnumInitialization.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 13/ExternDeclsInHeader.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 13/LimitedScopeFile.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 13/LimitedScopeFunction.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 13/LimitedScopeLocalHidesGlobal.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 14/CheckingReturnValues.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 15/CheckingParameterValues.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 16/UseOfAssertionsConstant.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 16/UseOfAssertionsDensity.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 16/UseOfAssertionsNonBoolean.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 16/UseOfAssertionsSideEffect.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 17/BasicIntTypes.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 18/CompoundExpressions.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-3/Rule 19/NoBooleanSideEffects.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 20/PreprocessorUse.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 20/PreprocessorUseIfdef.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 20/PreprocessorUsePartial.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 20/PreprocessorUseUndisciplined.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 21/MacroInBlock.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 22/UseOfUndef.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 23/MismatchedIfdefs.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 24/MultipleStmtsPerLine.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 24/MultipleVarDeclsPerLine.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 25/FunctionSizeLimits.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 26/DeclarationPointerNesting.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 27/PointerDereferenceInStmt.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 28/HiddenPointerDereferenceMacro.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 28/HiddenPointerIndirectionTypedef.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 29/NonConstFunctionPointer.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 30/FunctionPointerConversions.ql
|
||||
ql/cpp/ql/src/JPL_C/LOC-4/Rule 31/IncludesFirst.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Arithmetic/ComparisonWithCancelingSubExpr.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/ConversionChangesSign.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Conversion/NonzeroValueCastToPointer.ql
|
||||
ql/cpp/ql/src/Likely Bugs/JapaneseEra/ConstructorOrMethodWithExactEraDate.ql
|
||||
ql/cpp/ql/src/Likely Bugs/JapaneseEra/StructWithExactEraDate.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Leap Year/UnsafeArrayForDaysOfYear.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/BoolValueInBitOp.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Likely Typos/LogicalExprCouldBeSimplified.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/ImproperNullTermination.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/Padding/More64BitWaste.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/Padding/NonPortablePrintf.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/Padding/Suboptimal64BitType.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/PotentialBufferOverflow.ql
|
||||
ql/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/NonVirtualDestructor.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/SelfAssignmentCheck.ql
|
||||
ql/cpp/ql/src/Likely Bugs/OO/VirtualCallInStructor.ql
|
||||
ql/cpp/ql/src/Likely Bugs/ShortLoopVarName.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CAfferentCoupling.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CEfferentCoupling.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CHalsteadBugs.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CHalsteadDifficulty.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CHalsteadEffort.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CHalsteadLength.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CHalsteadVocabulary.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CHalsteadVolume.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CInheritanceDepth.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CLackOfCohesionCK.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CLackOfCohesionHS.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CLinesOfCode.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CNumberOfFields.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CNumberOfFunctions.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CNumberOfStatements.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CPercentageOfComplexCode.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CResponse.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CSizeOfAPI.ql
|
||||
ql/cpp/ql/src/Metrics/Classes/CSpecialisation.ql
|
||||
ql/cpp/ql/src/Metrics/Dependencies/ExternalDependencies.ql
|
||||
ql/cpp/ql/src/Metrics/Dependencies/ExternalDependenciesSourceLinks.ql
|
||||
ql/cpp/ql/src/Metrics/External/FileCompilationDisplayStrings.ql
|
||||
ql/cpp/ql/src/Metrics/External/FileCompilationSourceLinks.ql
|
||||
ql/cpp/ql/src/Metrics/Files/AutogeneratedLOC.ql
|
||||
ql/cpp/ql/src/Metrics/Files/ConditionalSegmentConditions.ql
|
||||
ql/cpp/ql/src/Metrics/Files/ConditionalSegmentLines.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FAfferentCoupling.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FCommentRatio.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FCyclomaticComplexity.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FDirectIncludes.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FEfferentCoupling.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FHalsteadBugs.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FHalsteadDifficulty.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FHalsteadEffort.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FHalsteadLength.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FHalsteadVocabulary.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FHalsteadVolume.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FLines.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FLinesOfCode.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FLinesOfCommentedOutCode.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FLinesOfComments.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FMacroRatio.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FNumberOfClasses.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FNumberOfTests.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FTimeInFrontend.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FTodoComments.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FTransitiveIncludes.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FTransitiveSourceIncludes.ql
|
||||
ql/cpp/ql/src/Metrics/Files/FunctionLength.ql
|
||||
ql/cpp/ql/src/Metrics/Files/NumberOfFunctions.ql
|
||||
ql/cpp/ql/src/Metrics/Files/NumberOfGlobals.ql
|
||||
ql/cpp/ql/src/Metrics/Files/NumberOfParameters.ql
|
||||
ql/cpp/ql/src/Metrics/Files/NumberOfPublicFunctions.ql
|
||||
ql/cpp/ql/src/Metrics/Files/NumberOfPublicGlobals.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/FunCyclomaticComplexity.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/FunIterationNestingDepth.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/FunLinesOfCode.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/FunLinesOfComments.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/FunNumberOfCalls.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/FunNumberOfParameters.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/FunNumberOfStatements.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/FunPercentageOfComments.ql
|
||||
ql/cpp/ql/src/Metrics/Functions/StatementNestingDepth.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/ASTConsistency.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/CallableDisplayStrings.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/CallableExtents.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/CallableSourceLinks.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/DiagnosticsSumElapsedTimes.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/IRConsistency.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/IncludeResolutionStatus.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/ReftypeDisplayStrings.ql
|
||||
ql/cpp/ql/src/Metrics/Internal/ReftypeSourceLinks.ql
|
||||
ql/cpp/ql/src/Metrics/Namespaces/AbstractNamespaces.ql
|
||||
ql/cpp/ql/src/Metrics/Namespaces/ConcreteNamespaces.ql
|
||||
ql/cpp/ql/src/Metrics/Namespaces/HighAfferentCouplingNamespaces.ql
|
||||
ql/cpp/ql/src/Metrics/Namespaces/HighDistanceFromMainLineNamespaces.ql
|
||||
ql/cpp/ql/src/Metrics/Namespaces/HighEfferentCouplingNamespaces.ql
|
||||
ql/cpp/ql/src/Metrics/Namespaces/StableNamespaces.ql
|
||||
ql/cpp/ql/src/Metrics/Namespaces/UnstableNamespaces.ql
|
||||
ql/cpp/ql/src/Microsoft/CallWithNullSAL.ql
|
||||
ql/cpp/ql/src/Microsoft/IgnoreReturnValueSAL.ql
|
||||
ql/cpp/ql/src/Microsoft/InconsistentSAL.ql
|
||||
ql/cpp/ql/src/PointsTo/Debug.ql
|
||||
ql/cpp/ql/src/PointsTo/PreparedStagedPointsTo.ql
|
||||
ql/cpp/ql/src/PointsTo/Stats.ql
|
||||
ql/cpp/ql/src/PointsTo/TaintedFormatStrings.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 1/UseOfGoto.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 1/UseOfJmp.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 1/UseOfRecursion.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 2/BoundedLoopIterations.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 2/ExitPermanentLoop.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 3/DynamicAllocAfterInit.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 4/FunctionTooLong.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 4/OneStmtPerLine.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 5/AssertionDensity.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 5/AssertionSideEffect.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 5/ConstantAssertion.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 5/NonBooleanAssertion.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 6/GlobalCouldBeStatic.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 6/VariableScopeTooLarge.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 7/CheckArguments.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 7/CheckReturnValues.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 8/AvoidConditionalCompilation.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 8/PartialMacro.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 8/RestrictPreprocessor.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 8/UndisciplinedMacro.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 9/FunctionPointer.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 9/HiddenPointerIndirection.ql
|
||||
ql/cpp/ql/src/Power of 10/Rule 9/PointerNesting.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-020/CountUntrustedDataToExternalAPI.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-020/IRCountUntrustedDataToExternalAPI.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-020/IRUntrustedDataToExternalAPI.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-020/UntrustedDataToExternalAPI.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-468/IncorrectPointerScalingChar.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-764/LockOrderCycle.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-764/TwiceLocked.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-764/UnreleasedLock.ql
|
||||
ql/cpp/ql/src/Security/CWE/CWE-835/InfiniteLoopWithUnsatisfiableExitCondition.ql
|
||||
ql/cpp/ql/src/definitions.ql
|
||||
ql/cpp/ql/src/experimental/Best Practices/UselessTest.ql
|
||||
ql/cpp/ql/src/experimental/Best Practices/WrongUintAccess.ql
|
||||
ql/cpp/ql/src/experimental/Likely Bugs/ArrayAccessProductFlow.ql
|
||||
ql/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.ql
|
||||
ql/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-020/LateCheckOfFunctionArgument.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-078/WordexpTainted.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-1041/FindWrapperFunctions.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-120/MemoryUnsafeFunctionScan.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-1240/CustomCryptographicPrimitive.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-190/AllocMultiplicationOverflow.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-190/DangerousUseOfTransformationAfterOperation.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-190/IfStatementAdditionOverflow.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-200/ExposureSensitiveInformationUnauthorizedActor.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-266/IncorrectPrivilegeAssignment.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-273/PrivilegeDroppingOutoforder.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-285/PamAuthorization.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-295/CurlSSL.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-359/PrivateCleartextWrite.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-362/double-fetch.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-369/DivideByZeroUsingReturnValue.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-377/InsecureTemporaryFile.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-401/MemoryLeakOnFailedCallToRealloc.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-415/DoubleFree.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-561/FindIncorrectlyUsedSwitch.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-670/DangerousUseSSL_shutdown.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-675/DoubleRelease.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-691/InsufficientControlFlowManagementAfterRefactoringTheCode.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-691/InsufficientControlFlowManagementWhenUsingBitOperations.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-703/FindIncorrectlyUsedExceptions.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-754/ImproperCheckReturnValueScanf.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-758/UndefinedOrImplementationDefinedBehavior.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-783/OperatorPrecedenceLogicErrorWhenUseBitwiseOrLogicalOperations.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-783/OperatorPrecedenceLogicErrorWhenUseBoolType.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-787/UnsignedToSignedPointerArith.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-788/AccessOfMemoryLocationAfterEndOfBufferUsingStrlen.ql
|
||||
ql/cpp/ql/src/experimental/Security/CWE/CWE-805/BufferAccessWithIncorrectLengthValue.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/example_alerts/UnknownAsymmetricKeyGen.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/example_alerts/WeakAsymmetricKeyGen.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/example_alerts/WeakBlockMode.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/example_alerts/WeakEllipticCurve.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/example_alerts/WeakEncryption.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/example_alerts/WeakHashes.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/AllAsymmetricAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/AllCryptoAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/AsymmetricEncryptionAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/AsymmetricPaddingAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/AuthenticatedEncryptionAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/BlockModeAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/BlockModeKnownIVsOrNonces.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/BlockModeUnknownIVsOrNonces.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/EllipticCurveAlgorithmSize.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/EllipticCurveAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/HashingAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/KeyExchangeAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/KnownAsymmetricKeyGeneration.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/SigningAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/SymmetricEncryptionAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/SymmetricPaddingAlgorithms.ql
|
||||
ql/cpp/ql/src/experimental/cryptography/inventory/new_models/UnknownAsymmetricKeyGeneration.ql
|
||||
ql/cpp/ql/src/external/examples/filters/BumpMetricBy10.ql
|
||||
ql/cpp/ql/src/external/examples/filters/EditDefectMessage.ql
|
||||
ql/cpp/ql/src/external/examples/filters/ExcludeGeneratedCode.ql
|
||||
ql/cpp/ql/src/filters/ClassifyFiles.ql
|
||||
ql/cpp/ql/src/jsf/3.02 Code Size and Complexity/AV Rule 1.ql
|
||||
ql/cpp/ql/src/jsf/3.02 Code Size and Complexity/AV Rule 2.ql
|
||||
ql/cpp/ql/src/jsf/3.02 Code Size and Complexity/AV Rule 3.ql
|
||||
ql/cpp/ql/src/jsf/4.04 Environment/AV Rule 11.ql
|
||||
ql/cpp/ql/src/jsf/4.04 Environment/AV Rule 12.ql
|
||||
ql/cpp/ql/src/jsf/4.04 Environment/AV Rule 13.ql
|
||||
ql/cpp/ql/src/jsf/4.04 Environment/AV Rule 14.ql
|
||||
ql/cpp/ql/src/jsf/4.04 Environment/AV Rule 9.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 17.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 18.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 19.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 20.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 21.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 22.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 23.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 24.ql
|
||||
ql/cpp/ql/src/jsf/4.05 Libraries/AV Rule 25.ql
|
||||
ql/cpp/ql/src/jsf/4.06 Pre-Processing Directives/AV Rule 26.ql
|
||||
ql/cpp/ql/src/jsf/4.06 Pre-Processing Directives/AV Rule 27.ql
|
||||
ql/cpp/ql/src/jsf/4.06 Pre-Processing Directives/AV Rule 28.ql
|
||||
ql/cpp/ql/src/jsf/4.06 Pre-Processing Directives/AV Rule 29.ql
|
||||
ql/cpp/ql/src/jsf/4.06 Pre-Processing Directives/AV Rule 30.ql
|
||||
ql/cpp/ql/src/jsf/4.06 Pre-Processing Directives/AV Rule 31.ql
|
||||
ql/cpp/ql/src/jsf/4.07 Header Files/AV Rule 33.ql
|
||||
ql/cpp/ql/src/jsf/4.07 Header Files/AV Rule 39.ql
|
||||
ql/cpp/ql/src/jsf/4.08 Implementation Files/AV Rule 40.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 41.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 42.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 43.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 44.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 45.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 46.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 47.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 48.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 49.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 50.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 51.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 52.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 53.1.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 53.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 54.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 57.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 58.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 59.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 60.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 61.ql
|
||||
ql/cpp/ql/src/jsf/4.09 Style/AV Rule 63.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 68.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 69.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 70.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 71.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 73.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 74.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 75.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 76.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 77.1.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 78.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 81.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 85.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 88.1.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 94.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql
|
||||
ql/cpp/ql/src/jsf/4.10 Classes/AV Rule 97.1.ql
|
||||
ql/cpp/ql/src/jsf/4.11 Namespaces/AV Rule 99.ql
|
||||
ql/cpp/ql/src/jsf/4.12 Templates/AV Rule 104.ql
|
||||
ql/cpp/ql/src/jsf/4.13 Functions/AV Rule 108.ql
|
||||
ql/cpp/ql/src/jsf/4.13 Functions/AV Rule 110.ql
|
||||
ql/cpp/ql/src/jsf/4.13 Functions/AV Rule 111.ql
|
||||
ql/cpp/ql/src/jsf/4.13 Functions/AV Rule 113.ql
|
||||
ql/cpp/ql/src/jsf/4.13 Functions/AV Rule 115.ql
|
||||
ql/cpp/ql/src/jsf/4.13 Functions/AV Rule 119.ql
|
||||
ql/cpp/ql/src/jsf/4.14 Comments/AV Rule 126.ql
|
||||
ql/cpp/ql/src/jsf/4.14 Comments/AV Rule 127.ql
|
||||
ql/cpp/ql/src/jsf/4.14 Comments/AV Rule 133.ql
|
||||
ql/cpp/ql/src/jsf/4.15 Declarations and Definitions/AV Rule 135.ql
|
||||
ql/cpp/ql/src/jsf/4.15 Declarations and Definitions/AV Rule 138.ql
|
||||
ql/cpp/ql/src/jsf/4.15 Declarations and Definitions/AV Rule 139.ql
|
||||
ql/cpp/ql/src/jsf/4.15 Declarations and Definitions/AV Rule 140.ql
|
||||
ql/cpp/ql/src/jsf/4.16 Initialization/AV Rule 142.ql
|
||||
ql/cpp/ql/src/jsf/4.16 Initialization/AV Rule 143.ql
|
||||
ql/cpp/ql/src/jsf/4.17 Types/AV Rule 147.ql
|
||||
ql/cpp/ql/src/jsf/4.18 Constants/AV Rule 149.ql
|
||||
ql/cpp/ql/src/jsf/4.18 Constants/AV Rule 150.ql
|
||||
ql/cpp/ql/src/jsf/4.18 Constants/AV Rule 151.1.ql
|
||||
ql/cpp/ql/src/jsf/4.18 Constants/AV Rule 151.ql
|
||||
ql/cpp/ql/src/jsf/4.19 Variables/AV Rule 152.ql
|
||||
ql/cpp/ql/src/jsf/4.20 Unions and Bit Fields/AV Rule 153.ql
|
||||
ql/cpp/ql/src/jsf/4.20 Unions and Bit Fields/AV Rule 154.ql
|
||||
ql/cpp/ql/src/jsf/4.20 Unions and Bit Fields/AV Rule 155.ql
|
||||
ql/cpp/ql/src/jsf/4.20 Unions and Bit Fields/AV Rule 156.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 157.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 158.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 159.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 160.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 162.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 163.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 164.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 165.ql
|
||||
ql/cpp/ql/src/jsf/4.21 Operators/AV Rule 168.ql
|
||||
ql/cpp/ql/src/jsf/4.22 Pointers and References/AV Rule 170.ql
|
||||
ql/cpp/ql/src/jsf/4.22 Pointers and References/AV Rule 171.ql
|
||||
ql/cpp/ql/src/jsf/4.22 Pointers and References/AV Rule 173.ql
|
||||
ql/cpp/ql/src/jsf/4.22 Pointers and References/AV Rule 175.ql
|
||||
ql/cpp/ql/src/jsf/4.22 Pointers and References/AV Rule 176.ql
|
||||
ql/cpp/ql/src/jsf/4.23 Type Conversions/AV Rule 178.ql
|
||||
ql/cpp/ql/src/jsf/4.23 Type Conversions/AV Rule 179.ql
|
||||
ql/cpp/ql/src/jsf/4.23 Type Conversions/AV Rule 180.ql
|
||||
ql/cpp/ql/src/jsf/4.23 Type Conversions/AV Rule 181.ql
|
||||
ql/cpp/ql/src/jsf/4.23 Type Conversions/AV Rule 182.ql
|
||||
ql/cpp/ql/src/jsf/4.23 Type Conversions/AV Rule 184.ql
|
||||
ql/cpp/ql/src/jsf/4.23 Type Conversions/AV Rule 185.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 186.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 187.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 188.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 189.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 190.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 191.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 192.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 193.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 194.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 195.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 198.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 199.ql
|
||||
ql/cpp/ql/src/jsf/4.24 Control Flow Structures/AV Rule 200.ql
|
||||
ql/cpp/ql/src/jsf/4.25 Expressions/AV Rule 202.ql
|
||||
ql/cpp/ql/src/jsf/4.25 Expressions/AV Rule 204.1.ql
|
||||
ql/cpp/ql/src/jsf/4.25 Expressions/AV Rule 204.ql
|
||||
ql/cpp/ql/src/jsf/4.25 Expressions/AV Rule 205.ql
|
||||
ql/cpp/ql/src/jsf/4.26 Memory Allocation/AV Rule 206.ql
|
||||
ql/cpp/ql/src/jsf/4.26 Memory Allocation/AV Rule 207.ql
|
||||
ql/cpp/ql/src/jsf/4.27 Fault Handling/AV Rule 208.ql
|
||||
ql/cpp/ql/src/jsf/4.28 Portable Code/AV Rule 209.ql
|
||||
ql/cpp/ql/src/jsf/4.28 Portable Code/AV Rule 210.ql
|
||||
ql/cpp/ql/src/jsf/4.28 Portable Code/AV Rule 212.ql
|
||||
ql/cpp/ql/src/jsf/4.28 Portable Code/AV Rule 213.ql
|
||||
ql/cpp/ql/src/jsf/4.28 Portable Code/AV Rule 214.ql
|
||||
ql/cpp/ql/src/jsf/4.28 Portable Code/AV Rule 215.ql
|
||||
ql/cpp/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql
|
||||
ql/cpp/ql/src/utils/modelgenerator/CaptureNeutralModels.ql
|
||||
ql/cpp/ql/src/utils/modelgenerator/CaptureSinkModels.ql
|
||||
ql/cpp/ql/src/utils/modelgenerator/CaptureSourceModels.ql
|
||||
ql/cpp/ql/src/utils/modelgenerator/CaptureSummaryModels.ql
|
||||
14
cpp/ql/integration-tests/query-suite/test.py
Normal file
14
cpp/ql/integration-tests/query-suite/test.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import runs_on
|
||||
import pytest
|
||||
from query_suites import *
|
||||
|
||||
well_known_query_suites = ['cpp-code-quality.qls', 'cpp-security-and-quality.qls', 'cpp-security-extended.qls', 'cpp-code-scanning.qls']
|
||||
|
||||
@runs_on.posix
|
||||
@pytest.mark.parametrize("query_suite", well_known_query_suites)
|
||||
def test(codeql, cpp, check_query_suite, query_suite):
|
||||
check_query_suite(query_suite)
|
||||
|
||||
@runs_on.posix
|
||||
def test_not_included_queries(codeql, cpp, check_queries_not_included):
|
||||
check_queries_not_included('cpp', well_known_query_suites)
|
||||
@@ -1,3 +1,12 @@
|
||||
## 4.3.0
|
||||
|
||||
### New Features
|
||||
|
||||
* New classes `TypeofType`, `TypeofExprType`, and `TypeofTypeType` were introduced, which represent the C23 `typeof` and `typeof_unqual` operators. The `TypeofExprType` class represents the variant taking an expression as its argument. The `TypeofTypeType` class represents the variant taking a type as its argument.
|
||||
* A new class `IntrinsicTransformedType` was introduced, which represents the type transforming intrinsics supported by clang, gcc, and MSVC.
|
||||
* Introduced `hasDesignator()` predicates to distinguish between designated and positional initializations for both struct/union fields and array elements.
|
||||
* Added the `isVla()` predicate to the `ArrayType` class. This allows queries to identify variable-length arrays (VLAs).
|
||||
|
||||
## 4.2.0
|
||||
|
||||
### New Features
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: feature
|
||||
---
|
||||
* Added the `isVla()` predicate to the `ArrayType` class. This allows queries to identify variable-length arrays (VLAs).
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: feature
|
||||
---
|
||||
* Introduced `hasDesignator()` predicates to distinguish between designated and positional initializations for both struct/union fields and array elements.
|
||||
8
cpp/ql/lib/change-notes/released/4.3.0.md
Normal file
8
cpp/ql/lib/change-notes/released/4.3.0.md
Normal file
@@ -0,0 +1,8 @@
|
||||
## 4.3.0
|
||||
|
||||
### New Features
|
||||
|
||||
* New classes `TypeofType`, `TypeofExprType`, and `TypeofTypeType` were introduced, which represent the C23 `typeof` and `typeof_unqual` operators. The `TypeofExprType` class represents the variant taking an expression as its argument. The `TypeofTypeType` class represents the variant taking a type as its argument.
|
||||
* A new class `IntrinsicTransformedType` was introduced, which represents the type transforming intrinsics supported by clang, gcc, and MSVC.
|
||||
* Introduced `hasDesignator()` predicates to distinguish between designated and positional initializations for both struct/union fields and array elements.
|
||||
* Added the `isVla()` predicate to the `ArrayType` class. This allows queries to identify variable-length arrays (VLAs).
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 4.2.0
|
||||
lastReleaseVersion: 4.3.0
|
||||
|
||||
5
cpp/ql/lib/ext/generated/empty.model.yml
Normal file
5
cpp/ql/lib/ext/generated/empty.model.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
extensions:
|
||||
- addsTo:
|
||||
pack: codeql/cpp-all
|
||||
extensible: summaryModel
|
||||
data: []
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/cpp-all
|
||||
version: 4.2.1-dev
|
||||
version: 4.3.1-dev
|
||||
groups: cpp
|
||||
dbscheme: semmlecode.cpp.dbscheme
|
||||
extractor: cpp
|
||||
@@ -16,6 +16,7 @@ dependencies:
|
||||
codeql/xml: ${workspace}
|
||||
dataExtensions:
|
||||
- ext/*.model.yml
|
||||
- ext/generated/*.model.yml
|
||||
- ext/deallocation/*.model.yml
|
||||
- ext/allocation/*.model.yml
|
||||
warnOnImplicitThis: true
|
||||
|
||||
@@ -176,6 +176,30 @@ private class DecltypeDumpType extends DumpType, Decltype {
|
||||
}
|
||||
}
|
||||
|
||||
private class TypeofDumpType extends DumpType, TypeofType {
|
||||
override string getTypeSpecifier() { result = this.getBaseType().(DumpType).getTypeSpecifier() }
|
||||
|
||||
override string getDeclaratorPrefix() {
|
||||
result = this.getBaseType().(DumpType).getDeclaratorPrefix()
|
||||
}
|
||||
|
||||
override string getDeclaratorSuffix() {
|
||||
result = this.getBaseType().(DumpType).getDeclaratorSuffix()
|
||||
}
|
||||
}
|
||||
|
||||
private class IntrinsicTransformedDumpType extends DumpType, IntrinsicTransformedType {
|
||||
override string getTypeSpecifier() { result = this.getBaseType().(DumpType).getTypeSpecifier() }
|
||||
|
||||
override string getDeclaratorPrefix() {
|
||||
result = this.getBaseType().(DumpType).getDeclaratorPrefix()
|
||||
}
|
||||
|
||||
override string getDeclaratorSuffix() {
|
||||
result = this.getBaseType().(DumpType).getDeclaratorSuffix()
|
||||
}
|
||||
}
|
||||
|
||||
private class PointerIshDumpType extends DerivedDumpType {
|
||||
PointerIshDumpType() {
|
||||
this instanceof PointerType or
|
||||
|
||||
@@ -92,8 +92,9 @@ class Type extends Locatable, @type {
|
||||
/**
|
||||
* Gets this type after typedefs have been resolved.
|
||||
*
|
||||
* The result of this predicate will be the type itself, except in the case of a TypedefType or a Decltype,
|
||||
* in which case the result will be type which results from (possibly recursively) resolving typedefs.
|
||||
* The result of this predicate will be the type itself, except in the case of a TypedefType, a Decltype,
|
||||
* or a TypeofType, in which case the result will be type which results from (possibly recursively)
|
||||
* resolving typedefs.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
Type getUnderlyingType() { result = this }
|
||||
@@ -1117,18 +1118,20 @@ class DerivedType extends Type, @derivedtype {
|
||||
* decltype(a) b;
|
||||
* ```
|
||||
*/
|
||||
class Decltype extends Type, @decltype {
|
||||
class Decltype extends Type {
|
||||
Decltype() { decltypes(underlyingElement(this), _, 0, _, _) }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "Decltype" }
|
||||
|
||||
/**
|
||||
* The expression whose type is being obtained by this decltype.
|
||||
* Gets the expression whose type is being obtained by this decltype.
|
||||
*/
|
||||
Expr getExpr() { decltypes(underlyingElement(this), unresolveElement(result), _, _) }
|
||||
Expr getExpr() { decltypes(underlyingElement(this), unresolveElement(result), _, _, _) }
|
||||
|
||||
/**
|
||||
* The type immediately yielded by this decltype.
|
||||
* Gets the type immediately yielded by this decltype.
|
||||
*/
|
||||
Type getBaseType() { decltypes(underlyingElement(this), _, unresolveElement(result), _) }
|
||||
Type getBaseType() { decltypes(underlyingElement(this), _, _, unresolveElement(result), _) }
|
||||
|
||||
/**
|
||||
* Whether an extra pair of parentheses around the expression would change the semantics of this decltype.
|
||||
@@ -1142,7 +1145,7 @@ class Decltype extends Type, @decltype {
|
||||
* ```
|
||||
* Please consult the C++11 standard for more details.
|
||||
*/
|
||||
predicate parenthesesWouldChangeMeaning() { decltypes(underlyingElement(this), _, _, true) }
|
||||
predicate parenthesesWouldChangeMeaning() { decltypes(underlyingElement(this), _, _, _, true) }
|
||||
|
||||
override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() }
|
||||
|
||||
@@ -1183,6 +1186,215 @@ class Decltype extends Type, @decltype {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An instance of the C23 `typeof` or `typeof_unqual` operator. For example:
|
||||
* ```
|
||||
* int a;
|
||||
* typeof(a) b;
|
||||
* typeof_unqual(const int) b;
|
||||
* ```
|
||||
*/
|
||||
class TypeofType extends Type {
|
||||
TypeofType() {
|
||||
decltypes(underlyingElement(this), _, 1, _, _) or
|
||||
type_operators(underlyingElement(this), _, 0, _)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the type immediately yielded by this typeof.
|
||||
*/
|
||||
Type getBaseType() {
|
||||
decltypes(underlyingElement(this), _, _, unresolveElement(result), _)
|
||||
or
|
||||
type_operators(underlyingElement(this), _, _, unresolveElement(result))
|
||||
}
|
||||
|
||||
override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() }
|
||||
|
||||
override Type stripTopLevelSpecifiers() { result = this.getBaseType().stripTopLevelSpecifiers() }
|
||||
|
||||
override Type stripType() { result = this.getBaseType().stripType() }
|
||||
|
||||
override Type resolveTypedefs() { result = this.getBaseType().resolveTypedefs() }
|
||||
|
||||
override string toString() { result = "typeof(...)" }
|
||||
|
||||
override string getName() { none() }
|
||||
|
||||
override int getSize() { result = this.getBaseType().getSize() }
|
||||
|
||||
override int getAlignment() { result = this.getBaseType().getAlignment() }
|
||||
|
||||
override int getPointerIndirectionLevel() {
|
||||
result = this.getBaseType().getPointerIndirectionLevel()
|
||||
}
|
||||
|
||||
override string explain() {
|
||||
result = "typeof resulting in {" + this.getBaseType().explain() + "}"
|
||||
}
|
||||
|
||||
override predicate involvesReference() { this.getBaseType().involvesReference() }
|
||||
|
||||
override predicate involvesTemplateParameter() { this.getBaseType().involvesTemplateParameter() }
|
||||
|
||||
override predicate isDeeplyConst() { this.getBaseType().isDeeplyConst() }
|
||||
|
||||
override predicate isDeeplyConstBelow() { this.getBaseType().isDeeplyConstBelow() }
|
||||
|
||||
override Specifier internal_getAnAdditionalSpecifier() {
|
||||
result = this.getBaseType().getASpecifier()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An instance of the C23 `typeof` or `typeof_unqual` operator taking an expression
|
||||
* as its argument. For example:
|
||||
* ```
|
||||
* int a;
|
||||
* typeof(a) b;
|
||||
* ```
|
||||
*/
|
||||
class TypeofExprType extends TypeofType {
|
||||
TypeofExprType() { decltypes(underlyingElement(this), _, 1, _, _) }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "TypeofExprType" }
|
||||
|
||||
/**
|
||||
* Gets the expression whose type is being obtained by this typeof.
|
||||
*/
|
||||
Expr getExpr() { decltypes(underlyingElement(this), unresolveElement(result), _, _, _) }
|
||||
|
||||
override Location getLocation() { result = this.getExpr().getLocation() }
|
||||
}
|
||||
|
||||
/**
|
||||
* A type obtained by C23 `typeof` or `typeof_unqual` operator taking a type as its
|
||||
* argument. For example:
|
||||
* ```
|
||||
* typeof_unqual(const int) b;
|
||||
* ```
|
||||
*/
|
||||
class TypeofTypeType extends TypeofType {
|
||||
TypeofTypeType() { type_operators(underlyingElement(this), _, 0, _) }
|
||||
|
||||
/**
|
||||
* Gets the expression whose type is being obtained by this typeof.
|
||||
*/
|
||||
Type getType() { type_operators(underlyingElement(this), unresolveElement(result), _, _) }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "TypeofTypeType" }
|
||||
|
||||
override string toString() { result = "typeof(...)" }
|
||||
}
|
||||
|
||||
/**
|
||||
* A type obtained by applying a type transforming intrinsic. For example:
|
||||
* ```
|
||||
* __make_unsigned(int) x;
|
||||
* ```
|
||||
*/
|
||||
class IntrinsicTransformedType extends Type {
|
||||
int intrinsic;
|
||||
|
||||
IntrinsicTransformedType() {
|
||||
type_operators(underlyingElement(this), _, intrinsic, _) and
|
||||
intrinsic in [1 .. 19]
|
||||
}
|
||||
|
||||
override string getAPrimaryQlClass() { result = "IntrinsicTransformedType" }
|
||||
|
||||
override string toString() { result = this.getIntrinsicName() + "(...)" }
|
||||
|
||||
/**
|
||||
* Gets the type immediately yielded by this transformation.
|
||||
*/
|
||||
Type getBaseType() { type_operators(underlyingElement(this), _, _, unresolveElement(result)) }
|
||||
|
||||
/**
|
||||
* Gets the type that is transformed.
|
||||
*/
|
||||
Type getType() { type_operators(underlyingElement(this), unresolveElement(result), _, _) }
|
||||
|
||||
/**
|
||||
* Gets the name of the intrinsic used to transform the type.
|
||||
*/
|
||||
string getIntrinsicName() {
|
||||
intrinsic = 1 and result = "__underlying_type"
|
||||
or
|
||||
intrinsic = 2 and result = "__bases"
|
||||
or
|
||||
intrinsic = 3 and result = "__direct_bases"
|
||||
or
|
||||
intrinsic = 4 and result = "__add_lvalue_reference"
|
||||
or
|
||||
intrinsic = 5 and result = "__add_pointer"
|
||||
or
|
||||
intrinsic = 6 and result = "__add_rvalue_reference"
|
||||
or
|
||||
intrinsic = 7 and result = "__decay"
|
||||
or
|
||||
intrinsic = 8 and result = "__make_signed"
|
||||
or
|
||||
intrinsic = 9 and result = "__make_unsigned"
|
||||
or
|
||||
intrinsic = 10 and result = "__remove_all_extents"
|
||||
or
|
||||
intrinsic = 11 and result = "__remove_const"
|
||||
or
|
||||
intrinsic = 12 and result = "__remove_cv"
|
||||
or
|
||||
intrinsic = 13 and result = "__remove_cvref"
|
||||
or
|
||||
intrinsic = 14 and result = "__remove_extent"
|
||||
or
|
||||
intrinsic = 15 and result = "__remove_pointer"
|
||||
or
|
||||
intrinsic = 16 and result = "__remove_reference_t"
|
||||
or
|
||||
intrinsic = 17 and result = "__remove_restrict"
|
||||
or
|
||||
intrinsic = 18 and result = "__remove_volatile"
|
||||
or
|
||||
intrinsic = 19 and result = "__remove_reference"
|
||||
}
|
||||
|
||||
override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() }
|
||||
|
||||
override Type stripTopLevelSpecifiers() { result = this.getBaseType().stripTopLevelSpecifiers() }
|
||||
|
||||
override Type stripType() { result = this.getBaseType().stripType() }
|
||||
|
||||
override Type resolveTypedefs() { result = this.getBaseType().resolveTypedefs() }
|
||||
|
||||
override string getName() { none() }
|
||||
|
||||
override int getSize() { result = this.getBaseType().getSize() }
|
||||
|
||||
override int getAlignment() { result = this.getBaseType().getAlignment() }
|
||||
|
||||
override int getPointerIndirectionLevel() {
|
||||
result = this.getBaseType().getPointerIndirectionLevel()
|
||||
}
|
||||
|
||||
override string explain() {
|
||||
result =
|
||||
"application of " + this.getIntrinsicName() + " resulting in {" + this.getBaseType().explain()
|
||||
+ "}"
|
||||
}
|
||||
|
||||
override predicate involvesReference() { this.getBaseType().involvesReference() }
|
||||
|
||||
override predicate involvesTemplateParameter() { this.getBaseType().involvesTemplateParameter() }
|
||||
|
||||
override predicate isDeeplyConst() { this.getBaseType().isDeeplyConst() }
|
||||
|
||||
override predicate isDeeplyConstBelow() { this.getBaseType().isDeeplyConstBelow() }
|
||||
|
||||
override Specifier internal_getAnAdditionalSpecifier() {
|
||||
result = this.getBaseType().getASpecifier()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A C/C++ pointer type. See 4.9.1.
|
||||
* ```
|
||||
|
||||
@@ -310,6 +310,8 @@ class Expr extends StmtParent, @expr {
|
||||
or
|
||||
exists(Decltype d | d.getExpr() = this.getParentWithConversions*())
|
||||
or
|
||||
exists(TypeofExprType t | t.getExpr() = this.getParentWithConversions*())
|
||||
or
|
||||
exists(ConstexprIfStmt constIf |
|
||||
constIf.getControllingExpr() = this.getParentWithConversions*()
|
||||
)
|
||||
|
||||
@@ -31,4 +31,6 @@ module CppDataFlow implements InputSig<Location> {
|
||||
predicate viableImplInCallContext = Private::viableImplInCallContext/2;
|
||||
|
||||
predicate neverSkipInPathGraph = Private::neverSkipInPathGraph/1;
|
||||
|
||||
int defaultFieldFlowBranchLimit() { result = 3 }
|
||||
}
|
||||
|
||||
@@ -1652,8 +1652,6 @@ predicate validParameterAliasStep(Node node1, Node node2) {
|
||||
)
|
||||
}
|
||||
|
||||
private predicate isTopLevel(Cpp::Stmt s) { any(Function f).getBlock().getAStmt() = s }
|
||||
|
||||
private Cpp::Stmt getAChainedBranch(Cpp::IfStmt s) {
|
||||
result = s.getThen()
|
||||
or
|
||||
@@ -1684,11 +1682,9 @@ private Instruction getAnInstruction(Node n) {
|
||||
}
|
||||
|
||||
private newtype TDataFlowSecondLevelScope =
|
||||
TTopLevelIfBranch(Cpp::Stmt s) {
|
||||
exists(Cpp::IfStmt ifstmt | s = getAChainedBranch(ifstmt) and isTopLevel(ifstmt))
|
||||
} or
|
||||
TTopLevelIfBranch(Cpp::Stmt s) { s = getAChainedBranch(_) } or
|
||||
TTopLevelSwitchCase(Cpp::SwitchCase s) {
|
||||
exists(Cpp::SwitchStmt switchstmt | s = switchstmt.getASwitchCase() and isTopLevel(switchstmt))
|
||||
exists(Cpp::SwitchStmt switchstmt | s = switchstmt.getASwitchCase())
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,6 +16,10 @@ private predicate isDeeplyConst(Type t) {
|
||||
or
|
||||
isDeeplyConst(t.(Decltype).getBaseType())
|
||||
or
|
||||
isDeeplyConst(t.(TypeofType).getBaseType())
|
||||
or
|
||||
isDeeplyConst(t.(IntrinsicTransformedType).getBaseType())
|
||||
or
|
||||
isDeeplyConst(t.(ReferenceType).getBaseType())
|
||||
or
|
||||
exists(SpecifiedType specType | specType = t |
|
||||
@@ -36,6 +40,10 @@ private predicate isDeeplyConstBelow(Type t) {
|
||||
or
|
||||
isDeeplyConstBelow(t.(Decltype).getBaseType())
|
||||
or
|
||||
isDeeplyConstBelow(t.(TypeofType).getBaseType())
|
||||
or
|
||||
isDeeplyConstBelow(t.(IntrinsicTransformedType).getBaseType())
|
||||
or
|
||||
isDeeplyConst(t.(PointerType).getBaseType())
|
||||
or
|
||||
isDeeplyConst(t.(ReferenceType).getBaseType())
|
||||
|
||||
@@ -743,15 +743,17 @@ typedefbase(
|
||||
);
|
||||
|
||||
/**
|
||||
* An instance of the C++11 `decltype` operator. For example:
|
||||
* An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual`
|
||||
* operator taking an expression as its argument. For example:
|
||||
* ```
|
||||
* int a;
|
||||
* decltype(1+a) b;
|
||||
* typeof(1+a) c;
|
||||
* ```
|
||||
* Here `expr` is `1+a`.
|
||||
*
|
||||
* Sometimes an additional pair of parentheses around the expression
|
||||
* would change the semantics of this decltype, e.g.
|
||||
* changes the semantics of the decltype, e.g.
|
||||
* ```
|
||||
* struct A { double x; };
|
||||
* const A* a = new A();
|
||||
@@ -761,14 +763,55 @@ typedefbase(
|
||||
* (Please consult the C++11 standard for more details).
|
||||
* `parentheses_would_change_meaning` is `true` iff that is the case.
|
||||
*/
|
||||
|
||||
/*
|
||||
case @decltype.kind of
|
||||
| 0 = @decltype
|
||||
| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual
|
||||
;
|
||||
*/
|
||||
|
||||
#keyset[id, expr]
|
||||
decltypes(
|
||||
int id: @decltype,
|
||||
int expr: @expr ref,
|
||||
int kind: int ref,
|
||||
int base_type: @type ref,
|
||||
boolean parentheses_would_change_meaning: boolean ref
|
||||
);
|
||||
|
||||
/*
|
||||
case @type_operator.kind of
|
||||
| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual
|
||||
| 1 = @underlying_type
|
||||
| 2 = @bases
|
||||
| 3 = @direct_bases
|
||||
| 4 = @add_lvalue_reference
|
||||
| 5 = @add_pointer
|
||||
| 6 = @add_rvalue_reference
|
||||
| 7 = @decay
|
||||
| 8 = @make_signed
|
||||
| 9 = @make_unsigned
|
||||
| 10 = @remove_all_extents
|
||||
| 11 = @remove_const
|
||||
| 12 = @remove_cv
|
||||
| 13 = @remove_cvref
|
||||
| 14 = @remove_extent
|
||||
| 15 = @remove_pointer
|
||||
| 16 = @remove_reference_t
|
||||
| 17 = @remove_restrict
|
||||
| 18 = @remove_volatile
|
||||
| 19 = @remove_reference
|
||||
;
|
||||
*/
|
||||
|
||||
type_operators(
|
||||
unique int id: @type_operator,
|
||||
int arg_type: @type ref,
|
||||
int kind: int ref,
|
||||
int base_type: @type ref
|
||||
)
|
||||
|
||||
/*
|
||||
case @usertype.kind of
|
||||
| 0 = @unknown_usertype
|
||||
@@ -1103,10 +1146,10 @@ stmtattributes(
|
||||
@type = @builtintype
|
||||
| @derivedtype
|
||||
| @usertype
|
||||
/* TODO | @fixedpointtype */
|
||||
| @routinetype
|
||||
| @ptrtomember
|
||||
| @decltype;
|
||||
| @decltype
|
||||
| @type_operator;
|
||||
|
||||
unspecifiedtype(
|
||||
unique int type_id: @type ref,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
class Type extends @type {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Expr extends @expr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
from Type decltype, Expr expr, Type basetype, boolean parentheses
|
||||
where decltypes(decltype, expr, basetype, parentheses)
|
||||
select decltype, expr, 0, basetype, parentheses
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
description: Support C23 typeof and typeof_unqual
|
||||
compatibility: partial
|
||||
decltypes.rel: run decltypes.qlo
|
||||
@@ -1,3 +1,7 @@
|
||||
## 1.3.9
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 1.3.8
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
@@ -179,6 +179,7 @@ predicate overflows(MulExpr me, Type t) {
|
||||
|
||||
from MulExpr me, Type t1, Type t2
|
||||
where
|
||||
not any(Compilation c).buildModeNone() and
|
||||
t1 = me.getType().getUnderlyingType() and
|
||||
t2 = me.getConversion().getType().getUnderlyingType() and
|
||||
t1.getSize() < t2.getSize() and
|
||||
|
||||
@@ -154,6 +154,7 @@ int sizeof_IntType() { exists(IntType it | result = it.getSize()) }
|
||||
|
||||
from FormattingFunctionCall ffc, int n, Expr arg, Type expected, Type actual
|
||||
where
|
||||
not any(Compilation c).buildModeNone() and
|
||||
(
|
||||
formattingFunctionCallExpectedType(ffc, n, expected) and
|
||||
formattingFunctionCallActualType(ffc, n, arg, actual) and
|
||||
|
||||
@@ -47,11 +47,17 @@ Type stripType(Type t) {
|
||||
or
|
||||
result = stripType(t.(Decltype).getBaseType())
|
||||
or
|
||||
result = stripType(t.(TypeofType).getBaseType())
|
||||
or
|
||||
result = stripType(t.(IntrinsicTransformedType).getBaseType())
|
||||
or
|
||||
not t instanceof TypedefType and
|
||||
not t instanceof ArrayType and
|
||||
not t instanceof ReferenceType and
|
||||
not t instanceof SpecifiedType and
|
||||
not t instanceof Decltype and
|
||||
not t instanceof TypeofType and
|
||||
not t instanceof IntrinsicTransformedType and
|
||||
result = t
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ predicate isCompiledAsC(File f) {
|
||||
|
||||
from FunctionDeclarationEntry fdeIm, FunctionCall fc
|
||||
where
|
||||
not any(Compilation c).buildModeNone() and
|
||||
isCompiledAsC(fdeIm.getFile()) and
|
||||
not isFromMacroDefinition(fc) and
|
||||
fdeIm.isImplicit() and
|
||||
|
||||
@@ -51,6 +51,7 @@ int getComparisonSizeAdjustment(Expr e) {
|
||||
|
||||
from Loop l, RelationalOperation rel, VariableAccess small, Expr large
|
||||
where
|
||||
not any(Compilation c).buildModeNone() and
|
||||
small = rel.getLesserOperand() and
|
||||
large = rel.getGreaterOperand() and
|
||||
rel = l.getCondition().getAChild*() and
|
||||
|
||||
@@ -24,10 +24,12 @@ private predicate isCharSzPtrExpr(Expr e) {
|
||||
|
||||
from Expr sizeofExpr, Expr e
|
||||
where
|
||||
not any(Compilation c).buildModeNone() and
|
||||
// If we see an addWithSizeof then we expect the type of
|
||||
// the pointer expression to be `char*` or `void*`. Otherwise it
|
||||
// is probably a mistake.
|
||||
addWithSizeof(e, sizeofExpr, _) and not isCharSzPtrExpr(e)
|
||||
addWithSizeof(e, sizeofExpr, _) and
|
||||
not isCharSzPtrExpr(e)
|
||||
select sizeofExpr,
|
||||
"Suspicious sizeof offset in a pointer arithmetic expression. The type of the pointer is $@.",
|
||||
e.getFullyConverted().getType() as t, t.toString()
|
||||
|
||||
3
cpp/ql/src/change-notes/released/1.3.9.md
Normal file
3
cpp/ql/src/change-notes/released/1.3.9.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 1.3.9
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.3.8
|
||||
lastReleaseVersion: 1.3.9
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/cpp-queries
|
||||
version: 1.3.9-dev
|
||||
version: 1.3.10-dev
|
||||
groups:
|
||||
- cpp
|
||||
- queries
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* @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
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import internal.CaptureModels
|
||||
|
||||
from DataFlowSummaryTargetApi api, string flow
|
||||
where flow = ContentSensitive::captureFlow(api, _)
|
||||
select flow order by flow
|
||||
@@ -1,13 +1,13 @@
|
||||
/**
|
||||
* @name Capture mixed neutral models.
|
||||
* @name Capture neutral models.
|
||||
* @description Finds neutral models to be used by other queries.
|
||||
* @kind diagnostic
|
||||
* @id cs/utils/modelgenerator/mixed-neutral-models
|
||||
* @id cpp/utils/modelgenerator/neutral-models
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import internal.CaptureModels
|
||||
|
||||
from DataFlowSummaryTargetApi api, string noflow
|
||||
where noflow = captureMixedNeutral(api)
|
||||
where noflow = captureNeutral(api)
|
||||
select noflow order by noflow
|
||||
14
cpp/ql/src/utils/modelgenerator/CaptureSinkModels.ql
Normal file
14
cpp/ql/src/utils/modelgenerator/CaptureSinkModels.ql
Normal file
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* @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
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import internal.CaptureModels
|
||||
import Heuristic
|
||||
|
||||
from DataFlowSinkTargetApi api, string sink
|
||||
where sink = captureSink(api)
|
||||
select sink order by sink
|
||||
14
cpp/ql/src/utils/modelgenerator/CaptureSourceModels.ql
Normal file
14
cpp/ql/src/utils/modelgenerator/CaptureSourceModels.ql
Normal file
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* @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
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import internal.CaptureModels
|
||||
import Heuristic
|
||||
|
||||
from DataFlowSourceTargetApi api, string source
|
||||
where source = captureSource(api)
|
||||
select source order by source
|
||||
@@ -1,13 +1,13 @@
|
||||
/**
|
||||
* @name Capture mixed summary models.
|
||||
* @name Capture summary models.
|
||||
* @description Finds applicable summary models to be used by other queries.
|
||||
* @kind diagnostic
|
||||
* @id cs/utils/modelgenerator/mixed-summary-models
|
||||
* @id cpp/utils/modelgenerator/summary-models
|
||||
* @tags modelgenerator
|
||||
*/
|
||||
|
||||
import internal.CaptureModels
|
||||
|
||||
from DataFlowSummaryTargetApi api, string flow
|
||||
where flow = captureMixedFlow(api, _)
|
||||
where flow = captureFlow(api, _)
|
||||
select flow order by flow
|
||||
15
cpp/ql/src/utils/modelgenerator/GenerateFlowModel.py
Normal file
15
cpp/ql/src/utils/modelgenerator/GenerateFlowModel.py
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import sys
|
||||
import os.path
|
||||
import subprocess
|
||||
|
||||
# Add Model as Data script directory to sys.path.
|
||||
gitroot = subprocess.check_output(["git", "rev-parse", "--show-toplevel"]).decode("utf-8").strip()
|
||||
madpath = os.path.join(gitroot, "misc/scripts/models-as-data/")
|
||||
sys.path.append(madpath)
|
||||
|
||||
import generate_flow_model as model
|
||||
|
||||
language = "cpp"
|
||||
model.Generator.make(language).run()
|
||||
412
cpp/ql/src/utils/modelgenerator/internal/CaptureModels.qll
Normal file
412
cpp/ql/src/utils/modelgenerator/internal/CaptureModels.qll
Normal file
@@ -0,0 +1,412 @@
|
||||
/**
|
||||
* Provides predicates related to capturing summary models of the Standard or a 3rd party library.
|
||||
*/
|
||||
|
||||
private import cpp
|
||||
private import semmle.code.cpp.ir.IR
|
||||
private import semmle.code.cpp.dataflow.ExternalFlow as ExternalFlow
|
||||
private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplCommon as DataFlowImplCommon
|
||||
private import semmle.code.cpp.ir.dataflow.internal.DataFlowImplSpecific
|
||||
private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate as DataFlowPrivate
|
||||
private import semmle.code.cpp.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
|
||||
private import semmle.code.cpp.ir.dataflow.internal.TaintTrackingImplSpecific
|
||||
private import semmle.code.cpp.dataflow.new.TaintTracking
|
||||
private import codeql.mad.modelgenerator.internal.ModelGeneratorImpl
|
||||
|
||||
module ModelGeneratorInput implements ModelGeneratorInputSig<Location, CppDataFlow> {
|
||||
class Type = DataFlowPrivate::DataFlowType;
|
||||
|
||||
// Note: This also includes `this`
|
||||
class Parameter = DataFlow::ParameterNode;
|
||||
|
||||
class Callable = Declaration;
|
||||
|
||||
class NodeExtended extends DataFlow::Node {
|
||||
Callable getAsExprEnclosingCallable() { result = this.asExpr().getEnclosingDeclaration() }
|
||||
}
|
||||
|
||||
Parameter asParameter(NodeExtended n) { result = n }
|
||||
|
||||
Callable getEnclosingCallable(NodeExtended n) {
|
||||
result = n.getEnclosingCallable().asSourceCallable()
|
||||
}
|
||||
|
||||
Callable getAsExprEnclosingCallable(NodeExtended n) {
|
||||
result = n.asExpr().getEnclosingDeclaration()
|
||||
}
|
||||
|
||||
/** Gets `api` if it is relevant. */
|
||||
private Callable liftedImpl(Callable api) { result = api and relevant(api) }
|
||||
|
||||
private predicate hasManualSummaryModel(Callable api) {
|
||||
api = any(FlowSummaryImpl::Public::SummarizedCallable sc | sc.applyManualModel()) or
|
||||
api = any(FlowSummaryImpl::Public::NeutralSummaryCallable sc | sc.hasManualModel())
|
||||
}
|
||||
|
||||
private predicate hasManualSourceModel(Callable api) {
|
||||
api = any(FlowSummaryImpl::Public::NeutralSourceCallable sc | sc.hasManualModel())
|
||||
}
|
||||
|
||||
private predicate hasManualSinkModel(Callable api) {
|
||||
api = any(FlowSummaryImpl::Public::NeutralSinkCallable sc | sc.hasManualModel())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `f` is a "private" function.
|
||||
*
|
||||
* A "private" function does not contribute any models as it is assumed
|
||||
* to be an implementation detail of some other "public" function for which
|
||||
* we will generate a summary.
|
||||
*/
|
||||
private predicate isPrivateOrProtected(Function f) {
|
||||
f.getNamespace().getParentNamespace*().isAnonymous()
|
||||
or
|
||||
exists(MemberFunction mf | mf = f |
|
||||
mf.isPrivate()
|
||||
or
|
||||
mf.isProtected()
|
||||
)
|
||||
or
|
||||
f.isStatic()
|
||||
}
|
||||
|
||||
private predicate isUninterestingForModels(Callable api) {
|
||||
// Note: This also makes all global/static-local variables
|
||||
// not relevant (which is good!)
|
||||
not api.(Function).hasDefinition()
|
||||
or
|
||||
isPrivateOrProtected(api)
|
||||
or
|
||||
api instanceof Destructor
|
||||
or
|
||||
api = any(LambdaExpression lambda).getLambdaFunction()
|
||||
or
|
||||
api.isFromUninstantiatedTemplate(_)
|
||||
}
|
||||
|
||||
private predicate relevant(Callable api) {
|
||||
api.fromSource() and
|
||||
not isUninterestingForModels(api)
|
||||
}
|
||||
|
||||
class SummaryTargetApi extends Callable {
|
||||
private Callable lift;
|
||||
|
||||
SummaryTargetApi() {
|
||||
lift = liftedImpl(this) and
|
||||
not hasManualSummaryModel(lift)
|
||||
}
|
||||
|
||||
Callable lift() { result = lift }
|
||||
|
||||
predicate isRelevant() {
|
||||
relevant(this) and
|
||||
not hasManualSummaryModel(this)
|
||||
}
|
||||
}
|
||||
|
||||
class SourceOrSinkTargetApi extends Callable {
|
||||
SourceOrSinkTargetApi() { relevant(this) }
|
||||
}
|
||||
|
||||
class SinkTargetApi extends SourceOrSinkTargetApi {
|
||||
SinkTargetApi() { not hasManualSinkModel(this) }
|
||||
}
|
||||
|
||||
class SourceTargetApi extends SourceOrSinkTargetApi {
|
||||
SourceTargetApi() { not hasManualSourceModel(this) }
|
||||
}
|
||||
|
||||
class InstanceParameterNode extends DataFlow::ParameterNode {
|
||||
InstanceParameterNode() {
|
||||
DataFlowPrivate::nodeHasInstruction(this,
|
||||
any(InitializeParameterInstruction i | i.hasIndex(-1)), 1)
|
||||
}
|
||||
}
|
||||
|
||||
private predicate isFinalMemberFunction(MemberFunction mf) {
|
||||
mf.isFinal()
|
||||
or
|
||||
mf.getDeclaringType().isFinal()
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the summary generated for `c` should also apply to overrides
|
||||
* of `c`.
|
||||
*/
|
||||
private string isExtensible(Callable c) {
|
||||
if isFinalMemberFunction(c) then result = "false" else result = "true"
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the string representing the list of template parameters declared
|
||||
* by `template`.
|
||||
*
|
||||
* `template` must either be:
|
||||
* - An uninstantiated template, or
|
||||
* - A declaration that is not from a template instantiation.
|
||||
*/
|
||||
private string templateParams(Declaration template) {
|
||||
exists(string params |
|
||||
params =
|
||||
concat(int i |
|
||||
|
|
||||
template.getTemplateArgument(i).(TypeTemplateParameter).getName(), "," order by i
|
||||
)
|
||||
|
|
||||
if params = "" then result = "" else result = "<" + params + ">"
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the string representing the list of parameters declared
|
||||
* by `functionTemplate`.
|
||||
*
|
||||
* `functionTemplate` must either be:
|
||||
* - An uninstantiated template, or
|
||||
* - A declaration that is not from a template instantiation.
|
||||
*/
|
||||
private string params(Function functionTemplate) {
|
||||
exists(string params |
|
||||
params =
|
||||
concat(int i |
|
||||
|
|
||||
ExternalFlow::getParameterTypeWithoutTemplateArguments(functionTemplate, i, true), ","
|
||||
order by
|
||||
i
|
||||
) and
|
||||
result = "(" + params + ")"
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the callable `c` is:
|
||||
* - In the namespace represented by `namespace`, and
|
||||
* - Has a declaring type represented by `type`, and
|
||||
* - Has the name `name`, and
|
||||
* - Has a list of parameters represented by `params`
|
||||
*
|
||||
* This is the predicate that computes the columns that it put into the MaD
|
||||
* row for `callable`.
|
||||
*/
|
||||
private predicate qualifiedName(
|
||||
Callable callable, string namespace, string type, string name, string params
|
||||
) {
|
||||
exists(
|
||||
Function functionTemplate, string typeWithoutTemplateArgs, string nameWithoutTemplateArgs
|
||||
|
|
||||
functionTemplate = ExternalFlow::getFullyTemplatedFunction(callable) and
|
||||
functionTemplate.hasQualifiedName(namespace, typeWithoutTemplateArgs, nameWithoutTemplateArgs) and
|
||||
nameWithoutTemplateArgs = functionTemplate.getName() and
|
||||
name = nameWithoutTemplateArgs + templateParams(functionTemplate) and
|
||||
params = params(functionTemplate)
|
||||
|
|
||||
exists(Class classTemplate |
|
||||
classTemplate = functionTemplate.getDeclaringType() and
|
||||
type = typeWithoutTemplateArgs + templateParams(classTemplate)
|
||||
)
|
||||
or
|
||||
not exists(functionTemplate.getDeclaringType()) and
|
||||
type = ""
|
||||
)
|
||||
}
|
||||
|
||||
predicate isRelevantType(Type t) { any() }
|
||||
|
||||
Type getUnderlyingContentType(DataFlow::ContentSet c) {
|
||||
result = c.(DataFlow::FieldContent).getField().getUnspecifiedType() or
|
||||
result = c.(DataFlow::UnionContent).getUnion().getUnspecifiedType()
|
||||
}
|
||||
|
||||
string qualifierString() { result = "Argument[-1]" }
|
||||
|
||||
private predicate parameterContentAccessImpl(Parameter p, string argument) {
|
||||
exists(int indirectionIndex, int argumentIndex, DataFlowPrivate::Position pos |
|
||||
p.isSourceParameterOf(_, pos) and
|
||||
pos.getArgumentIndex() = argumentIndex and
|
||||
argumentIndex != -1 and // handled elsewhere
|
||||
pos.getIndirectionIndex() = indirectionIndex
|
||||
|
|
||||
indirectionIndex = 0 and
|
||||
argument = "Argument[" + argumentIndex + "]"
|
||||
or
|
||||
indirectionIndex > 0 and
|
||||
argument = "Argument[" + DataFlow::repeatStars(indirectionIndex) + argumentIndex + "]"
|
||||
)
|
||||
}
|
||||
|
||||
string parameterAccess(Parameter p) { parameterContentAccessImpl(p, result) }
|
||||
|
||||
string parameterContentAccess(Parameter p) { parameterContentAccessImpl(p, result) }
|
||||
|
||||
bindingset[c]
|
||||
string paramReturnNodeAsOutput(Callable c, DataFlowPrivate::Position pos) {
|
||||
exists(Parameter p |
|
||||
p.isSourceParameterOf(c, pos) and
|
||||
result = parameterAccess(p)
|
||||
)
|
||||
or
|
||||
pos.getArgumentIndex() = -1 and
|
||||
result = qualifierString() and
|
||||
pos.getIndirectionIndex() = 1
|
||||
}
|
||||
|
||||
bindingset[c]
|
||||
string paramReturnNodeAsContentOutput(Callable c, DataFlowPrivate::ParameterPosition pos) {
|
||||
result = paramReturnNodeAsOutput(c, pos)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
Callable returnNodeEnclosingCallable(DataFlow::Node ret) {
|
||||
result = DataFlowImplCommon::getNodeEnclosingCallable(ret).asSourceCallable()
|
||||
}
|
||||
|
||||
/** Holds if this instance access is to an enclosing instance of type `t`. */
|
||||
pragma[nomagic]
|
||||
private predicate isEnclosingInstanceAccess(DataFlowPrivate::ReturnNode n, Class t) {
|
||||
n.getKind().isIndirectReturn(-1) and
|
||||
t = n.getType().stripType() and
|
||||
t != n.getEnclosingCallable().asSourceCallable().(Function).getDeclaringType()
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
predicate isOwnInstanceAccessNode(DataFlowPrivate::ReturnNode node) {
|
||||
node.getKind().isIndirectReturn(-1) and
|
||||
not isEnclosingInstanceAccess(node, _)
|
||||
}
|
||||
|
||||
predicate sinkModelSanitizer(DataFlow::Node node) { none() }
|
||||
|
||||
predicate apiSource(DataFlow::Node source) {
|
||||
DataFlowPrivate::nodeHasOperand(source, any(DataFlow::FieldAddress fa), 1)
|
||||
or
|
||||
source instanceof DataFlow::ParameterNode
|
||||
}
|
||||
|
||||
string getInputArgument(DataFlow::Node source) {
|
||||
exists(DataFlowPrivate::Position pos, int argumentIndex, int indirectionIndex |
|
||||
source.(DataFlow::ParameterNode).isParameterOf(_, pos) and
|
||||
argumentIndex = pos.getArgumentIndex() and
|
||||
indirectionIndex = pos.getIndirectionIndex() and
|
||||
result = "Argument[" + DataFlow::repeatStars(indirectionIndex) + argumentIndex + "]"
|
||||
)
|
||||
or
|
||||
DataFlowPrivate::nodeHasOperand(source, any(DataFlow::FieldAddress fa), 1) and
|
||||
result = qualifierString()
|
||||
}
|
||||
|
||||
DataFlowPrivate::ParameterPosition getReturnKindParamPosition(DataFlowPrivate::ReturnKind k) {
|
||||
exists(int argumentIndex, int indirectionIndex |
|
||||
k.isIndirectReturn(argumentIndex) and
|
||||
k.getIndirectionIndex() = indirectionIndex and
|
||||
result = DataFlowPrivate::TIndirectionPosition(argumentIndex, indirectionIndex)
|
||||
)
|
||||
}
|
||||
|
||||
string getReturnValueString(DataFlowPrivate::ReturnKind k) {
|
||||
k.isNormalReturn() and
|
||||
exists(int indirectionIndex | indirectionIndex = k.getIndirectionIndex() |
|
||||
indirectionIndex = 0 and
|
||||
result = "ReturnValue"
|
||||
or
|
||||
indirectionIndex > 0 and
|
||||
result = "ReturnValue[" + DataFlow::repeatStars(indirectionIndex) + "]"
|
||||
)
|
||||
}
|
||||
|
||||
predicate irrelevantSourceSinkApi(Callable source, SourceTargetApi api) { none() }
|
||||
|
||||
bindingset[kind]
|
||||
predicate isRelevantSourceKind(string kind) { any() }
|
||||
|
||||
bindingset[kind]
|
||||
predicate isRelevantSinkKind(string kind) { any() }
|
||||
|
||||
predicate containerContent(DataFlow::ContentSet cs) { cs instanceof DataFlow::ElementContent }
|
||||
|
||||
predicate isAdditionalContentFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
|
||||
TaintTracking::defaultAdditionalTaintStep(node1, node2, _) and
|
||||
not exists(DataFlow::Content f |
|
||||
DataFlowPrivate::readStep(node1, f, node2) and containerContent(f)
|
||||
)
|
||||
}
|
||||
|
||||
predicate isField(DataFlow::ContentSet cs) {
|
||||
exists(DataFlow::Content c | cs.isSingleton(c) |
|
||||
c instanceof DataFlow::FieldContent or
|
||||
c instanceof DataFlow::UnionContent
|
||||
)
|
||||
}
|
||||
|
||||
predicate isCallback(DataFlow::ContentSet c) { none() }
|
||||
|
||||
string getSyntheticName(DataFlow::ContentSet c) {
|
||||
exists(Field f |
|
||||
not f.isPublic() and
|
||||
f = c.(DataFlow::FieldContent).getField() and
|
||||
result = f.getName()
|
||||
)
|
||||
}
|
||||
|
||||
string printContent(DataFlow::ContentSet c) {
|
||||
exists(int indirectionIndex, string name, string kind |
|
||||
exists(DataFlow::UnionContent uc |
|
||||
c.isSingleton(uc) and
|
||||
name = uc.getUnion().getName() and
|
||||
indirectionIndex = uc.getIndirectionIndex() and
|
||||
// Note: We don't actually support the union string in MaD, but we should do that eventually
|
||||
kind = "Union["
|
||||
)
|
||||
or
|
||||
exists(DataFlow::FieldContent fc |
|
||||
c.isSingleton(fc) and
|
||||
name = fc.getField().getName() and
|
||||
indirectionIndex = fc.getIndirectionIndex() and
|
||||
kind = "Field["
|
||||
)
|
||||
|
|
||||
result = kind + DataFlow::repeatStars(indirectionIndex) + name + "]"
|
||||
)
|
||||
or
|
||||
exists(DataFlow::ElementContent ec |
|
||||
c.isSingleton(ec) and
|
||||
result = "Element[" + ec.getIndirectionIndex() + "]"
|
||||
)
|
||||
}
|
||||
|
||||
predicate isUninterestingForDataFlowModels(Callable api) { none() }
|
||||
|
||||
predicate isUninterestingForHeuristicDataFlowModels(Callable api) {
|
||||
isUninterestingForDataFlowModels(api)
|
||||
}
|
||||
|
||||
string partialModelRow(Callable api, int i) {
|
||||
i = 0 and qualifiedName(api, result, _, _, _) // namespace
|
||||
or
|
||||
i = 1 and qualifiedName(api, _, result, _, _) // type
|
||||
or
|
||||
i = 2 and result = isExtensible(api) // extensible
|
||||
or
|
||||
i = 3 and qualifiedName(api, _, _, result, _) // name
|
||||
or
|
||||
i = 4 and qualifiedName(api, _, _, _, result) // parameters
|
||||
or
|
||||
i = 5 and result = "" and exists(api) // ext
|
||||
}
|
||||
|
||||
string partialNeutralModelRow(Callable api, int i) {
|
||||
i = 0 and qualifiedName(api, result, _, _, _) // namespace
|
||||
or
|
||||
i = 1 and qualifiedName(api, _, result, _, _) // type
|
||||
or
|
||||
i = 2 and qualifiedName(api, _, _, result, _) // name
|
||||
or
|
||||
i = 3 and qualifiedName(api, _, _, _, result) // parameters
|
||||
}
|
||||
|
||||
predicate sourceNode = ExternalFlow::sourceNode/2;
|
||||
|
||||
predicate sinkNode = ExternalFlow::sinkNode/2;
|
||||
}
|
||||
|
||||
import MakeModelGenerator<Location, CppDataFlow, CppTaintTracking, ModelGeneratorInput>
|
||||
@@ -0,0 +1,13 @@
|
||||
private import cpp as Cpp
|
||||
private import codeql.mad.modelgenerator.internal.ModelPrinting
|
||||
private import CaptureModels::ModelGeneratorInput as ModelGeneratorInput
|
||||
|
||||
private module ModelPrintingLang implements ModelPrintingLangSig {
|
||||
class Callable = Cpp::Declaration;
|
||||
|
||||
predicate partialModelRow = ModelGeneratorInput::partialModelRow/2;
|
||||
|
||||
predicate partialNeutralModelRow = ModelGeneratorInput::partialNeutralModelRow/2;
|
||||
}
|
||||
|
||||
import ModelPrintingImpl<ModelPrintingLang>
|
||||
@@ -0,0 +1,6 @@
|
||||
extensions:
|
||||
- addsTo:
|
||||
pack: codeql/cpp-all
|
||||
extensible: summaryModel
|
||||
data:
|
||||
- [ "models", "ManuallyModelled", False, "hasSummary", "(void *)", "", "Argument[0]", "ReturnValue", "value", "manual"]
|
||||
@@ -0,0 +1,11 @@
|
||||
import cpp
|
||||
import utils.modelgenerator.internal.CaptureModels
|
||||
import InlineModelsAsDataTest
|
||||
|
||||
module InlineMadTestConfig implements InlineMadTestConfigSig {
|
||||
string getCapturedModel(MadRelevantFunction c) { result = ContentSensitive::captureFlow(c, _) }
|
||||
|
||||
string getKind() { result = "contentbased-summary" }
|
||||
}
|
||||
|
||||
import InlineMadTest<InlineMadTestConfig>
|
||||
@@ -0,0 +1,6 @@
|
||||
extensions:
|
||||
- addsTo:
|
||||
pack: codeql/cpp-all
|
||||
extensible: summaryModel
|
||||
data:
|
||||
- [ "Models", "ManuallyModelled", False, "hasSummary", "(void *)", "", "Argument[0]", "ReturnValue", "value", "manual"]
|
||||
@@ -0,0 +1,11 @@
|
||||
import cpp
|
||||
import utils.modelgenerator.internal.CaptureModels
|
||||
import InlineModelsAsDataTest
|
||||
|
||||
module InlineMadTestConfig implements InlineMadTestConfigSig {
|
||||
string getCapturedModel(MadRelevantFunction c) { result = Heuristic::captureFlow(c) }
|
||||
|
||||
string getKind() { result = "heuristic-summary" }
|
||||
}
|
||||
|
||||
import InlineMadTest<InlineMadTestConfig>
|
||||
@@ -0,0 +1,34 @@
|
||||
private import cpp
|
||||
private import codeql.mad.test.InlineMadTest
|
||||
|
||||
class MadRelevantFunction extends Function {
|
||||
MadRelevantFunction() { not this.isFromUninstantiatedTemplate(_) }
|
||||
}
|
||||
|
||||
private module InlineMadTestLang implements InlineMadTestLangSig {
|
||||
class Callable = MadRelevantFunction;
|
||||
|
||||
/**
|
||||
* Holds if `c` is the closest `Callable` that succeeds `comment` in the file.
|
||||
*/
|
||||
private predicate hasClosestCallable(CppStyleComment comment, Callable c) {
|
||||
c =
|
||||
min(Callable cand, int dist |
|
||||
// This has no good join order, but should hopefully be good enough for tests.
|
||||
cand.getFile() = comment.getFile() and
|
||||
dist = cand.getLocation().getStartLine() - comment.getLocation().getStartLine() and
|
||||
dist > 0
|
||||
|
|
||||
cand order by dist
|
||||
)
|
||||
}
|
||||
|
||||
string getComment(Callable c) {
|
||||
exists(CppStyleComment comment |
|
||||
hasClosestCallable(comment, c) and
|
||||
result = comment.getContents().suffix(2)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
import InlineMadTestImpl<InlineMadTestLang>
|
||||
@@ -0,0 +1,218 @@
|
||||
using size_t = decltype(sizeof(int));
|
||||
|
||||
size_t strlen(const char* str);
|
||||
char* strcpy(char* dest, const char* src);
|
||||
|
||||
namespace Models {
|
||||
struct BasicFlow {
|
||||
int* tainted;
|
||||
|
||||
//No model as destructors are excluded from model generation.
|
||||
~BasicFlow() = default;
|
||||
|
||||
//heuristic-summary=Models;BasicFlow;true;returnThis;(int *);;Argument[-1];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnThis;(int *);;Argument[-1];ReturnValue[*];value;dfc-generated
|
||||
BasicFlow* returnThis(int* input) {
|
||||
return this;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;BasicFlow;true;returnParam0;(int *,int *);;Argument[0];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnParam0;(int *,int *);;Argument[*0];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnParam0;(int *,int *);;Argument[0];ReturnValue;value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnParam0;(int *,int *);;Argument[*0];ReturnValue[*];value;dfc-generated
|
||||
int* returnParam0(int* input0, int* input1) {
|
||||
return input0;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;BasicFlow;true;returnParam1;(int *,int *);;Argument[1];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnParam1;(int *,int *);;Argument[*1];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnParam1;(int *,int *);;Argument[1];ReturnValue;value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnParam1;(int *,int *);;Argument[*1];ReturnValue[*];value;dfc-generated
|
||||
int* returnParam1(int* input0, int* input1) {
|
||||
return input1;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;BasicFlow;true;returnParamMultiple;(bool,int *,int *);;Argument[1];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnParamMultiple;(bool,int *,int *);;Argument[*1];ReturnValue[*];taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnParamMultiple;(bool,int *,int *);;Argument[2];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnParamMultiple;(bool,int *,int *);;Argument[*2];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnParamMultiple;(bool,int *,int *);;Argument[1];ReturnValue;value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnParamMultiple;(bool,int *,int *);;Argument[*1];ReturnValue[*];value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnParamMultiple;(bool,int *,int *);;Argument[2];ReturnValue;value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnParamMultiple;(bool,int *,int *);;Argument[*2];ReturnValue[*];value;dfc-generated
|
||||
int* returnParamMultiple(bool b, int* input0, int* input1) {
|
||||
return b ? input0 : input1;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[0];Argument[*1];taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[0];ReturnValue[*];taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[*0];ReturnValue[*];taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[1];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[*0];Argument[*1];taint;df-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[0];Argument[*1];taint;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[0];ReturnValue[*];taint;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[*0];ReturnValue[*];value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[1];ReturnValue;value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnSubstring;(const char *,char *);;Argument[*0];Argument[*1];value;dfc-generated
|
||||
char* returnSubstring(const char* source, char* dest) {
|
||||
return strcpy(dest, source + 1);
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;BasicFlow;true;setField;(int *);;Argument[0];Argument[-1];taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;setField;(int *);;Argument[*0];Argument[-1];taint;df-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;setField;(int *);;Argument[0];Argument[-1].Field[*tainted];value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;setField;(int *);;Argument[*0];Argument[-1].Field[**tainted];value;dfc-generated
|
||||
void setField(int* s) {
|
||||
tainted = s;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;BasicFlow;true;returnField;();;Argument[-1];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=Models;BasicFlow;true;returnField;();;Argument[-1];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnField;();;Argument[-1].Field[*tainted];ReturnValue;value;dfc-generated
|
||||
//contentbased-summary=Models;BasicFlow;true;returnField;();;Argument[-1].Field[**tainted];ReturnValue[*];value;dfc-generated
|
||||
int* returnField() {
|
||||
return tainted;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct TemplatedFlow {
|
||||
T tainted;
|
||||
|
||||
//heuristic-summary=Models;TemplatedFlow<T>;true;template_returnThis;(T);;Argument[-1];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;TemplatedFlow<T>;true;template_returnThis;(T);;Argument[-1];ReturnValue[*];value;dfc-generated
|
||||
TemplatedFlow<T>* template_returnThis(T input) {
|
||||
return this;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;TemplatedFlow<T>;true;template_returnParam0;(T *,T *);;Argument[0];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=Models;TemplatedFlow<T>;true;template_returnParam0;(T *,T *);;Argument[*0];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;TemplatedFlow<T>;true;template_returnParam0;(T *,T *);;Argument[0];ReturnValue;value;dfc-generated
|
||||
//contentbased-summary=Models;TemplatedFlow<T>;true;template_returnParam0;(T *,T *);;Argument[*0];ReturnValue[*];value;dfc-generated
|
||||
T* template_returnParam0(T* input0, T* input1) {
|
||||
return input0;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;TemplatedFlow<T>;true;template_setField;(T);;Argument[0];Argument[-1];taint;df-generated
|
||||
//contentbased-summary=Models;TemplatedFlow<T>;true;template_setField;(T);;Argument[0];Argument[-1].Field[*tainted];value;dfc-generated
|
||||
void template_setField(T s) {
|
||||
tainted = s;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;TemplatedFlow<T>;true;template_returnField;();;Argument[-1];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;TemplatedFlow<T>;true;template_returnField;();;Argument[-1].Field[*tainted];ReturnValue[*];value;dfc-generated
|
||||
T& template_returnField() {
|
||||
return tainted;
|
||||
}
|
||||
|
||||
//heuristic-summary=Models;TemplatedFlow<T>;true;templated_function<U>;(U *,T *);;Argument[0];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=Models;TemplatedFlow<T>;true;templated_function<U>;(U *,T *);;Argument[*0];ReturnValue[*];taint;df-generated
|
||||
//contentbased-summary=Models;TemplatedFlow<T>;true;templated_function<U>;(U *,T *);;Argument[0];ReturnValue;value;dfc-generated
|
||||
//contentbased-summary=Models;TemplatedFlow<T>;true;templated_function<U>;(U *,T *);;Argument[*0];ReturnValue[*];value;dfc-generated
|
||||
template<typename U>
|
||||
U* templated_function(U* u, T* t) {
|
||||
return u;
|
||||
}
|
||||
};
|
||||
|
||||
void test_templated_flow() {
|
||||
// Ensure that we have an instantiation of the templated class
|
||||
TemplatedFlow<int> intFlow;
|
||||
intFlow.template_returnThis(0);
|
||||
|
||||
intFlow.template_returnParam0(nullptr, nullptr);
|
||||
|
||||
intFlow.template_setField(0);
|
||||
intFlow.template_returnField();
|
||||
|
||||
intFlow.templated_function<int>(nullptr, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
//heuristic-summary=;;true;toplevel_function;(int *);;Argument[0];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=;;true;toplevel_function;(int *);;Argument[*0];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=;;true;toplevel_function;(int *);;Argument[0];Argument[*0];taint;df-generated
|
||||
//contentbased-summary=;;true;toplevel_function;(int *);;Argument[0];Argument[*0];taint;dfc-generated
|
||||
//contentbased-summary=;;true;toplevel_function;(int *);;Argument[0];ReturnValue;taint;dfc-generated
|
||||
//contentbased-summary=;;true;toplevel_function;(int *);;Argument[*0];ReturnValue;value;dfc-generated
|
||||
int toplevel_function(int* p) {
|
||||
return *p;
|
||||
}
|
||||
|
||||
//No model as static functions are excluded from model generation.
|
||||
static int static_toplevel_function(int* p) {
|
||||
return *p;
|
||||
}
|
||||
|
||||
struct NonFinalStruct {
|
||||
//heuristic-summary=;NonFinalStruct;true;public_not_final_member_function;(int);;Argument[0];ReturnValue;taint;df-generated
|
||||
//contentbased-summary=;NonFinalStruct;true;public_not_final_member_function;(int);;Argument[0];ReturnValue;value;dfc-generated
|
||||
virtual int public_not_final_member_function(int x) {
|
||||
return x;
|
||||
}
|
||||
|
||||
//heuristic-summary=;NonFinalStruct;false;public_final_member_function;(int);;Argument[0];ReturnValue;taint;df-generated
|
||||
//contentbased-summary=;NonFinalStruct;false;public_final_member_function;(int);;Argument[0];ReturnValue;value;dfc-generated
|
||||
virtual int public_final_member_function(int x) final {
|
||||
return x;
|
||||
}
|
||||
|
||||
private:
|
||||
//No model as private members are excluded from model generation.
|
||||
int private_member_function(int x) {
|
||||
return x;
|
||||
}
|
||||
|
||||
protected:
|
||||
//No model as protected members are excluded from model generation.
|
||||
int protected_member_function(int x) {
|
||||
return x;
|
||||
}
|
||||
};
|
||||
|
||||
struct FinalStruct final {
|
||||
//heuristic-summary=;FinalStruct;false;public_not_final_member_function_2;(int);;Argument[0];ReturnValue;taint;df-generated
|
||||
//contentbased-summary=;FinalStruct;false;public_not_final_member_function_2;(int);;Argument[0];ReturnValue;value;dfc-generated
|
||||
virtual int public_not_final_member_function_2(int x) {
|
||||
return x;
|
||||
}
|
||||
|
||||
//heuristic-summary=;FinalStruct;false;public_final_member_function_2;(int);;Argument[0];ReturnValue;taint;df-generated
|
||||
//contentbased-summary=;FinalStruct;false;public_final_member_function_2;(int);;Argument[0];ReturnValue;value;dfc-generated
|
||||
virtual int public_final_member_function_2(int x) final {
|
||||
return x;
|
||||
}
|
||||
};
|
||||
|
||||
union U {
|
||||
int x, y;
|
||||
};
|
||||
|
||||
//heuristic-summary=;;true;get_x_from_union;(U *);;Argument[0];ReturnValue;taint;df-generated
|
||||
//heuristic-summary=;;true;get_x_from_union;(U *);;Argument[*0];ReturnValue;taint;df-generated
|
||||
//contentbased-summary=;;true;get_x_from_union;(U *);;Argument[0];ReturnValue;taint;dfc-generated
|
||||
//contentbased-summary=;;true;get_x_from_union;(U *);;Argument[*0].Union[*U];ReturnValue;value;dfc-generated
|
||||
int get_x_from_union(U* u) {
|
||||
return u->x;
|
||||
}
|
||||
|
||||
//heuristic-summary=;;true;set_x_in_union;(U *,int);;Argument[1];Argument[*0];taint;df-generated
|
||||
//contentbased-summary=;;true;set_x_in_union;(U *,int);;Argument[1];Argument[*0].Union[*U];value;dfc-generated
|
||||
void set_x_in_union(U* u, int x) {
|
||||
u->x = x;
|
||||
}
|
||||
|
||||
struct HasInt {
|
||||
int x;
|
||||
};
|
||||
|
||||
//contentbased-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[1];Argument[*0];taint;dfc-generated
|
||||
//contentbased-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[1];Argument[*1];taint;dfc-generated
|
||||
//contentbased-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[*1];Argument[*0];value;dfc-generated
|
||||
//heuristic-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[1];Argument[*0];taint;df-generated
|
||||
//heuristic-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[1];Argument[*1];taint;df-generated
|
||||
//heuristic-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[*1];Argument[*0];taint;df-generated
|
||||
int copy_struct(HasInt *out, const HasInt *in) {
|
||||
*out = *in;
|
||||
return 1;
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
| cpp.cpp:3:5:3:51 | declaration | 0 | cpp.cpp:3:19:3:24 | twisty |
|
||||
| cpp.cpp:3:5:3:51 | declaration | 0 | cpp.cpp:3:43:3:48 | twisty |
|
||||
| cpp.cpp:3:15:3:27 | declaration | 0 | cpp.cpp:3:19:3:24 | twisty |
|
||||
| cpp.cpp:3:15:3:27 | declaration | 0 | cpp.cpp:3:43:3:48 | twisty |
|
||||
| cpp.cpp:5:5:5:62 | declaration | 0 | cpp.cpp:5:61:5:61 | i |
|
||||
| cpp.cpp:5:38:5:51 | declaration | 0 | cpp.cpp:5:44:5:44 | t |
|
||||
| declstmt.c:7:5:7:19 | declaration | 0 | declstmt.c:7:9:7:12 | fun1 |
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
| cpp.cpp:3:5:3:51 | declaration | 0 | cpp.cpp:3:43:3:48 | declaration of twisty |
|
||||
| cpp.cpp:3:15:3:27 | declaration | 0 | cpp.cpp:3:19:3:24 | declaration of twisty |
|
||||
| cpp.cpp:5:5:5:62 | declaration | 0 | cpp.cpp:5:61:5:61 | definition of i |
|
||||
| cpp.cpp:5:38:5:51 | declaration | 0 | cpp.cpp:5:44:5:44 | declaration of t |
|
||||
| declstmt.c:7:5:7:19 | declaration | 0 | declstmt.c:7:9:7:12 | definition of fun1 |
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
| file://:0:0:0:0 | 0 | file://:0:0:0:0 | int |
|
||||
| test.c:7:20:7:21 | E | file://:0:0:0:0 | int |
|
||||
| test.c:7:14:7:14 | E | file://:0:0:0:0 | int |
|
||||
| test.c:7:20:7:21 | E | test.c:7:14:7:14 | typeof(...) |
|
||||
|
||||
@@ -8,7 +8,10 @@ uniqueEnclosingCallable
|
||||
| misc.c:210:24:210:24 | 0 | Node should have one enclosing callable but has 0. |
|
||||
| misc.c:210:24:210:28 | ... + ... | Node should have one enclosing callable but has 0. |
|
||||
| misc.c:210:28:210:28 | 1 | Node should have one enclosing callable but has 0. |
|
||||
| stmt_in_type.cpp:3:12:3:40 | (statement expression) | Node should have one enclosing callable but has 0. |
|
||||
| stmt_in_type.cpp:3:29:3:34 | call to twisty | Node should have one enclosing callable but has 0. |
|
||||
uniqueCallEnclosingCallable
|
||||
| stmt_in_type.cpp:3:29:3:34 | call to twisty | Call should have one enclosing callable but has 0. |
|
||||
uniqueType
|
||||
uniqueNodeLocation
|
||||
| file://:0:0:0:0 | (unnamed parameter 2) | Node should have one location but has 0. |
|
||||
|
||||
@@ -11,6 +11,16 @@ edges
|
||||
| test.cpp:203:7:203:10 | pointer to free output argument | test.cpp:209:6:209:9 | data | provenance | |
|
||||
| test.cpp:207:8:207:11 | pointer to free output argument | test.cpp:209:6:209:9 | data | provenance | |
|
||||
| test.cpp:216:9:216:9 | pointer to operator delete output argument | test.cpp:217:6:217:6 | x | provenance | |
|
||||
| test.cpp:243:7:243:7 | *s [post update] [i1, data] | test.cpp:248:6:248:6 | *s [i1, data] | provenance | |
|
||||
| test.cpp:243:7:243:16 | pointer to free output argument | test.cpp:243:10:243:11 | *i1 [post update] [data] | provenance | |
|
||||
| test.cpp:243:10:243:11 | *i1 [post update] [data] | test.cpp:243:7:243:7 | *s [post update] [i1, data] | provenance | |
|
||||
| test.cpp:248:6:248:6 | *s [i1, data] | test.cpp:248:9:248:10 | *i1 [data] | provenance | |
|
||||
| test.cpp:248:9:248:10 | *i1 [data] | test.cpp:248:12:248:15 | data | provenance | |
|
||||
| test.cpp:250:7:250:7 | *s [post update] [*i2, data] | test.cpp:255:6:255:6 | *s [*i2, data] | provenance | |
|
||||
| test.cpp:250:7:250:17 | pointer to free output argument | test.cpp:250:10:250:11 | *i2 [post update] [data] | provenance | |
|
||||
| test.cpp:250:10:250:11 | *i2 [post update] [data] | test.cpp:250:7:250:7 | *s [post update] [*i2, data] | provenance | |
|
||||
| test.cpp:255:6:255:6 | *s [*i2, data] | test.cpp:255:9:255:10 | *i2 [data] | provenance | |
|
||||
| test.cpp:255:9:255:10 | *i2 [data] | test.cpp:255:13:255:16 | data | provenance | |
|
||||
nodes
|
||||
| test.cpp:39:7:39:10 | pointer to free output argument | semmle.label | pointer to free output argument |
|
||||
| test.cpp:41:6:41:9 | data | semmle.label | data |
|
||||
@@ -35,6 +45,18 @@ nodes
|
||||
| test.cpp:209:6:209:9 | data | semmle.label | data |
|
||||
| test.cpp:216:9:216:9 | pointer to operator delete output argument | semmle.label | pointer to operator delete output argument |
|
||||
| test.cpp:217:6:217:6 | x | semmle.label | x |
|
||||
| test.cpp:243:7:243:7 | *s [post update] [i1, data] | semmle.label | *s [post update] [i1, data] |
|
||||
| test.cpp:243:7:243:16 | pointer to free output argument | semmle.label | pointer to free output argument |
|
||||
| test.cpp:243:10:243:11 | *i1 [post update] [data] | semmle.label | *i1 [post update] [data] |
|
||||
| test.cpp:248:6:248:6 | *s [i1, data] | semmle.label | *s [i1, data] |
|
||||
| test.cpp:248:9:248:10 | *i1 [data] | semmle.label | *i1 [data] |
|
||||
| test.cpp:248:12:248:15 | data | semmle.label | data |
|
||||
| test.cpp:250:7:250:7 | *s [post update] [*i2, data] | semmle.label | *s [post update] [*i2, data] |
|
||||
| test.cpp:250:7:250:17 | pointer to free output argument | semmle.label | pointer to free output argument |
|
||||
| test.cpp:250:10:250:11 | *i2 [post update] [data] | semmle.label | *i2 [post update] [data] |
|
||||
| test.cpp:255:6:255:6 | *s [*i2, data] | semmle.label | *s [*i2, data] |
|
||||
| test.cpp:255:9:255:10 | *i2 [data] | semmle.label | *i2 [data] |
|
||||
| test.cpp:255:13:255:16 | data | semmle.label | data |
|
||||
subpaths
|
||||
#select
|
||||
| test.cpp:41:6:41:9 | data | test.cpp:39:7:39:10 | pointer to free output argument | test.cpp:41:6:41:9 | data | Memory may have been previously freed by $@. | test.cpp:39:2:39:5 | call to free | call to free |
|
||||
@@ -49,3 +71,5 @@ subpaths
|
||||
| test.cpp:209:6:209:9 | data | test.cpp:203:7:203:10 | pointer to free output argument | test.cpp:209:6:209:9 | data | Memory may have been previously freed by $@. | test.cpp:203:2:203:5 | call to free | call to free |
|
||||
| test.cpp:209:6:209:9 | data | test.cpp:207:8:207:11 | pointer to free output argument | test.cpp:209:6:209:9 | data | Memory may have been previously freed by $@. | test.cpp:207:3:207:6 | call to free | call to free |
|
||||
| test.cpp:217:6:217:6 | x | test.cpp:216:9:216:9 | pointer to operator delete output argument | test.cpp:217:6:217:6 | x | Memory may have been previously freed by $@. | test.cpp:216:2:216:9 | delete | delete |
|
||||
| test.cpp:248:12:248:15 | data | test.cpp:243:7:243:16 | pointer to free output argument | test.cpp:248:12:248:15 | data | Memory may have been previously freed by $@. | test.cpp:243:2:243:5 | call to free | call to free |
|
||||
| test.cpp:255:13:255:16 | data | test.cpp:250:7:250:17 | pointer to free output argument | test.cpp:255:13:255:16 | data | Memory may have been previously freed by $@. | test.cpp:250:2:250:5 | call to free | call to free |
|
||||
|
||||
@@ -134,7 +134,7 @@ void noReturnWrapper() { noReturn(); }
|
||||
|
||||
void test9()
|
||||
{
|
||||
char *data, *data2;
|
||||
char *data;
|
||||
free(data);
|
||||
noReturnWrapper();
|
||||
use_if_nonzero(data); // GOOD
|
||||
@@ -229,3 +229,28 @@ void regression_test_for_static_var_handling()
|
||||
data = (char *)malloc(100*sizeof(char));
|
||||
use(data); // GOOD
|
||||
}
|
||||
|
||||
struct myInnerStruct {
|
||||
char *data;
|
||||
};
|
||||
|
||||
struct myStruct {
|
||||
myInnerStruct i1;
|
||||
myInnerStruct *i2;
|
||||
};
|
||||
|
||||
void malloc_after_free(myStruct *s) {
|
||||
free(s->i1.data);
|
||||
s->i1.data = (char *)malloc(100*sizeof(char));
|
||||
if (s->i1.data == 0) {
|
||||
return;
|
||||
}
|
||||
use(s->i1.data); // GOOD [FALSE POSITIVE]
|
||||
|
||||
free(s->i2->data);
|
||||
s->i2->data = (char *)malloc(100*sizeof(char));
|
||||
if (s->i2->data == 0) {
|
||||
return;
|
||||
}
|
||||
use(s->i2->data); // GOOD [FALSE POSITIVE]
|
||||
}
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 1.7.39
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 1.7.38
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
## 1.7.39
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.7.38
|
||||
lastReleaseVersion: 1.7.39
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/csharp-solorigate-all
|
||||
version: 1.7.39-dev
|
||||
version: 1.7.40-dev
|
||||
groups:
|
||||
- csharp
|
||||
- solorigate
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 1.7.39
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 1.7.38
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
## 1.7.39
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.7.38
|
||||
lastReleaseVersion: 1.7.39
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/csharp-solorigate-queries
|
||||
version: 1.7.39-dev
|
||||
version: 1.7.40-dev
|
||||
groups:
|
||||
- csharp
|
||||
- solorigate
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
ql/csharp/ql/src/API Abuse/FormatInvalid.ql
|
||||
ql/csharp/ql/src/API Abuse/NoDisposeCallOnLocalIDisposable.ql
|
||||
ql/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql
|
||||
ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Collections/ContainerLengthCmpOffByOne.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Collections/ContainerSizeCmpZero.ql
|
||||
ql/csharp/ql/src/Likely Bugs/DangerousNonShortCircuitLogic.ql
|
||||
ql/csharp/ql/src/Likely Bugs/EqualityCheckOnFloats.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ReferenceEqualsOnValueTypes.ql
|
||||
ql/csharp/ql/src/Likely Bugs/SelfAssignment.ql
|
||||
ql/csharp/ql/src/Likely Bugs/UncheckedCastInEquals.ql
|
||||
ql/csharp/ql/src/Performance/UseTryGetValue.ql
|
||||
ql/csharp/ql/src/Useless code/DefaultToString.ql
|
||||
ql/csharp/ql/src/Useless code/IntGetHashCode.ql
|
||||
@@ -0,0 +1,57 @@
|
||||
ql/csharp/ql/src/Diagnostics/CompilerError.ql
|
||||
ql/csharp/ql/src/Diagnostics/CompilerMessage.ql
|
||||
ql/csharp/ql/src/Diagnostics/DiagnosticExtractionErrors.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractedFiles.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractorError.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractorMessage.ql
|
||||
ql/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-011/ASPNetDebug.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-016/ASPNetPagesValidateRequest.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-022/TaintedPath.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-022/ZipSlip.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-078/CommandInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-079/XSS.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-089/SqlInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-090/LDAPInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-094/CodeInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-099/ResourceInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-117/LogForging.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-119/LocalUnvalidatedArithmetic.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-201/ExposureInTransmittedData.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-209/ExceptionInformationExposure.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-248/MissingASPNETGlobalErrorHandler.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-312/CleartextStorage.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-352/MissingAntiForgeryTokenValidation.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-359/ExposureOfPrivateInformation.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-451/MissingXFrameOptions.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-502/DeserializedDelegate.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-502/UnsafeDeserializationUntrustedInput.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-548/ASPNetDirectoryListing.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-601/UrlRedirect.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-611/UntrustedDataInsecureXml.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-614/RequireSSL.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-643/XPathInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-730/ReDoS.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-730/RegexInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-807/ConditionalBypass.ql
|
||||
ql/csharp/ql/src/Security Features/CookieWithOverlyBroadDomain.ql
|
||||
ql/csharp/ql/src/Security Features/CookieWithOverlyBroadPath.ql
|
||||
ql/csharp/ql/src/Security Features/Encryption using ECB.ql
|
||||
ql/csharp/ql/src/Security Features/HeaderCheckingDisabled.ql
|
||||
ql/csharp/ql/src/Security Features/InadequateRSAPadding.ql
|
||||
ql/csharp/ql/src/Security Features/InsecureRandomness.ql
|
||||
ql/csharp/ql/src/Security Features/InsufficientKeySize.ql
|
||||
ql/csharp/ql/src/Security Features/PersistentCookie.ql
|
||||
ql/csharp/ql/src/Security Features/WeakEncryption.ql
|
||||
ql/csharp/ql/src/Telemetry/DatabaseQualityDiagnostics.ql
|
||||
ql/csharp/ql/src/Telemetry/ExternalLibraryUsage.ql
|
||||
ql/csharp/ql/src/Telemetry/ExtractorInformation.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalApis.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalSinks.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalSources.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalTaint.ql
|
||||
ql/csharp/ql/src/Telemetry/UnsupportedExternalAPIs.ql
|
||||
@@ -0,0 +1,173 @@
|
||||
ql/csharp/ql/src/API Abuse/CallToGCCollect.ql
|
||||
ql/csharp/ql/src/API Abuse/CallToObsoleteMethod.ql
|
||||
ql/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql
|
||||
ql/csharp/ql/src/API Abuse/ClassImplementsICloneable.ql
|
||||
ql/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql
|
||||
ql/csharp/ql/src/API Abuse/FormatInvalid.ql
|
||||
ql/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql
|
||||
ql/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql
|
||||
ql/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql
|
||||
ql/csharp/ql/src/API Abuse/NoDisposeCallOnLocalIDisposable.ql
|
||||
ql/csharp/ql/src/API Abuse/NullArgumentToEquals.ql
|
||||
ql/csharp/ql/src/ASP/BlockCodeResponseWrite.ql
|
||||
ql/csharp/ql/src/Architecture/Refactoring Opportunities/InappropriateIntimacy.ql
|
||||
ql/csharp/ql/src/Bad Practices/CallsUnmanagedCode.ql
|
||||
ql/csharp/ql/src/Bad Practices/CatchOfNullReferenceException.ql
|
||||
ql/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql
|
||||
ql/csharp/ql/src/Bad Practices/Declarations/LocalScopeVariableShadowsMember.ql
|
||||
ql/csharp/ql/src/Bad Practices/Declarations/TooManyRefParameters.ql
|
||||
ql/csharp/ql/src/Bad Practices/EmptyCatchBlock.ql
|
||||
ql/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql
|
||||
ql/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql
|
||||
ql/csharp/ql/src/Bad Practices/Implementation Hiding/ExposeRepresentation.ql
|
||||
ql/csharp/ql/src/Bad Practices/Naming Conventions/FieldMasksSuperField.ql
|
||||
ql/csharp/ql/src/Bad Practices/Naming Conventions/SameNameAsSuper.ql
|
||||
ql/csharp/ql/src/Bad Practices/PathCombine.ql
|
||||
ql/csharp/ql/src/Bad Practices/UnmanagedCodeCheck.ql
|
||||
ql/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql
|
||||
ql/csharp/ql/src/CSI/CompareIdenticalValues.ql
|
||||
ql/csharp/ql/src/CSI/NullAlways.ql
|
||||
ql/csharp/ql/src/CSI/NullMaybe.ql
|
||||
ql/csharp/ql/src/Complexity/BlockWithTooManyStatements.ql
|
||||
ql/csharp/ql/src/Complexity/ComplexCondition.ql
|
||||
ql/csharp/ql/src/Concurrency/FutileSyncOnField.ql
|
||||
ql/csharp/ql/src/Concurrency/LockOrder.ql
|
||||
ql/csharp/ql/src/Concurrency/LockThis.ql
|
||||
ql/csharp/ql/src/Concurrency/LockedWait.ql
|
||||
ql/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql
|
||||
ql/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql
|
||||
ql/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql
|
||||
ql/csharp/ql/src/Configuration/EmptyPasswordInConfigurationFile.ql
|
||||
ql/csharp/ql/src/Configuration/PasswordInConfigurationFile.ql
|
||||
ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql
|
||||
ql/csharp/ql/src/Diagnostics/CompilerError.ql
|
||||
ql/csharp/ql/src/Diagnostics/CompilerMessage.ql
|
||||
ql/csharp/ql/src/Diagnostics/DiagnosticExtractionErrors.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractedFiles.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractorError.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractorMessage.ql
|
||||
ql/csharp/ql/src/Documentation/XmldocMissingSummary.ql
|
||||
ql/csharp/ql/src/Input Validation/UseOfFileUpload.ql
|
||||
ql/csharp/ql/src/Input Validation/ValueShadowing.ql
|
||||
ql/csharp/ql/src/Input Validation/ValueShadowingServerVariable.ql
|
||||
ql/csharp/ql/src/Language Abuse/CastThisToTypeParameter.ql
|
||||
ql/csharp/ql/src/Language Abuse/CatchOfGenericException.ql
|
||||
ql/csharp/ql/src/Language Abuse/ChainedIs.ql
|
||||
ql/csharp/ql/src/Language Abuse/DubiousDowncastOfThis.ql
|
||||
ql/csharp/ql/src/Language Abuse/DubiousTypeTestOfThis.ql
|
||||
ql/csharp/ql/src/Language Abuse/MissedReadonlyOpportunity.ql
|
||||
ql/csharp/ql/src/Language Abuse/MissedTernaryOpportunity.ql
|
||||
ql/csharp/ql/src/Language Abuse/MissedUsingOpportunity.ql
|
||||
ql/csharp/ql/src/Language Abuse/NestedIf.ql
|
||||
ql/csharp/ql/src/Language Abuse/RethrowException.ql
|
||||
ql/csharp/ql/src/Language Abuse/SimplifyBoolExpr.ql
|
||||
ql/csharp/ql/src/Language Abuse/UnusedPropertyValue.ql
|
||||
ql/csharp/ql/src/Language Abuse/UselessCastToSelf.ql
|
||||
ql/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql
|
||||
ql/csharp/ql/src/Language Abuse/UselessTypeTest.ql
|
||||
ql/csharp/ql/src/Language Abuse/UselessUpcast.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Collections/ContainerLengthCmpOffByOne.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Collections/ContainerSizeCmpZero.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Collections/ReadOnlyContainer.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ConstantComparison.ql
|
||||
ql/csharp/ql/src/Likely Bugs/DangerousNonShortCircuitLogic.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql
|
||||
ql/csharp/ql/src/Likely Bugs/EqualityCheckOnFloats.ql
|
||||
ql/csharp/ql/src/Likely Bugs/EqualsArray.ql
|
||||
ql/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql
|
||||
ql/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql
|
||||
ql/csharp/ql/src/Likely Bugs/HashedButNoHash.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ImpossibleArrayCast.ql
|
||||
ql/csharp/ql/src/Likely Bugs/IncomparableEquals.ql
|
||||
ql/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql
|
||||
ql/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql
|
||||
ql/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql
|
||||
ql/csharp/ql/src/Likely Bugs/NestedLoopsSameVariable.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ObjectComparison.ql
|
||||
ql/csharp/ql/src/Likely Bugs/PossibleLossOfPrecision.ql
|
||||
ql/csharp/ql/src/Likely Bugs/RecursiveEquals.ql
|
||||
ql/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ReferenceEqualsOnValueTypes.ql
|
||||
ql/csharp/ql/src/Likely Bugs/SelfAssignment.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Statements/EmptyBlock.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Statements/EmptyLockStatement.ql
|
||||
ql/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql
|
||||
ql/csharp/ql/src/Likely Bugs/StaticFieldWrittenByInstance.ql
|
||||
ql/csharp/ql/src/Likely Bugs/StringBuilderCharInit.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransform.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql
|
||||
ql/csharp/ql/src/Likely Bugs/UncheckedCastInEquals.ql
|
||||
ql/csharp/ql/src/Linq/BadMultipleIteration.ql
|
||||
ql/csharp/ql/src/Linq/MissedAllOpportunity.ql
|
||||
ql/csharp/ql/src/Linq/MissedCastOpportunity.ql
|
||||
ql/csharp/ql/src/Linq/MissedOfTypeOpportunity.ql
|
||||
ql/csharp/ql/src/Linq/MissedSelectOpportunity.ql
|
||||
ql/csharp/ql/src/Linq/MissedWhereOpportunity.ql
|
||||
ql/csharp/ql/src/Linq/RedundantSelect.ql
|
||||
ql/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql
|
||||
ql/csharp/ql/src/Performance/StringBuilderInLoop.ql
|
||||
ql/csharp/ql/src/Performance/StringConcatenationInLoop.ql
|
||||
ql/csharp/ql/src/Performance/UseTryGetValue.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-011/ASPNetDebug.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-016/ASPNetPagesValidateRequest.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-020/RuntimeChecksBypass.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-022/TaintedPath.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-022/ZipSlip.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-078/CommandInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-079/XSS.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-089/SqlInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-090/LDAPInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-094/CodeInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-099/ResourceInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-112/MissingXMLValidation.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-117/LogForging.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-119/LocalUnvalidatedArithmetic.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-201/ExposureInTransmittedData.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-209/ExceptionInformationExposure.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-248/MissingASPNETGlobalErrorHandler.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-285/MissingAccessControl.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-312/CleartextStorage.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-352/MissingAntiForgeryTokenValidation.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-359/ExposureOfPrivateInformation.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-451/MissingXFrameOptions.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-502/DeserializedDelegate.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-502/UnsafeDeserializationUntrustedInput.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-548/ASPNetDirectoryListing.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-601/UrlRedirect.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-611/UntrustedDataInsecureXml.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-614/RequireSSL.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-639/InsecureDirectObjectReference.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-643/XPathInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-730/ReDoS.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-730/RegexInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-798/HardcodedCredentials.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-807/ConditionalBypass.ql
|
||||
ql/csharp/ql/src/Security Features/CookieWithOverlyBroadDomain.ql
|
||||
ql/csharp/ql/src/Security Features/CookieWithOverlyBroadPath.ql
|
||||
ql/csharp/ql/src/Security Features/Encryption using ECB.ql
|
||||
ql/csharp/ql/src/Security Features/HeaderCheckingDisabled.ql
|
||||
ql/csharp/ql/src/Security Features/InadequateRSAPadding.ql
|
||||
ql/csharp/ql/src/Security Features/InsecureRandomness.ql
|
||||
ql/csharp/ql/src/Security Features/InsufficientKeySize.ql
|
||||
ql/csharp/ql/src/Security Features/PersistentCookie.ql
|
||||
ql/csharp/ql/src/Security Features/WeakEncryption.ql
|
||||
ql/csharp/ql/src/Telemetry/DatabaseQualityDiagnostics.ql
|
||||
ql/csharp/ql/src/Telemetry/ExternalLibraryUsage.ql
|
||||
ql/csharp/ql/src/Telemetry/ExtractorInformation.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalApis.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalSinks.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalSources.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalTaint.ql
|
||||
ql/csharp/ql/src/Telemetry/UnsupportedExternalAPIs.ql
|
||||
ql/csharp/ql/src/Useless code/DefaultToString.ql
|
||||
ql/csharp/ql/src/Useless code/FutileConditional.ql
|
||||
ql/csharp/ql/src/Useless code/IntGetHashCode.ql
|
||||
ql/csharp/ql/src/Useless code/RedundantToStringCall.ql
|
||||
ql/csharp/ql/src/Useless code/UnusedLabel.ql
|
||||
@@ -0,0 +1,71 @@
|
||||
ql/csharp/ql/src/Configuration/EmptyPasswordInConfigurationFile.ql
|
||||
ql/csharp/ql/src/Configuration/PasswordInConfigurationFile.ql
|
||||
ql/csharp/ql/src/Diagnostics/CompilerError.ql
|
||||
ql/csharp/ql/src/Diagnostics/CompilerMessage.ql
|
||||
ql/csharp/ql/src/Diagnostics/DiagnosticExtractionErrors.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractedFiles.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractorError.ql
|
||||
ql/csharp/ql/src/Diagnostics/ExtractorMessage.ql
|
||||
ql/csharp/ql/src/Input Validation/UseOfFileUpload.ql
|
||||
ql/csharp/ql/src/Input Validation/ValueShadowing.ql
|
||||
ql/csharp/ql/src/Input Validation/ValueShadowingServerVariable.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransform.ql
|
||||
ql/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql
|
||||
ql/csharp/ql/src/Metrics/Summaries/LinesOfCode.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-011/ASPNetDebug.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-016/ASPNetPagesValidateRequest.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-020/RuntimeChecksBypass.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-022/TaintedPath.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-022/ZipSlip.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-078/CommandInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-079/XSS.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-089/SqlInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-090/LDAPInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-094/CodeInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-099/ResourceInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-112/MissingXMLValidation.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-117/LogForging.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-119/LocalUnvalidatedArithmetic.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-134/UncontrolledFormatString.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-201/ExposureInTransmittedData.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-209/ExceptionInformationExposure.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-248/MissingASPNETGlobalErrorHandler.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-285/MissingAccessControl.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-312/CleartextStorage.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-352/MissingAntiForgeryTokenValidation.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-359/ExposureOfPrivateInformation.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-451/MissingXFrameOptions.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-502/DeserializedDelegate.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-502/UnsafeDeserializationUntrustedInput.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-548/ASPNetDirectoryListing.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-601/UrlRedirect.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-611/UntrustedDataInsecureXml.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-614/RequireSSL.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-639/InsecureDirectObjectReference.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-643/XPathInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-730/ReDoS.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-730/RegexInjection.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-798/HardcodedCredentials.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-807/ConditionalBypass.ql
|
||||
ql/csharp/ql/src/Security Features/CookieWithOverlyBroadDomain.ql
|
||||
ql/csharp/ql/src/Security Features/CookieWithOverlyBroadPath.ql
|
||||
ql/csharp/ql/src/Security Features/Encryption using ECB.ql
|
||||
ql/csharp/ql/src/Security Features/HeaderCheckingDisabled.ql
|
||||
ql/csharp/ql/src/Security Features/InadequateRSAPadding.ql
|
||||
ql/csharp/ql/src/Security Features/InsecureRandomness.ql
|
||||
ql/csharp/ql/src/Security Features/InsufficientKeySize.ql
|
||||
ql/csharp/ql/src/Security Features/PersistentCookie.ql
|
||||
ql/csharp/ql/src/Security Features/WeakEncryption.ql
|
||||
ql/csharp/ql/src/Telemetry/DatabaseQualityDiagnostics.ql
|
||||
ql/csharp/ql/src/Telemetry/ExternalLibraryUsage.ql
|
||||
ql/csharp/ql/src/Telemetry/ExtractorInformation.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalApis.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalSinks.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalSources.ql
|
||||
ql/csharp/ql/src/Telemetry/SupportedExternalTaint.ql
|
||||
ql/csharp/ql/src/Telemetry/UnsupportedExternalAPIs.ql
|
||||
@@ -0,0 +1,126 @@
|
||||
ql/csharp/ql/src/API Abuse/MissingDisposeCall.ql
|
||||
ql/csharp/ql/src/API Abuse/MissingDisposeMethod.ql
|
||||
ql/csharp/ql/src/API Abuse/NonOverridingMethod.ql
|
||||
ql/csharp/ql/src/API Abuse/UncheckedReturnValue.ql
|
||||
ql/csharp/ql/src/ASP/ComplexInlineCode.ql
|
||||
ql/csharp/ql/src/ASP/NonInternationalizedText.ql
|
||||
ql/csharp/ql/src/ASP/SplitControlStructure.ql
|
||||
ql/csharp/ql/src/AlertSuppression.ql
|
||||
ql/csharp/ql/src/Architecture/Dependencies/MutualDependency.ql
|
||||
ql/csharp/ql/src/Architecture/Refactoring Opportunities/FeatureEnvy.ql
|
||||
ql/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql
|
||||
ql/csharp/ql/src/Bad Practices/Comments/TodoComments.ql
|
||||
ql/csharp/ql/src/Bad Practices/Declarations/EmptyInterface.ql
|
||||
ql/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql
|
||||
ql/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql
|
||||
ql/csharp/ql/src/Bad Practices/LeftoverDebugCode.ql
|
||||
ql/csharp/ql/src/Bad Practices/Magic Constants/MagicConstantsNumbers.ql
|
||||
ql/csharp/ql/src/Bad Practices/Magic Constants/MagicConstantsString.ql
|
||||
ql/csharp/ql/src/Bad Practices/Magic Constants/MagicNumbersUseConstant.ql
|
||||
ql/csharp/ql/src/Bad Practices/Magic Constants/MagicStringsUseConstant.ql
|
||||
ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql
|
||||
ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql
|
||||
ql/csharp/ql/src/Bad Practices/Naming Conventions/ConstantNaming.ql
|
||||
ql/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql
|
||||
ql/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql
|
||||
ql/csharp/ql/src/Bad Practices/Naming Conventions/VariableNameTooShort.ql
|
||||
ql/csharp/ql/src/Bad Practices/UseOfHtmlInputHidden.ql
|
||||
ql/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql
|
||||
ql/csharp/ql/src/Dead Code/DeadRefTypes.ql
|
||||
ql/csharp/ql/src/Dead Code/NonAssignedFields.ql
|
||||
ql/csharp/ql/src/Dead Code/UnusedField.ql
|
||||
ql/csharp/ql/src/Dead Code/UnusedMethod.ql
|
||||
ql/csharp/ql/src/Documentation/XmldocExtraParam.ql
|
||||
ql/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql
|
||||
ql/csharp/ql/src/Documentation/XmldocMissing.ql
|
||||
ql/csharp/ql/src/Documentation/XmldocMissingException.ql
|
||||
ql/csharp/ql/src/Documentation/XmldocMissingParam.ql
|
||||
ql/csharp/ql/src/Documentation/XmldocMissingReturn.ql
|
||||
ql/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql
|
||||
ql/csharp/ql/src/Language Abuse/ForeachCapture.ql
|
||||
ql/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql
|
||||
ql/csharp/ql/src/Likely Bugs/BadCheckOdd.ql
|
||||
ql/csharp/ql/src/Likely Bugs/RandomUsedOnce.ql
|
||||
ql/csharp/ql/src/Metrics/Callables/CCyclomaticComplexity.ql
|
||||
ql/csharp/ql/src/Metrics/Callables/CLinesOfCode.ql
|
||||
ql/csharp/ql/src/Metrics/Callables/CLinesOfComment.ql
|
||||
ql/csharp/ql/src/Metrics/Callables/CNumberOfParameters.ql
|
||||
ql/csharp/ql/src/Metrics/Callables/CNumberOfStatements.ql
|
||||
ql/csharp/ql/src/Metrics/Callables/CPercentageOfComments.ql
|
||||
ql/csharp/ql/src/Metrics/Callables/StatementNestingDepth.ql
|
||||
ql/csharp/ql/src/Metrics/Dependencies/ExternalDependencies.ql
|
||||
ql/csharp/ql/src/Metrics/Dependencies/ExternalDependenciesSourceLinks.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FCommentRatio.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FCyclomaticComplexity.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FLines.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FLinesOfCode.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FLinesOfComment.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FLinesOfCommentedCode.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FNumberOfClasses.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FNumberOfInterfaces.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FNumberOfStructs.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FNumberOfTests.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FNumberOfUsingNamespaces.ql
|
||||
ql/csharp/ql/src/Metrics/Files/FSelfContainedness.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TAfferentCoupling.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TEfferentCoupling.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TInheritanceDepth.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TLackOfCohesionCK.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TLackOfCohesionHS.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TNumberOfCallables.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TNumberOfEvents.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TNumberOfFields.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TNumberOfIndexers.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TNumberOfNonConstFields.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TNumberOfProperties.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TNumberOfStatements.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TResponse.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TSizeOfAPI.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TSpecialisationIndex.ql
|
||||
ql/csharp/ql/src/Metrics/RefTypes/TUnmanagedCode.ql
|
||||
ql/csharp/ql/src/Metrics/Summaries/FrameworkCoverage.ql
|
||||
ql/csharp/ql/src/Metrics/internal/ExtractorDiagnostics.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-016/ASPNetMaxRequestLength.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-016/ASPNetRequestValidationMode.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-020/ExternalAPIsUsedWithUntrustedData.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-020/UntrustedDataToExternalAPI.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-321/HardcodedEncryptionKey.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-321/HardcodedSymmetricEncryptionKey.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-327/DontInstallRootCert.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-502/UnsafeDeserialization.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-611/UseXmlSecureResolver.ql
|
||||
ql/csharp/ql/src/Security Features/CWE-838/InappropriateEncoding.ql
|
||||
ql/csharp/ql/src/Useless code/PointlessForwardingMethod.ql
|
||||
ql/csharp/ql/src/definitions.ql
|
||||
ql/csharp/ql/src/experimental/CWE-099/TaintedWebClient.ql
|
||||
ql/csharp/ql/src/experimental/CWE-918/RequestForgery.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/CWE-327/Azure/UnsafeUsageOfClientSideEncryptionVersion.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/CWE-614/CookieWithoutSecure.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/JsonWebTokenHandler/delegated-security-validations-always-return-true.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/JsonWebTokenHandler/security-validation-disabled.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/Serialization/DefiningDatasetRelatedType.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/Serialization/DefiningPotentiallyUnsafeXmlSerializer.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/Serialization/UnsafeTypeUsedDataContractSerializer.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/Serialization/XmlDeserializationWithDataSet.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/backdoor/DangerousNativeFunctionCall.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql
|
||||
ql/csharp/ql/src/experimental/Security Features/backdoor/ProcessNameToHashTaintFlow.ql
|
||||
ql/csharp/ql/src/filters/ClassifyFiles.ql
|
||||
ql/csharp/ql/src/meta/frameworks/Coverage.ql
|
||||
ql/csharp/ql/src/meta/frameworks/UnsupportedExternalAPIs.ql
|
||||
ql/csharp/ql/src/utils/modelconverter/ExtractNeutrals.ql
|
||||
ql/csharp/ql/src/utils/modelconverter/ExtractSinks.ql
|
||||
ql/csharp/ql/src/utils/modelconverter/ExtractSources.ql
|
||||
ql/csharp/ql/src/utils/modelconverter/ExtractSummaries.ql
|
||||
ql/csharp/ql/src/utils/modeleditor/ApplicationModeEndpoints.ql
|
||||
ql/csharp/ql/src/utils/modeleditor/FrameworkModeEndpoints.ql
|
||||
ql/csharp/ql/src/utils/modelgenerator/CaptureContentSummaryModels.ql
|
||||
ql/csharp/ql/src/utils/modelgenerator/CaptureNeutralModels.ql
|
||||
ql/csharp/ql/src/utils/modelgenerator/CaptureSinkModels.ql
|
||||
ql/csharp/ql/src/utils/modelgenerator/CaptureSourceModels.ql
|
||||
ql/csharp/ql/src/utils/modelgenerator/CaptureSummaryModels.ql
|
||||
ql/csharp/ql/src/utils/modelgenerator/CaptureTypeBasedSummaryModels.ql
|
||||
ql/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPartialPath.ql
|
||||
ql/csharp/ql/src/utils/modelgenerator/debug/CaptureSummaryModelsPath.ql
|
||||
14
csharp/ql/integration-tests/posix/query-suite/test.py
Normal file
14
csharp/ql/integration-tests/posix/query-suite/test.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import runs_on
|
||||
import pytest
|
||||
from query_suites import *
|
||||
|
||||
well_known_query_suites = ['csharp-code-quality.qls', 'csharp-security-and-quality.qls', 'csharp-security-extended.qls', 'csharp-code-scanning.qls']
|
||||
|
||||
@runs_on.posix
|
||||
@pytest.mark.parametrize("query_suite", well_known_query_suites)
|
||||
def test(codeql, csharp, check_query_suite, query_suite):
|
||||
check_query_suite(query_suite)
|
||||
|
||||
@runs_on.posix
|
||||
def test_not_included_queries(codeql, csharp, check_queries_not_included):
|
||||
check_queries_not_included('csharp', well_known_query_suites)
|
||||
@@ -1,3 +1,9 @@
|
||||
## 5.1.5
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
* Improved autobuilder logic for detecting whether a project references a SDK (and should be built using `dotnet`).
|
||||
|
||||
## 5.1.4
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
## 5.1.5
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
* Improved autobuilder logic for detecting whether a project references a SDK (and should be built using `dotnet`).
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 5.1.4
|
||||
lastReleaseVersion: 5.1.5
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/csharp-all
|
||||
version: 5.1.5-dev
|
||||
version: 5.1.6-dev
|
||||
groups: csharp
|
||||
dbscheme: semmlecode.csharp.dbscheme
|
||||
extractor: csharp
|
||||
|
||||
@@ -278,9 +278,14 @@ class CaseStmt extends Case, @case_stmt {
|
||||
override PatternExpr getPattern() { result = this.getChild(0) }
|
||||
|
||||
override Stmt getBody() {
|
||||
exists(int i |
|
||||
exists(int i, Stmt next |
|
||||
this = this.getParent().getChild(i) and
|
||||
result = this.getParent().getChild(i + 1)
|
||||
next = this.getParent().getChild(i + 1)
|
||||
|
|
||||
result = next and
|
||||
not result instanceof CaseStmt
|
||||
or
|
||||
result = next.(CaseStmt).getBody()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,8 @@ private class ParamsConstructedCollectionTypes extends ParamsCollectionTypeImpl
|
||||
unboundbase instanceof SystemCollectionsGenericIReadOnlyListTInterface or
|
||||
unboundbase instanceof SystemSpanStruct or
|
||||
unboundbase instanceof SystemReadOnlySpanStruct
|
||||
)
|
||||
) and
|
||||
not this instanceof SystemStringClass
|
||||
}
|
||||
|
||||
override Type getElementType() { result = base.getTypeArgument(0) }
|
||||
|
||||
@@ -1153,7 +1153,13 @@ module Statements {
|
||||
)
|
||||
or
|
||||
// Flow from last element of `case` statement `i` to first element of statement `i+1`
|
||||
exists(int i | last(super.getStmt(i).(CaseStmt).getBody(), pred, c) |
|
||||
exists(int i, Stmt body |
|
||||
body = super.getStmt(i).(CaseStmt).getBody() and
|
||||
// in case of fall-through cases, make sure to not jump from their shared body back
|
||||
// to one of the fall-through cases
|
||||
not body = super.getStmt(i + 1).(CaseStmt).getBody() and
|
||||
last(body, pred, c)
|
||||
|
|
||||
c instanceof NormalCompletion and
|
||||
first(super.getStmt(i + 1), succ)
|
||||
)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user