mirror of
https://github.com/github/codeql.git
synced 2026-07-06 20:15:37 +02:00
Compare commits
683 Commits
codeql-cli
...
hackathon/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2468bd978b | ||
|
|
570260b4dc | ||
|
|
1ca2590146 | ||
|
|
a70438b72c | ||
|
|
3b2262be3a | ||
|
|
2f50d25aaa | ||
|
|
351daaac8b | ||
|
|
b3fff05e7d | ||
|
|
d7fbf68a59 | ||
|
|
1a688456f6 | ||
|
|
349518b0d7 | ||
|
|
91b1cb8a76 | ||
|
|
7517ad3e4b | ||
|
|
77ae26fca7 | ||
|
|
79a9e9c6c0 | ||
|
|
6266dab518 | ||
|
|
d9d3027667 | ||
|
|
a29b958f5f | ||
|
|
ba26281b02 | ||
|
|
fd4a6d4bb8 | ||
|
|
13fb92ad3e | ||
|
|
d3a6452860 | ||
|
|
6af5b55d51 | ||
|
|
3986dffc91 | ||
|
|
b6a31b1def | ||
|
|
57192e8154 | ||
|
|
e813fa346b | ||
|
|
8abb0594c3 | ||
|
|
b2c2a94866 | ||
|
|
39afb18ee4 | ||
|
|
80e8015e67 | ||
|
|
c2aee37210 | ||
|
|
ede3b9f033 | ||
|
|
e335737f38 | ||
|
|
adc946ec2b | ||
|
|
4a1fce9168 | ||
|
|
f61251cc24 | ||
|
|
7ffff43424 | ||
|
|
cd99bea9c1 | ||
|
|
ccc525abd3 | ||
|
|
fd40662ad8 | ||
|
|
e290cecabd | ||
|
|
17a3429f1e | ||
|
|
20e8d48869 | ||
|
|
520acc4b1c | ||
|
|
d9126d384f | ||
|
|
e90e313295 | ||
|
|
e46ec5a171 | ||
|
|
91375d3a49 | ||
|
|
a277bcbc3e | ||
|
|
317f43d325 | ||
|
|
2351328aa1 | ||
|
|
593dcb646b | ||
|
|
fb82d435b5 | ||
|
|
34ee947d2f | ||
|
|
e6f3512056 | ||
|
|
faeff396eb | ||
|
|
067ecdeea0 | ||
|
|
9a81ce8bb4 | ||
|
|
8d2cef632e | ||
|
|
6c402adbcc | ||
|
|
a53e1dec20 | ||
|
|
f6776a4249 | ||
|
|
a5a6445b2e | ||
|
|
cd2038a8f8 | ||
|
|
fed240a2b2 | ||
|
|
42f7f73ae1 | ||
|
|
425b1b17d1 | ||
|
|
46f168823c | ||
|
|
fe62900a15 | ||
|
|
d6ef8c3f9a | ||
|
|
e8aa5db07a | ||
|
|
ad6bd88f0a | ||
|
|
89a2f0dc00 | ||
|
|
aebce746df | ||
|
|
6a3d417836 | ||
|
|
ae57c12b15 | ||
|
|
404ca27aec | ||
|
|
bf07aa1cbd | ||
|
|
55796badaf | ||
|
|
e3662fa97f | ||
|
|
81bc7cd19f | ||
|
|
1c298f0231 | ||
|
|
f1c6dc1d9b | ||
|
|
916184964b | ||
|
|
0b24235de4 | ||
|
|
9afdee4697 | ||
|
|
f3c7352727 | ||
|
|
727a7d4957 | ||
|
|
5490975a27 | ||
|
|
9684df8535 | ||
|
|
c8f41206be | ||
|
|
c7112ef278 | ||
|
|
38ee2d418a | ||
|
|
5094cb851b | ||
|
|
a311294080 | ||
|
|
71e4646489 | ||
|
|
9cea631399 | ||
|
|
26839f5e15 | ||
|
|
3805d0f958 | ||
|
|
0610c265e2 | ||
|
|
7c2c5ee1fa | ||
|
|
fc444f1f9a | ||
|
|
bee51091d6 | ||
|
|
9b6c96730d | ||
|
|
f2569c45a9 | ||
|
|
083394073a | ||
|
|
ccb92357a2 | ||
|
|
39b2d2c3d8 | ||
|
|
5602570e18 | ||
|
|
22835c28ff | ||
|
|
a35a4b2d98 | ||
|
|
1a000ecb46 | ||
|
|
4f6fda0100 | ||
|
|
fc8d8bbbb1 | ||
|
|
3488b9fbca | ||
|
|
df7bcfd116 | ||
|
|
26b048a645 | ||
|
|
147d66b587 | ||
|
|
64d522e447 | ||
|
|
8041f00bf5 | ||
|
|
07bb60da92 | ||
|
|
8e4a312ac7 | ||
|
|
b3f7a8a46f | ||
|
|
18ce8be302 | ||
|
|
fbfdd57383 | ||
|
|
a8b1cb3243 | ||
|
|
200715773f | ||
|
|
e9c9519d90 | ||
|
|
55cfbccd43 | ||
|
|
5c389355d0 | ||
|
|
a86cd181a6 | ||
|
|
395cababb3 | ||
|
|
fe854812ec | ||
|
|
dadc6059a8 | ||
|
|
2987743e44 | ||
|
|
bf0e1008ce | ||
|
|
ff80b249ca | ||
|
|
60986d8c9b | ||
|
|
4df4a1e6c6 | ||
|
|
f8058e40af | ||
|
|
8a35e151d1 | ||
|
|
9392bf796a | ||
|
|
6054855edb | ||
|
|
1a5d2e1f5d | ||
|
|
93836a55e2 | ||
|
|
bb5ee525fc | ||
|
|
881fe0ba57 | ||
|
|
278760c735 | ||
|
|
262a9f0cfa | ||
|
|
35ffd0cc9c | ||
|
|
3091083705 | ||
|
|
088dd50f1f | ||
|
|
c8c747a110 | ||
|
|
30cc55005d | ||
|
|
c7b4e7c30a | ||
|
|
d9636b37b6 | ||
|
|
91ebc0eb45 | ||
|
|
a645a9e829 | ||
|
|
3cdf94e83a | ||
|
|
397bf7c5e2 | ||
|
|
496efeed7e | ||
|
|
f107d16b4e | ||
|
|
39a67b6e2e | ||
|
|
cc7b724123 | ||
|
|
8d59b9289b | ||
|
|
5a34c166b7 | ||
|
|
2818893010 | ||
|
|
7418d8ed24 | ||
|
|
0aee809697 | ||
|
|
5f20f1984c | ||
|
|
8f80c24270 | ||
|
|
34e8ea17d8 | ||
|
|
95e9d013cc | ||
|
|
a89c82bf74 | ||
|
|
6b25bea2e5 | ||
|
|
a3c7d5a469 | ||
|
|
fb26f7861f | ||
|
|
714e2fc2c1 | ||
|
|
2ae721bd54 | ||
|
|
633bac633c | ||
|
|
7f344fab78 | ||
|
|
6848a22c65 | ||
|
|
bde517fcb1 | ||
|
|
8b8b721788 | ||
|
|
82076ee0b8 | ||
|
|
2bab29d31b | ||
|
|
01141ccdc9 | ||
|
|
662a824312 | ||
|
|
81ff394533 | ||
|
|
5d3f723df9 | ||
|
|
c4adec3010 | ||
|
|
cec0544ca5 | ||
|
|
bae61875cd | ||
|
|
0bb5b4b9dc | ||
|
|
2892f0ff48 | ||
|
|
a36095d85b | ||
|
|
c0ad9ba529 | ||
|
|
dc8e645594 | ||
|
|
03ffaac87a | ||
|
|
19fae76a94 | ||
|
|
03aef50836 | ||
|
|
c6585b726a | ||
|
|
03ced1795a | ||
|
|
e5a199b821 | ||
|
|
61e60de969 | ||
|
|
eca8bf5a35 | ||
|
|
cee2ed0ec4 | ||
|
|
34b86c39c1 | ||
|
|
971f53870e | ||
|
|
b47fa77dc6 | ||
|
|
d0f9a0b9ce | ||
|
|
55a6ed7e8a | ||
|
|
2b340b18dd | ||
|
|
fec31a6da4 | ||
|
|
6b60865d7e | ||
|
|
2b37c6cd32 | ||
|
|
f04a55ecb5 | ||
|
|
5e3748ac12 | ||
|
|
1a830cdf14 | ||
|
|
8cfd19cf2f | ||
|
|
977eb05f31 | ||
|
|
00b8a29da7 | ||
|
|
b96698aee3 | ||
|
|
c936468b17 | ||
|
|
b556590ef8 | ||
|
|
7e8a09aea1 | ||
|
|
efa59fd2b6 | ||
|
|
570b042645 | ||
|
|
9b493c1e1b | ||
|
|
2ef3ae9860 | ||
|
|
b005973317 | ||
|
|
f75615b913 | ||
|
|
0e511d640b | ||
|
|
44bebedae6 | ||
|
|
495c92df38 | ||
|
|
2b678c97ab | ||
|
|
5f31adc1f4 | ||
|
|
ff9811b488 | ||
|
|
a97998811a | ||
|
|
4c73c6284e | ||
|
|
b07642b585 | ||
|
|
902a8bd847 | ||
|
|
3c9e19346c | ||
|
|
cc94c42f87 | ||
|
|
b00bbc9ca2 | ||
|
|
2b6c27eb60 | ||
|
|
3656864695 | ||
|
|
baeffa2345 | ||
|
|
8b5756526c | ||
|
|
dd520fea47 | ||
|
|
1259b7e8e7 | ||
|
|
e5f2bbb6ec | ||
|
|
4750b0de94 | ||
|
|
540b433f5a | ||
|
|
4561770db4 | ||
|
|
5b5ca05e87 | ||
|
|
e2b614d18a | ||
|
|
8ba80fd022 | ||
|
|
e7a3e6bfed | ||
|
|
b111194fbc | ||
|
|
c5d699cb6b | ||
|
|
879cb7c365 | ||
|
|
251a8a34ed | ||
|
|
6a110368a5 | ||
|
|
6be2e98796 | ||
|
|
8ab52dba83 | ||
|
|
6c9739023d | ||
|
|
7c7420a9a4 | ||
|
|
07bc1feb11 | ||
|
|
84f6b89ced | ||
|
|
6aef571c17 | ||
|
|
3cc6b11e6b | ||
|
|
560b3da851 | ||
|
|
7ddc8f087d | ||
|
|
813ccb9c06 | ||
|
|
1d3bad1358 | ||
|
|
733158f8f2 | ||
|
|
2ee88f6774 | ||
|
|
c87f2c4eb1 | ||
|
|
2b386c422c | ||
|
|
d4db759057 | ||
|
|
609a6c38e4 | ||
|
|
a70ce25144 | ||
|
|
7d98d391b7 | ||
|
|
d41b86a87d | ||
|
|
6680537e93 | ||
|
|
d6e420bd0e | ||
|
|
1aecdb44dc | ||
|
|
5d6600e61f | ||
|
|
ef60b730ea | ||
|
|
ea458c09a0 | ||
|
|
b4ecc7937d | ||
|
|
e710c0a6bf | ||
|
|
ac87868097 | ||
|
|
1e51703ce9 | ||
|
|
eb79bcbc34 | ||
|
|
bf5a0b7bd0 | ||
|
|
41df9ae4fc | ||
|
|
f5d14dbe07 | ||
|
|
8f8564ddfd | ||
|
|
fba4d09e65 | ||
|
|
3939eff260 | ||
|
|
3228447544 | ||
|
|
5420e52afa | ||
|
|
cfa1ed38b4 | ||
|
|
5a84d290e6 | ||
|
|
7910af159c | ||
|
|
dd4fe2a32b | ||
|
|
c93e4385f2 | ||
|
|
2326861b23 | ||
|
|
1972532f1c | ||
|
|
058fcc1a51 | ||
|
|
711dfc3592 | ||
|
|
b6c26debef | ||
|
|
57cdda3405 | ||
|
|
9c95a17882 | ||
|
|
cab916453d | ||
|
|
b86a5810b3 | ||
|
|
c5b01eb629 | ||
|
|
e5818f6f2e | ||
|
|
fdf99e2f50 | ||
|
|
72606d5a59 | ||
|
|
c4126e4410 | ||
|
|
e3c400b0c8 | ||
|
|
01fa95f98a | ||
|
|
b112a9b31e | ||
|
|
82ff545424 | ||
|
|
3e77629477 | ||
|
|
2fa1c5ebcd | ||
|
|
40ef9ad805 | ||
|
|
0e5ba2b23e | ||
|
|
8840f91503 | ||
|
|
4a567344f5 | ||
|
|
dffc9e2e31 | ||
|
|
47a7d24a1a | ||
|
|
655fa53cdd | ||
|
|
fa4cc83753 | ||
|
|
652e47177f | ||
|
|
7db90fe073 | ||
|
|
719b5e175f | ||
|
|
8f6196d5f1 | ||
|
|
9789059e9f | ||
|
|
34b1055c13 | ||
|
|
194e0daa8c | ||
|
|
7338eafbd4 | ||
|
|
bfa6113366 | ||
|
|
ccc2a39abc | ||
|
|
f7a45e6650 | ||
|
|
ab1b48d687 | ||
|
|
a5ce3c1570 | ||
|
|
1726287bf4 | ||
|
|
d3ae4c930e | ||
|
|
3448751b4c | ||
|
|
412e841d69 | ||
|
|
f733ac19a9 | ||
|
|
4b1c027359 | ||
|
|
dbfbd2c00a | ||
|
|
05dce8a0be | ||
|
|
17a6d54e4d | ||
|
|
c5da712d10 | ||
|
|
a760b89895 | ||
|
|
5230b7b041 | ||
|
|
7c4d5981dd | ||
|
|
f092594a52 | ||
|
|
997a622496 | ||
|
|
45e9c2ff4d | ||
|
|
ba600b0791 | ||
|
|
9dc5e2fa36 | ||
|
|
4485193f57 | ||
|
|
8f7ed21f5d | ||
|
|
8d4bb97b1a | ||
|
|
c2a644b740 | ||
|
|
4e8b6dc038 | ||
|
|
0b538313fb | ||
|
|
a08b4b7372 | ||
|
|
a6e69eb147 | ||
|
|
334602a50a | ||
|
|
75103f4b26 | ||
|
|
af3be84005 | ||
|
|
a467923e9b | ||
|
|
55d092fd3e | ||
|
|
41d0085918 | ||
|
|
c79f8180f3 | ||
|
|
bd19661b60 | ||
|
|
4e879e64fc | ||
|
|
a7628e7f4e | ||
|
|
2d07270c1e | ||
|
|
bad9262f12 | ||
|
|
017d492348 | ||
|
|
110d2ea775 | ||
|
|
ca469f6d5c | ||
|
|
2b65e78674 | ||
|
|
a3b903f13a | ||
|
|
8843a7c389 | ||
|
|
fc4ac9bcf8 | ||
|
|
58dfe6c667 | ||
|
|
8d2236b6d6 | ||
|
|
d4b2dc3711 | ||
|
|
be41ca5d4e | ||
|
|
11396ef7cb | ||
|
|
e1c315b288 | ||
|
|
1b7b24ecb8 | ||
|
|
f213a2d640 | ||
|
|
8a5fa9b72f | ||
|
|
8f2c7c1239 | ||
|
|
09c3ac6f81 | ||
|
|
e920a4c56c | ||
|
|
f900060e7f | ||
|
|
3f8d438851 | ||
|
|
7bbd4a10b9 | ||
|
|
e16f35478b | ||
|
|
c78aeec2ec | ||
|
|
a8f1d57573 | ||
|
|
1e26db64fb | ||
|
|
6838d9414b | ||
|
|
073d6d8c14 | ||
|
|
5db601af3c | ||
|
|
226756e1d4 | ||
|
|
421413a654 | ||
|
|
779ee25a19 | ||
|
|
f37be68067 | ||
|
|
a3d8b8eb14 | ||
|
|
df19281b9f | ||
|
|
c1b1c62616 | ||
|
|
086e0c61fc | ||
|
|
24ae54886f | ||
|
|
7c5f561724 | ||
|
|
e1e35689ca | ||
|
|
2fd07f28f0 | ||
|
|
146c88fabb | ||
|
|
5495a211f2 | ||
|
|
cad9aa21d8 | ||
|
|
b7b6feed04 | ||
|
|
9cd9ebfda9 | ||
|
|
87caf3d826 | ||
|
|
d3a359b498 | ||
|
|
00ccd20452 | ||
|
|
20b5a7b6f0 | ||
|
|
062a2ad97d | ||
|
|
7a2105b1d5 | ||
|
|
2e7b71c28d | ||
|
|
caa08046b6 | ||
|
|
3d70f91b9f | ||
|
|
197642c914 | ||
|
|
665354ebd2 | ||
|
|
3d8d340f2a | ||
|
|
4f60494019 | ||
|
|
89ea4b8200 | ||
|
|
9c913902c5 | ||
|
|
7ceefb509b | ||
|
|
8053e0ed44 | ||
|
|
fcec8e0256 | ||
|
|
16fe7a2fbe | ||
|
|
2312f9d8df | ||
|
|
cdffa09a7b | ||
|
|
1ccadbc3f6 | ||
|
|
ad1ef65539 | ||
|
|
60c205ff37 | ||
|
|
23a1ea7191 | ||
|
|
9ef1a9c3f9 | ||
|
|
9803bbdc4b | ||
|
|
1cd04c96c7 | ||
|
|
ae4a4bb881 | ||
|
|
cc39ae57dc | ||
|
|
c7610b3539 | ||
|
|
c93f0ed851 | ||
|
|
e36a1c717d | ||
|
|
c74f6f587f | ||
|
|
f6369a6ed7 | ||
|
|
490f81437b | ||
|
|
f72af4f1f3 | ||
|
|
c4c936d6fa | ||
|
|
dec2c61e5d | ||
|
|
d59df1f938 | ||
|
|
23d285c698 | ||
|
|
786d04e939 | ||
|
|
7919dcfb12 | ||
|
|
e2ada2536b | ||
|
|
97f0037a7b | ||
|
|
0a931aa69f | ||
|
|
9a44eec04c | ||
|
|
b356c3cd48 | ||
|
|
f537e04532 | ||
|
|
f7b38a8955 | ||
|
|
e94cacd449 | ||
|
|
24d1e9927b | ||
|
|
ea14547643 | ||
|
|
cbd9cc6dae | ||
|
|
3b6f39931b | ||
|
|
f50734f0ee | ||
|
|
e9adbf231f | ||
|
|
d2623cf4c3 | ||
|
|
a6a68ef8be | ||
|
|
d01593e571 | ||
|
|
1f5e02f539 | ||
|
|
85e59c9920 | ||
|
|
1217c55c36 | ||
|
|
191658f637 | ||
|
|
b2b1a3ea65 | ||
|
|
0b8e83dc87 | ||
|
|
ce53964edf | ||
|
|
7e82595cae | ||
|
|
5e4ce8f66d | ||
|
|
5ba37bd7a3 | ||
|
|
a1ebf98552 | ||
|
|
3ae04752c4 | ||
|
|
9c172f62a4 | ||
|
|
7b870d30a4 | ||
|
|
381f061e7f | ||
|
|
e149071634 | ||
|
|
7ef2d79b3f | ||
|
|
c5a082fd8e | ||
|
|
241f951db1 | ||
|
|
74ef91649b | ||
|
|
08af7d0007 | ||
|
|
272f6c2541 | ||
|
|
0fcabc4e61 | ||
|
|
c8d420ec57 | ||
|
|
4a5a48a5b6 | ||
|
|
c9372b91f8 | ||
|
|
53744407ad | ||
|
|
419780591a | ||
|
|
4ddc7a4592 | ||
|
|
335c59792c | ||
|
|
b665f45ffa | ||
|
|
41e811773c | ||
|
|
b1e85d1ad8 | ||
|
|
28f111b7c0 | ||
|
|
4ca6b0eceb | ||
|
|
6568eb80a2 | ||
|
|
7aa28a0449 | ||
|
|
b0625f83c6 | ||
|
|
272d12fee1 | ||
|
|
f3abe549f3 | ||
|
|
b0376d500c | ||
|
|
bacf448388 | ||
|
|
88b7a9fcb5 | ||
|
|
8b0bd8c8ad | ||
|
|
13f19481db | ||
|
|
6e197b5802 | ||
|
|
639864e94d | ||
|
|
1aa3eb527f | ||
|
|
b07c788a08 | ||
|
|
7ed82068ef | ||
|
|
e1aaa136b2 | ||
|
|
bf920605b2 | ||
|
|
b8ea8400d1 | ||
|
|
3d0c86e176 | ||
|
|
064ec91fa2 | ||
|
|
b2032fc6fd | ||
|
|
e6f1edcbb5 | ||
|
|
04f2062942 | ||
|
|
fd5d6255c1 | ||
|
|
b0cd44e47f | ||
|
|
1318504aa5 | ||
|
|
87992fac88 | ||
|
|
b9205b13d6 | ||
|
|
5007666d6e | ||
|
|
5e04358ece | ||
|
|
4341fab794 | ||
|
|
2d1c62b6df | ||
|
|
b97ec405d0 | ||
|
|
baab74cb35 | ||
|
|
e21959d7bb | ||
|
|
a92de0df93 | ||
|
|
5315a5cfbf | ||
|
|
4153a83a4f | ||
|
|
5950c336e2 | ||
|
|
a99d57640a | ||
|
|
7e2542bd74 | ||
|
|
7d62cdad71 | ||
|
|
2dbf75fde9 | ||
|
|
30e0781778 | ||
|
|
9ea4c40ca9 | ||
|
|
76e1885355 | ||
|
|
577afc3fd5 | ||
|
|
9758e023f9 | ||
|
|
ceceee1947 | ||
|
|
42d35f8b9d | ||
|
|
c20f12fa6c | ||
|
|
9ca8a27bae | ||
|
|
4e8a4a5cdd | ||
|
|
fae71756eb | ||
|
|
635071fe8a | ||
|
|
7497d9530d | ||
|
|
8eb0cb4c66 | ||
|
|
7b43100af5 | ||
|
|
6c6b6061bc | ||
|
|
8b99154a00 | ||
|
|
7d123296f8 | ||
|
|
c80627a3d3 | ||
|
|
bee073dee5 | ||
|
|
a1db359ba1 | ||
|
|
6cb607e087 | ||
|
|
4577d1ce06 | ||
|
|
1eb0b49634 | ||
|
|
d88a674a15 | ||
|
|
6a48ad0ee7 | ||
|
|
79c3728d1f | ||
|
|
853128c9c3 | ||
|
|
8f451515e0 | ||
|
|
fd31e6d813 | ||
|
|
65dbc1de91 | ||
|
|
28f8874243 | ||
|
|
d4e0cb2ffa | ||
|
|
5b667026cb | ||
|
|
22b8e2cbb4 | ||
|
|
fe85e007b3 | ||
|
|
886c7f1f7a | ||
|
|
5efb88ed1f | ||
|
|
2c970a080d | ||
|
|
feed0ebeca | ||
|
|
f9eca42ded | ||
|
|
2a68d3e46e | ||
|
|
84a74d910d | ||
|
|
88f6d3b5ea | ||
|
|
196baa99b2 | ||
|
|
bdec751527 | ||
|
|
f07f6188ae | ||
|
|
f4d4925239 | ||
|
|
2be5ce4f7a | ||
|
|
e8953fb5e4 | ||
|
|
e01ecd1b79 | ||
|
|
2d019eb00e | ||
|
|
b5c88c7bfe | ||
|
|
414fcf836e | ||
|
|
79c5adfc9a | ||
|
|
1d9767a163 | ||
|
|
8e31abaefe | ||
|
|
50ec2549c0 | ||
|
|
bd08bc7923 | ||
|
|
b5bfd06624 | ||
|
|
079ab77a38 | ||
|
|
3b60d8302b | ||
|
|
778b96aa39 | ||
|
|
eaef783f4b | ||
|
|
6f2cfa0ba8 | ||
|
|
ce914019c5 | ||
|
|
e16405c675 | ||
|
|
168f7f5d34 | ||
|
|
417e60a466 | ||
|
|
d905010aa8 | ||
|
|
8630f57710 | ||
|
|
819b3d77ab | ||
|
|
182a192cc0 | ||
|
|
36d89745f9 | ||
|
|
2af0d78435 | ||
|
|
55ee3eb36b | ||
|
|
6545bfffa7 | ||
|
|
882249ef82 | ||
|
|
1ced5b44d7 | ||
|
|
24d98eef83 | ||
|
|
abc4981300 | ||
|
|
983179b84e | ||
|
|
248eb7f00c | ||
|
|
ac9a8d602c | ||
|
|
d4c3e3323f | ||
|
|
7b712f3d65 | ||
|
|
4398c83a67 | ||
|
|
85f2582afd | ||
|
|
9f340279cb | ||
|
|
156ddd3fae | ||
|
|
0ec40afa4c | ||
|
|
9381dda4a9 | ||
|
|
6bf6ed6f48 | ||
|
|
a810309160 | ||
|
|
45710e23c6 | ||
|
|
8cc349e85f | ||
|
|
b284a2a7c0 | ||
|
|
b692b1b282 | ||
|
|
cedfeee6d7 | ||
|
|
500992c499 | ||
|
|
7ff376b346 | ||
|
|
4a131dd8f1 | ||
|
|
f9fa52fe77 | ||
|
|
2d76752ca0 | ||
|
|
1ff6c4c090 | ||
|
|
5bd58f044e | ||
|
|
e2dd126962 | ||
|
|
0e766aa99b | ||
|
|
7430fde8c6 | ||
|
|
daea773fce |
2
.bazelrc
2
.bazelrc
@@ -1,5 +1,4 @@
|
|||||||
common --enable_platform_specific_config
|
common --enable_platform_specific_config
|
||||||
common --enable_bzlmod
|
|
||||||
# because we use --override_module with `%workspace%`, the lock file is not stable
|
# because we use --override_module with `%workspace%`, the lock file is not stable
|
||||||
common --lockfile_mode=off
|
common --lockfile_mode=off
|
||||||
|
|
||||||
@@ -25,6 +24,5 @@ common --registry=https://bcr.bazel.build
|
|||||||
|
|
||||||
common --@rules_dotnet//dotnet/settings:strict_deps=false
|
common --@rules_dotnet//dotnet/settings:strict_deps=false
|
||||||
common --experimental_isolated_extension_usages
|
common --experimental_isolated_extension_usages
|
||||||
common --incompatible_use_plus_in_repo_names
|
|
||||||
|
|
||||||
try-import %workspace%/local.bazelrc
|
try-import %workspace%/local.bazelrc
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
5f5d70b6c4d2fb1a889479569107f1692239e8a7
|
8.0.0rc1
|
||||||
|
|||||||
2
.github/codeql/codeql-config.yml
vendored
2
.github/codeql/codeql-config.yml
vendored
@@ -9,3 +9,5 @@ paths-ignore:
|
|||||||
- '/python/'
|
- '/python/'
|
||||||
- '/javascript/ql/test'
|
- '/javascript/ql/test'
|
||||||
- '/javascript/extractor/tests'
|
- '/javascript/extractor/tests'
|
||||||
|
- '/rust/ql/test'
|
||||||
|
- '/rust/ql/integration-tests'
|
||||||
|
|||||||
4
.github/labeler.yml
vendored
4
.github/labeler.yml
vendored
@@ -38,6 +38,10 @@ Swift:
|
|||||||
- swift/**/*
|
- swift/**/*
|
||||||
- change-notes/**/*swift*
|
- change-notes/**/*swift*
|
||||||
|
|
||||||
|
Actions:
|
||||||
|
- actions/**/*
|
||||||
|
- change-notes/**/*actions*
|
||||||
|
|
||||||
documentation:
|
documentation:
|
||||||
- "**/*.qhelp"
|
- "**/*.qhelp"
|
||||||
- "**/*.md"
|
- "**/*.md"
|
||||||
|
|||||||
2
.github/workflows/build-ripunzip.yml
vendored
2
.github/workflows/build-ripunzip.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-20.04, macos-12, windows-2019]
|
os: [ubuntu-20.04, macos-13, windows-2019]
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|||||||
4
.github/workflows/csv-coverage-metrics.yml
vendored
4
.github/workflows/csv-coverage-metrics.yml
vendored
@@ -37,7 +37,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
DATABASE="${{ runner.temp }}/java-database"
|
DATABASE="${{ runner.temp }}/java-database"
|
||||||
codeql database analyze --format=sarif-latest --output=metrics-java.sarif -- "$DATABASE" ./java/ql/src/Metrics/Summaries/FrameworkCoverage.ql
|
codeql database analyze --format=sarif-latest --output=metrics-java.sarif -- "$DATABASE" ./java/ql/src/Metrics/Summaries/FrameworkCoverage.ql
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: metrics-java.sarif
|
name: metrics-java.sarif
|
||||||
path: metrics-java.sarif
|
path: metrics-java.sarif
|
||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
DATABASE="${{ runner.temp }}/csharp-database"
|
DATABASE="${{ runner.temp }}/csharp-database"
|
||||||
codeql database analyze --format=sarif-latest --output=metrics-csharp.sarif -- "$DATABASE" ./csharp/ql/src/Metrics/Summaries/FrameworkCoverage.ql
|
codeql database analyze --format=sarif-latest --output=metrics-csharp.sarif -- "$DATABASE" ./csharp/ql/src/Metrics/Summaries/FrameworkCoverage.ql
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: metrics-csharp.sarif
|
name: metrics-csharp.sarif
|
||||||
path: metrics-csharp.sarif
|
path: metrics-csharp.sarif
|
||||||
|
|||||||
10
.github/workflows/csv-coverage-pr-artifacts.yml
vendored
10
.github/workflows/csv-coverage-pr-artifacts.yml
vendored
@@ -71,21 +71,21 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python base/misc/scripts/library-coverage/compare-folders.py out_base out_merge comparison.md
|
python base/misc/scripts/library-coverage/compare-folders.py out_base out_merge comparison.md
|
||||||
- name: Upload CSV package list
|
- name: Upload CSV package list
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: csv-framework-coverage-merge
|
name: csv-framework-coverage-merge
|
||||||
path: |
|
path: |
|
||||||
out_merge/framework-coverage-*.csv
|
out_merge/framework-coverage-*.csv
|
||||||
out_merge/framework-coverage-*.rst
|
out_merge/framework-coverage-*.rst
|
||||||
- name: Upload CSV package list
|
- name: Upload CSV package list
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: csv-framework-coverage-base
|
name: csv-framework-coverage-base
|
||||||
path: |
|
path: |
|
||||||
out_base/framework-coverage-*.csv
|
out_base/framework-coverage-*.csv
|
||||||
out_base/framework-coverage-*.rst
|
out_base/framework-coverage-*.rst
|
||||||
- name: Upload comparison results
|
- name: Upload comparison results
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: comparison
|
name: comparison
|
||||||
path: |
|
path: |
|
||||||
@@ -97,7 +97,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||||
- name: Upload PR number
|
- name: Upload PR number
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: pr
|
name: pr
|
||||||
path: pr/
|
path: pr/
|
||||||
@@ -117,7 +117,7 @@ jobs:
|
|||||||
GITHUB_TOKEN: ${{ github.token }}
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||||
- name: Upload comment ID (if it exists)
|
- name: Upload comment ID (if it exists)
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: comment
|
name: comment
|
||||||
path: comment/
|
path: comment/
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python script/misc/scripts/library-coverage/generate-timeseries.py codeqlModels
|
python script/misc/scripts/library-coverage/generate-timeseries.py codeqlModels
|
||||||
- name: Upload timeseries CSV
|
- name: Upload timeseries CSV
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: framework-coverage-timeseries
|
name: framework-coverage-timeseries
|
||||||
path: framework-coverage-timeseries-*.csv
|
path: framework-coverage-timeseries-*.csv
|
||||||
|
|||||||
4
.github/workflows/csv-coverage.yml
vendored
4
.github/workflows/csv-coverage.yml
vendored
@@ -34,12 +34,12 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python script/misc/scripts/library-coverage/generate-report.py ci codeqlModels script
|
python script/misc/scripts/library-coverage/generate-report.py ci codeqlModels script
|
||||||
- name: Upload CSV package list
|
- name: Upload CSV package list
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: framework-coverage-csv
|
name: framework-coverage-csv
|
||||||
path: framework-coverage-*.csv
|
path: framework-coverage-*.csv
|
||||||
- name: Upload RST package list
|
- name: Upload RST package list
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: framework-coverage-rst
|
name: framework-coverage-rst
|
||||||
path: framework-coverage-*.rst
|
path: framework-coverage-*.rst
|
||||||
|
|||||||
16
.github/workflows/mad_modelDiff.yml
vendored
16
.github/workflows/mad_modelDiff.yml
vendored
@@ -38,14 +38,20 @@ jobs:
|
|||||||
path: codeql-main
|
path: codeql-main
|
||||||
ref: main
|
ref: main
|
||||||
- uses: ./codeql-main/.github/actions/fetch-codeql
|
- uses: ./codeql-main/.github/actions/fetch-codeql
|
||||||
|
# compute the shortname of the project that does not contain any special (disk) characters
|
||||||
|
- run: |
|
||||||
|
echo "SHORTNAME=${SLUG//[^a-zA-Z0-9_]/}" >> $GITHUB_OUTPUT
|
||||||
|
env:
|
||||||
|
SLUG: ${{ matrix.slug }}
|
||||||
|
id: shortname
|
||||||
- name: Download database
|
- name: Download database
|
||||||
env:
|
env:
|
||||||
SLUG: ${{ matrix.slug }}
|
SLUG: ${{ matrix.slug }}
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
SHORTNAME: ${{ steps.shortname.outputs.SHORTNAME }}
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
mkdir lib-dbs
|
mkdir lib-dbs
|
||||||
SHORTNAME=${SLUG//[^a-zA-Z0-9_]/}
|
|
||||||
gh api -H "Accept: application/zip" "/repos/${SLUG}/code-scanning/codeql/databases/java" > "$SHORTNAME.zip"
|
gh api -H "Accept: application/zip" "/repos/${SLUG}/code-scanning/codeql/databases/java" > "$SHORTNAME.zip"
|
||||||
unzip -q -d "${SHORTNAME}-db" "${SHORTNAME}.zip"
|
unzip -q -d "${SHORTNAME}-db" "${SHORTNAME}.zip"
|
||||||
mkdir "lib-dbs/$SHORTNAME/"
|
mkdir "lib-dbs/$SHORTNAME/"
|
||||||
@@ -93,14 +99,14 @@ jobs:
|
|||||||
name="diff_${basename/.model.yml/""}"
|
name="diff_${basename/.model.yml/""}"
|
||||||
(diff -w -u $m $t | diff2html -i stdin -F $MODELS/$name.html) || true
|
(diff -w -u $m $t | diff2html -i stdin -F $MODELS/$name.html) || true
|
||||||
done
|
done
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: models
|
name: models-${{ steps.shortname.outputs.SHORTNAME }}
|
||||||
path: tmp-models/**/**/*.model.yml
|
path: tmp-models/**/**/*.model.yml
|
||||||
retention-days: 20
|
retention-days: 20
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: diffs
|
name: diffs-${{ steps.shortname.outputs.SHORTNAME }}
|
||||||
path: tmp-models/*.html
|
path: tmp-models/*.html
|
||||||
# An html file is only produced if the generated models differ.
|
# An html file is only produced if the generated models differ.
|
||||||
if-no-files-found: ignore
|
if-no-files-found: ignore
|
||||||
|
|||||||
2
.github/workflows/mad_regenerate-models.yml
vendored
2
.github/workflows/mad_regenerate-models.yml
vendored
@@ -59,7 +59,7 @@ jobs:
|
|||||||
find java -name "*.model.yml" -print0 | xargs -0 git add
|
find java -name "*.model.yml" -print0 | xargs -0 git add
|
||||||
git status
|
git status
|
||||||
git diff --cached > models.patch
|
git diff --cached > models.patch
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: patch
|
name: patch
|
||||||
path: models.patch
|
path: models.patch
|
||||||
|
|||||||
7
.github/workflows/post-pr-comment.yml
vendored
7
.github/workflows/post-pr-comment.yml
vendored
@@ -17,8 +17,11 @@ jobs:
|
|||||||
post_comment:
|
post_comment:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Download artifact
|
- name: Download artifacts
|
||||||
run: gh run download "${WORKFLOW_RUN_ID}" --repo "${GITHUB_REPOSITORY}" --name "comment"
|
run: |
|
||||||
|
gh run download "${WORKFLOW_RUN_ID}" --repo "${GITHUB_REPOSITORY}" --name "comment-pr-number"
|
||||||
|
gh run download "${WORKFLOW_RUN_ID}" --repo "${GITHUB_REPOSITORY}" --name "comment-body"
|
||||||
|
gh run download "${WORKFLOW_RUN_ID}" --repo "${GITHUB_REPOSITORY}" --name "comment-id"
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }}
|
WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }}
|
||||||
|
|||||||
12
.github/workflows/qhelp-pr-preview.yml
vendored
12
.github/workflows/qhelp-pr-preview.yml
vendored
@@ -36,9 +36,9 @@ jobs:
|
|||||||
- run: echo "${PR_NUMBER}" > pr_number.txt
|
- run: echo "${PR_NUMBER}" > pr_number.txt
|
||||||
env:
|
env:
|
||||||
PR_NUMBER: ${{ github.event.number }}
|
PR_NUMBER: ${{ github.event.number }}
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: comment
|
name: comment-pr-number
|
||||||
path: pr_number.txt
|
path: pr_number.txt
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
@@ -78,9 +78,9 @@ jobs:
|
|||||||
exit "${EXIT_CODE}"
|
exit "${EXIT_CODE}"
|
||||||
|
|
||||||
- if: ${{ !cancelled() }}
|
- if: ${{ !cancelled() }}
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: comment
|
name: comment-body
|
||||||
path: comment_body.txt
|
path: comment_body.txt
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
@@ -94,9 +94,9 @@ jobs:
|
|||||||
GITHUB_TOKEN: ${{ github.token }}
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
PR_NUMBER: ${{ github.event.number }}
|
PR_NUMBER: ${{ github.event.number }}
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: comment
|
name: comment-id
|
||||||
path: comment_id.txt
|
path: comment_id.txt
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|||||||
4
.github/workflows/ql-for-ql-build.yml
vendored
4
.github/workflows/ql-for-ql-build.yml
vendored
@@ -75,7 +75,7 @@ jobs:
|
|||||||
sarif_file: ql-for-ql.sarif
|
sarif_file: ql-for-ql.sarif
|
||||||
category: ql-for-ql
|
category: ql-for-ql
|
||||||
- name: Sarif as artifact
|
- name: Sarif as artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ql-for-ql.sarif
|
name: ql-for-ql.sarif
|
||||||
path: ql-for-ql.sarif
|
path: ql-for-ql.sarif
|
||||||
@@ -84,7 +84,7 @@ jobs:
|
|||||||
mkdir split-sarif
|
mkdir split-sarif
|
||||||
node ./ql/scripts/split-sarif.js ql-for-ql.sarif split-sarif
|
node ./ql/scripts/split-sarif.js ql-for-ql.sarif split-sarif
|
||||||
- name: Upload langs as artifacts
|
- name: Upload langs as artifacts
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ql-for-ql-langs
|
name: ql-for-ql-langs
|
||||||
path: split-sarif
|
path: split-sarif
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ jobs:
|
|||||||
"${CODEQL}" dataset measure --threads 4 --output "stats/${{ matrix.repo }}/stats.xml" "${{ runner.temp }}/database/db-ql"
|
"${CODEQL}" dataset measure --threads 4 --output "stats/${{ matrix.repo }}/stats.xml" "${{ runner.temp }}/database/db-ql"
|
||||||
env:
|
env:
|
||||||
CODEQL: ${{ steps.find-codeql.outputs.codeql-path }}
|
CODEQL: ${{ steps.find-codeql.outputs.codeql-path }}
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: measurements
|
name: measurements
|
||||||
path: stats
|
path: stats
|
||||||
@@ -76,14 +76,14 @@ jobs:
|
|||||||
needs: measure
|
needs: measure
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: measurements
|
name: measurements
|
||||||
path: stats
|
path: stats
|
||||||
- run: |
|
- run: |
|
||||||
python -m pip install --user lxml
|
python -m pip install --user lxml
|
||||||
find stats -name 'stats.xml' -print0 | sort -z | xargs -0 python ruby/scripts/merge_stats.py --output ql/ql/src/ql.dbscheme.stats --normalise ql_tokeninfo
|
find stats -name 'stats.xml' -print0 | sort -z | xargs -0 python ruby/scripts/merge_stats.py --output ql/ql/src/ql.dbscheme.stats --normalise ql_tokeninfo
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ql.dbscheme.stats
|
name: ql.dbscheme.stats
|
||||||
path: ql/ql/src/ql.dbscheme.stats
|
path: ql/ql/src/ql.dbscheme.stats
|
||||||
|
|||||||
2
.github/workflows/query-list.yml
vendored
2
.github/workflows/query-list.yml
vendored
@@ -37,7 +37,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python codeql/misc/scripts/generate-code-scanning-query-list.py > code-scanning-query-list.csv
|
python codeql/misc/scripts/generate-code-scanning-query-list.py > code-scanning-query-list.csv
|
||||||
- name: Upload code scanning query list
|
- name: Upload code scanning query list
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: code-scanning-query-list
|
name: code-scanning-query-list
|
||||||
path: code-scanning-query-list.csv
|
path: code-scanning-query-list.csv
|
||||||
|
|||||||
24
.github/workflows/ruby-build.yml
vendored
24
.github/workflows/ruby-build.yml
vendored
@@ -92,17 +92,17 @@ jobs:
|
|||||||
- name: Generate dbscheme
|
- name: Generate dbscheme
|
||||||
if: ${{ matrix.os == 'ubuntu-latest' && steps.cache-extractor.outputs.cache-hit != 'true'}}
|
if: ${{ matrix.os == 'ubuntu-latest' && steps.cache-extractor.outputs.cache-hit != 'true'}}
|
||||||
run: ../target/release/codeql-extractor-ruby generate --dbscheme ql/lib/ruby.dbscheme --library ql/lib/codeql/ruby/ast/internal/TreeSitter.qll
|
run: ../target/release/codeql-extractor-ruby generate --dbscheme ql/lib/ruby.dbscheme --library ql/lib/codeql/ruby/ast/internal/TreeSitter.qll
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||||
with:
|
with:
|
||||||
name: ruby.dbscheme
|
name: ruby.dbscheme
|
||||||
path: ruby/ql/lib/ruby.dbscheme
|
path: ruby/ql/lib/ruby.dbscheme
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||||
with:
|
with:
|
||||||
name: TreeSitter.qll
|
name: TreeSitter.qll
|
||||||
path: ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll
|
path: ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: extractor-${{ matrix.os }}
|
name: extractor-${{ matrix.os }}
|
||||||
path: |
|
path: |
|
||||||
@@ -134,7 +134,7 @@ jobs:
|
|||||||
PACK_FOLDER=$(readlink -f "$PACKS"/codeql/ruby-queries/*)
|
PACK_FOLDER=$(readlink -f "$PACKS"/codeql/ruby-queries/*)
|
||||||
codeql generate query-help --format=sarifv2.1.0 --output="${PACK_FOLDER}/rules.sarif" ql/src
|
codeql generate query-help --format=sarifv2.1.0 --output="${PACK_FOLDER}/rules.sarif" ql/src
|
||||||
(cd ql/src; find queries \( -name '*.qhelp' -o -name '*.rb' -o -name '*.erb' \) -exec bash -c 'mkdir -p "'"${PACK_FOLDER}"'/$(dirname "{}")"' \; -exec cp "{}" "${PACK_FOLDER}/{}" \;)
|
(cd ql/src; find queries \( -name '*.qhelp' -o -name '*.rb' -o -name '*.erb' \) -exec bash -c 'mkdir -p "'"${PACK_FOLDER}"'/$(dirname "{}")"' \; -exec cp "{}" "${PACK_FOLDER}/{}" \;)
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: codeql-ruby-queries
|
name: codeql-ruby-queries
|
||||||
path: |
|
path: |
|
||||||
@@ -147,19 +147,19 @@ jobs:
|
|||||||
needs: [build, compile-queries]
|
needs: [build, compile-queries]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ruby.dbscheme
|
name: ruby.dbscheme
|
||||||
path: ruby/ruby
|
path: ruby/ruby
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: extractor-ubuntu-latest
|
name: extractor-ubuntu-latest
|
||||||
path: ruby/linux64
|
path: ruby/linux64
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: extractor-windows-latest
|
name: extractor-windows-latest
|
||||||
path: ruby/win64
|
path: ruby/win64
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: extractor-macos-latest
|
name: extractor-macos-latest
|
||||||
path: ruby/osx64
|
path: ruby/osx64
|
||||||
@@ -172,13 +172,13 @@ jobs:
|
|||||||
cp win64/codeql-extractor-ruby.exe ruby/tools/win64/extractor.exe
|
cp win64/codeql-extractor-ruby.exe ruby/tools/win64/extractor.exe
|
||||||
chmod +x ruby/tools/{linux64,osx64}/extractor
|
chmod +x ruby/tools/{linux64,osx64}/extractor
|
||||||
zip -rq codeql-ruby.zip ruby
|
zip -rq codeql-ruby.zip ruby
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: codeql-ruby-pack
|
name: codeql-ruby-pack
|
||||||
path: ruby/codeql-ruby.zip
|
path: ruby/codeql-ruby.zip
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
include-hidden-files: true
|
include-hidden-files: true
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: codeql-ruby-queries
|
name: codeql-ruby-queries
|
||||||
path: ruby/qlpacks
|
path: ruby/qlpacks
|
||||||
@@ -190,7 +190,7 @@ jobs:
|
|||||||
]
|
]
|
||||||
}' > .codeqlmanifest.json
|
}' > .codeqlmanifest.json
|
||||||
zip -rq codeql-ruby-bundle.zip .codeqlmanifest.json ruby qlpacks
|
zip -rq codeql-ruby-bundle.zip .codeqlmanifest.json ruby qlpacks
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: codeql-ruby-bundle
|
name: codeql-ruby-bundle
|
||||||
path: ruby/codeql-ruby-bundle.zip
|
path: ruby/codeql-ruby-bundle.zip
|
||||||
@@ -214,7 +214,7 @@ jobs:
|
|||||||
uses: ./.github/actions/fetch-codeql
|
uses: ./.github/actions/fetch-codeql
|
||||||
|
|
||||||
- name: Download Ruby bundle
|
- name: Download Ruby bundle
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: codeql-ruby-bundle
|
name: codeql-ruby-bundle
|
||||||
path: ${{ runner.temp }}
|
path: ${{ runner.temp }}
|
||||||
|
|||||||
9
.github/workflows/ruby-dataset-measure.yml
vendored
9
.github/workflows/ruby-dataset-measure.yml
vendored
@@ -52,9 +52,9 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
mkdir -p "stats/${{ matrix.repo }}"
|
mkdir -p "stats/${{ matrix.repo }}"
|
||||||
codeql dataset measure --threads 4 --output "stats/${{ matrix.repo }}/stats.xml" "${{ runner.temp }}/database/db-ruby"
|
codeql dataset measure --threads 4 --output "stats/${{ matrix.repo }}/stats.xml" "${{ runner.temp }}/database/db-ruby"
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: measurements
|
name: measurements-${{ hashFiles('stats/**') }}
|
||||||
path: stats
|
path: stats
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
@@ -63,14 +63,13 @@ jobs:
|
|||||||
needs: measure
|
needs: measure
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: measurements
|
|
||||||
path: stats
|
path: stats
|
||||||
- run: |
|
- run: |
|
||||||
python -m pip install --user lxml
|
python -m pip install --user lxml
|
||||||
find stats -name 'stats.xml' | sort | xargs python ruby/scripts/merge_stats.py --output ruby/ql/lib/ruby.dbscheme.stats --normalise ruby_tokeninfo
|
find stats -name 'stats.xml' | sort | xargs python ruby/scripts/merge_stats.py --output ruby/ql/lib/ruby.dbscheme.stats --normalise ruby_tokeninfo
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ruby.dbscheme.stats
|
name: ruby.dbscheme.stats
|
||||||
path: ruby/ql/lib/ruby.dbscheme.stats
|
path: ruby/ql/lib/ruby.dbscheme.stats
|
||||||
|
|||||||
64
.github/workflows/rust-analysis.yml
vendored
Normal file
64
.github/workflows/rust-analysis.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
name: "Code scanning - Rust"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- 'rc/*'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- 'rc/*'
|
||||||
|
paths:
|
||||||
|
- '**/*.rs'
|
||||||
|
- '**/Cargo.toml'
|
||||||
|
- '.github/codeql/codeql-config.yml'
|
||||||
|
- '.github/workflows/rust-analysis.yml'
|
||||||
|
schedule:
|
||||||
|
- cron: '0 9 * * 1'
|
||||||
|
|
||||||
|
env:
|
||||||
|
CODEQL_ENABLE_EXPERIMENTAL_FEATURES: "true"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
language: [ 'rust' ]
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Query latest nightly CodeQL bundle
|
||||||
|
shell: bash
|
||||||
|
id: codeql
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
|
run: |
|
||||||
|
REPO=dsp-testing/codeql-cli-nightlies
|
||||||
|
TAG=$(
|
||||||
|
gh release list -R $REPO -L1 --exclude-drafts --json tagName -q ".[] | .tagName"
|
||||||
|
)
|
||||||
|
echo "nightly_bundle=https://github.com/$REPO/releases/download/$TAG/codeql-bundle-linux64.tar.zst" \
|
||||||
|
| tee -a "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@main
|
||||||
|
with:
|
||||||
|
tools: ${{ steps.codeql.outputs.nightly_bundle }}
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
config-file: ./.github/codeql/codeql-config.yml
|
||||||
|
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@main
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@main
|
||||||
6
.github/workflows/swift.yml
vendored
6
.github/workflows/swift.yml
vendored
@@ -44,7 +44,7 @@ jobs:
|
|||||||
# without waiting for the macOS build
|
# without waiting for the macOS build
|
||||||
build-and-test-macos:
|
build-and-test-macos:
|
||||||
if: github.repository_owner == 'github'
|
if: github.repository_owner == 'github'
|
||||||
runs-on: macos-12-xl
|
runs-on: macos-13-xlarge
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: ./swift/actions/build-and-test
|
- uses: ./swift/actions/build-and-test
|
||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
qltests-macos:
|
qltests-macos:
|
||||||
if: ${{ github.repository_owner == 'github' && github.event_name == 'pull_request' }}
|
if: ${{ github.repository_owner == 'github' && github.event_name == 'pull_request' }}
|
||||||
needs: build-and-test-macos
|
needs: build-and-test-macos
|
||||||
runs-on: macos-12-xl
|
runs-on: macos-13-xlarge
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: ./swift/actions/run-ql-tests
|
- uses: ./swift/actions/run-ql-tests
|
||||||
@@ -98,7 +98,7 @@ jobs:
|
|||||||
- name: Generate C++ files
|
- name: Generate C++ files
|
||||||
run: |
|
run: |
|
||||||
bazel run //swift/codegen:codegen -- --generate=trap,cpp --cpp-output=$PWD/generated-cpp-files
|
bazel run //swift/codegen:codegen -- --generate=trap,cpp --cpp-output=$PWD/generated-cpp-files
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: swift-generated-cpp-files
|
name: swift-generated-cpp-files
|
||||||
path: generated-cpp-files/**
|
path: generated-cpp-files/**
|
||||||
|
|||||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"omnisharp.autoStart": false,
|
"omnisharp.autoStart": false,
|
||||||
"cmake.sourceDirectory": "${workspaceFolder}/swift",
|
"cmake.sourceDirectory": "${workspaceFolder}/swift",
|
||||||
"cmake.buildDirectory": "${workspaceFolder}/bazel-cmake-build"
|
"cmake.buildDirectory": "${workspaceFolder}/bazel-cmake-build",
|
||||||
|
"editor.suggest.matchOnWordStartOnly": false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
/ql/ @github/codeql-ql-for-ql-reviewers
|
/ql/ @github/codeql-ql-for-ql-reviewers
|
||||||
|
|
||||||
# Bazel (excluding BUILD.bazel files)
|
# Bazel (excluding BUILD.bazel files)
|
||||||
WORKSPACE.bazel @github/codeql-ci-reviewers
|
|
||||||
MODULE.bazel @github/codeql-ci-reviewers
|
MODULE.bazel @github/codeql-ci-reviewers
|
||||||
.bazelversion @github/codeql-ci-reviewers
|
.bazelversion @github/codeql-ci-reviewers
|
||||||
.bazelrc @github/codeql-ci-reviewers
|
.bazelrc @github/codeql-ci-reviewers
|
||||||
|
|||||||
274
Cargo.lock
generated
274
Cargo.lock
generated
@@ -43,9 +43,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstream"
|
name = "anstream"
|
||||||
version = "0.6.15"
|
version = "0.6.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526"
|
checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstyle",
|
"anstyle",
|
||||||
"anstyle-parse",
|
"anstyle-parse",
|
||||||
@@ -58,43 +58,43 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstyle"
|
name = "anstyle"
|
||||||
version = "1.0.8"
|
version = "1.0.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"
|
checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstyle-parse"
|
name = "anstyle-parse"
|
||||||
version = "0.2.5"
|
version = "0.2.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb"
|
checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"utf8parse",
|
"utf8parse",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstyle-query"
|
name = "anstyle-query"
|
||||||
version = "1.1.1"
|
version = "1.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a"
|
checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstyle-wincon"
|
name = "anstyle-wincon"
|
||||||
version = "3.0.4"
|
version = "3.0.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8"
|
checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstyle",
|
"anstyle",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.87"
|
version = "1.0.93"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "10f00e1f6e58a40e807377c75c6a7f97bf9044fab57816f2414e6f5f4499d7b8"
|
checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "argfile"
|
name = "argfile"
|
||||||
@@ -133,9 +133,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.3.0"
|
version = "1.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
|
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "base64"
|
name = "base64"
|
||||||
@@ -173,9 +173,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytemuck"
|
name = "bytemuck"
|
||||||
version = "1.18.0"
|
version = "1.19.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae"
|
checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
@@ -217,9 +217,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.1.18"
|
version = "1.1.37"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476"
|
checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"shlex",
|
"shlex",
|
||||||
]
|
]
|
||||||
@@ -274,7 +274,7 @@ dependencies = [
|
|||||||
"chalk-derive",
|
"chalk-derive",
|
||||||
"chalk-ir",
|
"chalk-ir",
|
||||||
"ena",
|
"ena",
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"itertools 0.12.1",
|
"itertools 0.12.1",
|
||||||
"petgraph",
|
"petgraph",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
@@ -298,9 +298,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.17"
|
version = "4.5.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac"
|
checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
@@ -308,9 +308,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.5.17"
|
version = "4.5.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73"
|
checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
@@ -320,9 +320,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_derive"
|
name = "clap_derive"
|
||||||
version = "4.5.13"
|
version = "4.5.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0"
|
checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck 0.5.0",
|
"heck 0.5.0",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -384,6 +384,7 @@ dependencies = [
|
|||||||
"clap",
|
"clap",
|
||||||
"codeql-extractor",
|
"codeql-extractor",
|
||||||
"figment",
|
"figment",
|
||||||
|
"glob",
|
||||||
"itertools 0.13.0",
|
"itertools 0.13.0",
|
||||||
"log",
|
"log",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
@@ -408,9 +409,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorchoice"
|
name = "colorchoice"
|
||||||
version = "1.0.2"
|
version = "1.0.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0"
|
checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "core-foundation-sys"
|
name = "core-foundation-sys"
|
||||||
@@ -631,6 +632,7 @@ dependencies = [
|
|||||||
"atomic",
|
"atomic",
|
||||||
"pear",
|
"pear",
|
||||||
"serde",
|
"serde",
|
||||||
|
"serde_yaml",
|
||||||
"uncased",
|
"uncased",
|
||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
@@ -655,9 +657,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flate2"
|
name = "flate2"
|
||||||
version = "1.0.33"
|
version = "1.0.34"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253"
|
checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crc32fast",
|
"crc32fast",
|
||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
@@ -704,6 +706,12 @@ dependencies = [
|
|||||||
"wasi",
|
"wasi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "glob"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "globset"
|
name = "globset"
|
||||||
version = "0.4.15"
|
version = "0.4.15"
|
||||||
@@ -713,8 +721,8 @@ dependencies = [
|
|||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"bstr",
|
"bstr",
|
||||||
"log",
|
"log",
|
||||||
"regex-automata 0.4.7",
|
"regex-automata 0.4.8",
|
||||||
"regex-syntax 0.8.4",
|
"regex-syntax 0.8.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -729,6 +737,12 @@ version = "0.14.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.15.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "heck"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
@@ -770,9 +784,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iana-time-zone"
|
name = "iana-time-zone"
|
||||||
version = "0.1.60"
|
version = "0.1.61"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
|
checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_system_properties",
|
"android_system_properties",
|
||||||
"core-foundation-sys",
|
"core-foundation-sys",
|
||||||
@@ -810,12 +824,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "2.5.0"
|
version = "2.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
|
checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.15.1",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -903,9 +917,9 @@ checksum = "8b23360e99b8717f20aaa4598f5a6541efbe30630039fbc7706cf954a87947ae"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
version = "0.3.70"
|
version = "0.3.72"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
|
checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
@@ -944,9 +958,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.158"
|
version = "0.2.162"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
|
checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libredox"
|
name = "libredox"
|
||||||
@@ -961,9 +975,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "line-index"
|
name = "line-index"
|
||||||
version = "0.1.1"
|
version = "0.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "67d61795376ae2683928c218fda7d7d7db136fd38c06b7552904667f0d55580a"
|
checksum = "3e27e0ed5a392a7f5ba0b3808a2afccff16c64933312c84b57618b49d1209bd2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nohash-hasher",
|
"nohash-hasher",
|
||||||
"text-size",
|
"text-size",
|
||||||
@@ -1107,9 +1121,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.19.0"
|
version = "1.20.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oorandom"
|
name = "oorandom"
|
||||||
@@ -1204,14 +1218,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
|
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fixedbitset",
|
"fixedbitset",
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-lite"
|
name = "pin-project-lite"
|
||||||
version = "0.2.14"
|
version = "0.2.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
|
checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "powerfmt"
|
name = "powerfmt"
|
||||||
@@ -1230,9 +1244,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.86"
|
version = "1.0.89"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
@@ -1396,7 +1410,7 @@ dependencies = [
|
|||||||
"either",
|
"either",
|
||||||
"fst",
|
"fst",
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"itertools 0.12.1",
|
"itertools 0.12.1",
|
||||||
"la-arena",
|
"la-arena",
|
||||||
"ra-ap-rustc_abi",
|
"ra-ap-rustc_abi",
|
||||||
@@ -1461,7 +1475,7 @@ dependencies = [
|
|||||||
"cov-mark",
|
"cov-mark",
|
||||||
"either",
|
"either",
|
||||||
"ena",
|
"ena",
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"itertools 0.12.1",
|
"itertools 0.12.1",
|
||||||
"la-arena",
|
"la-arena",
|
||||||
"nohash-hasher",
|
"nohash-hasher",
|
||||||
@@ -1498,7 +1512,7 @@ dependencies = [
|
|||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"either",
|
"either",
|
||||||
"fst",
|
"fst",
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"itertools 0.12.1",
|
"itertools 0.12.1",
|
||||||
"line-index",
|
"line-index",
|
||||||
"memchr",
|
"memchr",
|
||||||
@@ -1607,7 +1621,7 @@ version = "0.0.232"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "809670622e93f105abc60ea0cb371cfaff990beae7ce534b127fb39b423b4b92"
|
checksum = "809670622e93f105abc60ea0cb371cfaff990beae7ce534b127fb39b423b4b92"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"ra_ap_base_db",
|
"ra_ap_base_db",
|
||||||
"ra_ap_intern",
|
"ra_ap_intern",
|
||||||
"ra_ap_paths",
|
"ra_ap_paths",
|
||||||
@@ -1663,7 +1677,7 @@ version = "0.0.232"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "370b302873eeafd07ccc6a714fc9395cae11e385955ccb78081093ee3b86f94e"
|
checksum = "370b302873eeafd07ccc6a714fc9395cae11e385955ccb78081093ee3b86f94e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"itertools 0.12.1",
|
"itertools 0.12.1",
|
||||||
"lock_api",
|
"lock_api",
|
||||||
"oorandom",
|
"oorandom",
|
||||||
@@ -1726,7 +1740,7 @@ checksum = "f1ac12decfd5cadd880177316fc16afc1f2c67f241f6290b51fd6f222e2bd4d5"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"cov-mark",
|
"cov-mark",
|
||||||
"either",
|
"either",
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"itertools 0.12.1",
|
"itertools 0.12.1",
|
||||||
"ra-ap-rustc_lexer",
|
"ra-ap-rustc_lexer",
|
||||||
"ra_ap_parser",
|
"ra_ap_parser",
|
||||||
@@ -1796,7 +1810,7 @@ checksum = "d833eaa5422de9bb51ab1841fe505ed00fb51e64cce397e21de6c324bbcbffa0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"fst",
|
"fst",
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"nohash-hasher",
|
"nohash-hasher",
|
||||||
"ra_ap_paths",
|
"ra_ap_paths",
|
||||||
"ra_ap_stdx",
|
"ra_ap_stdx",
|
||||||
@@ -1873,23 +1887,23 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.5.3"
|
version = "0.5.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
|
checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.6.0",
|
"bitflags 2.6.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.10.6"
|
version = "1.11.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
|
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
"regex-automata 0.4.7",
|
"regex-automata 0.4.8",
|
||||||
"regex-syntax 0.8.4",
|
"regex-syntax 0.8.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1903,13 +1917,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-automata"
|
name = "regex-automata"
|
||||||
version = "0.4.7"
|
version = "0.4.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
|
checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
"regex-syntax 0.8.4",
|
"regex-syntax 0.8.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1920,9 +1934,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.8.4"
|
version = "0.8.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
|
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rowan"
|
name = "rowan"
|
||||||
@@ -1998,18 +2012,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.210"
|
version = "1.0.214"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a"
|
checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.210"
|
version = "1.0.214"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
|
checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2018,9 +2032,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.128"
|
version = "1.0.132"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8"
|
checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"memchr",
|
"memchr",
|
||||||
@@ -2030,15 +2044,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_with"
|
name = "serde_with"
|
||||||
version = "3.9.0"
|
version = "3.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857"
|
checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"chrono",
|
"chrono",
|
||||||
"hex",
|
"hex",
|
||||||
"indexmap 1.9.3",
|
"indexmap 1.9.3",
|
||||||
"indexmap 2.5.0",
|
"indexmap 2.6.0",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -2048,9 +2062,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_with_macros"
|
name = "serde_with_macros"
|
||||||
version = "3.9.0"
|
version = "3.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350"
|
checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -2058,6 +2072,19 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_yaml"
|
||||||
|
version = "0.9.34+deprecated"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap 2.6.0",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
"unsafe-libyaml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sharded-slab"
|
name = "sharded-slab"
|
||||||
version = "0.1.7"
|
version = "0.1.7"
|
||||||
@@ -2113,6 +2140,12 @@ dependencies = [
|
|||||||
"thread_local",
|
"thread_local",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "streaming-iterator"
|
||||||
|
version = "0.1.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "strsim"
|
name = "strsim"
|
||||||
version = "0.11.1"
|
version = "0.11.1"
|
||||||
@@ -2121,9 +2154,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.77"
|
version = "2.0.87"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
|
checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2158,18 +2191,18 @@ checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.63"
|
version = "1.0.69"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
|
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror-impl",
|
"thiserror-impl",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror-impl"
|
name = "thiserror-impl"
|
||||||
version = "1.0.63"
|
version = "1.0.69"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
|
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2280,20 +2313,22 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter"
|
name = "tree-sitter"
|
||||||
version = "0.23.0"
|
version = "0.24.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "20f4cd3642c47a85052a887d86704f4eac272969f61b686bdd3f772122aabaff"
|
checksum = "b67baf55e7e1b6806063b1e51041069c90afff16afcbbccd278d899f9d84bca4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"regex",
|
"regex",
|
||||||
"regex-syntax 0.8.4",
|
"regex-syntax 0.8.5",
|
||||||
|
"streaming-iterator",
|
||||||
"tree-sitter-language",
|
"tree-sitter-language",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter-embedded-template"
|
name = "tree-sitter-embedded-template"
|
||||||
version = "0.23.0"
|
version = "0.23.2"
|
||||||
source = "git+https://github.com/tree-sitter/tree-sitter-embedded-template.git?rev=62b0a6e45900a7dff7c37da95fec20a09968ba52#62b0a6e45900a7dff7c37da95fec20a09968ba52"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "790063ef14e5b67556abc0b3be0ed863fb41d65ee791cf8c0b20eb42a1fa46af"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"tree-sitter-language",
|
"tree-sitter-language",
|
||||||
@@ -2301,8 +2336,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter-json"
|
name = "tree-sitter-json"
|
||||||
version = "0.23.0"
|
version = "0.24.8"
|
||||||
source = "git+https://github.com/tree-sitter/tree-sitter-json#8bfdb43f47ad805bb1ce093203cfcbaa8ed2c571"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4d727acca406c0020cffc6cf35516764f36c8e3dc4408e5ebe2cb35a947ec471"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"tree-sitter-language",
|
"tree-sitter-language",
|
||||||
@@ -2310,14 +2346,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter-language"
|
name = "tree-sitter-language"
|
||||||
version = "0.1.0"
|
version = "0.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2545046bd1473dac6c626659cc2567c6c0ff302fc8b84a56c4243378276f7f57"
|
checksum = "e8ddffe35a0e5eeeadf13ff7350af564c6e73993a24db62caee1822b185c2600"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter-ql"
|
name = "tree-sitter-ql"
|
||||||
version = "0.23.0"
|
version = "0.23.1"
|
||||||
source = "git+https://github.com/tree-sitter/tree-sitter-ql#c73c31c89cb0019ef56fe8bc1723e7c36e0be607"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "80b7bcaf39acefbb199417a6ec2fd0c038083ba115da3e4f4426c820dc76d386"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"tree-sitter-language",
|
"tree-sitter-language",
|
||||||
@@ -2325,8 +2362,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter-ruby"
|
name = "tree-sitter-ruby"
|
||||||
version = "0.23.0"
|
version = "0.23.1"
|
||||||
source = "git+https://github.com/tree-sitter/tree-sitter-ruby.git?rev=a66579f70d6f50ffd81a16fc3d3358e2ac173c88#a66579f70d6f50ffd81a16fc3d3358e2ac173c88"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "be0484ea4ef6bb9c575b4fdabde7e31340a8d2dbc7d52b321ac83da703249f95"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"tree-sitter-language",
|
"tree-sitter-language",
|
||||||
@@ -2334,9 +2372,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "triomphe"
|
name = "triomphe"
|
||||||
version = "0.1.13"
|
version = "0.1.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369"
|
checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"stable_deref_trait",
|
"stable_deref_trait",
|
||||||
@@ -2371,15 +2409,21 @@ checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-properties"
|
name = "unicode-properties"
|
||||||
version = "0.1.2"
|
version = "0.1.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524"
|
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-xid"
|
name = "unicode-xid"
|
||||||
version = "0.2.5"
|
version = "0.2.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a"
|
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-libyaml"
|
||||||
|
version = "0.2.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "utf8parse"
|
name = "utf8parse"
|
||||||
@@ -2417,9 +2461,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.93"
|
version = "0.2.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
|
checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
@@ -2428,9 +2472,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "wasm-bindgen-backend"
|
||||||
version = "0.2.93"
|
version = "0.2.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
|
checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"log",
|
"log",
|
||||||
@@ -2443,9 +2487,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.93"
|
version = "0.2.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
|
checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
@@ -2453,9 +2497,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.93"
|
version = "0.2.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
|
checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2466,9 +2510,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.93"
|
version = "0.2.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
|
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi"
|
name = "winapi"
|
||||||
|
|||||||
@@ -18,14 +18,14 @@ bazel_dep(name = "platforms", version = "0.0.10")
|
|||||||
bazel_dep(name = "rules_go", version = "0.50.0")
|
bazel_dep(name = "rules_go", version = "0.50.0")
|
||||||
bazel_dep(name = "rules_pkg", version = "1.0.1")
|
bazel_dep(name = "rules_pkg", version = "1.0.1")
|
||||||
bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1")
|
bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1")
|
||||||
bazel_dep(name = "rules_python", version = "0.35.0")
|
bazel_dep(name = "rules_python", version = "0.36.0")
|
||||||
bazel_dep(name = "bazel_skylib", version = "1.6.1")
|
bazel_dep(name = "bazel_skylib", version = "1.7.1")
|
||||||
bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl")
|
bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "absl")
|
||||||
bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json")
|
bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json")
|
||||||
bazel_dep(name = "fmt", version = "10.0.0")
|
bazel_dep(name = "fmt", version = "10.0.0")
|
||||||
bazel_dep(name = "rules_kotlin", version = "2.0.0-codeql.1")
|
bazel_dep(name = "rules_kotlin", version = "2.0.0-codeql.1")
|
||||||
bazel_dep(name = "gazelle", version = "0.38.0")
|
bazel_dep(name = "gazelle", version = "0.38.0")
|
||||||
bazel_dep(name = "rules_dotnet", version = "0.15.1")
|
bazel_dep(name = "rules_dotnet", version = "0.16.1")
|
||||||
bazel_dep(name = "googletest", version = "1.14.0.bcr.1")
|
bazel_dep(name = "googletest", version = "1.14.0.bcr.1")
|
||||||
bazel_dep(name = "rules_rust", version = "0.52.2")
|
bazel_dep(name = "rules_rust", version = "0.52.2")
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
# please use MODULE.bazel to add dependencies
|
|
||||||
# this empty file is required by internal repositories, don't remove it
|
|
||||||
20
actions/BUILD.bazel
Normal file
20
actions/BUILD.bazel
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
load("//misc/bazel:pkg.bzl", "codeql_pack")
|
||||||
|
|
||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
[
|
||||||
|
codeql_pack(
|
||||||
|
name = "-".join(parts),
|
||||||
|
srcs = [
|
||||||
|
"//actions/extractor",
|
||||||
|
],
|
||||||
|
pack_prefix = "/".join(parts),
|
||||||
|
)
|
||||||
|
for parts in (
|
||||||
|
[
|
||||||
|
"experimental",
|
||||||
|
"actions",
|
||||||
|
],
|
||||||
|
["actions"],
|
||||||
|
)
|
||||||
|
]
|
||||||
10
actions/extractor/BUILD.bazel
Normal file
10
actions/extractor/BUILD.bazel
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
load("//misc/bazel:pkg.bzl", "codeql_pkg_files", "strip_prefix")
|
||||||
|
|
||||||
|
codeql_pkg_files(
|
||||||
|
name = "extractor",
|
||||||
|
srcs = [
|
||||||
|
"codeql-extractor.yml",
|
||||||
|
] + glob(["tools/**"]),
|
||||||
|
strip_prefix = strip_prefix.from_pkg(),
|
||||||
|
visibility = ["//actions:__pkg__"],
|
||||||
|
)
|
||||||
44
actions/extractor/codeql-extractor.yml
Normal file
44
actions/extractor/codeql-extractor.yml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
name: "actions"
|
||||||
|
aliases: []
|
||||||
|
display_name: "GitHub Actions"
|
||||||
|
version: 0.0.1
|
||||||
|
column_kind: "utf16"
|
||||||
|
unicode_newlines: true
|
||||||
|
build_modes:
|
||||||
|
- none
|
||||||
|
file_coverage_languages: []
|
||||||
|
github_api_languages: []
|
||||||
|
scc_languages: []
|
||||||
|
file_types:
|
||||||
|
- name: workflow
|
||||||
|
display_name: GitHub Actions workflow files
|
||||||
|
extensions:
|
||||||
|
- .yml
|
||||||
|
- .yaml
|
||||||
|
forwarded_extractor_name: javascript
|
||||||
|
options:
|
||||||
|
trap:
|
||||||
|
title: TRAP options
|
||||||
|
description: Options about how the extractor handles TRAP files
|
||||||
|
type: object
|
||||||
|
visibility: 3
|
||||||
|
properties:
|
||||||
|
cache:
|
||||||
|
title: TRAP cache options
|
||||||
|
description: Options about how the extractor handles its TRAP cache
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
dir:
|
||||||
|
title: TRAP cache directory
|
||||||
|
description: The directory of the TRAP cache to use
|
||||||
|
type: string
|
||||||
|
bound:
|
||||||
|
title: TRAP cache bound
|
||||||
|
description: A soft limit (in MB) on the size of the TRAP cache
|
||||||
|
type: string
|
||||||
|
pattern: "[0-9]+"
|
||||||
|
write:
|
||||||
|
title: TRAP cache writeable
|
||||||
|
description: Whether to write to the TRAP cache as well as reading it
|
||||||
|
type: string
|
||||||
|
pattern: "(true|TRUE|false|FALSE)"
|
||||||
40
actions/extractor/tools/autobuild-impl.ps1
Normal file
40
actions/extractor/tools/autobuild-impl.ps1
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
if (($null -ne $env:LGTM_INDEX_INCLUDE) -or ($null -ne $env:LGTM_INDEX_EXCLUDE) -or ($null -ne $env:LGTM_INDEX_FILTERS)) {
|
||||||
|
Write-Output 'Path filters set. Passing them through to the JavaScript extractor.'
|
||||||
|
} else {
|
||||||
|
Write-Output 'No path filters set. Using the default filters.'
|
||||||
|
$DefaultPathFilters = @(
|
||||||
|
'exclude:**/*',
|
||||||
|
'include:.github/workflows/**/*.yml',
|
||||||
|
'include:.github/workflows/**/*.yaml',
|
||||||
|
'include:**/action.yml',
|
||||||
|
'include:**/action.yaml'
|
||||||
|
)
|
||||||
|
|
||||||
|
$env:LGTM_INDEX_FILTERS = $DefaultPathFilters -join "`n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Find the JavaScript extractor directory via `codeql resolve extractor`.
|
||||||
|
$CodeQL = Join-Path $env:CODEQL_DIST 'codeql.exe'
|
||||||
|
$env:CODEQL_EXTRACTOR_JAVASCRIPT_ROOT = &$CodeQL resolve extractor --language javascript
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
throw 'Failed to resolve JavaScript extractor.'
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output "Found JavaScript extractor at '${env:CODEQL_EXTRACTOR_JAVASCRIPT_ROOT}'."
|
||||||
|
|
||||||
|
# Run the JavaScript autobuilder.
|
||||||
|
$JavaScriptAutoBuild = Join-Path $env:CODEQL_EXTRACTOR_JAVASCRIPT_ROOT 'tools\autobuild.cmd'
|
||||||
|
Write-Output "Running JavaScript autobuilder at '${JavaScriptAutoBuild}'."
|
||||||
|
|
||||||
|
# Copy the values of the Actions extractor environment variables to the JavaScript extractor environment variables.
|
||||||
|
$env:CODEQL_EXTRACTOR_JAVASCRIPT_DIAGNOSTIC_DIR = $env:CODEQL_EXTRACTOR_ACTIONS_DIAGNOSTIC_DIR
|
||||||
|
$env:CODEQL_EXTRACTOR_JAVASCRIPT_LOG_DIR = $env:CODEQL_EXTRACTOR_ACTIONS_LOG_DIR
|
||||||
|
$env:CODEQL_EXTRACTOR_JAVASCRIPT_SCRATCH_DIR = $env:CODEQL_EXTRACTOR_ACTIONS_SCRATCH_DIR
|
||||||
|
$env:CODEQL_EXTRACTOR_JAVASCRIPT_SOURCE_ARCHIVE_DIR = $env:CODEQL_EXTRACTOR_ACTIONS_SOURCE_ARCHIVE_DIR
|
||||||
|
$env:CODEQL_EXTRACTOR_JAVASCRIPT_TRAP_DIR = $env:CODEQL_EXTRACTOR_ACTIONS_TRAP_DIR
|
||||||
|
$env:CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE = $env:CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE
|
||||||
|
|
||||||
|
&$JavaScriptAutoBuild
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
throw "JavaScript autobuilder failed."
|
||||||
|
}
|
||||||
3
actions/extractor/tools/autobuild.cmd
Normal file
3
actions/extractor/tools/autobuild.cmd
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
@echo off
|
||||||
|
rem All of the work is done in the PowerShell script
|
||||||
|
powershell.exe %~dp0autobuild-impl.ps1
|
||||||
39
actions/extractor/tools/autobuild.sh
Executable file
39
actions/extractor/tools/autobuild.sh
Executable file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
DEFAULT_PATH_FILTERS=$(cat << END
|
||||||
|
exclude:**/*
|
||||||
|
include:.github/workflows/**/*.yml
|
||||||
|
include:.github/workflows/**/*.yaml
|
||||||
|
include:**/action.yml
|
||||||
|
include:**/action.yaml
|
||||||
|
END
|
||||||
|
)
|
||||||
|
|
||||||
|
if [ -n "${LGTM_INDEX_INCLUDE:-}" ] || [ -n "${LGTM_INDEX_EXCLUDE:-}" ] || [ -n "${LGTM_INDEX_FILTERS:-}" ] ; then
|
||||||
|
echo "Path filters set. Passing them through to the JavaScript extractor."
|
||||||
|
else
|
||||||
|
echo "No path filters set. Using the default filters."
|
||||||
|
LGTM_INDEX_FILTERS="${DEFAULT_PATH_FILTERS}"
|
||||||
|
export LGTM_INDEX_FILTERS
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find the JavaScript extractor directory via `codeql resolve extractor`.
|
||||||
|
CODEQL_EXTRACTOR_JAVASCRIPT_ROOT="$($CODEQL_DIST/codeql resolve extractor --language javascript)"
|
||||||
|
export CODEQL_EXTRACTOR_JAVASCRIPT_ROOT
|
||||||
|
|
||||||
|
echo "Found JavaScript extractor at '${CODEQL_EXTRACTOR_JAVASCRIPT_ROOT}'."
|
||||||
|
|
||||||
|
# Run the JavaScript autobuilder
|
||||||
|
JAVASCRIPT_AUTO_BUILD="${CODEQL_EXTRACTOR_JAVASCRIPT_ROOT}/tools/autobuild.sh"
|
||||||
|
echo "Running JavaScript autobuilder at '${JAVASCRIPT_AUTO_BUILD}'."
|
||||||
|
|
||||||
|
# Copy the values of the Actions extractor environment variables to the JavaScript extractor environment variables.
|
||||||
|
env CODEQL_EXTRACTOR_JAVASCRIPT_DIAGNOSTIC_DIR="${CODEQL_EXTRACTOR_ACTIONS_DIAGNOSTIC_DIR}" \
|
||||||
|
CODEQL_EXTRACTOR_JAVASCRIPT_LOG_DIR="${CODEQL_EXTRACTOR_ACTIONS_LOG_DIR}" \
|
||||||
|
CODEQL_EXTRACTOR_JAVASCRIPT_SCRATCH_DIR="${CODEQL_EXTRACTOR_ACTIONS_SCRATCH_DIR}" \
|
||||||
|
CODEQL_EXTRACTOR_JAVASCRIPT_SOURCE_ARCHIVE_DIR="${CODEQL_EXTRACTOR_ACTIONS_SOURCE_ARCHIVE_DIR}" \
|
||||||
|
CODEQL_EXTRACTOR_JAVASCRIPT_TRAP_DIR="${CODEQL_EXTRACTOR_ACTIONS_TRAP_DIR}" \
|
||||||
|
CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE="${CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE}" \
|
||||||
|
${JAVASCRIPT_AUTO_BUILD}
|
||||||
1
actions/ql/lib/actions.qll
Normal file
1
actions/ql/lib/actions.qll
Normal file
@@ -0,0 +1 @@
|
|||||||
|
predicate placeholder(int x) { x = 0 }
|
||||||
12
actions/ql/lib/qlpack.yml
Normal file
12
actions/ql/lib/qlpack.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
name: codeql/actions-all
|
||||||
|
version: 0.0.1-dev
|
||||||
|
library: true
|
||||||
|
warnOnImplicitThis: true
|
||||||
|
dependencies:
|
||||||
|
codeql/util: ${workspace}
|
||||||
|
codeql/yaml: ${workspace}
|
||||||
|
codeql/controlflow: ${workspace}
|
||||||
|
codeql/dataflow: ${workspace}
|
||||||
|
codeql/javascript-all: ${workspace}
|
||||||
|
extractor: actions
|
||||||
|
groups: actions
|
||||||
16
actions/ql/src/Placeholder.ql
Normal file
16
actions/ql/src/Placeholder.ql
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* @name Placeholder Query
|
||||||
|
* @description Placeholder
|
||||||
|
* @kind problem
|
||||||
|
* @problem.severity warning
|
||||||
|
* @security-severity 9.3
|
||||||
|
* @precision high
|
||||||
|
* @id actions/placeholder
|
||||||
|
* @tags actions security
|
||||||
|
*/
|
||||||
|
|
||||||
|
import actions
|
||||||
|
import javascript
|
||||||
|
|
||||||
|
from File f
|
||||||
|
select f, "Analyzed a file."
|
||||||
8
actions/ql/src/qlpack.yml
Normal file
8
actions/ql/src/qlpack.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
name: codeql/actions-queries
|
||||||
|
version: 0.0.1-dev
|
||||||
|
library: false
|
||||||
|
groups: [actions, queries]
|
||||||
|
extractor: actions
|
||||||
|
dependencies:
|
||||||
|
codeql/actions-all: ${workspace}
|
||||||
|
warnOnImplicitThis: true
|
||||||
23
actions/ql/test/library-tests/.github/workflows/shell.yml
vendored
Normal file
23
actions/ql/test/library-tests/.github/workflows/shell.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
on: push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
job1:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- shell: pwsh
|
||||||
|
run: Write-Output "foo"
|
||||||
|
job2:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "foo"
|
||||||
|
|
||||||
|
job3:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- shell: bash
|
||||||
|
run: echo "foo"
|
||||||
|
job4:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- run: Write-Output "foo"
|
||||||
|
|
||||||
1
actions/ql/test/library-tests/Placeholder.expected
Normal file
1
actions/ql/test/library-tests/Placeholder.expected
Normal file
@@ -0,0 +1 @@
|
|||||||
|
| 1 |
|
||||||
1
actions/ql/test/library-tests/Placeholder.ql
Normal file
1
actions/ql/test/library-tests/Placeholder.ql
Normal file
@@ -0,0 +1 @@
|
|||||||
|
select 1
|
||||||
8
actions/ql/test/qlpack.yml
Normal file
8
actions/ql/test/qlpack.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
name: codeql/actions-tests
|
||||||
|
groups: [codeql, test]
|
||||||
|
dependencies:
|
||||||
|
codeql/actions-all: ${workspace}
|
||||||
|
codeql/actions-queries: ${workspace}
|
||||||
|
extractor: actions
|
||||||
|
tests: .
|
||||||
|
warnOnImplicitThis: true
|
||||||
23
actions/ql/test/query-tests/Placeholder/.github/workflows/shell.yml
vendored
Normal file
23
actions/ql/test/query-tests/Placeholder/.github/workflows/shell.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
on: push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
job1:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- shell: pwsh
|
||||||
|
run: Write-Output "foo"
|
||||||
|
job2:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo "foo"
|
||||||
|
|
||||||
|
job3:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- shell: bash
|
||||||
|
run: echo "foo"
|
||||||
|
job4:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- run: Write-Output "foo"
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
| .github/workflows/shell.yml:0:0:0:0 | .github/workflows/shell.yml | Analyzed a file. |
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Placeholder.ql
|
||||||
@@ -351,9 +351,5 @@
|
|||||||
"Python model summaries test extension": [
|
"Python model summaries test extension": [
|
||||||
"python/ql/test/library-tests/dataflow/model-summaries/InlineTaintTest.ext.yml",
|
"python/ql/test/library-tests/dataflow/model-summaries/InlineTaintTest.ext.yml",
|
||||||
"python/ql/test/library-tests/dataflow/model-summaries/NormalDataflowTest.ext.yml"
|
"python/ql/test/library-tests/dataflow/model-summaries/NormalDataflowTest.ext.yml"
|
||||||
],
|
|
||||||
"Diagnostics.qll": [
|
|
||||||
"ruby/ql/lib/codeql/ruby/Diagnostics.qll",
|
|
||||||
"rust/ql/lib/codeql/rust/Diagnostics.qll"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
class Expr extends @expr {
|
||||||
|
string toString() { none() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class Location extends @location_expr {
|
||||||
|
string toString() { none() }
|
||||||
|
}
|
||||||
|
|
||||||
|
predicate isExprRequirement(Expr expr) {
|
||||||
|
exists(int kind | exprs(expr, kind, _) | kind = [391, 392, 393])
|
||||||
|
}
|
||||||
|
|
||||||
|
from Expr expr, int kind, int kind_new, Location location
|
||||||
|
where
|
||||||
|
exprs(expr, kind, location) and
|
||||||
|
if isExprRequirement(expr) then kind_new = 1 else kind_new = kind
|
||||||
|
select expr, kind_new, location
|
||||||
2323
cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme
Normal file
2323
cpp/downgrades/e51fad7a2436caefab0c6bd52f05e28e7cce4d92/old.dbscheme
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,17 @@
|
|||||||
|
class Parameter extends @parameter {
|
||||||
|
string toString() { none() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class ParameterizedElement extends @parameterized_element {
|
||||||
|
string toString() { none() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class Type extends @type {
|
||||||
|
string toString() { none() }
|
||||||
|
}
|
||||||
|
|
||||||
|
from Parameter param, ParameterizedElement pe, int index, Type type
|
||||||
|
where
|
||||||
|
params(param, pe, index, type) and
|
||||||
|
not pe instanceof @requires_expr
|
||||||
|
select param, pe, index, type
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
|||||||
|
description: Support C++20 requires expressions
|
||||||
|
compatibility: partial
|
||||||
|
compound_requirement_is_noexcept.rel: delete
|
||||||
|
exprs.rel: run exprs.qlo
|
||||||
|
params.rel: run params.qlo
|
||||||
@@ -1,3 +1,16 @@
|
|||||||
|
## 2.1.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
* Added a new predicate `DataFlow::getARuntimeTarget` for getting a function that may be invoked by a `Call` expression. Unlike `Call.getTarget` this new predicate may also resolve function pointers.
|
||||||
|
* Added the predicate `mayBeFromImplicitlyDeclaredFunction()` to the `Call` class to represent calls that may be the return value of an implicitly declared C function.
|
||||||
|
* Added the predicate `getAnExplicitDeclarationEntry()` to the `Function` class to get a `FunctionDeclarationEntry` that is not implicit.
|
||||||
|
* Added classes `RequiresExpr`, `SimpleRequirementExpr`, `TypeRequirementExpr`, `CompoundRequirementExpr`, and `NestedRequirementExpr` to represent C++20 requires expressions and the simple, type, compound, and nested requirements that can occur in `requires` expressions.
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* The function call target resolution algorithm has been improved to resolve more calls through function pointers. As a result, dataflow queries may have more results.
|
||||||
|
|
||||||
## 2.0.2
|
## 2.0.2
|
||||||
|
|
||||||
### Minor Analysis Improvements
|
### Minor Analysis Improvements
|
||||||
|
|||||||
12
cpp/ql/lib/change-notes/released/2.1.0.md
Normal file
12
cpp/ql/lib/change-notes/released/2.1.0.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
## 2.1.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
* Added a new predicate `DataFlow::getARuntimeTarget` for getting a function that may be invoked by a `Call` expression. Unlike `Call.getTarget` this new predicate may also resolve function pointers.
|
||||||
|
* Added the predicate `mayBeFromImplicitlyDeclaredFunction()` to the `Call` class to represent calls that may be the return value of an implicitly declared C function.
|
||||||
|
* Added the predicate `getAnExplicitDeclarationEntry()` to the `Function` class to get a `FunctionDeclarationEntry` that is not implicit.
|
||||||
|
* Added classes `RequiresExpr`, `SimpleRequirementExpr`, `TypeRequirementExpr`, `CompoundRequirementExpr`, and `NestedRequirementExpr` to represent C++20 requires expressions and the simple, type, compound, and nested requirements that can occur in `requires` expressions.
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* The function call target resolution algorithm has been improved to resolve more calls through function pointers. As a result, dataflow queries may have more results.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 2.0.2
|
lastReleaseVersion: 2.1.0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/cpp-all
|
name: codeql/cpp-all
|
||||||
version: 2.0.2
|
version: 2.1.1-dev
|
||||||
groups: cpp
|
groups: cpp
|
||||||
dbscheme: semmlecode.cpp.dbscheme
|
dbscheme: semmlecode.cpp.dbscheme
|
||||||
extractor: cpp
|
extractor: cpp
|
||||||
|
|||||||
@@ -6,9 +6,156 @@ import semmle.code.cpp.exprs.Expr
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A C++ requires expression.
|
* A C++ requires expression.
|
||||||
|
*
|
||||||
|
* For example, with `T` and `U` template parameters:
|
||||||
|
* ```cpp
|
||||||
|
* requires (T x, U y) { x + y; };
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
class RequiresExpr extends Expr, @requires_expr {
|
class RequiresExpr extends Expr, @requires_expr {
|
||||||
override string toString() { result = "requires ..." }
|
override string toString() {
|
||||||
|
if exists(this.getAParameter())
|
||||||
|
then result = "requires(...) { ... }"
|
||||||
|
else result = "requires { ... }"
|
||||||
|
}
|
||||||
|
|
||||||
override string getAPrimaryQlClass() { result = "RequiresExpr" }
|
override string getAPrimaryQlClass() { result = "RequiresExpr" }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a requirement in this requires expression.
|
||||||
|
*/
|
||||||
|
RequirementExpr getARequirement() { result = this.getAChild() }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the nth requirement in this requires expression.
|
||||||
|
*/
|
||||||
|
RequirementExpr getRequirement(int n) { result = this.getChild(n) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the number of requirements in this requires expression.
|
||||||
|
*/
|
||||||
|
int getNumberOfRequirements() { result = count(this.getARequirement()) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a parameter of this requires expression, if any.
|
||||||
|
*/
|
||||||
|
Parameter getAParameter() { result.getRequiresExpr() = underlyingElement(this) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the the nth parameter of this requires expression.
|
||||||
|
*/
|
||||||
|
Parameter getParameter(int n) {
|
||||||
|
result.getRequiresExpr() = underlyingElement(this) and result.getIndex() = n
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the number of parameters of this requires expression.
|
||||||
|
*/
|
||||||
|
int getNumberOfParameters() { result = count(this.getAParameter()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C++ requirement in a requires expression.
|
||||||
|
*/
|
||||||
|
class RequirementExpr extends Expr { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C++ simple requirement in a requires expression.
|
||||||
|
*
|
||||||
|
* For example, if:
|
||||||
|
* ```cpp
|
||||||
|
* requires(T x, U y) { x + y; };
|
||||||
|
* ```
|
||||||
|
* with `T` and `U` template parameters, then `x + y;` is a simple requirement.
|
||||||
|
*/
|
||||||
|
class SimpleRequirementExpr extends RequirementExpr {
|
||||||
|
SimpleRequirementExpr() {
|
||||||
|
this.getParent() instanceof RequiresExpr and
|
||||||
|
not this instanceof TypeRequirementExpr and
|
||||||
|
not this instanceof CompoundRequirementExpr and
|
||||||
|
not this instanceof NestedRequirementExpr
|
||||||
|
}
|
||||||
|
|
||||||
|
override string getAPrimaryQlClass() { result = "SimpleRequirementExpr" }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C++ type requirement in a requires expression.
|
||||||
|
*
|
||||||
|
* For example, if:
|
||||||
|
* ```cpp
|
||||||
|
* requires { typename T::a_field; };
|
||||||
|
* ```
|
||||||
|
* with `T` a template parameter, then `typename T::a_field;` is a type requirement.
|
||||||
|
*/
|
||||||
|
class TypeRequirementExpr extends RequirementExpr, TypeName {
|
||||||
|
TypeRequirementExpr() { this.getParent() instanceof RequiresExpr }
|
||||||
|
|
||||||
|
override string getAPrimaryQlClass() { result = "TypeRequirementExpr" }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C++ compound requirement in a requires expression.
|
||||||
|
*
|
||||||
|
* For example, if:
|
||||||
|
* ```cpp
|
||||||
|
* requires(T x) { { x } noexcept -> std::same_as<int>; };
|
||||||
|
* ```
|
||||||
|
* with `T` a template parameter, then `{ x } noexcept -> std::same_as<int>;` is
|
||||||
|
* a compound requirement.
|
||||||
|
*/
|
||||||
|
class CompoundRequirementExpr extends RequirementExpr, @compound_requirement {
|
||||||
|
override string toString() {
|
||||||
|
if exists(this.getReturnTypeRequirement())
|
||||||
|
then result = "{ ... } -> ..."
|
||||||
|
else result = "{ ... }"
|
||||||
|
}
|
||||||
|
|
||||||
|
override string getAPrimaryQlClass() { result = "CompoundRequirementExpr" }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the expression from the compound requirement.
|
||||||
|
*/
|
||||||
|
Expr getExpr() { result = this.getChild(0) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the return type requirement from the compound requirement, if any.
|
||||||
|
*/
|
||||||
|
Expr getReturnTypeRequirement() { result = this.getChild(1) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if the expression from the compound requirement must not be
|
||||||
|
* potentially throwing.
|
||||||
|
*/
|
||||||
|
predicate isNoExcept() { compound_requirement_is_noexcept(underlyingElement(this)) }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C++ nested requirement in a requires expression.
|
||||||
|
*
|
||||||
|
* For example, if:
|
||||||
|
* ```cpp
|
||||||
|
* requires { requires std::is_same<T, int>::value; };
|
||||||
|
* ```
|
||||||
|
* with `T` a template parameter, then `requires std::is_same<T, int>::value;` is
|
||||||
|
* a nested requirement.
|
||||||
|
*/
|
||||||
|
class NestedRequirementExpr extends Expr, @nested_requirement {
|
||||||
|
override string toString() { result = "requires ..." }
|
||||||
|
|
||||||
|
override string getAPrimaryQlClass() { result = "NestedRequirementExpr" }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the constraint from the nested requirement.
|
||||||
|
*/
|
||||||
|
Expr getConstraint() { result = this.getChild(0) }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C++ concept id expression.
|
||||||
|
*/
|
||||||
|
class ConceptIdExpr extends RequirementExpr, @concept_id {
|
||||||
|
override string toString() { result = "concept<...>" }
|
||||||
|
|
||||||
|
override string getAPrimaryQlClass() { result = "ConceptIdExpr" }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ class Element extends ElementBase {
|
|||||||
* or certain kinds of `Statement`.
|
* or certain kinds of `Statement`.
|
||||||
*/
|
*/
|
||||||
Element getParentScope() {
|
Element getParentScope() {
|
||||||
// result instanceof class
|
// result instanceof Class
|
||||||
exists(Declaration m |
|
exists(Declaration m |
|
||||||
m = this and
|
m = this and
|
||||||
result = m.getDeclaringType() and
|
result = m.getDeclaringType() and
|
||||||
@@ -138,31 +138,40 @@ class Element extends ElementBase {
|
|||||||
or
|
or
|
||||||
exists(TemplateClass tc | this = tc.getATemplateArgument() and result = tc)
|
exists(TemplateClass tc | this = tc.getATemplateArgument() and result = tc)
|
||||||
or
|
or
|
||||||
// result instanceof namespace
|
// result instanceof Namespace
|
||||||
exists(Namespace n | result = n and n.getADeclaration() = this)
|
exists(Namespace n | result = n and n.getADeclaration() = this)
|
||||||
or
|
or
|
||||||
exists(FriendDecl d, Namespace n | this = d and n.getADeclaration() = d and result = n)
|
exists(FriendDecl d, Namespace n | this = d and n.getADeclaration() = d and result = n)
|
||||||
or
|
or
|
||||||
exists(Namespace n | this = n and result = n.getParentNamespace())
|
exists(Namespace n | this = n and result = n.getParentNamespace())
|
||||||
or
|
or
|
||||||
// result instanceof stmt
|
// result instanceof Stmt
|
||||||
exists(LocalVariable v |
|
exists(LocalVariable v |
|
||||||
this = v and
|
this = v and
|
||||||
exists(DeclStmt ds | ds.getADeclaration() = v and result = ds.getParent())
|
exists(DeclStmt ds | ds.getADeclaration() = v and result = ds.getParent())
|
||||||
)
|
)
|
||||||
or
|
or
|
||||||
exists(Parameter p | this = p and result = p.getFunction())
|
exists(Parameter p |
|
||||||
|
this = p and
|
||||||
|
(
|
||||||
|
result = p.getFunction() or
|
||||||
|
result = p.getCatchBlock().getParent().(Handler).getParent().(TryStmt).getParent() or
|
||||||
|
result = p.getRequiresExpr().getEnclosingStmt().getParent()
|
||||||
|
)
|
||||||
|
)
|
||||||
or
|
or
|
||||||
exists(GlobalVariable g, Namespace n | this = g and n.getADeclaration() = g and result = n)
|
exists(GlobalVariable g, Namespace n | this = g and n.getADeclaration() = g and result = n)
|
||||||
or
|
or
|
||||||
|
exists(TemplateVariable tv | this = tv.getATemplateArgument() and result = tv)
|
||||||
|
or
|
||||||
exists(EnumConstant e | this = e and result = e.getDeclaringEnum())
|
exists(EnumConstant e | this = e and result = e.getDeclaringEnum())
|
||||||
or
|
or
|
||||||
// result instanceof block|function
|
// result instanceof Block|Function
|
||||||
exists(BlockStmt b | this = b and blockscope(unresolveElement(b), unresolveElement(result)))
|
exists(BlockStmt b | this = b and blockscope(unresolveElement(b), unresolveElement(result)))
|
||||||
or
|
or
|
||||||
exists(TemplateFunction tf | this = tf.getATemplateArgument() and result = tf)
|
exists(TemplateFunction tf | this = tf.getATemplateArgument() and result = tf)
|
||||||
or
|
or
|
||||||
// result instanceof stmt
|
// result instanceof Stmt
|
||||||
exists(ControlStructure s | this = s and result = s.getParent())
|
exists(ControlStructure s | this = s and result = s.getParent())
|
||||||
or
|
or
|
||||||
using_container(unresolveElement(result), underlyingElement(this))
|
using_container(unresolveElement(result), underlyingElement(this))
|
||||||
|
|||||||
@@ -230,6 +230,14 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a non-implicit function declaration entry.
|
||||||
|
*/
|
||||||
|
FunctionDeclarationEntry getAnExplicitDeclarationEntry() {
|
||||||
|
result = this.getADeclarationEntry() and
|
||||||
|
not result.isImplicit()
|
||||||
|
}
|
||||||
|
|
||||||
private predicate declEntry(FunctionDeclarationEntry fde) {
|
private predicate declEntry(FunctionDeclarationEntry fde) {
|
||||||
fun_decls(unresolveElement(fde), underlyingElement(this), _, _, _) and
|
fun_decls(unresolveElement(fde), underlyingElement(this), _, _, _) and
|
||||||
// If one .cpp file specializes a function, and another calls the
|
// If one .cpp file specializes a function, and another calls the
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import semmle.code.cpp.Declaration
|
|||||||
private import semmle.code.cpp.internal.ResolveClass
|
private import semmle.code.cpp.internal.ResolveClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A C/C++ function parameter or catch block parameter. For example the
|
* A C/C++ function parameter, catch block parameter, or requires expression parameter.
|
||||||
* function parameter `p` and the catch block parameter `e` in the following
|
* For example the function parameter `p` and the catch block parameter `e` in the following
|
||||||
* code:
|
* code:
|
||||||
* ```
|
* ```
|
||||||
* void myFunction(int p) {
|
* void myFunction(int p) {
|
||||||
@@ -20,8 +20,8 @@ private import semmle.code.cpp.internal.ResolveClass
|
|||||||
* }
|
* }
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* For catch block parameters, there is a one-to-one correspondence between
|
* For catch block parameters and expression , there is a one-to-one
|
||||||
* the `Parameter` and its `ParameterDeclarationEntry`.
|
* correspondence between the `Parameter` and its `VariableDeclarationEntry`.
|
||||||
*
|
*
|
||||||
* For function parameters, there is a one-to-many relationship between
|
* For function parameters, there is a one-to-many relationship between
|
||||||
* `Parameter` and `ParameterDeclarationEntry`, because one function can
|
* `Parameter` and `ParameterDeclarationEntry`, because one function can
|
||||||
@@ -73,7 +73,8 @@ class Parameter extends LocalScopeVariable, @parameter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private VariableDeclarationEntry getANamedDeclarationEntry() {
|
private VariableDeclarationEntry getANamedDeclarationEntry() {
|
||||||
result = this.getAnEffectiveDeclarationEntry() and result.getName() != ""
|
result = this.getAnEffectiveDeclarationEntry() and
|
||||||
|
exists(string name | var_decls(unresolveElement(result), _, _, name, _) | name != "")
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -118,6 +119,12 @@ class Parameter extends LocalScopeVariable, @parameter {
|
|||||||
*/
|
*/
|
||||||
BlockStmt getCatchBlock() { params(underlyingElement(this), unresolveElement(result), _, _) }
|
BlockStmt getCatchBlock() { params(underlyingElement(this), unresolveElement(result), _, _) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the requires expression to which the parameter belongs, if it is a
|
||||||
|
* requires expression parameter.
|
||||||
|
*/
|
||||||
|
RequiresExpr getRequiresExpr() { params(underlyingElement(this), unresolveElement(result), _, _) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the zero-based index of this parameter.
|
* Gets the zero-based index of this parameter.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ private Declaration getAnEnclosingDeclaration(Locatable ast) {
|
|||||||
or
|
or
|
||||||
result = ast.(Parameter).getCatchBlock().getEnclosingFunction()
|
result = ast.(Parameter).getCatchBlock().getEnclosingFunction()
|
||||||
or
|
or
|
||||||
|
result = ast.(Parameter).getRequiresExpr().getEnclosingFunction()
|
||||||
|
or
|
||||||
result = ast.(Expr).getEnclosingDeclaration()
|
result = ast.(Expr).getEnclosingDeclaration()
|
||||||
or
|
or
|
||||||
result = ast.(Initializer).getDeclaration()
|
result = ast.(Initializer).getDeclaration()
|
||||||
@@ -101,7 +103,10 @@ private newtype TPrintAstNode =
|
|||||||
stmt.getADeclarationEntry() = entry and
|
stmt.getADeclarationEntry() = entry and
|
||||||
shouldPrintDeclaration(stmt.getEnclosingFunction())
|
shouldPrintDeclaration(stmt.getEnclosingFunction())
|
||||||
} or
|
} or
|
||||||
TParametersNode(Function func) { shouldPrintDeclaration(func) } or
|
TFunctionParametersNode(Function func) { shouldPrintDeclaration(func) } or
|
||||||
|
TRequiresExprParametersNode(RequiresExpr req) {
|
||||||
|
shouldPrintDeclaration(getAnEnclosingDeclaration(req))
|
||||||
|
} or
|
||||||
TConstructorInitializersNode(Constructor ctor) {
|
TConstructorInitializersNode(Constructor ctor) {
|
||||||
ctor.hasEntryPoint() and
|
ctor.hasEntryPoint() and
|
||||||
shouldPrintDeclaration(ctor)
|
shouldPrintDeclaration(ctor)
|
||||||
@@ -305,14 +310,14 @@ class ExprNode extends AstNode {
|
|||||||
|
|
||||||
ExprNode() { expr = ast }
|
ExprNode() { expr = ast }
|
||||||
|
|
||||||
override AstNode getChildInternal(int childIndex) {
|
override PrintAstNode getChildInternal(int childIndex) {
|
||||||
result.getAst() = expr.getChild(childIndex)
|
result.(AstNode).getAst() = expr.getChild(childIndex)
|
||||||
or
|
or
|
||||||
childIndex = max(int index | exists(expr.getChild(index)) or index = 0) + 1 and
|
childIndex = max(int index | exists(expr.getChild(index)) or index = 0) + 1 and
|
||||||
result.getAst() = expr.(ConditionDeclExpr).getInitializingExpr()
|
result.(AstNode).getAst() = expr.(ConditionDeclExpr).getInitializingExpr()
|
||||||
or
|
or
|
||||||
exists(int destructorIndex |
|
exists(int destructorIndex |
|
||||||
result.getAst() = expr.getImplicitDestructorCall(destructorIndex) and
|
result.(AstNode).getAst() = expr.getImplicitDestructorCall(destructorIndex) and
|
||||||
childIndex = destructorIndex + max(int index | exists(expr.getChild(index)) or index = 0) + 2
|
childIndex = destructorIndex + max(int index | exists(expr.getChild(index)) or index = 0) + 2
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -331,7 +336,8 @@ class ExprNode extends AstNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override string getChildAccessorPredicateInternal(int childIndex) {
|
override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
result = getChildAccessorWithoutConversions(ast, this.getChildInternal(childIndex).getAst())
|
result =
|
||||||
|
getChildAccessorWithoutConversions(ast, this.getChildInternal(childIndex).(AstNode).getAst())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -411,6 +417,26 @@ class StmtExprNode extends ExprNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A node representing a `RequiresExpr`
|
||||||
|
*/
|
||||||
|
class RequiresExprNode extends ExprNode {
|
||||||
|
override RequiresExpr expr;
|
||||||
|
|
||||||
|
override PrintAstNode getChildInternal(int childIndex) {
|
||||||
|
result = super.getChildInternal(childIndex)
|
||||||
|
or
|
||||||
|
childIndex = -1 and
|
||||||
|
result.(RequiresExprParametersNode).getRequiresExpr() = expr
|
||||||
|
}
|
||||||
|
|
||||||
|
override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
|
result = super.getChildAccessorPredicateInternal(childIndex)
|
||||||
|
or
|
||||||
|
childIndex = -1 and result = "<params>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A node representing a `DeclarationEntry`.
|
* A node representing a `DeclarationEntry`.
|
||||||
*/
|
*/
|
||||||
@@ -570,10 +596,10 @@ class InitializerNode extends AstNode {
|
|||||||
/**
|
/**
|
||||||
* A node representing the parameters of a `Function`.
|
* A node representing the parameters of a `Function`.
|
||||||
*/
|
*/
|
||||||
class ParametersNode extends PrintAstNode, TParametersNode {
|
class FunctionParametersNode extends PrintAstNode, TFunctionParametersNode {
|
||||||
Function func;
|
Function func;
|
||||||
|
|
||||||
ParametersNode() { this = TParametersNode(func) }
|
FunctionParametersNode() { this = TFunctionParametersNode(func) }
|
||||||
|
|
||||||
final override string toString() { result = "" }
|
final override string toString() { result = "" }
|
||||||
|
|
||||||
@@ -594,6 +620,33 @@ class ParametersNode extends PrintAstNode, TParametersNode {
|
|||||||
final Function getFunction() { result = func }
|
final Function getFunction() { result = func }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A node representing the parameters of a `RequiresExpr`.
|
||||||
|
*/
|
||||||
|
class RequiresExprParametersNode extends PrintAstNode, TRequiresExprParametersNode {
|
||||||
|
RequiresExpr req;
|
||||||
|
|
||||||
|
RequiresExprParametersNode() { this = TRequiresExprParametersNode(req) }
|
||||||
|
|
||||||
|
final override string toString() { result = "" }
|
||||||
|
|
||||||
|
final override Location getLocation() { result = getRepresentativeLocation(req) }
|
||||||
|
|
||||||
|
override AstNode getChildInternal(int childIndex) {
|
||||||
|
result.getAst() = req.getParameter(childIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
|
exists(this.getChildInternal(childIndex)) and
|
||||||
|
result = "getParameter(" + childIndex.toString() + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the `RequiresExpr` for which this node represents the parameters.
|
||||||
|
*/
|
||||||
|
final RequiresExpr getRequiresExpr() { result = req }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A node representing the initializer list of a `Constructor`.
|
* A node representing the initializer list of a `Constructor`.
|
||||||
*/
|
*/
|
||||||
@@ -697,7 +750,7 @@ class FunctionNode extends FunctionOrGlobalOrNamespaceVariableNode {
|
|||||||
|
|
||||||
override PrintAstNode getChildInternal(int childIndex) {
|
override PrintAstNode getChildInternal(int childIndex) {
|
||||||
childIndex = 0 and
|
childIndex = 0 and
|
||||||
result.(ParametersNode).getFunction() = func
|
result.(FunctionParametersNode).getFunction() = func
|
||||||
or
|
or
|
||||||
childIndex = 1 and
|
childIndex = 1 and
|
||||||
result.(ConstructorInitializersNode).getConstructor() = func
|
result.(ConstructorInitializersNode).getConstructor() = func
|
||||||
@@ -921,6 +974,11 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred)
|
|||||||
or
|
or
|
||||||
expr.(CommaExpr).getRightOperand() = ele and pred = "getRightOperand()"
|
expr.(CommaExpr).getRightOperand() = ele and pred = "getRightOperand()"
|
||||||
or
|
or
|
||||||
|
expr.(CompoundRequirementExpr).getExpr() = ele and pred = "getExpr()"
|
||||||
|
or
|
||||||
|
expr.(CompoundRequirementExpr).getReturnTypeRequirement() = ele and
|
||||||
|
pred = "getReturnTypeRequirement()"
|
||||||
|
or
|
||||||
expr.(ConditionDeclExpr).getVariableAccess() = ele and pred = "getVariableAccess()"
|
expr.(ConditionDeclExpr).getVariableAccess() = ele and pred = "getVariableAccess()"
|
||||||
or
|
or
|
||||||
expr.(ConstructorFieldInit).getExpr() = ele and pred = "getExpr()"
|
expr.(ConstructorFieldInit).getExpr() = ele and pred = "getExpr()"
|
||||||
@@ -941,6 +999,8 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred)
|
|||||||
or
|
or
|
||||||
expr.(LambdaExpression).getInitializer() = ele and pred = "getInitializer()"
|
expr.(LambdaExpression).getInitializer() = ele and pred = "getInitializer()"
|
||||||
or
|
or
|
||||||
|
expr.(NestedRequirementExpr).getConstraint() = ele and pred = "getConstraint()"
|
||||||
|
or
|
||||||
expr.(NewOrNewArrayExpr).getAllocatorCall() = ele and pred = "getAllocatorCall()"
|
expr.(NewOrNewArrayExpr).getAllocatorCall() = ele and pred = "getAllocatorCall()"
|
||||||
or
|
or
|
||||||
expr.(NewOrNewArrayExpr).getAlignmentArgument() = ele and pred = "getAlignmentArgument()"
|
expr.(NewOrNewArrayExpr).getAlignmentArgument() = ele and pred = "getAlignmentArgument()"
|
||||||
@@ -980,6 +1040,11 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred)
|
|||||||
or
|
or
|
||||||
expr.(UnaryOperation).getOperand() = ele and pred = "getOperand()"
|
expr.(UnaryOperation).getOperand() = ele and pred = "getOperand()"
|
||||||
or
|
or
|
||||||
|
exists(int n |
|
||||||
|
expr.(RequiresExpr).getRequirement(n) = ele and
|
||||||
|
pred = "getRequirement(" + n + ")"
|
||||||
|
)
|
||||||
|
or
|
||||||
expr.(SizeofExprOperator).getExprOperand() = ele and pred = "getExprOperand()"
|
expr.(SizeofExprOperator).getExprOperand() = ele and pred = "getExprOperand()"
|
||||||
or
|
or
|
||||||
expr.(StmtExpr).getStmt() = ele and pred = "getStmt()"
|
expr.(StmtExpr).getStmt() = ele and pred = "getStmt()"
|
||||||
|
|||||||
@@ -241,6 +241,10 @@ class VariableDeclarationEntry extends DeclarationEntry, @var_decl {
|
|||||||
name != "" and result = name
|
name != "" and result = name
|
||||||
or
|
or
|
||||||
name = "" and result = this.getVariable().(LocalVariable).getName()
|
name = "" and result = this.getVariable().(LocalVariable).getName()
|
||||||
|
or
|
||||||
|
name = "" and
|
||||||
|
not this instanceof ParameterDeclarationEntry and
|
||||||
|
result = this.getVariable().(Parameter).getName()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -295,19 +299,11 @@ class ParameterDeclarationEntry extends VariableDeclarationEntry {
|
|||||||
|
|
||||||
private string getAnonymousParameterDescription() {
|
private string getAnonymousParameterDescription() {
|
||||||
not exists(this.getName()) and
|
not exists(this.getName()) and
|
||||||
exists(string idx |
|
exists(string anon |
|
||||||
idx =
|
anon = "(unnamed parameter " + this.getIndex().toString() + ")" and
|
||||||
((this.getIndex() + 1).toString() + "th")
|
|
||||||
.replaceAll("1th", "1st")
|
|
||||||
.replaceAll("2th", "2nd")
|
|
||||||
.replaceAll("3th", "3rd")
|
|
||||||
.replaceAll("11st", "11th")
|
|
||||||
.replaceAll("12nd", "12th")
|
|
||||||
.replaceAll("13rd", "13th") and
|
|
||||||
if exists(this.getCanonicalName())
|
if exists(this.getCanonicalName())
|
||||||
then
|
then result = "declaration of " + this.getCanonicalName() + " as " + anon
|
||||||
result = "declaration of " + this.getCanonicalName() + " as anonymous " + idx + " parameter"
|
else result = "declaration of " + anon
|
||||||
else result = "declaration of " + idx + " parameter"
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -281,3 +281,9 @@ private predicate exprToPartialDefinitionStep(Expr exprIn, Expr exprOut) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private predicate iteratorDereference(Call c) { c.getTarget() instanceof IteratorReferenceFunction }
|
private predicate iteratorDereference(Call c) { c.getTarget() instanceof IteratorReferenceFunction }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if the additional step from `src` to `sink` should be considered in
|
||||||
|
* speculative taint flow exploration.
|
||||||
|
*/
|
||||||
|
predicate speculativeTaintStep(DataFlow::Node src, DataFlow::Node sink) { none() }
|
||||||
|
|||||||
@@ -149,6 +149,11 @@ class Call extends Expr, NameQualifiableElement, TCall {
|
|||||||
variableAddressEscapesTreeNonConst(va, this.getQualifier().getFullyConverted()) and
|
variableAddressEscapesTreeNonConst(va, this.getQualifier().getFullyConverted()) and
|
||||||
i = -1
|
i = -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Holds if this expression could be the return value of an implicitly declared function. */
|
||||||
|
predicate mayBeFromImplicitlyDeclaredFunction() {
|
||||||
|
this.getTarget().getADeclarationEntry().isImplicit()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -181,12 +181,7 @@ class VariableDeclarationEntry extends @var_decl {
|
|||||||
string getName() { var_decls(this, _, _, result, _) and result != "" }
|
string getName() { var_decls(this, _, _, result, _) and result != "" }
|
||||||
}
|
}
|
||||||
|
|
||||||
class Parameter extends LocalScopeVariable, @parameter {
|
class Parameter extends LocalScopeVariable, @parameter { }
|
||||||
@functionorblock function;
|
|
||||||
int index;
|
|
||||||
|
|
||||||
Parameter() { params(this, function, index, _) }
|
|
||||||
}
|
|
||||||
|
|
||||||
class GlobalOrNamespaceVariable extends Variable, @globalvariable { }
|
class GlobalOrNamespaceVariable extends Variable, @globalvariable { }
|
||||||
|
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -261,13 +261,17 @@ deprecated private module Config implements FullStateConfigSig {
|
|||||||
model = ""
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) {
|
predicate isAdditionalFlowStep(
|
||||||
|
Node node1, FlowState state1, Node node2, FlowState state2, string model
|
||||||
|
) {
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
getConfig(state1).isAdditionalFlowStep(node1, getState(state1), node2, getState(state2)) and
|
||||||
getConfig(state2) = getConfig(state1)
|
getConfig(state2) = getConfig(state1) and
|
||||||
|
model = ""
|
||||||
or
|
or
|
||||||
not singleConfiguration() and
|
not singleConfiguration() and
|
||||||
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
getConfig(state1).isAdditionalFlowStep(node1, node2) and
|
||||||
state2 = state1
|
state2 = state1 and
|
||||||
|
model = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate allowImplicitRead(Node node, ContentSet c) {
|
predicate allowImplicitRead(Node node, ContentSet c) {
|
||||||
|
|||||||
@@ -1328,7 +1328,10 @@ predicate lambdaCreation(Node creation, LambdaCallKind kind, DataFlowCallable c)
|
|||||||
|
|
||||||
/** Holds if `call` is a lambda call of kind `kind` where `receiver` is the lambda expression. */
|
/** Holds if `call` is a lambda call of kind `kind` where `receiver` is the lambda expression. */
|
||||||
predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) {
|
predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) {
|
||||||
call.(SummaryCall).getReceiver() = receiver.(FlowSummaryNode).getSummaryNode() and
|
(
|
||||||
|
call.(SummaryCall).getReceiver() = receiver.(FlowSummaryNode).getSummaryNode() or
|
||||||
|
call.asCallInstruction().getCallTargetOperand() = receiver.asOperand()
|
||||||
|
) and
|
||||||
exists(kind)
|
exists(kind)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ private import SsaInternals as Ssa
|
|||||||
private import DataFlowImplCommon as DataFlowImplCommon
|
private import DataFlowImplCommon as DataFlowImplCommon
|
||||||
private import codeql.util.Unit
|
private import codeql.util.Unit
|
||||||
private import Node0ToString
|
private import Node0ToString
|
||||||
|
private import DataFlowDispatch as DataFlowDispatch
|
||||||
import ExprNodes
|
import ExprNodes
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2497,3 +2498,16 @@ class AdditionalCallTarget extends Unit {
|
|||||||
*/
|
*/
|
||||||
abstract Declaration viableTarget(Call call);
|
abstract Declaration viableTarget(Call call);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a function that may be called by `call`.
|
||||||
|
*
|
||||||
|
* Note that `call` may be a call to a function pointer expression.
|
||||||
|
*/
|
||||||
|
Function getARuntimeTarget(Call call) {
|
||||||
|
exists(DataFlowCall dfCall | dfCall.asCallInstruction().getUnconvertedResultExpression() = call |
|
||||||
|
result = DataFlowDispatch::viableCallable(dfCall).asSourceCallable()
|
||||||
|
or
|
||||||
|
result = DataFlowImplCommon::viableCallableLambda(dfCall, _).asSourceCallable()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -212,3 +212,30 @@ predicate modeledTaintStep(DataFlow::Node nodeIn, DataFlow::Node nodeOut, string
|
|||||||
nodeOut = callOutput(call, modelOut)
|
nodeOut = callOutput(call, modelOut)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import SpeculativeTaintFlow
|
||||||
|
|
||||||
|
private module SpeculativeTaintFlow {
|
||||||
|
private import semmle.code.cpp.ir.dataflow.internal.DataFlowDispatch as DataFlowDispatch
|
||||||
|
private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate as DataFlowPrivate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if the additional step from `src` to `sink` should be considered in
|
||||||
|
* speculative taint flow exploration.
|
||||||
|
*/
|
||||||
|
predicate speculativeTaintStep(DataFlow::Node src, DataFlow::Node sink) {
|
||||||
|
exists(DataFlowCall call, ArgumentPosition argpos |
|
||||||
|
// TODO: exclude neutrals and anything that has QL modeling.
|
||||||
|
not exists(DataFlowDispatch::viableCallable(call)) and
|
||||||
|
src.(DataFlowPrivate::ArgumentNode).argumentOf(call, argpos)
|
||||||
|
|
|
||||||
|
not argpos.(DirectPosition).getIndex() = -1 and
|
||||||
|
sink.(PostUpdateNode)
|
||||||
|
.getPreUpdateNode()
|
||||||
|
.(DataFlowPrivate::ArgumentNode)
|
||||||
|
.argumentOf(call, any(DirectPosition qualpos | qualpos.getIndex() = -1))
|
||||||
|
or
|
||||||
|
sink.(DataFlowPrivate::OutNode).getCall() = call
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ private module Input implements TypeFlowInput<Location> {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate joinStep(TypeFlowNode n1, TypeFlowNode n2) {
|
predicate step(TypeFlowNode n1, TypeFlowNode n2) {
|
||||||
// instruction -> phi
|
// instruction -> phi
|
||||||
getAnUltimateLocalDefinition(n2.asInstruction()) = n1.asInstruction()
|
getAnUltimateLocalDefinition(n2.asInstruction()) = n1.asInstruction()
|
||||||
or
|
or
|
||||||
@@ -179,6 +179,8 @@ private module Input implements TypeFlowInput<Location> {
|
|||||||
n1.asInstruction() = arg and
|
n1.asInstruction() = arg and
|
||||||
n2.asInstruction() = p
|
n2.asInstruction() = p
|
||||||
)
|
)
|
||||||
|
or
|
||||||
|
instructionStep(n1.asInstruction(), n2.asInstruction())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -199,10 +201,6 @@ private module Input implements TypeFlowInput<Location> {
|
|||||||
i2.(PointerArithmeticInstruction).getLeft() = i1
|
i2.(PointerArithmeticInstruction).getLeft() = i1
|
||||||
}
|
}
|
||||||
|
|
||||||
predicate step(TypeFlowNode n1, TypeFlowNode n2) {
|
|
||||||
instructionStep(n1.asInstruction(), n2.asInstruction())
|
|
||||||
}
|
|
||||||
|
|
||||||
predicate isNullValue(TypeFlowNode n) { n.isNullValue() }
|
predicate isNullValue(TypeFlowNode n) { n.isNullValue() }
|
||||||
|
|
||||||
private newtype TType =
|
private newtype TType =
|
||||||
@@ -245,11 +243,7 @@ private module Input implements TypeFlowInput<Location> {
|
|||||||
|
|
||||||
pragma[nomagic]
|
pragma[nomagic]
|
||||||
private predicate upcastCand(TypeFlowNode n, Type t1, Type t2) {
|
private predicate upcastCand(TypeFlowNode n, Type t1, Type t2) {
|
||||||
exists(TypeFlowNode next |
|
exists(TypeFlowNode next | step(n, next) |
|
||||||
step(n, next)
|
|
||||||
or
|
|
||||||
joinStep(n, next)
|
|
||||||
|
|
|
||||||
n.getType() = t1 and
|
n.getType() = t1 and
|
||||||
next.getType() = t2 and
|
next.getType() = t2 and
|
||||||
t1 != t2
|
t1 != t2
|
||||||
|
|||||||
@@ -683,8 +683,13 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) {
|
|||||||
def.getVirtualVariable() = use.getVirtualVariable() and
|
def.getVirtualVariable() = use.getVirtualVariable() and
|
||||||
def instanceof EntireAllocationMemoryLocation and
|
def instanceof EntireAllocationMemoryLocation and
|
||||||
(
|
(
|
||||||
// EntireAllocationMemoryLocation exactly overlaps itself.
|
// EntireAllocationMemoryLocation exactly overlaps any EntireAllocationMemoryLocation for the
|
||||||
use instanceof EntireAllocationMemoryLocation and
|
// same allocation. Checking the allocation, rather than the memory location itself, ensures
|
||||||
|
// that we get the right relationship between the "must" and "may" memory locations for that
|
||||||
|
// allocation.
|
||||||
|
// Note that if one of the locations is a "may" access, the overlap will be downgraded to
|
||||||
|
// `MustTotallyOverlap` or `MayPartialOverlap` in `getOverlap()`.
|
||||||
|
use.(EntireAllocationMemoryLocation).getAnAllocation() = def.getAnAllocation() and
|
||||||
result instanceof MustExactlyOverlap
|
result instanceof MustExactlyOverlap
|
||||||
or
|
or
|
||||||
not use instanceof EntireAllocationMemoryLocation and
|
not use instanceof EntireAllocationMemoryLocation and
|
||||||
|
|||||||
@@ -196,6 +196,8 @@ private predicate isInvalidFunction(Function func) {
|
|||||||
expr.getEnclosingFunction() = func and
|
expr.getEnclosingFunction() = func and
|
||||||
not exists(expr.getType())
|
not exists(expr.getType())
|
||||||
)
|
)
|
||||||
|
or
|
||||||
|
count(func.getEntryPoint().getLocation()) > 1
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ private class Sprintf extends FormattingFunction, NonThrowingFunction {
|
|||||||
override int getFirstFormatArgumentIndex() {
|
override int getFirstFormatArgumentIndex() {
|
||||||
if this.hasName("__builtin___sprintf_chk")
|
if this.hasName("__builtin___sprintf_chk")
|
||||||
then result = 4
|
then result = 4
|
||||||
else result = this.getNumberOfParameters()
|
else result = super.getFirstFormatArgumentIndex()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,21 @@ private Type getAFormatterWideTypeOrDefault() {
|
|||||||
* A standard library function that uses a `printf`-like formatting string.
|
* A standard library function that uses a `printf`-like formatting string.
|
||||||
*/
|
*/
|
||||||
abstract class FormattingFunction extends ArrayFunction, TaintFunction {
|
abstract class FormattingFunction extends ArrayFunction, TaintFunction {
|
||||||
|
int firstFormatArgumentIndex;
|
||||||
|
|
||||||
|
FormattingFunction() {
|
||||||
|
firstFormatArgumentIndex > 0 and
|
||||||
|
if this.hasDefinition()
|
||||||
|
then firstFormatArgumentIndex = this.getDefinition().getNumberOfParameters()
|
||||||
|
else
|
||||||
|
if this instanceof BuiltInFunction
|
||||||
|
then firstFormatArgumentIndex = this.getNumberOfParameters()
|
||||||
|
else
|
||||||
|
forex(FunctionDeclarationEntry fde | fde = this.getAnExplicitDeclarationEntry() |
|
||||||
|
firstFormatArgumentIndex = fde.getNumberOfParameters()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/** Gets the position at which the format parameter occurs. */
|
/** Gets the position at which the format parameter occurs. */
|
||||||
abstract int getFormatParameterIndex();
|
abstract int getFormatParameterIndex();
|
||||||
|
|
||||||
@@ -121,33 +136,7 @@ abstract class FormattingFunction extends ArrayFunction, TaintFunction {
|
|||||||
* the first format specifier in the format string. We ignore all
|
* the first format specifier in the format string. We ignore all
|
||||||
* implicit function definitions.
|
* implicit function definitions.
|
||||||
*/
|
*/
|
||||||
int getFirstFormatArgumentIndex() {
|
int getFirstFormatArgumentIndex() { result = firstFormatArgumentIndex }
|
||||||
// The formatting function either has a definition in the snapshot, or all
|
|
||||||
// `DeclarationEntry`s agree on the number of parameters (otherwise we don't
|
|
||||||
// really know the correct number)
|
|
||||||
if this.hasDefinition()
|
|
||||||
then result = this.getDefinition().getNumberOfParameters()
|
|
||||||
else result = this.getNumberOfExplicitParameters()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a non-implicit function declaration entry.
|
|
||||||
*/
|
|
||||||
private FunctionDeclarationEntry getAnExplicitDeclarationEntry() {
|
|
||||||
result = this.getADeclarationEntry() and
|
|
||||||
not result.isImplicit()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the number of parameters, excluding any parameters that have been defined
|
|
||||||
* from implicit function declarations. If there is some inconsistency in the number
|
|
||||||
* of parameters, then don't return anything.
|
|
||||||
*/
|
|
||||||
private int getNumberOfExplicitParameters() {
|
|
||||||
forex(FunctionDeclarationEntry fde | fde = this.getAnExplicitDeclarationEntry() |
|
|
||||||
result = fde.getNumberOfParameters()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the position of the buffer size argument, if any.
|
* Gets the position of the buffer size argument, if any.
|
||||||
|
|||||||
@@ -534,7 +534,7 @@ static_asserts(
|
|||||||
#keyset[function, index, type_id]
|
#keyset[function, index, type_id]
|
||||||
params(
|
params(
|
||||||
int id: @parameter,
|
int id: @parameter,
|
||||||
int function: @functionorblock ref,
|
int function: @parameterized_element ref,
|
||||||
int index: int ref,
|
int index: int ref,
|
||||||
int type_id: @type ref
|
int type_id: @type ref
|
||||||
);
|
);
|
||||||
@@ -1791,6 +1791,9 @@ case @expr.kind of
|
|||||||
| 388 = @datasizeof
|
| 388 = @datasizeof
|
||||||
| 389 = @c11_generic
|
| 389 = @c11_generic
|
||||||
| 390 = @requires_expr
|
| 390 = @requires_expr
|
||||||
|
| 391 = @nested_requirement
|
||||||
|
| 392 = @compound_requirement
|
||||||
|
| 393 = @concept_id
|
||||||
;
|
;
|
||||||
|
|
||||||
@var_args_expr = @vastartexpr
|
@var_args_expr = @vastartexpr
|
||||||
@@ -1909,6 +1912,10 @@ case @expr.kind of
|
|||||||
| @istriviallyrelocatable
|
| @istriviallyrelocatable
|
||||||
;
|
;
|
||||||
|
|
||||||
|
compound_requirement_is_noexcept(
|
||||||
|
int expr: @compound_requirement ref
|
||||||
|
);
|
||||||
|
|
||||||
new_allocated_type(
|
new_allocated_type(
|
||||||
unique int expr: @new_expr ref,
|
unique int expr: @new_expr ref,
|
||||||
int type_id: @type ref
|
int type_id: @type ref
|
||||||
@@ -2168,11 +2175,11 @@ stmt_decl_entry_bind(
|
|||||||
int decl_entry: @element ref
|
int decl_entry: @element ref
|
||||||
);
|
);
|
||||||
|
|
||||||
@functionorblock = @function | @stmt_block;
|
@parameterized_element = @function | @stmt_block | @requires_expr;
|
||||||
|
|
||||||
blockscope(
|
blockscope(
|
||||||
unique int block: @stmt_block ref,
|
unique int block: @stmt_block ref,
|
||||||
int enclosing: @functionorblock ref
|
int enclosing: @parameterized_element ref
|
||||||
);
|
);
|
||||||
|
|
||||||
@jump = @stmt_goto | @stmt_break | @stmt_continue;
|
@jump = @stmt_goto | @stmt_break | @stmt_continue;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
description: Support C++20 requires expressions
|
||||||
|
compatibility: backwards
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
## 1.2.6
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* Remove results from the `cpp/wrong-type-format-argument` ("Wrong type of arguments to formatting function") query if the argument is the return value of an implicitly declared function.
|
||||||
|
|
||||||
## 1.2.5
|
## 1.2.5
|
||||||
|
|
||||||
### Minor Analysis Improvements
|
### Minor Analysis Improvements
|
||||||
|
|||||||
@@ -16,6 +16,20 @@
|
|||||||
|
|
||||||
import cpp
|
import cpp
|
||||||
|
|
||||||
|
class SyntaxError extends CompilerError {
|
||||||
|
SyntaxError() { this.getTag().matches("exp_%") }
|
||||||
|
|
||||||
|
predicate affects(Element e) {
|
||||||
|
exists(Location l1, Location l2 |
|
||||||
|
l1 = this.getLocation() and
|
||||||
|
l2 = e.getLocation()
|
||||||
|
|
|
||||||
|
l1.getFile() = l2.getFile() and
|
||||||
|
l1.getStartLine() = l2.getStartLine()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
from FormatLiteral fl, FormattingFunctionCall ffc, int expected, int given, string ffcName
|
from FormatLiteral fl, FormattingFunctionCall ffc, int expected, int given, string ffcName
|
||||||
where
|
where
|
||||||
ffc = fl.getUse() and
|
ffc = fl.getUse() and
|
||||||
@@ -27,7 +41,10 @@ where
|
|||||||
if ffc.isInMacroExpansion()
|
if ffc.isInMacroExpansion()
|
||||||
then ffcName = ffc.getTarget().getName() + " (in a macro expansion)"
|
then ffcName = ffc.getTarget().getName() + " (in a macro expansion)"
|
||||||
else ffcName = ffc.getTarget().getName()
|
else ffcName = ffc.getTarget().getName()
|
||||||
)
|
) and
|
||||||
|
// A typical problem is that string literals are concatenated, but if one of the string
|
||||||
|
// literals is an undefined macro, then this just leads to a syntax error.
|
||||||
|
not exists(SyntaxError e | e.affects(fl))
|
||||||
select ffc,
|
select ffc,
|
||||||
"Format for " + ffcName + " expects " + expected.toString() + " arguments but given " +
|
"Format for " + ffcName + " expects " + expected.toString() + " arguments but given " +
|
||||||
given.toString()
|
given.toString()
|
||||||
|
|||||||
@@ -170,7 +170,8 @@ where
|
|||||||
) and
|
) and
|
||||||
not arg.isAffectedByMacro() and
|
not arg.isAffectedByMacro() and
|
||||||
not arg.isFromUninstantiatedTemplate(_) and
|
not arg.isFromUninstantiatedTemplate(_) and
|
||||||
not actual.getUnspecifiedType() instanceof ErroneousType
|
not actual.getUnspecifiedType() instanceof ErroneousType and
|
||||||
|
not arg.(Call).mayBeFromImplicitlyDeclaredFunction()
|
||||||
select arg,
|
select arg,
|
||||||
"This format specifier for type '" + expected.getName() + "' does not match the argument type '" +
|
"This format specifier for type '" + expected.getName() + "' does not match the argument type '" +
|
||||||
actual.getUnspecifiedType().getName() + "'."
|
actual.getUnspecifiedType().getName() + "'."
|
||||||
|
|||||||
13
cpp/ql/src/Telemetry/CompilerErrors.ql
Normal file
13
cpp/ql/src/Telemetry/CompilerErrors.ql
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* @name Compiler errors
|
||||||
|
* @description A count of all compiler errors, grouped by error text.
|
||||||
|
* @kind metric
|
||||||
|
* @tags summary telemetry
|
||||||
|
* @id cpp/telemetry/compiler-errors
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Metrics
|
||||||
|
|
||||||
|
from CppMetrics::ErrorCount m
|
||||||
|
where RankMetric<CppMetrics::ErrorCount>::getRank(m) <= 50
|
||||||
|
select m.toString(), m.getValue()
|
||||||
12
cpp/ql/src/Telemetry/DatabaseQuality.ql
Normal file
12
cpp/ql/src/Telemetry/DatabaseQuality.ql
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* @name Database quality
|
||||||
|
* @description Metrics that indicate the quality of the database.
|
||||||
|
* @kind metric
|
||||||
|
* @tags summary telemetry
|
||||||
|
* @id cpp/telemetry/database-quality
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Metrics
|
||||||
|
|
||||||
|
from QualityMetric m
|
||||||
|
select m.toString(), m.getValue()
|
||||||
29
cpp/ql/src/Telemetry/Diagnostics.qll
Normal file
29
cpp/ql/src/Telemetry/Diagnostics.qll
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import cpp
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A syntax error.
|
||||||
|
*/
|
||||||
|
class SyntaxError extends CompilerError {
|
||||||
|
SyntaxError() {
|
||||||
|
this.getTag().matches("exp_%") or
|
||||||
|
this.getTag() =
|
||||||
|
[
|
||||||
|
"bad_data_member_initialization", "bad_pure_specifier", "bad_return", "bad_uuid_string",
|
||||||
|
"literal_without_initializer", "missing_class_definition", "missing_exception_declaration",
|
||||||
|
"nonstd_const_member_decl_not_allowed", "operator_name_not_allowed",
|
||||||
|
"wide_string_invalid_in_asm"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cannot open file error.
|
||||||
|
* Typically this is due to a missing include.
|
||||||
|
*/
|
||||||
|
class CannotOpenFileError extends CompilerError {
|
||||||
|
CannotOpenFileError() { this.hasTag(["cannot_open_file", "cannot_open_file_reason"]) }
|
||||||
|
|
||||||
|
string getIncludedFile() {
|
||||||
|
result = this.getMessage().regexpCapture("cannot open source file '([^']+)'", 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
12
cpp/ql/src/Telemetry/ExtractionMetrics.ql
Normal file
12
cpp/ql/src/Telemetry/ExtractionMetrics.ql
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* @name Extraction metrics
|
||||||
|
* @description Raw metrics relating to extraction.
|
||||||
|
* @kind metric
|
||||||
|
* @tags summary telemetry
|
||||||
|
* @id cpp/telemetry/extraction-metrics
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Metrics
|
||||||
|
|
||||||
|
from ExtractionMetric m
|
||||||
|
select m.toString(), m.getValue()
|
||||||
269
cpp/ql/src/Telemetry/Metrics.qll
Normal file
269
cpp/ql/src/Telemetry/Metrics.qll
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
import cpp
|
||||||
|
import Diagnostics
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A metric is a string with a value.
|
||||||
|
*/
|
||||||
|
abstract class Metric extends string {
|
||||||
|
bindingset[this]
|
||||||
|
Metric() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A metric that we want to report in cpp/telemetry/extraction-metrics
|
||||||
|
*/
|
||||||
|
abstract class ExtractionMetric extends Metric {
|
||||||
|
bindingset[this]
|
||||||
|
ExtractionMetric() { any() }
|
||||||
|
|
||||||
|
/** Gets the value of this metric. */
|
||||||
|
abstract int getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A metric that provides a baseline for a SuccessMetric.
|
||||||
|
*/
|
||||||
|
abstract class BaseMetric extends ExtractionMetric {
|
||||||
|
bindingset[this]
|
||||||
|
BaseMetric() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A metric that is relative to another metric,
|
||||||
|
* so can be used to calculate percentages.
|
||||||
|
*
|
||||||
|
* For clarity, metrics should express success,
|
||||||
|
* so higher values means better.
|
||||||
|
*/
|
||||||
|
abstract class SuccessMetric extends ExtractionMetric {
|
||||||
|
bindingset[this]
|
||||||
|
SuccessMetric() { any() }
|
||||||
|
|
||||||
|
/** Gets the metric this is relative to. */
|
||||||
|
abstract BaseMetric getBaseline();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A metric used to report database quality.
|
||||||
|
*/
|
||||||
|
class QualityMetric extends Metric {
|
||||||
|
BaseMetric baseMetric;
|
||||||
|
SuccessMetric relativeMetric;
|
||||||
|
|
||||||
|
QualityMetric() {
|
||||||
|
baseMetric = relativeMetric.getBaseline() and this = "Percentage of " + relativeMetric
|
||||||
|
}
|
||||||
|
|
||||||
|
float getValue() {
|
||||||
|
baseMetric.getValue() > 0 and
|
||||||
|
result = 100.0 * relativeMetric.getValue() / baseMetric.getValue()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
signature class RankedMetric extends Metric {
|
||||||
|
int getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
module RankMetric<RankedMetric M> {
|
||||||
|
int getRank(M s) { s = rank[result](M m | | m order by m.getValue() desc) }
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Various metrics we want to report. */
|
||||||
|
module CppMetrics {
|
||||||
|
class Compilations extends BaseMetric {
|
||||||
|
Compilations() { this = "compilations" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Compilation c) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class SourceAndHeaderFiles extends BaseMetric {
|
||||||
|
SourceAndHeaderFiles() { this = "source/header files" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(File f | f.fromSource()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class SourceAndHeaderFilesWithoutErrors extends SuccessMetric {
|
||||||
|
SourceAndHeaderFilesWithoutErrors() { this = "source/header files without errors" }
|
||||||
|
|
||||||
|
override int getValue() {
|
||||||
|
result = count(File f | f.fromSource() and not exists(CompilerError e | f = e.getFile()))
|
||||||
|
}
|
||||||
|
|
||||||
|
override SourceAndHeaderFiles getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class CompilationsWithoutErrors extends SuccessMetric {
|
||||||
|
CompilationsWithoutErrors() { this = "compilations without errors" }
|
||||||
|
|
||||||
|
override int getValue() {
|
||||||
|
result = count(Compilation c | not exists(Diagnostic d | d.getFile() = c.getAFileCompiled()))
|
||||||
|
}
|
||||||
|
|
||||||
|
override Compilations getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class Expressions extends BaseMetric {
|
||||||
|
Expressions() { this = "expressions" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Expr e) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class SucceededExpressions extends SuccessMetric {
|
||||||
|
SucceededExpressions() { this = "non-error expressions" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Expr e) - count(ErrorExpr e) }
|
||||||
|
|
||||||
|
override Expressions getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class TypedExpressions extends SuccessMetric {
|
||||||
|
TypedExpressions() { this = "expressions with a known type" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Expr e | not e.getType() instanceof ErroneousType) }
|
||||||
|
|
||||||
|
override Expressions getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class Calls extends BaseMetric {
|
||||||
|
Calls() { this = "calls" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Call c) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class CallsWithExplicitTarget extends SuccessMetric {
|
||||||
|
CallsWithExplicitTarget() { this = "calls with an explicit target" }
|
||||||
|
|
||||||
|
override int getValue() {
|
||||||
|
result = count(Call c | not c.getTarget().getADeclarationEntry().isImplicit())
|
||||||
|
}
|
||||||
|
|
||||||
|
override Calls getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class Variables extends BaseMetric {
|
||||||
|
Variables() { this = "variables" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Variable v) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class VariablesKnownType extends SuccessMetric {
|
||||||
|
VariablesKnownType() { this = "variables with a known type" }
|
||||||
|
|
||||||
|
override int getValue() {
|
||||||
|
result = count(Variable v | not v.getType() instanceof ErroneousType)
|
||||||
|
}
|
||||||
|
|
||||||
|
override Variables getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class LinesOfText extends BaseMetric {
|
||||||
|
LinesOfText() { this = "lines of text" }
|
||||||
|
|
||||||
|
override int getValue() { result = sum(File f | | f.getMetrics().getNumberOfLines()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class LinesOfCode extends BaseMetric {
|
||||||
|
LinesOfCode() { this = "lines of code" }
|
||||||
|
|
||||||
|
override int getValue() { result = sum(File f | | f.getMetrics().getNumberOfLinesOfCode()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private predicate errorLine(File file, int line) {
|
||||||
|
exists(Locatable l, Location loc |
|
||||||
|
loc = l.getLocation() and
|
||||||
|
loc.getFile() = file and
|
||||||
|
line in [loc.getStartLine() .. loc.getEndLine()]
|
||||||
|
|
|
||||||
|
l instanceof Diagnostic
|
||||||
|
or
|
||||||
|
l instanceof ErrorExpr
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
class SucceededLines extends SuccessMetric {
|
||||||
|
SucceededLines() { this = "lines of code without errors" }
|
||||||
|
|
||||||
|
override int getValue() {
|
||||||
|
result =
|
||||||
|
sum(File f | | f.getMetrics().getNumberOfLinesOfCode()) -
|
||||||
|
count(File f, int line | errorLine(f, line))
|
||||||
|
}
|
||||||
|
|
||||||
|
override LinesOfCode getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class Functions extends BaseMetric {
|
||||||
|
Functions() { this = "functions" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Function f) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class SucceededFunctions extends SuccessMetric {
|
||||||
|
SucceededFunctions() { this = "functions without errors" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Function f | not f.hasErrors()) }
|
||||||
|
|
||||||
|
override Functions getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class Includes extends BaseMetric {
|
||||||
|
Includes() { this = "#include directives" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Include i) + count(CannotOpenFileError e) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class SucceededIncludes extends SuccessMetric {
|
||||||
|
SucceededIncludes() { this = "successfully resolved #include directives" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(Include i) }
|
||||||
|
|
||||||
|
override Includes getBaseline() { any() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class SucceededIncludeCount extends Metric {
|
||||||
|
string includeText;
|
||||||
|
|
||||||
|
SucceededIncludeCount() {
|
||||||
|
exists(Include i |
|
||||||
|
i.getIncludeText() = includeText and
|
||||||
|
exists(i.getFile().getRelativePath()) // Only report includes from the repo
|
||||||
|
) and
|
||||||
|
this = "Successfully included " + includeText
|
||||||
|
}
|
||||||
|
|
||||||
|
int getValue() { result = count(Include i | i.getIncludeText() = includeText) }
|
||||||
|
|
||||||
|
string getIncludeText() { result = includeText }
|
||||||
|
}
|
||||||
|
|
||||||
|
class MissingIncludeCount extends Metric {
|
||||||
|
string includeText;
|
||||||
|
|
||||||
|
MissingIncludeCount() {
|
||||||
|
exists(CannotOpenFileError e | e.getIncludedFile() = includeText) and
|
||||||
|
this = "Failed to include '" + includeText + "'"
|
||||||
|
}
|
||||||
|
|
||||||
|
int getValue() { result = count(CannotOpenFileError e | e.getIncludedFile() = includeText) }
|
||||||
|
|
||||||
|
string getIncludeText() { result = includeText }
|
||||||
|
}
|
||||||
|
|
||||||
|
class CompilerErrors extends ExtractionMetric {
|
||||||
|
CompilerErrors() { this = "compiler errors" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(CompilerError e) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class ErrorCount extends Metric {
|
||||||
|
ErrorCount() { exists(CompilerError e | e.getMessage() = this) }
|
||||||
|
|
||||||
|
int getValue() { result = count(CompilerError e | e.getMessage() = this) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class SyntaxErrorCount extends ExtractionMetric {
|
||||||
|
SyntaxErrorCount() { this = "syntax errors" }
|
||||||
|
|
||||||
|
override int getValue() { result = count(SyntaxError e) }
|
||||||
|
}
|
||||||
|
}
|
||||||
13
cpp/ql/src/Telemetry/MissingIncludes.ql
Normal file
13
cpp/ql/src/Telemetry/MissingIncludes.ql
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* @name Failed to include header file
|
||||||
|
* @description A count of all failed includes, grouped by filename.
|
||||||
|
* @kind metric
|
||||||
|
* @tags summary telemetry
|
||||||
|
* @id cpp/telemetry/failed-includes
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Metrics
|
||||||
|
|
||||||
|
from CppMetrics::MissingIncludeCount e
|
||||||
|
where RankMetric<CppMetrics::MissingIncludeCount>::getRank(e) <= 50
|
||||||
|
select e.getIncludeText(), e.getValue()
|
||||||
13
cpp/ql/src/Telemetry/SucceededIncludes.ql
Normal file
13
cpp/ql/src/Telemetry/SucceededIncludes.ql
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* @name Successfully included header files
|
||||||
|
* @description A count of all succeeded includes, grouped by filename.
|
||||||
|
* @kind metric
|
||||||
|
* @tags summary telemetry
|
||||||
|
* @id cpp/telemetry/succeeded-includes
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Metrics
|
||||||
|
|
||||||
|
from CppMetrics::SucceededIncludeCount m
|
||||||
|
where RankMetric<CppMetrics::SucceededIncludeCount>::getRank(m) <= 50
|
||||||
|
select m.getIncludeText(), m.getValue()
|
||||||
5
cpp/ql/src/change-notes/released/1.2.6.md
Normal file
5
cpp/ql/src/change-notes/released/1.2.6.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
## 1.2.6
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* Remove results from the `cpp/wrong-type-format-argument` ("Wrong type of arguments to formatting function") query if the argument is the return value of an implicitly declared function.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.2.5
|
lastReleaseVersion: 1.2.6
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/cpp-queries
|
name: codeql/cpp-queries
|
||||||
version: 1.2.5
|
version: 1.2.7-dev
|
||||||
groups:
|
groups:
|
||||||
- cpp
|
- cpp
|
||||||
- queries
|
- queries
|
||||||
|
|||||||
@@ -5,31 +5,5 @@
|
|||||||
|
|
||||||
import cpp as C
|
import cpp as C
|
||||||
private import codeql.util.test.InlineExpectationsTest
|
private import codeql.util.test.InlineExpectationsTest
|
||||||
|
private import internal.InlineExpectationsTestImpl
|
||||||
private module Impl implements InlineExpectationsTestSig {
|
|
||||||
private newtype TExpectationComment = MkExpectationComment(C::CppStyleComment c)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class representing a line comment in the CPP style.
|
|
||||||
* Unlike the `CppStyleComment` class, however, the string returned by `getContents` does _not_
|
|
||||||
* include the preceding comment marker (`//`).
|
|
||||||
*/
|
|
||||||
class ExpectationComment extends TExpectationComment {
|
|
||||||
C::CppStyleComment comment;
|
|
||||||
|
|
||||||
ExpectationComment() { this = MkExpectationComment(comment) }
|
|
||||||
|
|
||||||
/** Returns the contents of the given comment, _without_ the preceding comment marker (`//`). */
|
|
||||||
string getContents() { result = comment.getContents().suffix(2) }
|
|
||||||
|
|
||||||
/** Gets a textual representation of this element. */
|
|
||||||
string toString() { result = comment.toString() }
|
|
||||||
|
|
||||||
/** Gets the location of this comment. */
|
|
||||||
Location getLocation() { result = comment.getLocation() }
|
|
||||||
}
|
|
||||||
|
|
||||||
class Location = C::Location;
|
|
||||||
}
|
|
||||||
|
|
||||||
import Make<Impl>
|
import Make<Impl>
|
||||||
|
|||||||
21
cpp/ql/test/TestUtilities/InlineExpectationsTestQuery.ql
Normal file
21
cpp/ql/test/TestUtilities/InlineExpectationsTestQuery.ql
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* @kind test-postprocess
|
||||||
|
*/
|
||||||
|
|
||||||
|
private import cpp
|
||||||
|
private import codeql.util.test.InlineExpectationsTest as T
|
||||||
|
private import internal.InlineExpectationsTestImpl
|
||||||
|
import T::TestPostProcessing
|
||||||
|
import T::TestPostProcessing::Make<Impl, Input>
|
||||||
|
|
||||||
|
private module Input implements T::TestPostProcessing::InputSig<Impl> {
|
||||||
|
string getRelativeUrl(Location location) {
|
||||||
|
exists(File f, int startline, int startcolumn, int endline, int endcolumn |
|
||||||
|
location.hasLocationInfo(_, startline, startcolumn, endline, endcolumn) and
|
||||||
|
f = location.getFile()
|
||||||
|
|
|
||||||
|
result =
|
||||||
|
f.getRelativePath() + ":" + startline + ":" + startcolumn + ":" + endline + ":" + endcolumn
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import cpp as C
|
||||||
|
private import codeql.util.test.InlineExpectationsTest
|
||||||
|
|
||||||
|
module Impl implements InlineExpectationsTestSig {
|
||||||
|
private newtype TExpectationComment = MkExpectationComment(C::CppStyleComment c)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class representing a line comment in the CPP style.
|
||||||
|
* Unlike the `CppStyleComment` class, however, the string returned by `getContents` does _not_
|
||||||
|
* include the preceding comment marker (`//`).
|
||||||
|
*/
|
||||||
|
class ExpectationComment extends TExpectationComment {
|
||||||
|
C::CppStyleComment comment;
|
||||||
|
|
||||||
|
ExpectationComment() { this = MkExpectationComment(comment) }
|
||||||
|
|
||||||
|
/** Returns the contents of the given comment, _without_ the preceding comment marker (`//`). */
|
||||||
|
string getContents() { result = comment.getContents().suffix(2) }
|
||||||
|
|
||||||
|
/** Gets a textual representation of this element. */
|
||||||
|
string toString() { result = comment.toString() }
|
||||||
|
|
||||||
|
/** Gets the location of this comment. */
|
||||||
|
Location getLocation() { result = comment.getLocation() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class Location = C::Location;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
| test.cpp:5:7:5:7 | x | unnecessary NULL check before call to $@ | test.cpp:6:5:6:8 | call to free | free |
|
||||||
|
| test.cpp:23:7:23:7 | x | unnecessary NULL check before call to $@ | test.cpp:26:5:26:8 | call to free | free |
|
||||||
|
| test.cpp:31:7:31:8 | ! ... | unnecessary NULL check before call to $@ | test.cpp:35:3:35:6 | call to free | free |
|
||||||
|
| test.cpp:31:7:31:24 | ... \|\| ... | unnecessary NULL check before call to $@ | test.cpp:35:3:35:6 | call to free | free |
|
||||||
|
| test.cpp:31:8:31:8 | x | unnecessary NULL check before call to $@ | test.cpp:35:3:35:6 | call to free | free |
|
||||||
|
| test.cpp:94:12:94:12 | x | unnecessary NULL check before call to $@ | test.cpp:94:3:94:13 | call to free | free |
|
||||||
|
| test.cpp:98:7:98:8 | ! ... | unnecessary NULL check before call to $@ | test.cpp:101:3:101:6 | call to free | free |
|
||||||
|
| test.cpp:98:8:98:8 | x | unnecessary NULL check before call to $@ | test.cpp:101:3:101:6 | call to free | free |
|
||||||
|
| test.cpp:106:7:106:18 | ... != ... | unnecessary NULL check before call to $@ | test.cpp:107:5:107:8 | call to free | free |
|
||||||
|
| test.cpp:113:7:113:18 | ... != ... | unnecessary NULL check before call to $@ | test.cpp:114:17:114:20 | call to free | free |
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user