mirror of
https://github.com/github/codeql.git
synced 2026-07-06 20:15:37 +02:00
Compare commits
665 Commits
codeql-cli
...
redsun82/s
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bd1f548fbc | ||
|
|
1dbe908024 | ||
|
|
39ad4d4a89 | ||
|
|
2c5f007687 | ||
|
|
f87e680185 | ||
|
|
496e76c1c5 | ||
|
|
16660ab1df | ||
|
|
8df2e4952c | ||
|
|
a774aacfa8 | ||
|
|
9cfd06c761 | ||
|
|
68929d1f73 | ||
|
|
eec2aa82a6 | ||
|
|
962c73da16 | ||
|
|
80bd361607 | ||
|
|
bb78536804 | ||
|
|
d5d04f2f4c | ||
|
|
ae3aba061b | ||
|
|
0421ceff93 | ||
|
|
a30e7d2cfd | ||
|
|
dc20b0d19e | ||
|
|
d9573596c7 | ||
|
|
002e1eb730 | ||
|
|
c4f32ec080 | ||
|
|
b0d6778652 | ||
|
|
31a5a7aebc | ||
|
|
aad233b776 | ||
|
|
b7a67b1e51 | ||
|
|
779795b421 | ||
|
|
3ae4cb2f9d | ||
|
|
5c7bbc0287 | ||
|
|
1c0c51faaf | ||
|
|
d675304703 | ||
|
|
456c649c7d | ||
|
|
95a418aa14 | ||
|
|
8e18e7d4e6 | ||
|
|
da0909c080 | ||
|
|
356d928544 | ||
|
|
af28dd8eb4 | ||
|
|
f9d6c63cbb | ||
|
|
246f3fd3e2 | ||
|
|
5351c2734f | ||
|
|
6d05324724 | ||
|
|
e03f8084e6 | ||
|
|
c4dabb94d6 | ||
|
|
b779341ba6 | ||
|
|
6a036f4e84 | ||
|
|
d7eac4d567 | ||
|
|
b8c01e2901 | ||
|
|
5be948533c | ||
|
|
f9536e9a66 | ||
|
|
4ae8720930 | ||
|
|
dfc59a45c2 | ||
|
|
640c842969 | ||
|
|
284007dbff | ||
|
|
b36db5ad11 | ||
|
|
13bb93ea20 | ||
|
|
4652003688 | ||
|
|
ce177c3450 | ||
|
|
8e8100fd34 | ||
|
|
6b025db824 | ||
|
|
c104a0a74c | ||
|
|
dc33f0de1d | ||
|
|
19e910e1b5 | ||
|
|
c7ad0ad406 | ||
|
|
25b20186af | ||
|
|
b4707abf4c | ||
|
|
7fdc09c17f | ||
|
|
2b2c381bf0 | ||
|
|
801edda9b2 | ||
|
|
247abf95ee | ||
|
|
84bb8a400b | ||
|
|
194491f3fb | ||
|
|
6bc0ffe429 | ||
|
|
2bbd9ab4eb | ||
|
|
8d8af320bf | ||
|
|
e5a15f34a4 | ||
|
|
96048f962e | ||
|
|
446dbf67cc | ||
|
|
d9b337cb2c | ||
|
|
0b4459db75 | ||
|
|
c6d02e4909 | ||
|
|
c5c97aca50 | ||
|
|
0db4110449 | ||
|
|
26194eb65f | ||
|
|
390fecbef6 | ||
|
|
b12b33c8f9 | ||
|
|
a85f73972c | ||
|
|
ed314b1799 | ||
|
|
1cf9714272 | ||
|
|
075a249f3b | ||
|
|
42925b56e3 | ||
|
|
60811116ab | ||
|
|
199a9688af | ||
|
|
1cf5e89b96 | ||
|
|
fd3089ee5a | ||
|
|
72caadb7db | ||
|
|
e1c1314824 | ||
|
|
4db586f17d | ||
|
|
c8927447f5 | ||
|
|
85a1e1a972 | ||
|
|
be565288f2 | ||
|
|
c73af7f789 | ||
|
|
4535043e90 | ||
|
|
2ad8704325 | ||
|
|
d0cf2a978c | ||
|
|
8defd27b49 | ||
|
|
40b7534210 | ||
|
|
6bc830dca4 | ||
|
|
9cca1b294c | ||
|
|
27301edc28 | ||
|
|
98b2d1f2d7 | ||
|
|
5d7a6e3836 | ||
|
|
c2141b62e0 | ||
|
|
1e2d1ef715 | ||
|
|
0b41d5121a | ||
|
|
1ae40c95b1 | ||
|
|
b22f5f557a | ||
|
|
fb0520c74a | ||
|
|
dcd84f47a4 | ||
|
|
31ad195dc3 | ||
|
|
b2d2f2d0d8 | ||
|
|
50cc720117 | ||
|
|
9cb7018215 | ||
|
|
e23ff3e499 | ||
|
|
da03237b32 | ||
|
|
22e9ae2793 | ||
|
|
5cee3927f0 | ||
|
|
27e2b00cd7 | ||
|
|
80cb908289 | ||
|
|
567ba9f9c3 | ||
|
|
df860d4128 | ||
|
|
16a90aa180 | ||
|
|
6292cacd74 | ||
|
|
d43762cae3 | ||
|
|
f397ab2d72 | ||
|
|
6c727b1e7d | ||
|
|
3e20d908c4 | ||
|
|
c5678ad156 | ||
|
|
f7ce4f39ea | ||
|
|
3180d8f752 | ||
|
|
64ac52e918 | ||
|
|
0c34b4535a | ||
|
|
4a98436884 | ||
|
|
6b6d705b4f | ||
|
|
901245ae3d | ||
|
|
0a8c9da0ac | ||
|
|
f2cbf08d15 | ||
|
|
e845204ec9 | ||
|
|
d38ce61e03 | ||
|
|
272132a09a | ||
|
|
9d8ee99c1c | ||
|
|
e1f65d1f8b | ||
|
|
c4cc30fb7a | ||
|
|
53a7d823ec | ||
|
|
81f4786643 | ||
|
|
e258d9fa74 | ||
|
|
a52a412c24 | ||
|
|
a30b34c4bd | ||
|
|
418a56d385 | ||
|
|
081f32141c | ||
|
|
d4e8e4c943 | ||
|
|
46d0c6ff9c | ||
|
|
c8a3bedf44 | ||
|
|
cb2ccef5fa | ||
|
|
c045e77d61 | ||
|
|
7d11fc2c7d | ||
|
|
a9afbfa993 | ||
|
|
3e2bbd38d4 | ||
|
|
47d946fb1c | ||
|
|
ea0db4d55e | ||
|
|
f9ae44ca5c | ||
|
|
37da3e1bb3 | ||
|
|
2413332553 | ||
|
|
c12adbeeaa | ||
|
|
d18915a1e4 | ||
|
|
e15a47d58c | ||
|
|
dd65d960be | ||
|
|
8dc95ce9b0 | ||
|
|
58b6b3f601 | ||
|
|
306e481c5d | ||
|
|
5058727980 | ||
|
|
1cc49af454 | ||
|
|
6a3bb4dd28 | ||
|
|
17edfdf801 | ||
|
|
6524b8e25d | ||
|
|
09905ee228 | ||
|
|
6d4e993dea | ||
|
|
aa4fd1992e | ||
|
|
b902dd5680 | ||
|
|
046a5f0881 | ||
|
|
624c574559 | ||
|
|
e0e5bdec8a | ||
|
|
921afb71e2 | ||
|
|
890da5377e | ||
|
|
551743e000 | ||
|
|
982f845be7 | ||
|
|
bb8b0d0bf5 | ||
|
|
5608e0141c | ||
|
|
25daaf9d47 | ||
|
|
285ed3630b | ||
|
|
fd385736e6 | ||
|
|
1e46e431e8 | ||
|
|
d2a00fa773 | ||
|
|
351b908f62 | ||
|
|
0669186713 | ||
|
|
a02cf07833 | ||
|
|
5b1b60cc92 | ||
|
|
25d520a7f1 | ||
|
|
36d59cef7e | ||
|
|
82ed1ee671 | ||
|
|
d8df38c683 | ||
|
|
19b6d24bc2 | ||
|
|
fdf6e30888 | ||
|
|
a26132e818 | ||
|
|
3ede3af6f2 | ||
|
|
8c23e21073 | ||
|
|
06a7e3f3ee | ||
|
|
bd99f32a4b | ||
|
|
24685a07c0 | ||
|
|
c687dcb094 | ||
|
|
30249e4f2b | ||
|
|
854674a71c | ||
|
|
b27a9d948a | ||
|
|
2657e7f56d | ||
|
|
00d772f980 | ||
|
|
abc7cc39d4 | ||
|
|
9cd16fd9d6 | ||
|
|
8630583856 | ||
|
|
b7bc540325 | ||
|
|
65e150b416 | ||
|
|
f04a85e121 | ||
|
|
94d12edfdb | ||
|
|
4626e134fa | ||
|
|
00fbada41d | ||
|
|
21a0f8af07 | ||
|
|
d603b48884 | ||
|
|
a1743aa12e | ||
|
|
513ec16691 | ||
|
|
9a2c7d34af | ||
|
|
2e74ae448c | ||
|
|
40fb59dc0b | ||
|
|
c8f3c1a798 | ||
|
|
f507b51170 | ||
|
|
3e9862391b | ||
|
|
6513c33d26 | ||
|
|
1bb762bea9 | ||
|
|
7d41e8ef73 | ||
|
|
3b585b4196 | ||
|
|
4a448f445e | ||
|
|
accc73d1d0 | ||
|
|
49f74bacf2 | ||
|
|
6db7e72fb8 | ||
|
|
bbdae5188d | ||
|
|
fa13861e53 | ||
|
|
47309df2a9 | ||
|
|
85da3d2f13 | ||
|
|
b0bd7a983f | ||
|
|
4dc13e850e | ||
|
|
716df0c7ce | ||
|
|
b75514c990 | ||
|
|
cfb48ace73 | ||
|
|
988d0671bb | ||
|
|
a8758c0160 | ||
|
|
d7ce2be040 | ||
|
|
280a9b4408 | ||
|
|
dff3ce2a9f | ||
|
|
21c9f33419 | ||
|
|
c357cc9f08 | ||
|
|
69490c62cd | ||
|
|
6bf22bda58 | ||
|
|
8ea4f85de3 | ||
|
|
95c764eff6 | ||
|
|
db768960f4 | ||
|
|
555d7e5958 | ||
|
|
0de4fd8430 | ||
|
|
9966be6975 | ||
|
|
b936f725b5 | ||
|
|
a691ec01b3 | ||
|
|
5336a1a251 | ||
|
|
60ed51781e | ||
|
|
e84028d01e | ||
|
|
d308178781 | ||
|
|
ce5ab4c4b7 | ||
|
|
3457551264 | ||
|
|
0e04a59c08 | ||
|
|
e5c20b13cf | ||
|
|
4c4c15b425 | ||
|
|
aa35bd771b | ||
|
|
a36e39359f | ||
|
|
a7386b6670 | ||
|
|
f0e68887d4 | ||
|
|
b4fdf3c342 | ||
|
|
596102d3fb | ||
|
|
754fd8e84c | ||
|
|
68a661f3c7 | ||
|
|
b79711b17e | ||
|
|
2be171746b | ||
|
|
5cb37f5c4c | ||
|
|
901fac4282 | ||
|
|
013ee9c15e | ||
|
|
c158f8054e | ||
|
|
aa962f9b03 | ||
|
|
1185e28ea2 | ||
|
|
ed3f1e40db | ||
|
|
99907471b2 | ||
|
|
40204911bc | ||
|
|
6dbdc9e17f | ||
|
|
b7a2ea8981 | ||
|
|
59f8f8a394 | ||
|
|
45ece48b6f | ||
|
|
919ddccfdb | ||
|
|
7adfa6bbed | ||
|
|
eb1999f8b3 | ||
|
|
ccb923a436 | ||
|
|
5bbd003dfc | ||
|
|
b53712cae0 | ||
|
|
6a0be6ad09 | ||
|
|
46e16b88bb | ||
|
|
cfd5f53eb0 | ||
|
|
8997f2cdf2 | ||
|
|
1f99559e9f | ||
|
|
cb39ae7dd3 | ||
|
|
8a7fdfa6fe | ||
|
|
59a77a873c | ||
|
|
9403bf25d8 | ||
|
|
6c8e391a63 | ||
|
|
5170585515 | ||
|
|
1c3ceacf04 | ||
|
|
dfaa40a1d2 | ||
|
|
b5d6a6db7e | ||
|
|
031e44b157 | ||
|
|
2c4a95bb5e | ||
|
|
6c3d90e8a0 | ||
|
|
9ca74de3e9 | ||
|
|
33704779ea | ||
|
|
cd9d58fdc8 | ||
|
|
eee7f5a896 | ||
|
|
0f98d9e815 | ||
|
|
4da5d6660a | ||
|
|
38ee085782 | ||
|
|
822f6eebfb | ||
|
|
b4ecc81145 | ||
|
|
fa2c50616b | ||
|
|
b6adff6377 | ||
|
|
53dd269f9f | ||
|
|
7f19f449eb | ||
|
|
49fb372eb9 | ||
|
|
df6449cfc7 | ||
|
|
b697068e9a | ||
|
|
5686efd25c | ||
|
|
f41bd41bd0 | ||
|
|
197cdab43d | ||
|
|
0e8af39b77 | ||
|
|
96b6ddefe0 | ||
|
|
57925373c6 | ||
|
|
833b4f90bf | ||
|
|
0fabca94db | ||
|
|
3d53ddf919 | ||
|
|
e1317ddcb6 | ||
|
|
b8b95fd81d | ||
|
|
c3862660e4 | ||
|
|
327dab69d0 | ||
|
|
1d1a84962b | ||
|
|
abe2deb6a6 | ||
|
|
3d3a315456 | ||
|
|
d238b9198d | ||
|
|
b0afba49a2 | ||
|
|
39a8af6519 | ||
|
|
14b5114aa6 | ||
|
|
c0df22950b | ||
|
|
b7b0f84e8b | ||
|
|
c75e66c433 | ||
|
|
9aa0c9f1f3 | ||
|
|
1046d03486 | ||
|
|
7d97463e4d | ||
|
|
079717bbc0 | ||
|
|
3fc8401370 | ||
|
|
3f2befc3e5 | ||
|
|
269f8ca2cd | ||
|
|
68ccec3d43 | ||
|
|
2f00a0d323 | ||
|
|
6cfd9458b0 | ||
|
|
7a13c31021 | ||
|
|
5973f3fadc | ||
|
|
098b732937 | ||
|
|
194ef607f7 | ||
|
|
78729180ad | ||
|
|
f3a9c9a9dc | ||
|
|
4e1f7a930d | ||
|
|
e2a47e7c18 | ||
|
|
c808953b1d | ||
|
|
3525967143 | ||
|
|
c7b4f51077 | ||
|
|
039537f7ba | ||
|
|
be66ea2178 | ||
|
|
a29446a566 | ||
|
|
58f69c9385 | ||
|
|
02100e58d9 | ||
|
|
ede0b5bdf4 | ||
|
|
f9db7864e1 | ||
|
|
0198806658 | ||
|
|
bb03a9faba | ||
|
|
f0a467e80b | ||
|
|
84b9d4d1ac | ||
|
|
3d037e73f0 | ||
|
|
b8de2ea03b | ||
|
|
b47831af14 | ||
|
|
1834a399d2 | ||
|
|
4bbeda08d6 | ||
|
|
83108e3e25 | ||
|
|
bcabc88649 | ||
|
|
4079de125f | ||
|
|
eec259279a | ||
|
|
e244eef3b5 | ||
|
|
7f7c5d7c94 | ||
|
|
e247d5b316 | ||
|
|
e56c185f32 | ||
|
|
0150269503 | ||
|
|
11c37734c3 | ||
|
|
854c6fa813 | ||
|
|
9ea2b463f0 | ||
|
|
78d23ee044 | ||
|
|
8ba7ac678d | ||
|
|
4be5cf4e78 | ||
|
|
ec18786488 | ||
|
|
e10e2899bd | ||
|
|
54a0e6dc45 | ||
|
|
8629e00686 | ||
|
|
9ed6da1072 | ||
|
|
a90968d277 | ||
|
|
1027ca266d | ||
|
|
90d6f2ece3 | ||
|
|
605fe54a06 | ||
|
|
5f08371f19 | ||
|
|
07f03be8cc | ||
|
|
b0c03f6d68 | ||
|
|
8b51ee8fe8 | ||
|
|
a04f08f026 | ||
|
|
a756f86847 | ||
|
|
0df6a1c4b1 | ||
|
|
48739da565 | ||
|
|
91ebeee429 | ||
|
|
5aee35256d | ||
|
|
4b62cb64ed | ||
|
|
0bbf131fdb | ||
|
|
7c2ee80bc3 | ||
|
|
e3cbf1479a | ||
|
|
4ee80653e2 | ||
|
|
3551386a1a | ||
|
|
6af1ed9d75 | ||
|
|
cdca607828 | ||
|
|
af2a78ea4d | ||
|
|
183a825841 | ||
|
|
bbeebfae73 | ||
|
|
f441c68f7e | ||
|
|
1db5e32e86 | ||
|
|
45a48f360f | ||
|
|
e9bd85e0ba | ||
|
|
202d77d94f | ||
|
|
24c9062b35 | ||
|
|
d8d1ae632c | ||
|
|
0f56e408f8 | ||
|
|
864d629a13 | ||
|
|
20b7def543 | ||
|
|
cf4736c8f6 | ||
|
|
67b327a0f7 | ||
|
|
a299afaf51 | ||
|
|
3d3652c63f | ||
|
|
92957a63ad | ||
|
|
3351b9547d | ||
|
|
2ae7fa4897 | ||
|
|
6fd2ab7cef | ||
|
|
700604a1c2 | ||
|
|
93f10fcf14 | ||
|
|
a464a8e48e | ||
|
|
11faf08ed0 | ||
|
|
214db5c20d | ||
|
|
3cf719cb39 | ||
|
|
3574b9fd4f | ||
|
|
29e3816412 | ||
|
|
01416838a1 | ||
|
|
4226270ef9 | ||
|
|
73caa48302 | ||
|
|
939ae4a561 | ||
|
|
90db894d01 | ||
|
|
87316784ad | ||
|
|
bb5ef3ccd9 | ||
|
|
e9dba59f11 | ||
|
|
ae0bf037ac | ||
|
|
2f33b9422b | ||
|
|
83860acdde | ||
|
|
f2b1e09650 | ||
|
|
317790eac3 | ||
|
|
ec34007a88 | ||
|
|
7336dd1ae5 | ||
|
|
496fff4273 | ||
|
|
00319c5010 | ||
|
|
092bc6445d | ||
|
|
d4adc373c6 | ||
|
|
c3bba38950 | ||
|
|
1aea120e89 | ||
|
|
b0c4fcec57 | ||
|
|
9e088f3e4a | ||
|
|
84c1341b62 | ||
|
|
d76700497b | ||
|
|
9c98652116 | ||
|
|
7c0ce6486b | ||
|
|
1d44f45be2 | ||
|
|
71505f4003 | ||
|
|
9db334d02f | ||
|
|
2c9340331d | ||
|
|
5e0a78c4c7 | ||
|
|
e7a60b72f1 | ||
|
|
b9586a81ef | ||
|
|
6c0c3365cf | ||
|
|
d344f720aa | ||
|
|
881b2586e1 | ||
|
|
504a233299 | ||
|
|
1d6f09c750 | ||
|
|
44a16cef6c | ||
|
|
1033bf9c4c | ||
|
|
b9e3b3310e | ||
|
|
97cb0c89c8 | ||
|
|
12df7dee17 | ||
|
|
af016f9416 | ||
|
|
8258e377dd | ||
|
|
d27a378008 | ||
|
|
dabc33bf66 | ||
|
|
7dcbbbac91 | ||
|
|
798a736d16 | ||
|
|
65af2556ed | ||
|
|
97f9a882c6 | ||
|
|
0f63f0dda2 | ||
|
|
80bf7cdb52 | ||
|
|
dd223ed704 | ||
|
|
e3e59e02e5 | ||
|
|
6ff7fb2a70 | ||
|
|
9331c2c33a | ||
|
|
6ac46b8436 | ||
|
|
1100b75a3c | ||
|
|
0473655752 | ||
|
|
22858249f9 | ||
|
|
4644f08195 | ||
|
|
25f9449f53 | ||
|
|
af9ed21c36 | ||
|
|
1f112467ce | ||
|
|
b9edcb7943 | ||
|
|
52a809145e | ||
|
|
fd9e6f48d7 | ||
|
|
171486641e | ||
|
|
5299c4a845 | ||
|
|
66cba89fdb | ||
|
|
8c3994bc9c | ||
|
|
b1242e464e | ||
|
|
fcd2bd6776 | ||
|
|
e96c3a36ad | ||
|
|
cfd7c7a47c | ||
|
|
2b929c4d2d | ||
|
|
1fc481ce81 | ||
|
|
ea05b297a3 | ||
|
|
14daf58767 | ||
|
|
8fde8c2db4 | ||
|
|
b397f57357 | ||
|
|
300c82a8ff | ||
|
|
76beffb04a | ||
|
|
f1533f40b6 | ||
|
|
d2d945c66d | ||
|
|
4af4040bd6 | ||
|
|
f905ac10c4 | ||
|
|
0895f7d971 | ||
|
|
c470c078dc | ||
|
|
8dad622de2 | ||
|
|
c7adb32bc4 | ||
|
|
37d33186e5 | ||
|
|
fb3d34ce11 | ||
|
|
7f153ed07b | ||
|
|
90da07159e | ||
|
|
a87d27b53e | ||
|
|
9435a62a86 | ||
|
|
0e80e867af | ||
|
|
f93d4a0dd5 | ||
|
|
3a52cd186e | ||
|
|
0043d93fc1 | ||
|
|
9b4ea8877b | ||
|
|
4a2ab49efb | ||
|
|
8b93e815b9 | ||
|
|
6b9cc1a278 | ||
|
|
c4a38d0a2f | ||
|
|
0a765cc94a | ||
|
|
7e93102097 | ||
|
|
ead247469d | ||
|
|
4df73f9975 | ||
|
|
5fea71e5d6 | ||
|
|
6520e2fdfb | ||
|
|
2708e57e4b | ||
|
|
cffdc5b452 | ||
|
|
fc7fef3dd8 | ||
|
|
0c88d05a65 | ||
|
|
5792f7b770 | ||
|
|
e90f55a05f | ||
|
|
e58e5fb825 | ||
|
|
b35f318910 | ||
|
|
e285cf232c | ||
|
|
f2d6640003 | ||
|
|
c1fd7a6190 | ||
|
|
699d8d4719 | ||
|
|
b20b733172 | ||
|
|
a636c47c84 | ||
|
|
4321c5c2da | ||
|
|
7dd1389b9e | ||
|
|
ab219902a9 | ||
|
|
3e6b4a161b | ||
|
|
95c9a3fc9a | ||
|
|
385c3ba7ff | ||
|
|
70282f9ebe | ||
|
|
d234a53c50 | ||
|
|
076faa3a4e | ||
|
|
3d7db0e46b | ||
|
|
78e7793e01 | ||
|
|
7662b2bd24 | ||
|
|
191766a47b | ||
|
|
4f68f60db2 | ||
|
|
102f09aa23 | ||
|
|
18d0b28024 | ||
|
|
87cac2a4e3 | ||
|
|
83cbbd7043 | ||
|
|
e6c7fc0ead | ||
|
|
6a3cdc90e2 | ||
|
|
3bcb411d1a | ||
|
|
f623db461a | ||
|
|
bb6ef72e67 | ||
|
|
aa24ce5532 | ||
|
|
48a9b107b9 | ||
|
|
4ef4c92e2c | ||
|
|
abd53e98a9 | ||
|
|
413c11171e | ||
|
|
d661f7f482 | ||
|
|
5cc4206e00 | ||
|
|
0652afced3 | ||
|
|
a9c8bc082f | ||
|
|
faa483a282 | ||
|
|
9da815a5c0 | ||
|
|
ee4d87bd96 | ||
|
|
7891e64d3e | ||
|
|
acac534ed0 | ||
|
|
07ad596f77 | ||
|
|
c0e6d7c049 | ||
|
|
3f41a42c38 | ||
|
|
15671682c5 | ||
|
|
00b6e1f0b0 | ||
|
|
41e7b91d78 | ||
|
|
ed066281b9 | ||
|
|
816eebbb51 | ||
|
|
142ab01b48 | ||
|
|
e171123589 | ||
|
|
f41bc1f631 | ||
|
|
75f0fc4a98 | ||
|
|
921198ed30 | ||
|
|
f6737b3d90 | ||
|
|
344869f0d7 | ||
|
|
06114d91d8 | ||
|
|
7a577ddd98 | ||
|
|
3f64cc82eb | ||
|
|
4f04dc8f6e | ||
|
|
65b97745c2 |
@@ -1 +1 @@
|
|||||||
7.1.2
|
7.2.1
|
||||||
|
|||||||
@@ -1,25 +1,28 @@
|
|||||||
{
|
{
|
||||||
"extensions": [
|
"extensions": [
|
||||||
"github.vscode-codeql",
|
"github.vscode-codeql",
|
||||||
"hbenl.vscode-test-explorer",
|
"hbenl.vscode-test-explorer",
|
||||||
"ms-vscode.test-adapter-converter",
|
"ms-vscode.test-adapter-converter",
|
||||||
"slevesque.vscode-zipexplorer",
|
"slevesque.vscode-zipexplorer",
|
||||||
"ms-vscode.cpptools"
|
"ms-vscode.cpptools"
|
||||||
],
|
],
|
||||||
"settings": {
|
"features": {
|
||||||
"files.watcherExclude": {
|
"git-lfs": "latest"
|
||||||
"**/target/**": true
|
},
|
||||||
},
|
"settings": {
|
||||||
"codeQL.runningQueries.memory": 2048
|
"files.watcherExclude": {
|
||||||
},
|
"**/target/**": true
|
||||||
"build": {
|
},
|
||||||
"dockerfile": "Dockerfile",
|
"codeQL.runningQueries.memory": 2048
|
||||||
},
|
},
|
||||||
"runArgs": [
|
"build": {
|
||||||
"--cap-add=SYS_PTRACE",
|
"dockerfile": "Dockerfile",
|
||||||
"--security-opt",
|
},
|
||||||
"seccomp=unconfined"
|
"runArgs": [
|
||||||
],
|
"--cap-add=SYS_PTRACE",
|
||||||
"remoteUser": "vscode",
|
"--security-opt",
|
||||||
"onCreateCommand": ".devcontainer/swift/user.sh"
|
"seccomp=unconfined"
|
||||||
|
],
|
||||||
|
"remoteUser": "vscode",
|
||||||
|
"onCreateCommand": ".devcontainer/swift/user.sh"
|
||||||
}
|
}
|
||||||
|
|||||||
10
.devcontainer/swift/root.sh
Normal file → Executable file
10
.devcontainer/swift/root.sh
Normal file → Executable file
@@ -3,6 +3,13 @@ set -xe
|
|||||||
BAZELISK_VERSION=v1.12.0
|
BAZELISK_VERSION=v1.12.0
|
||||||
BAZELISK_DOWNLOAD_SHA=6b0bcb2ea15bca16fffabe6fda75803440375354c085480fe361d2cbf32501db
|
BAZELISK_DOWNLOAD_SHA=6b0bcb2ea15bca16fffabe6fda75803440375354c085480fe361d2cbf32501db
|
||||||
|
|
||||||
|
# install gh apt source
|
||||||
|
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \
|
||||||
|
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
|
||||||
|
&& wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
|
||||||
|
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
|
||||||
|
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
|
||||||
|
|
||||||
apt-get update
|
apt-get update
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
apt-get -y install --no-install-recommends \
|
apt-get -y install --no-install-recommends \
|
||||||
@@ -10,7 +17,8 @@ apt-get -y install --no-install-recommends \
|
|||||||
uuid-dev \
|
uuid-dev \
|
||||||
python3-distutils \
|
python3-distutils \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
bash-completion
|
bash-completion \
|
||||||
|
gh
|
||||||
|
|
||||||
# Install Bazel
|
# Install Bazel
|
||||||
curl -fSsL -o /usr/local/bin/bazelisk https://github.com/bazelbuild/bazelisk/releases/download/${BAZELISK_VERSION}/bazelisk-linux-amd64
|
curl -fSsL -o /usr/local/bin/bazelisk https://github.com/bazelbuild/bazelisk/releases/download/${BAZELISK_VERSION}/bazelisk-linux-amd64
|
||||||
|
|||||||
5
.github/workflows/compile-queries.yml
vendored
5
.github/workflows/compile-queries.yml
vendored
@@ -29,6 +29,8 @@ jobs:
|
|||||||
key: all-queries
|
key: all-queries
|
||||||
- name: check formatting
|
- name: check formatting
|
||||||
run: find shared */ql -type f \( -name "*.qll" -o -name "*.ql" \) -print0 | xargs -0 -n 3000 -P 10 codeql query format -q --check-only
|
run: find shared */ql -type f \( -name "*.qll" -o -name "*.ql" \) -print0 | xargs -0 -n 3000 -P 10 codeql query format -q --check-only
|
||||||
|
- name: Omit DatabaseQualityDiagnostics.ql from compile checking # Remove me once CodeQL 2.18.0 is released!
|
||||||
|
run: mv java/ql/src/Telemetry/DatabaseQualityDiagnostics.ql{,.hidden}
|
||||||
- name: compile queries - check-only
|
- name: compile queries - check-only
|
||||||
# run with --check-only if running in a PR (github.sha != main)
|
# run with --check-only if running in a PR (github.sha != main)
|
||||||
if : ${{ github.event_name == 'pull_request' }}
|
if : ${{ github.event_name == 'pull_request' }}
|
||||||
@@ -39,3 +41,6 @@ jobs:
|
|||||||
if : ${{ github.event_name != 'pull_request' }}
|
if : ${{ github.event_name != 'pull_request' }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500
|
run: codeql query compile -q -j0 */ql/{src,examples} --keep-going --warnings=error --compilation-cache "${{ steps.query-cache.outputs.cache-dir }}" --compilation-cache-size=500
|
||||||
|
- name: Restore DatabaseQualityDiagnostics.ql after compile checking # Remove me once CodeQL 2.18.0 is released
|
||||||
|
run: mv java/ql/src/Telemetry/DatabaseQualityDiagnostics.ql{.hidden,}
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/ruby-build.yml
vendored
2
.github/workflows/ruby-build.yml
vendored
@@ -7,6 +7,7 @@ on:
|
|||||||
- .github/workflows/ruby-build.yml
|
- .github/workflows/ruby-build.yml
|
||||||
- .github/actions/fetch-codeql/action.yml
|
- .github/actions/fetch-codeql/action.yml
|
||||||
- codeql-workspace.yml
|
- codeql-workspace.yml
|
||||||
|
- "shared/tree-sitter-extractor/**"
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- "rc/*"
|
- "rc/*"
|
||||||
@@ -16,6 +17,7 @@ on:
|
|||||||
- .github/workflows/ruby-build.yml
|
- .github/workflows/ruby-build.yml
|
||||||
- .github/actions/fetch-codeql/action.yml
|
- .github/actions/fetch-codeql/action.yml
|
||||||
- codeql-workspace.yml
|
- codeql-workspace.yml
|
||||||
|
- "shared/tree-sitter-extractor/**"
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- "rc/*"
|
- "rc/*"
|
||||||
|
|||||||
39
MODULE.bazel
39
MODULE.bazel
@@ -13,22 +13,45 @@ local_path_override(
|
|||||||
|
|
||||||
# see https://registry.bazel.build/ for a list of available packages
|
# see https://registry.bazel.build/ for a list of available packages
|
||||||
|
|
||||||
bazel_dep(name = "platforms", version = "0.0.9")
|
bazel_dep(name = "platforms", version = "0.0.10")
|
||||||
bazel_dep(name = "rules_go", version = "0.47.0")
|
bazel_dep(name = "rules_go", version = "0.48.0")
|
||||||
bazel_dep(name = "rules_pkg", version = "0.10.1")
|
bazel_dep(name = "rules_pkg", version = "0.10.1")
|
||||||
bazel_dep(name = "rules_nodejs", version = "6.0.3")
|
bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1")
|
||||||
bazel_dep(name = "rules_python", version = "0.31.0")
|
bazel_dep(name = "rules_python", version = "0.32.2")
|
||||||
bazel_dep(name = "bazel_skylib", version = "1.5.0")
|
bazel_dep(name = "bazel_skylib", version = "1.6.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 = "1.9.4-codeql.1")
|
bazel_dep(name = "rules_kotlin", version = "1.9.4-codeql.1")
|
||||||
bazel_dep(name = "gazelle", version = "0.36.0")
|
bazel_dep(name = "gazelle", version = "0.37.0")
|
||||||
bazel_dep(name = "rules_dotnet", version = "0.15.1")
|
bazel_dep(name = "rules_dotnet", version = "0.15.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.46.0")
|
||||||
|
|
||||||
bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True)
|
bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True)
|
||||||
|
|
||||||
|
crate = use_extension(
|
||||||
|
"@rules_rust//crate_universe:extension.bzl",
|
||||||
|
"crate",
|
||||||
|
)
|
||||||
|
crate.from_cargo(
|
||||||
|
name = "py_deps",
|
||||||
|
cargo_lockfile = "//python/extractor/tsg-python:Cargo.lock",
|
||||||
|
manifests = [
|
||||||
|
"//python/extractor/tsg-python:Cargo.toml",
|
||||||
|
"//python/extractor/tsg-python/tsp:Cargo.toml",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
crate.from_cargo(
|
||||||
|
name = "ruby_deps",
|
||||||
|
cargo_lockfile = "//ruby/extractor:Cargo.lock",
|
||||||
|
manifests = [
|
||||||
|
"//ruby/extractor:Cargo.toml",
|
||||||
|
"//ruby/extractor/codeql-extractor-fake-crate:Cargo.toml",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
use_repo(crate, "py_deps", "ruby_deps")
|
||||||
|
|
||||||
dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet")
|
dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet")
|
||||||
dotnet.toolchain(dotnet_version = "8.0.101")
|
dotnet.toolchain(dotnet_version = "8.0.101")
|
||||||
use_repo(dotnet, "dotnet_toolchains")
|
use_repo(dotnet, "dotnet_toolchains")
|
||||||
@@ -62,6 +85,10 @@ use_repo(
|
|||||||
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
|
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
|
||||||
node.toolchain(
|
node.toolchain(
|
||||||
name = "nodejs",
|
name = "nodejs",
|
||||||
|
node_urls = [
|
||||||
|
"https://nodejs.org/dist/v{version}/{filename}",
|
||||||
|
"https://mirrors.dotsrc.org/nodejs/release/v{version}/{filename}",
|
||||||
|
],
|
||||||
node_version = "18.15.0",
|
node_version = "18.15.0",
|
||||||
)
|
)
|
||||||
use_repo(node, "nodejs", "nodejs_toolchains")
|
use_repo(node, "nodejs", "nodejs_toolchains")
|
||||||
|
|||||||
@@ -61,10 +61,6 @@
|
|||||||
"java/ql/src/utils/modelgenerator/internal/CaptureModels.qll",
|
"java/ql/src/utils/modelgenerator/internal/CaptureModels.qll",
|
||||||
"csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll"
|
"csharp/ql/src/utils/modelgenerator/internal/CaptureModels.qll"
|
||||||
],
|
],
|
||||||
"Model as Data Generation Java/C# - CaptureModelsPrinting": [
|
|
||||||
"java/ql/src/utils/modelgenerator/internal/CaptureModelsPrinting.qll",
|
|
||||||
"csharp/ql/src/utils/modelgenerator/internal/CaptureModelsPrinting.qll"
|
|
||||||
],
|
|
||||||
"Sign Java/C#": [
|
"Sign Java/C#": [
|
||||||
"java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll",
|
"java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll",
|
||||||
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll"
|
"csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll"
|
||||||
@@ -185,11 +181,6 @@
|
|||||||
"cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysisImports.qll",
|
"cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/AliasAnalysisImports.qll",
|
||||||
"cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisImports.qll"
|
"cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasAnalysisImports.qll"
|
||||||
],
|
],
|
||||||
"C++ IR ValueNumberingImports": [
|
|
||||||
"cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingImports.qll",
|
|
||||||
"cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingImports.qll",
|
|
||||||
"cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingImports.qll"
|
|
||||||
],
|
|
||||||
"IR SSA SSAConstruction": [
|
"IR SSA SSAConstruction": [
|
||||||
"cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll",
|
"cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll",
|
||||||
"cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll"
|
"cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll"
|
||||||
|
|||||||
@@ -1,3 +1,15 @@
|
|||||||
|
## 1.2.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
* The syntax for models-as-data rows has been extended to make it easier to select sources, sinks, and summaries that involve templated functions and classes. Additionally, the syntax has also been extended to make it easier to specify models with arbitrary levels of indirection. See `dataflow/ExternalFlow.qll` for the updated documentation and specification for the model format.
|
||||||
|
* It is now possible to extend the classes `AllocationFunction` and `DeallocationFunction` via data extensions. Extensions of these classes should be added to the `lib/ext/allocation` and `lib/ext/deallocation` directories respectively.
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* The queries "Potential double free" (`cpp/double-free`) and "Potential use after free" (`cpp/use-after-free`) now produce fewer false positives.
|
||||||
|
* The "Guards" library (`semmle.code.cpp.controlflow.Guards`) now also infers guards from calls to the builtin operation `__builtin_expect`. As a result, some queries may produce fewer false positives.
|
||||||
|
|
||||||
## 1.1.1
|
## 1.1.1
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
11
cpp/ql/lib/change-notes/released/1.2.0.md
Normal file
11
cpp/ql/lib/change-notes/released/1.2.0.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
## 1.2.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
* The syntax for models-as-data rows has been extended to make it easier to select sources, sinks, and summaries that involve templated functions and classes. Additionally, the syntax has also been extended to make it easier to specify models with arbitrary levels of indirection. See `dataflow/ExternalFlow.qll` for the updated documentation and specification for the model format.
|
||||||
|
* It is now possible to extend the classes `AllocationFunction` and `DeallocationFunction` via data extensions. Extensions of these classes should be added to the `lib/ext/allocation` and `lib/ext/deallocation` directories respectively.
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* The queries "Potential double free" (`cpp/double-free`) and "Potential use after free" (`cpp/use-after-free`) now produce fewer false positives.
|
||||||
|
* The "Guards" library (`semmle.code.cpp.controlflow.Guards`) now also infers guards from calls to the builtin operation `__builtin_expect`. As a result, some queries may produce fewer false positives.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.1.1
|
lastReleaseVersion: 1.2.0
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
extensions:
|
|
||||||
# partial model of the Boost::Asio network library
|
# partial model of the Boost::Asio network library
|
||||||
extensions:
|
extensions:
|
||||||
- addsTo:
|
- addsTo:
|
||||||
|
|||||||
7
cpp/ql/lib/ext/allocation/Bsd.allocation.model.yml
Normal file
7
cpp/ql/lib/ext/allocation/Bsd.allocation.model.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: allocationFunctionModel
|
||||||
|
data:
|
||||||
|
- ["", "", False, "kmem_alloc", "0", "", "", True]
|
||||||
|
- ["", "", False, "kmem_zalloc", "0", "", "", True]
|
||||||
7
cpp/ql/lib/ext/allocation/Glibc.allocation.model.yml
Normal file
7
cpp/ql/lib/ext/allocation/Glibc.allocation.model.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: allocationFunctionModel
|
||||||
|
data:
|
||||||
|
- ["", "", False, "g_malloc", "0", "", "", True]
|
||||||
|
- ["", "", False, "g_try_malloc", "0", "", "", True]
|
||||||
10
cpp/ql/lib/ext/allocation/OpenSSL.allocation.model.yml
Normal file
10
cpp/ql/lib/ext/allocation/OpenSSL.allocation.model.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: allocationFunctionModel
|
||||||
|
data:
|
||||||
|
- ["", "", False, "CRYPTO_malloc", "0", "", "", True]
|
||||||
|
- ["", "", False, "CRYPTO_zalloc", "0", "", "", True]
|
||||||
|
- ["", "", False, "CRYPTO_secure_malloc", "0", "", "", True]
|
||||||
|
- ["", "", False, "CRYPTO_secure_zalloc", "0", "", "", True]
|
||||||
|
|
||||||
15
cpp/ql/lib/ext/allocation/Std.allocation.model.yml
Normal file
15
cpp/ql/lib/ext/allocation/Std.allocation.model.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: allocationFunctionModel
|
||||||
|
data:
|
||||||
|
- ["", "", False, "malloc", "0", "", "", True]
|
||||||
|
- ["std", "", False, "malloc", "0", "", "", True]
|
||||||
|
- ["bsl", "", False, "malloc", "0", "", "", True]
|
||||||
|
- ["", "", False, "alloca", "0", "", "", False]
|
||||||
|
- ["", "", False, "__builtin_alloca", "0", "", "", False]
|
||||||
|
- ["", "", False, "_alloca", "0", "", "", False]
|
||||||
|
- ["", "", False, "_malloca", "0", "", "", False]
|
||||||
|
- ["", "", False, "calloc", "1", "0", "", True]
|
||||||
|
- ["std", "", False, "calloc", "1", "0", "", True]
|
||||||
|
- ["bsl", "", False, "calloc", "1", "0", "", True]
|
||||||
29
cpp/ql/lib/ext/allocation/Windows.allocation.model.yml
Normal file
29
cpp/ql/lib/ext/allocation/Windows.allocation.model.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: allocationFunctionModel
|
||||||
|
data:
|
||||||
|
- ["", "", False, "MmAllocateContiguousMemory", "0", "", "", True]
|
||||||
|
- ["", "", False, "MmAllocateContiguousNodeMemory", "0", "", "", True]
|
||||||
|
- ["", "", False, "MmAllocateContiguousMemorySpecifyCache", "0", "", "", True]
|
||||||
|
- ["", "", False, "MmAllocateContiguousMemorySpecifyCacheNode", "0", "", "", True]
|
||||||
|
- ["", "", False, "MmAllocateNonCachedMemory", "0", "", "", True]
|
||||||
|
- ["", "", False, "MmAllocateMappingAddress", "0", "", "", True]
|
||||||
|
- ["", "", False, "CoTaskMemAlloc", "0", "", "", True]
|
||||||
|
- ["", "", False, "ExAllocatePool", "1", "", "", True]
|
||||||
|
- ["", "", False, "ExAllocatePool2", "1", "", "", True]
|
||||||
|
- ["", "", False, "ExAllocatePool3", "1", "", "", True]
|
||||||
|
- ["", "", False, "ExAllocatePoolWithTag", "1", "", "", True]
|
||||||
|
- ["", "", False, "ExAllocatePoolWithTagPriority", "1", "", "", True]
|
||||||
|
- ["", "", False, "ExAllocatePoolWithQuota", "1", "", "", True]
|
||||||
|
- ["", "", False, "ExAllocatePoolWithQuotaTag", "1", "", "", True]
|
||||||
|
- ["", "", False, "ExAllocatePoolZero", "1", "", "", True]
|
||||||
|
- ["", "", False, "IoAllocateMdl", "1", "", "", True]
|
||||||
|
- ["", "", False, "IoAllocateErrorLogEntry", "1", "", "", True]
|
||||||
|
- ["", "", False, "LocalAlloc", "1", "", "", True]
|
||||||
|
- ["", "", False, "GlobalAlloc", "1", "", "", True]
|
||||||
|
- ["", "", False, "VirtualAlloc", "1", "", "", True]
|
||||||
|
- ["", "", False, "HeapAlloc", "2", "", "", True]
|
||||||
|
- ["", "", False, "MmAllocatePagesForMdl", "3", "", "", True]
|
||||||
|
- ["", "", False, "MmAllocatePagesForMdlEx", "3", "", "", True]
|
||||||
|
- ["", "", False, "MmAllocateNodePagesForMdlEx", "3", "", "", True]
|
||||||
5
cpp/ql/lib/ext/allocation/empty.allocation.model.yml
Normal file
5
cpp/ql/lib/ext/allocation/empty.allocation.model.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: allocationFunctionModel
|
||||||
|
data: []
|
||||||
14
cpp/ql/lib/ext/bsl.array.model.yml
Normal file
14
cpp/ql/lib/ext/bsl.array.model.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["bsl", "array", True, "at", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "array", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "array", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "array", True, "data", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "array", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "array", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "array", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "array", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "array", True, "back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
73
cpp/ql/lib/ext/bsl.deque.model.yml
Normal file
73
cpp/ql/lib/ext/bsl.deque.model.yml
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["bsl", "deque<T,Allocator>", True, "assign", "(size_type,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "assign<InputIt>", "(InputIt,InputIt)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "at", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "deque", "(const deque &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "deque", "(deque &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@3]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@4]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[*@5]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "emplace_front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "push_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "push_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T,Allocator>", True, "deque", "(const deque &,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T,Allocator>", True, "deque", "(deque &&,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T,Allocator>", True, "deque", "(size_type,const T &,const Allocator &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T,Allocator>", True, "deque<InputIterator>", "(InputIterator,InputIterator,const Allocator &)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "deque<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
56
cpp/ql/lib/ext/bsl.forward_list.model.yml
Normal file
56
cpp/ql/lib/ext/bsl.forward_list.model.yml
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["bsl", "forward_list", True, "insert_after<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,size_type,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T,Allocator>", True, "assign", "(size_type,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "assign<InputIt>", "(InputIt,InputIt)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@3]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@4]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[*@5]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_after", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "emplace_front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "forward_list", "(const forward_list &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "forward_list", "(forward_list &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "insert_after<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "insert_after<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "push_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T,Allocator>", True, "forward_list", "(const forward_list &,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T,Allocator>", True, "forward_list", "(forward_list &&,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T,Allocator>", True, "forward_list", "(InputIterator,InputIterator,const Allocator &)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T,Allocator>", True, "forward_list", "(size_type,const T &,const Allocator &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,const T &)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,T &&)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,T &&)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "forward_list<T>", True, "insert_after", "(const_iterator,T &&)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
71
cpp/ql/lib/ext/bsl.list.model.yml
Normal file
71
cpp/ql/lib/ext/bsl.list.model.yml
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["bsl", "list<T,Allocator>", True, "assign", "(size_type,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "assign<InputIt>", "(InputIt,InputIt)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "emplace_front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "list", "(const list &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "list", "(list &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "push_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "push_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T,Allocator>", True, "list", "(const list &,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T,Allocator>", True, "list", "(list &&,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T,Allocator>", True, "list", "(size_type,const T &,const Allocator &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T,Allocator>", True, "list<InputIterator>", "(InputIterator,InputIterator,const Allocator &)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "list<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
60
cpp/ql/lib/ext/bsl.vector.model.yml
Normal file
60
cpp/ql/lib/ext/bsl.vector.model.yml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["bsl", "vector<T,Allocator>", True, "assign", "(size_type,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "assign<InputIt>", "(InputIt,InputIt)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "at", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "data", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@3]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@4]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[*@5]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "emplace_back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "push_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "vector", "(const vector &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector", True, "vector", "(vector &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T,Allocator>", True, "vector", "(const vector &,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T,Allocator>", True, "vector", "(size_type,const T &,const Allocator &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T,Allocator>", True, "vector", "(vector &&,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T,Allocator>", True, "vector<InputIterator>", "(InputIterator,InputIterator,const Allocator &)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["bsl", "vector<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
8
cpp/ql/lib/ext/deallocation/Bsd.deallocation.model.yml
Normal file
8
cpp/ql/lib/ext/deallocation/Bsd.deallocation.model.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: deallocationFunctionModel
|
||||||
|
data:
|
||||||
|
- ["", "", False, "pool_put", "1"]
|
||||||
|
- ["", "", False, "pool_cache_put", "1"]
|
||||||
|
- ["", "", False, "kmem_free", "0"]
|
||||||
42
cpp/ql/lib/ext/deallocation/Std.deallocation.model.yml
Normal file
42
cpp/ql/lib/ext/deallocation/Std.deallocation.model.yml
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: deallocationFunctionModel
|
||||||
|
data:
|
||||||
|
- ["", "", False, "free", "0"]
|
||||||
|
- ["std", "", False, "free", "0"]
|
||||||
|
- ["bsl", "", False, "free", "0"]
|
||||||
|
- ["", "", False, "realloc", "0"]
|
||||||
|
- ["std", "", False, "realloc", "0"]
|
||||||
|
- ["bsl", "", False, "realloc", "0"]
|
||||||
|
- ["", "", False, "CRYPTO_free", "0"]
|
||||||
|
- ["", "", False, "CRYPTO_secure_free", "0"]
|
||||||
|
- ["", "", False, "g_free", "0"]
|
||||||
|
- ["", "", False, "ExFreePool", "0"]
|
||||||
|
- ["", "", False, "ExFreePoolWithTag", "0"]
|
||||||
|
- ["", "", False, "ExDeleteTimer", "0"]
|
||||||
|
- ["", "", False, "IoFreeIrp", "0"]
|
||||||
|
- ["", "", False, "IoFreeMdl", "0"]
|
||||||
|
- ["", "", False, "IoFreeErrorLogEntry", "0"]
|
||||||
|
- ["", "", False, "IoFreeWorkItem", "0"]
|
||||||
|
- ["", "", False, "MmFreeContiguousMemory", "0"]
|
||||||
|
- ["", "", False, "MmFreeContiguousMemorySpecifyCache", "0"]
|
||||||
|
- ["", "", False, "MmFreeNonCachedMemory", "0"]
|
||||||
|
- ["", "", False, "MmFreeMappingAddress", "0"]
|
||||||
|
- ["", "", False, "MmFreePagesFromMdl", "0"]
|
||||||
|
- ["", "", False, "MmUnmapReservedMapping", "0"]
|
||||||
|
- ["", "", False, "MmUnmapLockedPages", "0"]
|
||||||
|
- ["", "", False, "NdisFreeGenericObject", "0"]
|
||||||
|
- ["", "", False, "NdisFreeMemory", "0"]
|
||||||
|
- ["", "", False, "NdisFreeMemoryWithTag", "0"]
|
||||||
|
- ["", "", False, "NdisFreeMdl", "0"]
|
||||||
|
- ["", "", False, "NdisFreeNetBufferListPool", "0"]
|
||||||
|
- ["", "", False, "NdisFreeNetBufferPool", "0"]
|
||||||
|
- ["", "", False, "LocalFree", "0"]
|
||||||
|
- ["", "", False, "GlobalFree", "0"]
|
||||||
|
- ["", "", False, "LocalReAlloc", "0"]
|
||||||
|
- ["", "", False, "GlobalReAlloc", "0"]
|
||||||
|
- ["", "", False, "VirtualFree", "0"]
|
||||||
|
- ["", "", False, "CoTaskMemFree", "0"]
|
||||||
|
- ["", "", False, "CoTaskMemRealloc", "0"]
|
||||||
|
- ["", "", False, "SysFreeString", "0"]
|
||||||
41
cpp/ql/lib/ext/deallocation/Windows.deallocation.model.yml
Normal file
41
cpp/ql/lib/ext/deallocation/Windows.deallocation.model.yml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: deallocationFunctionModel
|
||||||
|
data:
|
||||||
|
- ["", "", False, "ExFreePool", "0"]
|
||||||
|
- ["", "", False, "ExFreePoolWithTag", "0"]
|
||||||
|
- ["", "", False, "ExDeleteTimer", "0"]
|
||||||
|
- ["", "", False, "IoFreeIrp", "0"]
|
||||||
|
- ["", "", False, "IoFreeMdl", "0"]
|
||||||
|
- ["", "", False, "IoFreeErrorLogEntry", "0"]
|
||||||
|
- ["", "", False, "IoFreeWorkItem", "0"]
|
||||||
|
- ["", "", False, "MmFreeContiguousMemory", "0"]
|
||||||
|
- ["", "", False, "MmFreeContiguousMemorySpecifyCache", "0"]
|
||||||
|
- ["", "", False, "MmFreeNonCachedMemory", "0"]
|
||||||
|
- ["", "", False, "MmFreeMappingAddress", "0"]
|
||||||
|
- ["", "", False, "MmFreePagesFromMdl", "0"]
|
||||||
|
- ["", "", False, "MmUnmapReservedMapping", "0"]
|
||||||
|
- ["", "", False, "MmUnmapLockedPages", "0"]
|
||||||
|
- ["", "", False, "NdisFreeGenericObject", "0"]
|
||||||
|
- ["", "", False, "NdisFreeMemory", "0"]
|
||||||
|
- ["", "", False, "NdisFreeMemoryWithTag", "0"]
|
||||||
|
- ["", "", False, "NdisFreeMdl", "0"]
|
||||||
|
- ["", "", False, "NdisFreeNetBufferListPool", "0"]
|
||||||
|
- ["", "", False, "NdisFreeNetBufferPool", "0"]
|
||||||
|
- ["", "", False, "LocalFree", "0"]
|
||||||
|
- ["", "", False, "GlobalFree", "0"]
|
||||||
|
- ["", "", False, "LocalReAlloc", "0"]
|
||||||
|
- ["", "", False, "GlobalReAlloc", "0"]
|
||||||
|
- ["", "", False, "VirtualFree", "0"]
|
||||||
|
- ["", "", False, "CoTaskMemFree", "0"]
|
||||||
|
- ["", "", False, "CoTaskMemRealloc", "0"]
|
||||||
|
- ["", "", False, "SysFreeString", "0"]
|
||||||
|
- ["", "", False, "ExFreeToLookasideListEx", "1"]
|
||||||
|
- ["", "", False, "ExFreeToPagedLookasideList", "1"]
|
||||||
|
- ["", "", False, "ExFreeToNPagedLookasideList", "1"]
|
||||||
|
- ["", "", False, "NdisFreeMemoryWithTagPriority", "1"]
|
||||||
|
- ["", "", False, "StorPortFreeMdl", "1"]
|
||||||
|
- ["", "", False, "StorPortFreePool", "1"]
|
||||||
|
- ["", "", False, "HeapFree", "2"]
|
||||||
|
- ["", "", False, "HeapReAlloc", "2"]
|
||||||
5
cpp/ql/lib/ext/deallocation/empty.deallocation.model.yml
Normal file
5
cpp/ql/lib/ext/deallocation/empty.deallocation.model.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: deallocationFunctionModel
|
||||||
|
data: []
|
||||||
14
cpp/ql/lib/ext/std.array.model.yml
Normal file
14
cpp/ql/lib/ext/std.array.model.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["std", "array", True, "at", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "array", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "array", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "array", True, "data", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "array", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "array", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "array", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "array", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "array", True, "back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
73
cpp/ql/lib/ext/std.deque.model.yml
Normal file
73
cpp/ql/lib/ext/std.deque.model.yml
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["std", "deque<T,Allocator>", True, "assign", "(size_type,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "assign<InputIt>", "(InputIt,InputIt)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "at", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "deque", "(const deque &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "deque", "(deque &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@3]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@4]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[*@5]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "emplace_front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "push_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "push_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T,Allocator>", True, "deque", "(const deque &,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T,Allocator>", True, "deque", "(deque &&,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T,Allocator>", True, "deque", "(size_type,const T &,const Allocator &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T,Allocator>", True, "deque<InputIterator>", "(InputIterator,InputIterator,const Allocator &)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "deque<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
56
cpp/ql/lib/ext/std.forward_list.model.yml
Normal file
56
cpp/ql/lib/ext/std.forward_list.model.yml
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["std", "forward_list", True, "insert_after<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,size_type,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T,Allocator>", True, "assign", "(size_type,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "assign<InputIt>", "(InputIt,InputIt)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@3]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@4]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[*@5]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_after", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "emplace_front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "forward_list", "(const forward_list &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "forward_list", "(forward_list &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "insert_after<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "insert_after<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "push_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T,Allocator>", True, "forward_list", "(const forward_list &,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T,Allocator>", True, "forward_list", "(forward_list &&,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T,Allocator>", True, "forward_list", "(InputIterator,InputIterator,const Allocator &)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T,Allocator>", True, "forward_list", "(size_type,const T &,const Allocator &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,const T &)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,T &&)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,T &&)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "forward_list<T>", True, "insert_after", "(const_iterator,T &&)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
11
cpp/ql/lib/ext/std.iterator.model.yml
Normal file
11
cpp/ql/lib/ext/std.iterator.model.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["std", "iterator", True, "operator*", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "iterator", True, "operator->", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "iterator", True, "iterator", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["__gnu_cxx", "__normal_iterator", True, "operator*", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["__gnu_cxx", "__normal_iterator", True, "operator->", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["__gnu_cxx", "__normal_iterator", True, "__normal_iterator", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
71
cpp/ql/lib/ext/std.list.model.yml
Normal file
71
cpp/ql/lib/ext/std.list.model.yml
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["std", "list<T,Allocator>", True, "assign", "(size_type,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "assign<InputIt>", "(InputIt,InputIt)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@3]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@4]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[*@5]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "emplace_front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "list", "(const list &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "list", "(list &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "push_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "push_front", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T,Allocator>", True, "list", "(const list &,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T,Allocator>", True, "list", "(list &&,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T,Allocator>", True, "list", "(size_type,const T &,const Allocator &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T,Allocator>", True, "list<InputIterator>", "(InputIterator,InputIterator,const Allocator &)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "list<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
60
cpp/ql/lib/ext/std.vector.model.yml
Normal file
60
cpp/ql/lib/ext/std.vector.model.yml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["std", "vector<T,Allocator>", True, "assign", "(size_type,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "assign<InputIt>", "(InputIt,InputIt)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "at", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "begin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "cbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "data", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@3]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@4]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[*@5]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@0]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@1]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@2]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@3]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@3]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@4]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@4]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@5]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[*@5]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "emplace_back", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "front", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "insert<InputIt>", "(const_iterator,InputIt,InputIt)", "", "Argument[1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "operator=", "", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "operator[]", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "push_back", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "rbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "rcbegin", "", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "vector", "(const vector &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector", True, "vector", "(vector &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T,Allocator>", True, "vector", "(const vector &,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T,Allocator>", True, "vector", "(size_type,const T &,const Allocator &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T,Allocator>", True, "vector", "(vector &&,const Allocator &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T,Allocator>", True, "vector<InputIterator>", "(InputIterator,InputIterator,const Allocator &)", "", "Argument[0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[*@2]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,size_type,const T &)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "Argument[-1].Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[*@1]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
|
- ["std", "vector<T>", True, "insert", "(const_iterator,T &&)", "", "Argument[-1].Element[@]", "ReturnValue.Element[@]", "value", "manual"]
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/cpp-all
|
name: codeql/cpp-all
|
||||||
version: 1.1.1
|
version: 1.2.1-dev
|
||||||
groups: cpp
|
groups: cpp
|
||||||
dbscheme: semmlecode.cpp.dbscheme
|
dbscheme: semmlecode.cpp.dbscheme
|
||||||
extractor: cpp
|
extractor: cpp
|
||||||
@@ -16,4 +16,6 @@ dependencies:
|
|||||||
codeql/xml: ${workspace}
|
codeql/xml: ${workspace}
|
||||||
dataExtensions:
|
dataExtensions:
|
||||||
- ext/*.model.yml
|
- ext/*.model.yml
|
||||||
|
- ext/deallocation/*.model.yml
|
||||||
|
- ext/allocation/*.model.yml
|
||||||
warnOnImplicitThis: true
|
warnOnImplicitThis: true
|
||||||
|
|||||||
@@ -59,8 +59,7 @@ class MatchValue extends AbstractValue, TMatchValue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Boolean condition in the AST that guards one or more basic blocks. This includes
|
* A Boolean condition in the AST that guards one or more basic blocks.
|
||||||
* operands of logical operators but not switch statements.
|
|
||||||
*/
|
*/
|
||||||
cached
|
cached
|
||||||
class GuardCondition extends Expr {
|
class GuardCondition extends Expr {
|
||||||
@@ -366,10 +365,10 @@ private predicate nonExcludedIRAndBasicBlock(IRBlock irb, BasicBlock controlled)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Boolean condition in the IR that guards one or more basic blocks. This includes
|
* A Boolean condition in the IR that guards one or more basic blocks.
|
||||||
* operands of logical operators but not switch statements. Note that `&&` and `||`
|
*
|
||||||
* don't have an explicit representation in the IR, and therefore will not appear as
|
* Note that `&&` and `||` don't have an explicit representation in the IR,
|
||||||
* IRGuardConditions.
|
* and therefore will not appear as IRGuardConditions.
|
||||||
*/
|
*/
|
||||||
cached
|
cached
|
||||||
class IRGuardCondition extends Instruction {
|
class IRGuardCondition extends Instruction {
|
||||||
@@ -762,6 +761,8 @@ private predicate compares_eq(
|
|||||||
exists(AbstractValue dual | value = dual.getDualValue() |
|
exists(AbstractValue dual | value = dual.getDualValue() |
|
||||||
compares_eq(test.(LogicalNotInstruction).getUnary(), left, right, k, areEqual, dual)
|
compares_eq(test.(LogicalNotInstruction).getUnary(), left, right, k, areEqual, dual)
|
||||||
)
|
)
|
||||||
|
or
|
||||||
|
compares_eq(test.(BuiltinExpectCallInstruction).getCondition(), left, right, k, areEqual, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -831,6 +832,9 @@ private predicate unary_compares_eq(
|
|||||||
int_value(const) = k1 and
|
int_value(const) = k1 and
|
||||||
k = k1 + k2
|
k = k1 + k2
|
||||||
)
|
)
|
||||||
|
or
|
||||||
|
unary_compares_eq(test.(BuiltinExpectCallInstruction).getCondition(), op, k, areEqual,
|
||||||
|
inNonZeroCase, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Rearrange various simple comparisons into `left == right + k` form. */
|
/** Rearrange various simple comparisons into `left == right + k` form. */
|
||||||
@@ -910,12 +914,68 @@ private predicate unary_simple_comparison_eq(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** A call to the builtin operation `__builtin_expect`. */
|
||||||
|
private class BuiltinExpectCallInstruction extends CallInstruction {
|
||||||
|
BuiltinExpectCallInstruction() { this.getStaticCallTarget().hasName("__builtin_expect") }
|
||||||
|
|
||||||
|
/** Gets the condition of this call. */
|
||||||
|
Instruction getCondition() {
|
||||||
|
// The first parameter of `__builtin_expect` has type `long`. So we skip
|
||||||
|
// the conversion when inferring guards.
|
||||||
|
result = this.getArgument(0).(ConvertInstruction).getUnary()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `left == right + k` is `areEqual` if `cmp` evaluates to `value`,
|
||||||
|
* and `cmp` is an instruction that compares the value of
|
||||||
|
* `__builtin_expect(left == right + k, _)` to `0`.
|
||||||
|
*/
|
||||||
|
private predicate builtin_expect_eq(
|
||||||
|
CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value
|
||||||
|
) {
|
||||||
|
exists(BuiltinExpectCallInstruction call, Instruction const, AbstractValue innerValue |
|
||||||
|
int_value(const) = 0 and
|
||||||
|
cmp.hasOperands(call.getAUse(), const.getAUse()) and
|
||||||
|
compares_eq(call.getCondition(), left, right, k, areEqual, innerValue)
|
||||||
|
|
|
||||||
|
cmp instanceof CompareNEInstruction and
|
||||||
|
value = innerValue
|
||||||
|
or
|
||||||
|
cmp instanceof CompareEQInstruction and
|
||||||
|
value.getDualValue() = innerValue
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private predicate complex_eq(
|
private predicate complex_eq(
|
||||||
CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value
|
CompareInstruction cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value
|
||||||
) {
|
) {
|
||||||
sub_eq(cmp, left, right, k, areEqual, value)
|
sub_eq(cmp, left, right, k, areEqual, value)
|
||||||
or
|
or
|
||||||
add_eq(cmp, left, right, k, areEqual, value)
|
add_eq(cmp, left, right, k, areEqual, value)
|
||||||
|
or
|
||||||
|
builtin_expect_eq(cmp, left, right, k, areEqual, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `op == k` is `areEqual` if `cmp` evaluates to `value`, and `cmp` is
|
||||||
|
* an instruction that compares the value of `__builtin_expect(op == k, _)` to `0`.
|
||||||
|
*/
|
||||||
|
private predicate unary_builtin_expect_eq(
|
||||||
|
CompareInstruction cmp, Operand op, int k, boolean areEqual, boolean inNonZeroCase,
|
||||||
|
AbstractValue value
|
||||||
|
) {
|
||||||
|
exists(BuiltinExpectCallInstruction call, Instruction const, AbstractValue innerValue |
|
||||||
|
int_value(const) = 0 and
|
||||||
|
cmp.hasOperands(call.getAUse(), const.getAUse()) and
|
||||||
|
unary_compares_eq(call.getCondition(), op, k, areEqual, inNonZeroCase, innerValue)
|
||||||
|
|
|
||||||
|
cmp instanceof CompareNEInstruction and
|
||||||
|
value = innerValue
|
||||||
|
or
|
||||||
|
cmp instanceof CompareEQInstruction and
|
||||||
|
value.getDualValue() = innerValue
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private predicate unary_complex_eq(
|
private predicate unary_complex_eq(
|
||||||
@@ -924,6 +984,8 @@ private predicate unary_complex_eq(
|
|||||||
unary_sub_eq(test, op, k, areEqual, inNonZeroCase, value)
|
unary_sub_eq(test, op, k, areEqual, inNonZeroCase, value)
|
||||||
or
|
or
|
||||||
unary_add_eq(test, op, k, areEqual, inNonZeroCase, value)
|
unary_add_eq(test, op, k, areEqual, inNonZeroCase, value)
|
||||||
|
or
|
||||||
|
unary_builtin_expect_eq(test, op, k, areEqual, inNonZeroCase, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -14,16 +14,22 @@
|
|||||||
* The interpretation of a row is similar to API-graphs with a left-to-right
|
* The interpretation of a row is similar to API-graphs with a left-to-right
|
||||||
* reading.
|
* reading.
|
||||||
* 1. The `namespace` column selects a namespace.
|
* 1. The `namespace` column selects a namespace.
|
||||||
* 2. The `type` column selects a type within that namespace.
|
* 2. The `type` column selects a type within that namespace. This column can
|
||||||
|
* introduce template names that can be mentioned in the `signature` column.
|
||||||
|
* For example, `vector<T,Allocator>` introduces the template names `T` and
|
||||||
|
* `Allocator`.
|
||||||
* 3. The `subtypes` is a boolean that indicates whether to jump to an
|
* 3. The `subtypes` is a boolean that indicates whether to jump to an
|
||||||
* arbitrary subtype of that type. Set this to `false` if leaving the `type`
|
* arbitrary subtype of that type. Set this to `false` if leaving the `type`
|
||||||
* blank (for example, a free function).
|
* blank (for example, a free function).
|
||||||
* 4. The `name` column optionally selects a specific named member of the type.
|
* 4. The `name` column optionally selects a specific named member of the type.
|
||||||
|
* Like the `type` column, this column can introduce template names that can
|
||||||
|
* be mentioned in the `signature` column. For example, `insert<InputIt>`
|
||||||
|
* introduces the template name `InputIt`.
|
||||||
* 5. The `signature` column optionally restricts the named member. If
|
* 5. The `signature` column optionally restricts the named member. If
|
||||||
* `signature` is blank then no such filtering is done. The format of the
|
* `signature` is blank then no such filtering is done. The format of the
|
||||||
* signature is a comma-separated list of types enclosed in parentheses. The
|
* signature is a comma-separated list of types enclosed in parentheses. The
|
||||||
* types can be short names or fully qualified names (mixing these two options
|
* types must be stripped of template names. That is, write `const vector &`
|
||||||
* is not allowed within a single signature).
|
* instead of `const vector<T> &`.
|
||||||
* 6. The `ext` column specifies additional API-graph-like edges. Currently
|
* 6. The `ext` column specifies additional API-graph-like edges. Currently
|
||||||
* there is only one valid value: "".
|
* there is only one valid value: "".
|
||||||
* 7. The `input` column specifies how data enters the element selected by the
|
* 7. The `input` column specifies how data enters the element selected by the
|
||||||
@@ -44,6 +50,9 @@
|
|||||||
* One or more "*" can be added as an argument to indicate indirection, for
|
* One or more "*" can be added as an argument to indicate indirection, for
|
||||||
* example, "ReturnValue[*]" indicates the first indirection of the return
|
* example, "ReturnValue[*]" indicates the first indirection of the return
|
||||||
* value.
|
* value.
|
||||||
|
* The special symbol `@` can be used to specify an arbitrary (but fixed)
|
||||||
|
* number of indirections. For example, the `input` column `Argument[*@0]`
|
||||||
|
* indicates one or more indirections of the 0th argument.
|
||||||
*
|
*
|
||||||
* An `output` can be either:
|
* An `output` can be either:
|
||||||
* - "": Selects a read of a selected field.
|
* - "": Selects a read of a selected field.
|
||||||
@@ -65,6 +74,17 @@
|
|||||||
* One or more "*" can be added as an argument to indicate indirection, for
|
* One or more "*" can be added as an argument to indicate indirection, for
|
||||||
* example, "ReturnValue[*]" indicates the first indirection of the return
|
* example, "ReturnValue[*]" indicates the first indirection of the return
|
||||||
* value.
|
* value.
|
||||||
|
* The special symbol `@` can be used to specify an arbitrary (but fixed)
|
||||||
|
* number of indirections. For example, the `output` column
|
||||||
|
* `ReturnValue[*@0]` indicates one or more indirections of the return
|
||||||
|
* value.
|
||||||
|
* Note: The symbol `@` only ever takes a single value across a row. Thus,
|
||||||
|
* the (`input`, `output`) pair `("Argument[*@0]", "ReturnValue[@]")`
|
||||||
|
* represents:
|
||||||
|
* - flow from the _first_ indirection of the 0th argument to the return
|
||||||
|
* value, and
|
||||||
|
* - flow from the _second_ indirection of the 0th argument to the first
|
||||||
|
* indirection of the return value, etc.
|
||||||
* 8. The `kind` column is a tag that can be referenced from QL to determine to
|
* 8. The `kind` column is a tag that can be referenced from QL to determine to
|
||||||
* which classes the interpreted elements should be added. For example, for
|
* which classes the interpreted elements should be added. For example, for
|
||||||
* sources "remote" indicates a default remote flow source, and for summaries
|
* sources "remote" indicates a default remote flow source, and for summaries
|
||||||
@@ -74,6 +94,8 @@
|
|||||||
|
|
||||||
import cpp
|
import cpp
|
||||||
private import new.DataFlow
|
private import new.DataFlow
|
||||||
|
private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate as Private
|
||||||
|
private import semmle.code.cpp.ir.dataflow.internal.DataFlowUtil
|
||||||
private import internal.FlowSummaryImpl
|
private import internal.FlowSummaryImpl
|
||||||
private import internal.FlowSummaryImpl::Public
|
private import internal.FlowSummaryImpl::Public
|
||||||
private import internal.FlowSummaryImpl::Private
|
private import internal.FlowSummaryImpl::Private
|
||||||
@@ -166,8 +188,12 @@ predicate sinkModel(
|
|||||||
Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, _)
|
Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, _)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Holds if a summary model exists for the given parameters. */
|
/**
|
||||||
predicate summaryModel(
|
* Holds if a summary model exists for the given parameters.
|
||||||
|
*
|
||||||
|
* This predicate does not expand `@` to `*`s.
|
||||||
|
*/
|
||||||
|
private predicate summaryModel0(
|
||||||
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
||||||
string input, string output, string kind, string provenance
|
string input, string output, string kind, string provenance
|
||||||
) {
|
) {
|
||||||
@@ -190,6 +216,33 @@ predicate summaryModel(
|
|||||||
provenance, _)
|
provenance, _)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `input` is `input0`, but with all occurrences of `@` replaced
|
||||||
|
* by `n` repetitions of `*` (and similarly for `output` and `output0`).
|
||||||
|
*/
|
||||||
|
bindingset[input0, output0, n]
|
||||||
|
pragma[inline_late]
|
||||||
|
private predicate expandInputAndOutput(
|
||||||
|
string input0, string input, string output0, string output, int n
|
||||||
|
) {
|
||||||
|
input = input0.replaceAll("@", repeatStars(n)) and
|
||||||
|
output = output0.replaceAll("@", repeatStars(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if a summary model exists for the given parameters.
|
||||||
|
*/
|
||||||
|
predicate summaryModel(
|
||||||
|
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
||||||
|
string input, string output, string kind, string provenance
|
||||||
|
) {
|
||||||
|
exists(string input0, string output0 |
|
||||||
|
summaryModel0(namespace, type, subtypes, name, signature, ext, input0, output0, kind, provenance) and
|
||||||
|
expandInputAndOutput(input0, input, output0, output,
|
||||||
|
[0 .. Private::getMaxElementContentIndirectionIndex() - 1])
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private predicate relevantNamespace(string namespace) {
|
private predicate relevantNamespace(string namespace) {
|
||||||
sourceModel(namespace, _, _, _, _, _, _, _, _) or
|
sourceModel(namespace, _, _, _, _, _, _, _, _) or
|
||||||
sinkModel(namespace, _, _, _, _, _, _, _, _) or
|
sinkModel(namespace, _, _, _, _, _, _, _, _) or
|
||||||
@@ -367,16 +420,155 @@ private predicate elementSpec(
|
|||||||
summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _)
|
summaryModel(namespace, type, subtypes, name, signature, ext, _, _, _, _)
|
||||||
}
|
}
|
||||||
|
|
||||||
private string paramsStringPart(Function c, int i) {
|
/** Gets the fully templated version of `f`. */
|
||||||
i = -1 and result = "(" and exists(c)
|
private Function getFullyTemplatedMemberFunction(Function f) {
|
||||||
or
|
not f.isFromUninstantiatedTemplate(_) and
|
||||||
exists(int n, string p | c.getParameter(n).getType().toString() = p |
|
exists(Class c, Class templateClass, int i |
|
||||||
i = 2 * n and result = p
|
c.isConstructedFrom(templateClass) and
|
||||||
or
|
f = c.getAMember(i) and
|
||||||
i = 2 * n - 1 and result = "," and n != 0
|
result = templateClass.getCanonicalMember(i)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the type name of the `n`'th parameter of `f` without any template
|
||||||
|
* arguments.
|
||||||
|
*/
|
||||||
|
bindingset[f]
|
||||||
|
pragma[inline_late]
|
||||||
|
string getParameterTypeWithoutTemplateArguments(Function f, int n) {
|
||||||
|
exists(string s, string base, string specifiers |
|
||||||
|
s = f.getParameter(n).getType().getName() and
|
||||||
|
parseAngles(s, base, _, specifiers) and
|
||||||
|
result = base + specifiers
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize the `n`'th parameter of `f` by replacing template names
|
||||||
|
* with `func:N` (where `N` is the index of the template).
|
||||||
|
*/
|
||||||
|
private string getTypeNameWithoutFunctionTemplates(Function f, int n, int remaining) {
|
||||||
|
exists(Function templateFunction |
|
||||||
|
templateFunction = getFullyTemplatedMemberFunction(f) and
|
||||||
|
remaining = templateFunction.getNumberOfTemplateArguments() and
|
||||||
|
result = getParameterTypeWithoutTemplateArguments(templateFunction, n)
|
||||||
)
|
)
|
||||||
or
|
or
|
||||||
i = 2 * c.getNumberOfParameters() and result = ")"
|
exists(string mid, TemplateParameter tp, Function templateFunction |
|
||||||
|
mid = getTypeNameWithoutFunctionTemplates(f, n, remaining + 1) and
|
||||||
|
templateFunction = getFullyTemplatedMemberFunction(f) and
|
||||||
|
tp = templateFunction.getTemplateArgument(remaining) and
|
||||||
|
result = mid.replaceAll(tp.getName(), "func:" + remaining.toString())
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize the `n`'th parameter of `f` by replacing template names
|
||||||
|
* with `class:N` (where `N` is the index of the template).
|
||||||
|
*/
|
||||||
|
private string getTypeNameWithoutClassTemplates(Function f, int n, int remaining) {
|
||||||
|
exists(Class template |
|
||||||
|
f.getDeclaringType().isConstructedFrom(template) and
|
||||||
|
remaining = template.getNumberOfTemplateArguments() and
|
||||||
|
result = getTypeNameWithoutFunctionTemplates(f, n, 0)
|
||||||
|
)
|
||||||
|
or
|
||||||
|
exists(string mid, TemplateParameter tp, Class template |
|
||||||
|
mid = getTypeNameWithoutClassTemplates(f, n, remaining + 1) and
|
||||||
|
f.getDeclaringType().isConstructedFrom(template) and
|
||||||
|
tp = template.getTemplateArgument(remaining) and
|
||||||
|
result = mid.replaceAll(tp.getName(), "class:" + remaining.toString())
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Gets the string representation of the `i`'th parameter of `c`. */
|
||||||
|
private string getParameterTypeName(Function c, int i) {
|
||||||
|
result = getTypeNameWithoutClassTemplates(c, i, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Splits `s` by `,` and gets the `i`'th element. */
|
||||||
|
bindingset[s]
|
||||||
|
pragma[inline_late]
|
||||||
|
private string getAtIndex(string s, int i) {
|
||||||
|
result = s.splitAt(",", i) and
|
||||||
|
// when `s` is `""` and `i` is `0` we get `result = ""` which we don't want.
|
||||||
|
not (s = "" and i = 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalizes `partiallyNormalizedSignature` by replacing the `remaining`
|
||||||
|
* number of template arguments in `partiallyNormalizedSignature` with their
|
||||||
|
* index in `typeArgs`.
|
||||||
|
*/
|
||||||
|
private string getSignatureWithoutClassTemplateNames(
|
||||||
|
string partiallyNormalizedSignature, string typeArgs, string nameArgs, int remaining
|
||||||
|
) {
|
||||||
|
elementSpecWithArguments0(_, _, _, partiallyNormalizedSignature, typeArgs, nameArgs) and
|
||||||
|
remaining = count(partiallyNormalizedSignature.indexOf(",")) + 1 and
|
||||||
|
result = partiallyNormalizedSignature
|
||||||
|
or
|
||||||
|
exists(string mid |
|
||||||
|
mid =
|
||||||
|
getSignatureWithoutClassTemplateNames(partiallyNormalizedSignature, typeArgs, nameArgs,
|
||||||
|
remaining + 1)
|
||||||
|
|
|
||||||
|
exists(string typeArg |
|
||||||
|
typeArg = getAtIndex(typeArgs, remaining) and
|
||||||
|
result = mid.replaceAll(typeArg, "class:" + remaining.toString())
|
||||||
|
)
|
||||||
|
or
|
||||||
|
// Make sure `remaining` is properly bound
|
||||||
|
remaining = [0 .. count(partiallyNormalizedSignature.indexOf(",")) + 1] and
|
||||||
|
not exists(getAtIndex(typeArgs, remaining)) and
|
||||||
|
result = mid
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalizes `partiallyNormalizedSignature` by replacing:
|
||||||
|
* - _All_ the template arguments in `partiallyNormalizedSignature` that refer to
|
||||||
|
* template parameters in `typeArgs` with their index in `typeArgs`, and
|
||||||
|
* - The `remaining` number of template arguments in `partiallyNormalizedSignature`
|
||||||
|
* with their index in `nameArgs`.
|
||||||
|
*/
|
||||||
|
private string getSignatureWithoutFunctionTemplateNames(
|
||||||
|
string partiallyNormalizedSignature, string typeArgs, string nameArgs, int remaining
|
||||||
|
) {
|
||||||
|
remaining = count(partiallyNormalizedSignature.indexOf(",")) + 1 and
|
||||||
|
result =
|
||||||
|
getSignatureWithoutClassTemplateNames(partiallyNormalizedSignature, typeArgs, nameArgs, 0)
|
||||||
|
or
|
||||||
|
exists(string mid |
|
||||||
|
mid =
|
||||||
|
getSignatureWithoutFunctionTemplateNames(partiallyNormalizedSignature, typeArgs, nameArgs,
|
||||||
|
remaining + 1)
|
||||||
|
|
|
||||||
|
exists(string nameArg |
|
||||||
|
nameArg = getAtIndex(nameArgs, remaining) and
|
||||||
|
result = mid.replaceAll(nameArg, "func:" + remaining.toString())
|
||||||
|
)
|
||||||
|
or
|
||||||
|
// Make sure `remaining` is properly bound
|
||||||
|
remaining = [0 .. count(partiallyNormalizedSignature.indexOf(",")) + 1] and
|
||||||
|
not exists(getAtIndex(nameArgs, remaining)) and
|
||||||
|
result = mid
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private string paramsStringPart(Function c, int i) {
|
||||||
|
not c.isFromUninstantiatedTemplate(_) and
|
||||||
|
(
|
||||||
|
i = -1 and result = "(" and exists(c)
|
||||||
|
or
|
||||||
|
exists(int n, string p | getParameterTypeName(c, n) = p |
|
||||||
|
i = 2 * n and result = p
|
||||||
|
or
|
||||||
|
i = 2 * n - 1 and result = "," and n != 0
|
||||||
|
)
|
||||||
|
or
|
||||||
|
i = 2 * c.getNumberOfParameters() and result = ")"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -396,6 +588,193 @@ private predicate matchesSignature(Function func, string signature) {
|
|||||||
paramsString(func) = signature
|
paramsString(func) = signature
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `elementSpec(_, type, _, name, signature, _)` holds and
|
||||||
|
* - `typeArgs` represents the named template parameters supplied to `type`, and
|
||||||
|
* - `nameArgs` represents the named template parameters supplied to `name`, and
|
||||||
|
* - `normalizedSignature` is `signature`, except with
|
||||||
|
* - template parameter names replaced by `func:i` if the template name is
|
||||||
|
* the `i`'th entry in `nameArgs`, and
|
||||||
|
* - template parameter names replaced by `class:i` if the template name is
|
||||||
|
* the `i`'th entry in `typeArgs`.
|
||||||
|
*
|
||||||
|
* In other words, the string `normalizedSignature` represents a "normalized"
|
||||||
|
* signature with no mention of any free template parameters.
|
||||||
|
*
|
||||||
|
* For example, consider a summary row such as:
|
||||||
|
* ```
|
||||||
|
* elementSpec(_, "MyClass<B, C>", _, myFunc<A>, "(const A &,int,C,B *)", _)
|
||||||
|
* ```
|
||||||
|
* In this case, `normalizedSignature` will be `"(const func:0 &,int,class:1,class:0 *)"`.
|
||||||
|
*/
|
||||||
|
private predicate elementSpecWithArguments(
|
||||||
|
string signature, string type, string name, string normalizedSignature, string typeArgs,
|
||||||
|
string nameArgs
|
||||||
|
) {
|
||||||
|
exists(string signatureWithoutParens |
|
||||||
|
elementSpecWithArguments0(signature, type, name, signatureWithoutParens, typeArgs, nameArgs) and
|
||||||
|
normalizedSignature =
|
||||||
|
getSignatureWithoutFunctionTemplateNames(signatureWithoutParens, typeArgs, nameArgs, 0)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Gets the `n`'th normalized signature parameter for the function `name` in class `type`. */
|
||||||
|
private string getSignatureParameterName(string signature, string type, string name, int n) {
|
||||||
|
exists(string normalizedSignature |
|
||||||
|
elementSpecWithArguments(signature, type, name, normalizedSignature, _, _) and
|
||||||
|
result = getAtIndex(normalizedSignature, n)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if the suffix containing the entries in `signature` starting at entry
|
||||||
|
* `i` matches the suffix containing the parameters of `func` starting at entry `i`.
|
||||||
|
*
|
||||||
|
* For example, consider the signature `(int,bool,char)` and a function:
|
||||||
|
* ```
|
||||||
|
* void f(int a, bool b, char c);
|
||||||
|
* ```
|
||||||
|
* 1. The predicate holds for `i = 2` because the suffix containing all the entries
|
||||||
|
* in `signature` starting at `2` is `char`, and suffix containing all the parameters
|
||||||
|
* of `func` starting at `2` is `char`.
|
||||||
|
* 2. The predicate holds for `i = 1` because the suffix containing all the entries
|
||||||
|
* in `signature` starting at `1` is `bool,char`, and the suffix containing all the
|
||||||
|
* parameters of `func` starting at `1` is `bool, char`.
|
||||||
|
* 3. The predicate holds for `i = 0` because the suffix containing all the entries
|
||||||
|
* in `signature` starting at `0` is `int,bool,char` and the suffix containing all
|
||||||
|
* the parameters of `func` starting at `0` is `int, bool, char`.
|
||||||
|
*
|
||||||
|
* When `paramsString(func)[i]` is `class:n` then the signature name is
|
||||||
|
* compared with the `n`'th name in `type`, and when `paramsString(func)[i]`
|
||||||
|
* is `func:n` then the signature name is compared with the `n`'th name
|
||||||
|
* in `name`.
|
||||||
|
*/
|
||||||
|
private predicate signatureMatches(Function func, string signature, string type, string name, int i) {
|
||||||
|
exists(string s |
|
||||||
|
s = getSignatureParameterName(signature, type, name, i) and
|
||||||
|
s = getParameterTypeName(func, i)
|
||||||
|
) and
|
||||||
|
if exists(getParameterTypeName(func, i + 1))
|
||||||
|
then signatureMatches(func, signature, type, name, i + 1)
|
||||||
|
else i = count(signature.indexOf(","))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal: Do not use.
|
||||||
|
*
|
||||||
|
* This module only exists to expose internal predicates for testing purposes.
|
||||||
|
*/
|
||||||
|
module ExternalFlowDebug {
|
||||||
|
/**
|
||||||
|
* INTERNAL: Do not use.
|
||||||
|
*
|
||||||
|
* Exposed for testing purposes.
|
||||||
|
*/
|
||||||
|
predicate signatureMatches_debug = signatureMatches/5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* INTERNAL: Do not use.
|
||||||
|
*
|
||||||
|
* Exposed for testing purposes.
|
||||||
|
*/
|
||||||
|
predicate getSignatureParameterName_debug = getSignatureParameterName/4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* INTERNAL: Do not use.
|
||||||
|
*
|
||||||
|
* Exposed for testing purposes.
|
||||||
|
*/
|
||||||
|
predicate getParameterTypeName_debug = getParameterTypeName/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `s` can be broken into a string of the form
|
||||||
|
* `beforeAngles<betweenAngles>`,
|
||||||
|
* or `s = beforeAngles` where `beforeAngles` does not have any brackets.
|
||||||
|
*/
|
||||||
|
bindingset[s]
|
||||||
|
pragma[inline_late]
|
||||||
|
private predicate parseAngles(
|
||||||
|
string s, string beforeAngles, string betweenAngles, string afterAngles
|
||||||
|
) {
|
||||||
|
beforeAngles = s.regexpCapture("([^<]+)(?:<([^>]+)>(.*))?", 1) and
|
||||||
|
(
|
||||||
|
betweenAngles = s.regexpCapture("([^<]+)(?:<([^>]+)>(.*))?", 2) and
|
||||||
|
afterAngles = s.regexpCapture("([^<]+)(?:<([^>]+)>(.*))?", 3)
|
||||||
|
or
|
||||||
|
not exists(s.regexpCapture("([^<]+)(?:<([^>]+)>(.*))?", 2)) and
|
||||||
|
betweenAngles = "" and
|
||||||
|
afterAngles = ""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Holds if `s` can be broken into a string of the form `(betweenParens)`. */
|
||||||
|
bindingset[s]
|
||||||
|
pragma[inline_late]
|
||||||
|
private predicate parseParens(string s, string betweenParens) { s = "(" + betweenParens + ")" }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `elementSpec(_, type, _, name, signature, _)` and:
|
||||||
|
* - `type` introduces template parameters `typeArgs`, and
|
||||||
|
* - `name` introduces template parameters `nameArgs`, and
|
||||||
|
* - `signatureWithoutParens` equals `signature`, but with the surrounding
|
||||||
|
* parentheses removed.
|
||||||
|
*/
|
||||||
|
private predicate elementSpecWithArguments0(
|
||||||
|
string signature, string type, string name, string signatureWithoutParens, string typeArgs,
|
||||||
|
string nameArgs
|
||||||
|
) {
|
||||||
|
elementSpec(_, type, _, name, signature, _) and
|
||||||
|
parseAngles(name, _, nameArgs, "") and
|
||||||
|
(
|
||||||
|
type = "" and typeArgs = ""
|
||||||
|
or
|
||||||
|
parseAngles(type, _, typeArgs, "")
|
||||||
|
) and
|
||||||
|
parseParens(signature, signatureWithoutParens)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `elementSpec(namespace, type, subtypes, name, signature, _)` and
|
||||||
|
* `method`'s signature matches `signature`.
|
||||||
|
*
|
||||||
|
* `signature` may contain template parameter names that are bound by `type` and `name`.
|
||||||
|
*/
|
||||||
|
pragma[nomagic]
|
||||||
|
private predicate elementSpecMatchesSignature(
|
||||||
|
Function method, string namespace, string type, boolean subtypes, string name, string signature
|
||||||
|
) {
|
||||||
|
elementSpec(namespace, pragma[only_bind_into](type), subtypes, pragma[only_bind_into](name),
|
||||||
|
pragma[only_bind_into](signature), _) and
|
||||||
|
signatureMatches(method, signature, type, name, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `classWithMethod` has `method` named `name` (excluding any
|
||||||
|
* template parameters).
|
||||||
|
*/
|
||||||
|
bindingset[name]
|
||||||
|
pragma[inline_late]
|
||||||
|
private predicate hasClassAndName(Class classWithMethod, Function method, string name) {
|
||||||
|
exists(string nameWithoutArgs |
|
||||||
|
parseAngles(name, nameWithoutArgs, _, "") and
|
||||||
|
classWithMethod = method.getClassAndName(nameWithoutArgs)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `namedClass` is in namespace `namespace` and has
|
||||||
|
* name `type` (excluding any template parameters).
|
||||||
|
*/
|
||||||
|
bindingset[type, namespace]
|
||||||
|
pragma[inline_late]
|
||||||
|
private predicate hasQualifiedName(Class namedClass, string namespace, string type) {
|
||||||
|
exists(string typeWithoutArgs |
|
||||||
|
parseAngles(type, typeWithoutArgs, _, "") and
|
||||||
|
namedClass.hasQualifiedName(namespace, typeWithoutArgs)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the element in module `namespace` that satisfies the following properties:
|
* Gets the element in module `namespace` that satisfies the following properties:
|
||||||
* 1. If the element is a member of a class-like type, then the class-like type has name `type`
|
* 1. If the element is a member of a class-like type, then the class-like type has name `type`
|
||||||
@@ -410,8 +789,8 @@ pragma[nomagic]
|
|||||||
private Element interpretElement0(
|
private Element interpretElement0(
|
||||||
string namespace, string type, boolean subtypes, string name, string signature
|
string namespace, string type, boolean subtypes, string name, string signature
|
||||||
) {
|
) {
|
||||||
elementSpec(namespace, type, subtypes, name, signature, _) and
|
|
||||||
(
|
(
|
||||||
|
elementSpec(namespace, type, subtypes, name, signature, _) and
|
||||||
// Non-member functions
|
// Non-member functions
|
||||||
exists(Function func |
|
exists(Function func |
|
||||||
func.hasQualifiedName(namespace, name) and
|
func.hasQualifiedName(namespace, name) and
|
||||||
@@ -423,21 +802,28 @@ private Element interpretElement0(
|
|||||||
)
|
)
|
||||||
or
|
or
|
||||||
// Member functions
|
// Member functions
|
||||||
exists(Class namedClass, Class classWithMethod, Function method |
|
exists(Class namedClass, Class classWithMethod |
|
||||||
classWithMethod = method.getClassAndName(name) and
|
(
|
||||||
namedClass.hasQualifiedName(namespace, type) and
|
elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature) and
|
||||||
matchesSignature(method, signature) and
|
hasClassAndName(classWithMethod, result, name)
|
||||||
result = method
|
or
|
||||||
|
|
signature = "" and
|
||||||
// member declared in the named type or a subtype of it
|
elementSpec(namespace, type, subtypes, name, "", _) and
|
||||||
subtypes = true and
|
hasClassAndName(classWithMethod, result, name)
|
||||||
classWithMethod = namedClass.getADerivedClass*()
|
) and
|
||||||
or
|
hasQualifiedName(namedClass, namespace, type) and
|
||||||
// member declared directly in the named type
|
(
|
||||||
subtypes = false and
|
// member declared in the named type or a subtype of it
|
||||||
classWithMethod = namedClass
|
subtypes = true and
|
||||||
|
classWithMethod = namedClass.getADerivedClass*()
|
||||||
|
or
|
||||||
|
// member declared directly in the named type
|
||||||
|
subtypes = false and
|
||||||
|
classWithMethod = namedClass
|
||||||
|
)
|
||||||
)
|
)
|
||||||
or
|
or
|
||||||
|
elementSpec(namespace, type, subtypes, name, signature, _) and
|
||||||
// Member variables
|
// Member variables
|
||||||
signature = "" and
|
signature = "" and
|
||||||
exists(Class namedClass, Class classWithMember, MemberVariable member |
|
exists(Class namedClass, Class classWithMember, MemberVariable member |
|
||||||
@@ -456,6 +842,7 @@ private Element interpretElement0(
|
|||||||
)
|
)
|
||||||
or
|
or
|
||||||
// Global or namespace variables
|
// Global or namespace variables
|
||||||
|
elementSpec(namespace, type, subtypes, name, signature, _) and
|
||||||
signature = "" and
|
signature = "" and
|
||||||
type = "" and
|
type = "" and
|
||||||
subtypes = false and
|
subtypes = false and
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ predicate localMustFlowStep(Node node1, Node node2) { none() }
|
|||||||
|
|
||||||
/** Gets the type of `n` used for type pruning. */
|
/** Gets the type of `n` used for type pruning. */
|
||||||
Type getNodeType(Node n) {
|
Type getNodeType(Node n) {
|
||||||
suppressUnusedNode(n) and
|
exists(n) and
|
||||||
result instanceof VoidType // stub implementation
|
result instanceof VoidType // stub implementation
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,13 +227,10 @@ string ppReprType(Type t) { none() } // stub implementation
|
|||||||
* Holds if `t1` and `t2` are compatible, that is, whether data can flow from
|
* Holds if `t1` and `t2` are compatible, that is, whether data can flow from
|
||||||
* a node of type `t1` to a node of type `t2`.
|
* a node of type `t1` to a node of type `t2`.
|
||||||
*/
|
*/
|
||||||
pragma[inline]
|
|
||||||
predicate compatibleTypes(Type t1, Type t2) {
|
predicate compatibleTypes(Type t1, Type t2) {
|
||||||
any() // stub implementation
|
t1 instanceof VoidType and t2 instanceof VoidType // stub implementation
|
||||||
}
|
}
|
||||||
|
|
||||||
private predicate suppressUnusedNode(Node n) { any() }
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
// Java QL library compatibility wrappers
|
// Java QL library compatibility wrappers
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -35,16 +35,22 @@ module Input implements InputSig<Location, DataFlowImplSpecific::CppDataFlow> {
|
|||||||
result = "Field" and
|
result = "Field" and
|
||||||
arg = repeatStars(c.getIndirectionIndex() - 1) + c.getField().getName()
|
arg = repeatStars(c.getIndirectionIndex() - 1) + c.getField().getName()
|
||||||
)
|
)
|
||||||
|
or
|
||||||
|
exists(ElementContent ec |
|
||||||
|
cs.isSingleton(ec) and
|
||||||
|
result = "Element" and
|
||||||
|
arg = repeatStars(ec.getIndirectionIndex() - 1)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
string encodeWithoutContent(ContentSet c, string arg) {
|
string encodeWithoutContent(ContentSet c, string arg) {
|
||||||
// used for type tracking, not currently used in C/C++.
|
// used for type tracking, not currently used in C/C++.
|
||||||
result = "WithoutContent" + c and arg = ""
|
none()
|
||||||
}
|
}
|
||||||
|
|
||||||
string encodeWithContent(ContentSet c, string arg) {
|
string encodeWithContent(ContentSet c, string arg) {
|
||||||
// used for type tracking, not currently used in C/C++.
|
// used for type tracking, not currently used in C/C++.
|
||||||
result = "WithContent" + c and arg = ""
|
none()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -79,25 +85,6 @@ module Input implements InputSig<Location, DataFlowImplSpecific::CppDataFlow> {
|
|||||||
token.getName() = "Parameter" and
|
token.getName() = "Parameter" and
|
||||||
result = decodePosition(token.getAnArgument())
|
result = decodePosition(token.getAnArgument())
|
||||||
}
|
}
|
||||||
|
|
||||||
bindingset[token]
|
|
||||||
ContentSet decodeUnknownContent(AccessPath::AccessPathTokenBase token) {
|
|
||||||
// field content (no indirection support)
|
|
||||||
exists(FieldContent c |
|
|
||||||
result.isSingleton(c) and
|
|
||||||
token.getName() = c.getField().getName() and
|
|
||||||
not exists(token.getArgumentList()) and
|
|
||||||
c.getIndirectionIndex() = 1
|
|
||||||
)
|
|
||||||
or
|
|
||||||
// field content (with indirection support)
|
|
||||||
exists(FieldContent c |
|
|
||||||
result.isSingleton(c) and
|
|
||||||
token.getName() = c.getField().getName() and
|
|
||||||
// FieldContent indices have 0 for the address, 1 for content, so we need to subtract one.
|
|
||||||
token.getAnArgument() = repeatStars(c.getIndirectionIndex() - 1)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private import Make<Location, DataFlowImplSpecific::CppDataFlow, Input> as Impl
|
private import Make<Location, DataFlowImplSpecific::CppDataFlow, Input> as Impl
|
||||||
|
|||||||
@@ -412,6 +412,8 @@ class ArgumentPosition = Position;
|
|||||||
|
|
||||||
abstract class Position extends TPosition {
|
abstract class Position extends TPosition {
|
||||||
abstract string toString();
|
abstract string toString();
|
||||||
|
|
||||||
|
abstract int getIndirectionIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
class DirectPosition extends Position, TDirectPosition {
|
class DirectPosition extends Position, TDirectPosition {
|
||||||
@@ -421,13 +423,15 @@ class DirectPosition extends Position, TDirectPosition {
|
|||||||
|
|
||||||
override string toString() {
|
override string toString() {
|
||||||
index = -1 and
|
index = -1 and
|
||||||
result = "this"
|
result = "this pointer"
|
||||||
or
|
or
|
||||||
index != -1 and
|
index != -1 and
|
||||||
result = index.toString()
|
result = index.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
int getIndex() { result = index }
|
int getIndex() { result = index }
|
||||||
|
|
||||||
|
final override int getIndirectionIndex() { result = 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
class IndirectionPosition extends Position, TIndirectionPosition {
|
class IndirectionPosition extends Position, TIndirectionPosition {
|
||||||
@@ -438,16 +442,13 @@ class IndirectionPosition extends Position, TIndirectionPosition {
|
|||||||
|
|
||||||
override string toString() {
|
override string toString() {
|
||||||
if argumentIndex = -1
|
if argumentIndex = -1
|
||||||
then if indirectionIndex > 0 then result = "this indirection" else result = "this"
|
then result = repeatStars(indirectionIndex - 1) + "this"
|
||||||
else
|
else result = repeatStars(indirectionIndex) + argumentIndex.toString()
|
||||||
if indirectionIndex > 0
|
|
||||||
then result = argumentIndex.toString() + " indirection"
|
|
||||||
else result = argumentIndex.toString()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int getArgumentIndex() { result = argumentIndex }
|
int getArgumentIndex() { result = argumentIndex }
|
||||||
|
|
||||||
int getIndirectionIndex() { result = indirectionIndex }
|
final override int getIndirectionIndex() { result = indirectionIndex }
|
||||||
}
|
}
|
||||||
|
|
||||||
newtype TPosition =
|
newtype TPosition =
|
||||||
@@ -988,7 +989,7 @@ predicate localMustFlowStep(Node node1, Node node2) { none() }
|
|||||||
|
|
||||||
/** Gets the type of `n` used for type pruning. */
|
/** Gets the type of `n` used for type pruning. */
|
||||||
DataFlowType getNodeType(Node n) {
|
DataFlowType getNodeType(Node n) {
|
||||||
suppressUnusedNode(n) and
|
exists(n) and
|
||||||
result instanceof VoidType // stub implementation
|
result instanceof VoidType // stub implementation
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -999,13 +1000,10 @@ string ppReprType(DataFlowType t) { none() } // stub implementation
|
|||||||
* Holds if `t1` and `t2` are compatible, that is, whether data can flow from
|
* Holds if `t1` and `t2` are compatible, that is, whether data can flow from
|
||||||
* a node of type `t1` to a node of type `t2`.
|
* a node of type `t1` to a node of type `t2`.
|
||||||
*/
|
*/
|
||||||
pragma[inline]
|
|
||||||
predicate compatibleTypes(DataFlowType t1, DataFlowType t2) {
|
predicate compatibleTypes(DataFlowType t1, DataFlowType t2) {
|
||||||
any() // stub implementation
|
t1 instanceof VoidType and t2 instanceof VoidType // stub implementation
|
||||||
}
|
}
|
||||||
|
|
||||||
private predicate suppressUnusedNode(Node n) { any() }
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
// Java QL library compatibility wrappers
|
// Java QL library compatibility wrappers
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -1325,7 +1323,7 @@ import IsUnreachableInCall
|
|||||||
* Holds if access paths with `c` at their head always should be tracked at high
|
* Holds if access paths with `c` at their head always should be tracked at high
|
||||||
* precision. This disables adaptive access path precision for such access paths.
|
* precision. This disables adaptive access path precision for such access paths.
|
||||||
*/
|
*/
|
||||||
predicate forceHighPrecision(Content c) { none() }
|
predicate forceHighPrecision(Content c) { c instanceof ElementContent }
|
||||||
|
|
||||||
/** Holds if `n` should be hidden from path explanations. */
|
/** Holds if `n` should be hidden from path explanations. */
|
||||||
predicate nodeIsHidden(Node n) {
|
predicate nodeIsHidden(Node n) {
|
||||||
@@ -1396,7 +1394,8 @@ private predicate unionHasApproxName(Cpp::Union u, string s) { s = u.getName().c
|
|||||||
cached
|
cached
|
||||||
private newtype TContentApprox =
|
private newtype TContentApprox =
|
||||||
TFieldApproxContent(string s) { fieldHasApproxName(_, s) } or
|
TFieldApproxContent(string s) { fieldHasApproxName(_, s) } or
|
||||||
TUnionApproxContent(string s) { unionHasApproxName(_, s) }
|
TUnionApproxContent(string s) { unionHasApproxName(_, s) } or
|
||||||
|
TElementApproxContent()
|
||||||
|
|
||||||
/** An approximated `Content`. */
|
/** An approximated `Content`. */
|
||||||
class ContentApprox extends TContentApprox {
|
class ContentApprox extends TContentApprox {
|
||||||
@@ -1427,6 +1426,10 @@ private class UnionApproxContent extends ContentApprox, TUnionApproxContent {
|
|||||||
final override string toString() { result = s }
|
final override string toString() { result = s }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ElementApproxContent extends ContentApprox, TElementApproxContent {
|
||||||
|
final override string toString() { result = "ElementApprox" }
|
||||||
|
}
|
||||||
|
|
||||||
/** Gets an approximated value for content `c`. */
|
/** Gets an approximated value for content `c`. */
|
||||||
pragma[inline]
|
pragma[inline]
|
||||||
ContentApprox getContentApprox(Content c) {
|
ContentApprox getContentApprox(Content c) {
|
||||||
@@ -1441,6 +1444,9 @@ ContentApprox getContentApprox(Content c) {
|
|||||||
u = c.(UnionContent).getUnion() and
|
u = c.(UnionContent).getUnion() and
|
||||||
unionHasApproxName(u, prefix)
|
unionHasApproxName(u, prefix)
|
||||||
)
|
)
|
||||||
|
or
|
||||||
|
c instanceof ElementContent and
|
||||||
|
result instanceof ElementApproxContent
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1700,6 +1706,14 @@ class DataFlowSecondLevelScope extends TDataFlowSecondLevelScope {
|
|||||||
/** Gets the second-level scope containing the node `n`, if any. */
|
/** Gets the second-level scope containing the node `n`, if any. */
|
||||||
DataFlowSecondLevelScope getSecondLevelScope(Node n) { result.getANode() = n }
|
DataFlowSecondLevelScope getSecondLevelScope(Node n) { result.getANode() = n }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the maximum number of indirections to use for `ElementContent`.
|
||||||
|
*
|
||||||
|
* This should be equal to the largest number of stars (i.e., `*`s) in any
|
||||||
|
* `Element` content across all of our MaD summaries, sources, and sinks.
|
||||||
|
*/
|
||||||
|
int getMaxElementContentIndirectionIndex() { result = 5 }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module that defines flow through iterators.
|
* Module that defines flow through iterators.
|
||||||
* For example,
|
* For example,
|
||||||
@@ -1812,7 +1826,7 @@ module IteratorFlow {
|
|||||||
* Holds if `(bb, i)` contains a write to an iterator that may have been obtained
|
* Holds if `(bb, i)` contains a write to an iterator that may have been obtained
|
||||||
* by calling `begin` (or related functions) on the variable `v`.
|
* by calling `begin` (or related functions) on the variable `v`.
|
||||||
*/
|
*/
|
||||||
predicate variableWrite(IRBlock bb, int i, SourceVariable v, boolean certain) {
|
predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) {
|
||||||
certain = false and
|
certain = false and
|
||||||
exists(GetsIteratorCall beginCall, Instruction writeToDeref, IRBlock bbQual, int iQual |
|
exists(GetsIteratorCall beginCall, Instruction writeToDeref, IRBlock bbQual, int iQual |
|
||||||
isIteratorStoreInstruction(beginCall, writeToDeref) and
|
isIteratorStoreInstruction(beginCall, writeToDeref) and
|
||||||
@@ -1823,7 +1837,7 @@ module IteratorFlow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Holds if `(bb, i)` reads the container variable `v`. */
|
/** Holds if `(bb, i)` reads the container variable `v`. */
|
||||||
predicate variableRead(IRBlock bb, int i, SourceVariable v, boolean certain) {
|
predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) {
|
||||||
Ssa::variableRead(bb, i, v, certain)
|
Ssa::variableRead(bb, i, v, certain)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2083,6 +2083,9 @@ private newtype TContent =
|
|||||||
indirectionIndex =
|
indirectionIndex =
|
||||||
[1 .. max(Ssa::getMaxIndirectionsForType(getAFieldWithSize(u, bytes).getUnspecifiedType()))]
|
[1 .. max(Ssa::getMaxIndirectionsForType(getAFieldWithSize(u, bytes).getUnspecifiedType()))]
|
||||||
)
|
)
|
||||||
|
} or
|
||||||
|
TElementContent(int indirectionIndex) {
|
||||||
|
indirectionIndex = [1 .. getMaxElementContentIndirectionIndex()]
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2193,6 +2196,25 @@ class UnionContent extends Content, TUnionContent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A `Content` that represents one of the elements of a
|
||||||
|
* container (e.g., `std::vector`).
|
||||||
|
*/
|
||||||
|
class ElementContent extends Content, TElementContent {
|
||||||
|
int indirectionIndex;
|
||||||
|
|
||||||
|
ElementContent() { this = TElementContent(indirectionIndex) }
|
||||||
|
|
||||||
|
pragma[inline]
|
||||||
|
override int getIndirectionIndex() {
|
||||||
|
pragma[only_bind_into](result) = pragma[only_bind_out](indirectionIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
override predicate impliesClearOf(Content c) { none() }
|
||||||
|
|
||||||
|
override string toString() { result = contentStars(this) + "element" }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An entity that represents a set of `Content`s.
|
* An entity that represents a set of `Content`s.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -193,6 +193,46 @@ private module Cached {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Holds if `operand`'s definition is a `VariableAddressInstruction` whose variable is a temporary */
|
||||||
|
private predicate isIRTempVariable(Operand operand) {
|
||||||
|
operand.getDef().(VariableAddressInstruction).getIRVariable() instanceof IRTempVariable
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `node` is an indirect operand whose operand is an argument, and
|
||||||
|
* the `n`'th expression associated with the operand is `e`.
|
||||||
|
*/
|
||||||
|
private predicate isIndirectOperandOfArgument(
|
||||||
|
IndirectOperand node, ArgumentOperand operand, Expr e, int n
|
||||||
|
) {
|
||||||
|
node.hasOperandAndIndirectionIndex(operand, 1) and
|
||||||
|
e = getConvertedResultExpression(operand.getDef(), n)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `opFrom` is an operand to a conversion, and `opTo` is the unique
|
||||||
|
* use of the conversion.
|
||||||
|
*/
|
||||||
|
private predicate isConversionStep(Operand opFrom, Operand opTo) {
|
||||||
|
exists(Instruction mid |
|
||||||
|
conversionFlow(opFrom, mid, false, false) and
|
||||||
|
opTo = unique( | | getAUse(mid))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if an operand that satisfies `isIRTempVariable` flows to `op`
|
||||||
|
* through a (possibly empty) sequence of conversions.
|
||||||
|
*/
|
||||||
|
private predicate irTempOperandConversionFlows(Operand op) {
|
||||||
|
isIRTempVariable(op)
|
||||||
|
or
|
||||||
|
exists(Operand mid |
|
||||||
|
irTempOperandConversionFlows(mid) and
|
||||||
|
isConversionStep(mid, op)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/** Holds if `node` should be an `IndirectOperand` that maps `node.asExpr()` to `e`. */
|
/** Holds if `node` should be an `IndirectOperand` that maps `node.asExpr()` to `e`. */
|
||||||
private predicate exprNodeShouldBeIndirectOperand(IndirectOperand node, Expr e, int n) {
|
private predicate exprNodeShouldBeIndirectOperand(IndirectOperand node, Expr e, int n) {
|
||||||
exists(ArgumentOperand operand |
|
exists(ArgumentOperand operand |
|
||||||
@@ -203,9 +243,8 @@ private module Cached {
|
|||||||
// result. However, the instruction actually represents the _address_ of
|
// result. However, the instruction actually represents the _address_ of
|
||||||
// the argument. So to fix this mismatch, we have the indirection of the
|
// the argument. So to fix this mismatch, we have the indirection of the
|
||||||
// `VariableAddressInstruction` map to the expression.
|
// `VariableAddressInstruction` map to the expression.
|
||||||
node.hasOperandAndIndirectionIndex(operand, 1) and
|
isIndirectOperandOfArgument(node, operand, e, n) and
|
||||||
e = getConvertedResultExpression(operand.getDef(), n) and
|
irTempOperandConversionFlows(operand)
|
||||||
operand.getDef().(VariableAddressInstruction).getIRVariable() instanceof IRTempVariable
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -981,7 +981,7 @@ private module SsaInput implements SsaImplCommon::InputSig<Location> {
|
|||||||
* Holds if the `i`'th write in block `bb` writes to the variable `v`.
|
* Holds if the `i`'th write in block `bb` writes to the variable `v`.
|
||||||
* `certain` is `true` if the write is guaranteed to overwrite the entire variable.
|
* `certain` is `true` if the write is guaranteed to overwrite the entire variable.
|
||||||
*/
|
*/
|
||||||
predicate variableWrite(IRBlock bb, int i, SourceVariable v, boolean certain) {
|
predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) {
|
||||||
DataFlowImplCommon::forceCachingInSameStage() and
|
DataFlowImplCommon::forceCachingInSameStage() and
|
||||||
(
|
(
|
||||||
exists(DefImpl def | def.hasIndexInBlock(bb, i, v) |
|
exists(DefImpl def | def.hasIndexInBlock(bb, i, v) |
|
||||||
@@ -999,7 +999,7 @@ private module SsaInput implements SsaImplCommon::InputSig<Location> {
|
|||||||
* Holds if the `i`'th read in block `bb` reads to the variable `v`.
|
* Holds if the `i`'th read in block `bb` reads to the variable `v`.
|
||||||
* `certain` is `true` if the read is guaranteed. For C++, this is always the case.
|
* `certain` is `true` if the read is guaranteed. For C++, this is always the case.
|
||||||
*/
|
*/
|
||||||
predicate variableRead(IRBlock bb, int i, SourceVariable v, boolean certain) {
|
predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) {
|
||||||
exists(UseImpl use | use.hasIndexInBlock(bb, i, v) |
|
exists(UseImpl use | use.hasIndexInBlock(bb, i, v) |
|
||||||
if use.isCertain() then certain = true else certain = false
|
if use.isCertain() then certain = true else certain = false
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -757,13 +757,19 @@ import Cached
|
|||||||
* between the SSA pruning stage, and the final SSA stage.
|
* between the SSA pruning stage, and the final SSA stage.
|
||||||
*/
|
*/
|
||||||
module InputSigCommon {
|
module InputSigCommon {
|
||||||
class BasicBlock = IRBlock;
|
class BasicBlock extends IRBlock {
|
||||||
|
ControlFlowNode getNode(int i) { result = this.getInstruction(i) }
|
||||||
|
|
||||||
|
int length() { result = this.getInstructionCount() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class ControlFlowNode = Instruction;
|
||||||
|
|
||||||
BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) }
|
BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) }
|
||||||
|
|
||||||
BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() }
|
BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() }
|
||||||
|
|
||||||
class ExitBasicBlock extends IRBlock {
|
class ExitBasicBlock extends BasicBlock {
|
||||||
ExitBasicBlock() { this.getLastInstruction() instanceof ExitFunctionInstruction }
|
ExitBasicBlock() { this.getLastInstruction() instanceof ExitFunctionInstruction }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,7 +147,10 @@ predicate defaultAdditionalTaintStep(DataFlow::Node src, DataFlow::Node sink, st
|
|||||||
* of `c` at sinks and inputs to additional taint steps.
|
* of `c` at sinks and inputs to additional taint steps.
|
||||||
*/
|
*/
|
||||||
bindingset[node]
|
bindingset[node]
|
||||||
predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) { none() }
|
predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) {
|
||||||
|
node instanceof ArgumentNode and
|
||||||
|
c.isSingleton(any(ElementContent ec))
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if `node` should be a sanitizer in all global taint flow configurations
|
* Holds if `node` should be a sanitizer in all global taint flow configurations
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
import semmle.code.cpp.ir.implementation.aliased_ssa.IR
|
import semmle.code.cpp.ir.implementation.raw.IR
|
||||||
import semmle.code.cpp.ir.internal.Overlap
|
import semmle.code.cpp.ir.internal.Overlap
|
||||||
import semmle.code.cpp.ir.internal.IRCppLanguage as Language
|
import semmle.code.cpp.ir.internal.IRCppLanguage as Language
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
import semmle.code.cpp.ir.implementation.aliased_ssa.IR
|
import semmle.code.cpp.ir.implementation.unaliased_ssa.IR
|
||||||
import semmle.code.cpp.ir.internal.Overlap
|
import semmle.code.cpp.ir.internal.Overlap
|
||||||
import semmle.code.cpp.ir.internal.IRCppLanguage as Language
|
import semmle.code.cpp.ir.internal.IRCppLanguage as Language
|
||||||
|
|||||||
@@ -7,119 +7,6 @@
|
|||||||
import semmle.code.cpp.models.interfaces.Allocation
|
import semmle.code.cpp.models.interfaces.Allocation
|
||||||
import semmle.code.cpp.models.interfaces.Taint
|
import semmle.code.cpp.models.interfaces.Taint
|
||||||
|
|
||||||
/**
|
|
||||||
* An allocation function (such as `malloc`) that has an argument for the size
|
|
||||||
* in bytes.
|
|
||||||
*/
|
|
||||||
private class MallocAllocationFunction extends AllocationFunction {
|
|
||||||
int sizeArg;
|
|
||||||
|
|
||||||
MallocAllocationFunction() {
|
|
||||||
// --- C library allocation
|
|
||||||
this.hasGlobalOrStdOrBslName("malloc") and // malloc(size)
|
|
||||||
sizeArg = 0
|
|
||||||
or
|
|
||||||
this.hasGlobalName([
|
|
||||||
// --- Windows Memory Management for Windows Drivers
|
|
||||||
"MmAllocateContiguousMemory", // MmAllocateContiguousMemory(size, maxaddress)
|
|
||||||
"MmAllocateContiguousNodeMemory", // MmAllocateContiguousNodeMemory(size, minaddress, maxaddress, bound, flag, prefer)
|
|
||||||
"MmAllocateContiguousMemorySpecifyCache", // MmAllocateContiguousMemorySpecifyCache(size, minaddress, maxaddress, bound, type)
|
|
||||||
"MmAllocateContiguousMemorySpecifyCacheNode", // MmAllocateContiguousMemorySpecifyCacheNode(size, minaddress, maxaddress, bound, type, prefer)
|
|
||||||
"MmAllocateNonCachedMemory", // MmAllocateNonCachedMemory(size)
|
|
||||||
"MmAllocateMappingAddress", // MmAllocateMappingAddress(size, tag)
|
|
||||||
// --- Windows COM allocation
|
|
||||||
"CoTaskMemAlloc", // CoTaskMemAlloc(size)
|
|
||||||
// --- Solaris/BSD kernel memory allocator
|
|
||||||
"kmem_alloc", // kmem_alloc(size, flags)
|
|
||||||
"kmem_zalloc", // kmem_zalloc(size, flags)
|
|
||||||
// --- OpenSSL memory allocation
|
|
||||||
"CRYPTO_malloc", // CRYPTO_malloc(size_t num, const char *file, int line)
|
|
||||||
"CRYPTO_zalloc", // CRYPTO_zalloc(size_t num, const char *file, int line)
|
|
||||||
"CRYPTO_secure_malloc", // CRYPTO_secure_malloc(size_t num, const char *file, int line)
|
|
||||||
"CRYPTO_secure_zalloc", // CRYPTO_secure_zalloc(size_t num, const char *file, int line)
|
|
||||||
"g_malloc", // g_malloc (n_bytes);
|
|
||||||
"g_try_malloc" // g_try_malloc(n_bytes);
|
|
||||||
]) and
|
|
||||||
sizeArg = 0
|
|
||||||
or
|
|
||||||
this.hasGlobalName([
|
|
||||||
// --- Windows Memory Management for Windows Drivers
|
|
||||||
"ExAllocatePool", // ExAllocatePool(type, size)
|
|
||||||
"ExAllocatePool2", // ExAllocatePool2(flags, size, tag)
|
|
||||||
"ExAllocatePool3", // ExAllocatePool3(flags, size, tag, extparams, extparamscount)
|
|
||||||
"ExAllocatePoolWithTag", // ExAllocatePool(type, size, tag)
|
|
||||||
"ExAllocatePoolWithTagPriority", // ExAllocatePoolWithTagPriority(type, size, tag, priority)
|
|
||||||
"ExAllocatePoolWithQuota", // ExAllocatePoolWithQuota(type, size)
|
|
||||||
"ExAllocatePoolWithQuotaTag", // ExAllocatePoolWithQuotaTag(type, size, tag)
|
|
||||||
"ExAllocatePoolZero", // ExAllocatePoolZero(type, size, tag)
|
|
||||||
"IoAllocateMdl", // IoAllocateMdl(address, size, flag, flag, irp)
|
|
||||||
"IoAllocateErrorLogEntry", // IoAllocateErrorLogEntry(object, size)
|
|
||||||
// --- Windows Global / Local legacy allocation
|
|
||||||
"LocalAlloc", // LocalAlloc(flags, size)
|
|
||||||
"GlobalAlloc", // GlobalAlloc(flags, size)
|
|
||||||
// --- Windows System Services allocation
|
|
||||||
"VirtualAlloc" // VirtualAlloc(address, size, type, flag)
|
|
||||||
]) and
|
|
||||||
sizeArg = 1
|
|
||||||
or
|
|
||||||
this.hasGlobalName("HeapAlloc") and // HeapAlloc(heap, flags, size)
|
|
||||||
sizeArg = 2
|
|
||||||
or
|
|
||||||
this.hasGlobalName([
|
|
||||||
// --- Windows Memory Management for Windows Drivers
|
|
||||||
"MmAllocatePagesForMdl", // MmAllocatePagesForMdl(minaddress, maxaddress, skip, size)
|
|
||||||
"MmAllocatePagesForMdlEx", // MmAllocatePagesForMdlEx(minaddress, maxaddress, skip, size, type, flags)
|
|
||||||
"MmAllocateNodePagesForMdlEx" // MmAllocateNodePagesForMdlEx(minaddress, maxaddress, skip, size, type, prefer, flags)
|
|
||||||
]) and
|
|
||||||
sizeArg = 3
|
|
||||||
}
|
|
||||||
|
|
||||||
override int getSizeArg() { result = sizeArg }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An allocation function (such as `alloca`) that does not require a
|
|
||||||
* corresponding free (and has an argument for the size in bytes).
|
|
||||||
*/
|
|
||||||
private class AllocaAllocationFunction extends AllocationFunction {
|
|
||||||
int sizeArg;
|
|
||||||
|
|
||||||
AllocaAllocationFunction() {
|
|
||||||
this.hasGlobalName([
|
|
||||||
// --- stack allocation
|
|
||||||
"alloca", // // alloca(size)
|
|
||||||
"__builtin_alloca", // __builtin_alloca(size)
|
|
||||||
"_alloca", // _alloca(size)
|
|
||||||
"_malloca" // _malloca(size)
|
|
||||||
]) and
|
|
||||||
sizeArg = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
override int getSizeArg() { result = sizeArg }
|
|
||||||
|
|
||||||
override predicate requiresDealloc() { none() }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An allocation function (such as `calloc`) that has an argument for the size
|
|
||||||
* and another argument for the size of those units (in bytes).
|
|
||||||
*/
|
|
||||||
private class CallocAllocationFunction extends AllocationFunction {
|
|
||||||
int sizeArg;
|
|
||||||
int multArg;
|
|
||||||
|
|
||||||
CallocAllocationFunction() {
|
|
||||||
// --- C library allocation
|
|
||||||
this.hasGlobalOrStdOrBslName("calloc") and // calloc(num, size)
|
|
||||||
sizeArg = 1 and
|
|
||||||
multArg = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
override int getSizeArg() { result = sizeArg }
|
|
||||||
|
|
||||||
override int getSizeMult() { result = multArg }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An allocation function (such as `realloc`) that has an argument for the size
|
* An allocation function (such as `realloc`) that has an argument for the size
|
||||||
* in bytes, and an argument for an existing pointer that is to be reallocated.
|
* in bytes, and an argument for an existing pointer that is to be reallocated.
|
||||||
@@ -373,6 +260,63 @@ private class NewArrayAllocationExpr extends AllocationExpr, NewArrayExpr {
|
|||||||
override predicate requiresDealloc() { not exists(this.getPlacementPointer()) }
|
override predicate requiresDealloc() { not exists(this.getPlacementPointer()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `f` is an allocation function according to the
|
||||||
|
* extensible `allocationFunctionModel` predicate.
|
||||||
|
*/
|
||||||
|
private predicate isAllocationFunctionFromModel(
|
||||||
|
Function f, string namespace, string type, string name
|
||||||
|
) {
|
||||||
|
exists(boolean subtypes | allocationFunctionModel(namespace, type, subtypes, name, _, _, _, _) |
|
||||||
|
if type = ""
|
||||||
|
then f.hasQualifiedName(namespace, "", name)
|
||||||
|
else
|
||||||
|
exists(Class c |
|
||||||
|
c.hasQualifiedName(namespace, type) and f.hasQualifiedName(namespace, _, name)
|
||||||
|
|
|
||||||
|
if subtypes = true
|
||||||
|
then f = c.getADerivedClass*().getAMemberFunction()
|
||||||
|
else f = c.getAMemberFunction()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An allocation function modeled via the extensible `allocationFunctionModel` predicate.
|
||||||
|
*/
|
||||||
|
private class AllocationFunctionFromModel extends AllocationFunction {
|
||||||
|
string namespace;
|
||||||
|
string type;
|
||||||
|
string name;
|
||||||
|
|
||||||
|
AllocationFunctionFromModel() { isAllocationFunctionFromModel(this, namespace, type, name) }
|
||||||
|
|
||||||
|
final override int getSizeArg() {
|
||||||
|
exists(string sizeArg |
|
||||||
|
allocationFunctionModel(namespace, type, _, name, sizeArg, _, _, _) and
|
||||||
|
result = sizeArg.toInt()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override int getSizeMult() {
|
||||||
|
exists(string sizeMult |
|
||||||
|
allocationFunctionModel(namespace, type, _, name, _, sizeMult, _, _) and
|
||||||
|
result = sizeMult.toInt()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override int getReallocPtrArg() {
|
||||||
|
exists(string reallocPtrArg |
|
||||||
|
allocationFunctionModel(namespace, type, _, name, _, _, reallocPtrArg, _) and
|
||||||
|
result = reallocPtrArg.toInt()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override predicate requiresDealloc() {
|
||||||
|
allocationFunctionModel(namespace, type, _, name, _, _, _, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private module HeuristicAllocation {
|
private module HeuristicAllocation {
|
||||||
/** A class that maps an `AllocationExpr` to an `HeuristicAllocationExpr`. */
|
/** A class that maps an `AllocationExpr` to an `HeuristicAllocationExpr`. */
|
||||||
private class HeuristicAllocationModeled extends HeuristicAllocationExpr instanceof AllocationExpr
|
private class HeuristicAllocationModeled extends HeuristicAllocationExpr instanceof AllocationExpr
|
||||||
|
|||||||
@@ -7,61 +7,42 @@
|
|||||||
import semmle.code.cpp.models.interfaces.Deallocation
|
import semmle.code.cpp.models.interfaces.Deallocation
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A deallocation function such as `free`.
|
* Holds if `f` is an deallocation function according to the
|
||||||
|
* extensible `deallocationFunctionModel` predicate.
|
||||||
*/
|
*/
|
||||||
private class StandardDeallocationFunction extends DeallocationFunction {
|
private predicate isDeallocationFunctionFromModel(
|
||||||
int freedArg;
|
Function f, string namespace, string type, string name
|
||||||
|
) {
|
||||||
|
exists(boolean subtypes | deallocationFunctionModel(namespace, type, subtypes, name, _) |
|
||||||
|
if type = ""
|
||||||
|
then f.hasQualifiedName(namespace, "", name)
|
||||||
|
else
|
||||||
|
exists(Class c |
|
||||||
|
c.hasQualifiedName(namespace, type) and f.hasQualifiedName(namespace, _, name)
|
||||||
|
|
|
||||||
|
if subtypes = true
|
||||||
|
then f = c.getADerivedClass*().getAMemberFunction()
|
||||||
|
else f = c.getAMemberFunction()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
StandardDeallocationFunction() {
|
/**
|
||||||
this.hasGlobalOrStdOrBslName([
|
* A deallocation function modeled via the extensible `deallocationFunctionModel` predicate.
|
||||||
// --- C library allocation
|
*/
|
||||||
"free", "realloc"
|
private class DeallocationFunctionFromModel extends DeallocationFunction {
|
||||||
]) and
|
string namespace;
|
||||||
freedArg = 0
|
string type;
|
||||||
or
|
string name;
|
||||||
this.hasGlobalName([
|
|
||||||
// --- OpenSSL memory deallocation
|
DeallocationFunctionFromModel() { isDeallocationFunctionFromModel(this, namespace, type, name) }
|
||||||
"CRYPTO_free", "CRYPTO_secure_free",
|
|
||||||
// --- glib memory deallocation
|
final override int getFreedArg() {
|
||||||
"g_free"
|
exists(string freedArg |
|
||||||
]) and
|
deallocationFunctionModel(namespace, type, _, name, freedArg) and
|
||||||
freedArg = 0
|
result = freedArg.toInt()
|
||||||
or
|
)
|
||||||
this.hasGlobalOrStdName([
|
|
||||||
// --- Windows Memory Management for Windows Drivers
|
|
||||||
"ExFreePool", "ExFreePoolWithTag", "ExDeleteTimer", "IoFreeIrp", "IoFreeMdl",
|
|
||||||
"IoFreeErrorLogEntry", "IoFreeWorkItem", "MmFreeContiguousMemory",
|
|
||||||
"MmFreeContiguousMemorySpecifyCache", "MmFreeNonCachedMemory", "MmFreeMappingAddress",
|
|
||||||
"MmFreePagesFromMdl", "MmUnmapReservedMapping", "MmUnmapLockedPages",
|
|
||||||
"NdisFreeGenericObject", "NdisFreeMemory", "NdisFreeMemoryWithTag", "NdisFreeMdl",
|
|
||||||
"NdisFreeNetBufferListPool", "NdisFreeNetBufferPool",
|
|
||||||
// --- Windows Global / Local legacy allocation
|
|
||||||
"LocalFree", "GlobalFree", "LocalReAlloc", "GlobalReAlloc",
|
|
||||||
// --- Windows System Services allocation
|
|
||||||
"VirtualFree",
|
|
||||||
// --- Windows COM allocation
|
|
||||||
"CoTaskMemFree", "CoTaskMemRealloc",
|
|
||||||
// --- Windows Automation
|
|
||||||
"SysFreeString",
|
|
||||||
// --- Solaris/BSD kernel memory allocator
|
|
||||||
"kmem_free"
|
|
||||||
]) and
|
|
||||||
freedArg = 0
|
|
||||||
or
|
|
||||||
this.hasGlobalOrStdName([
|
|
||||||
// --- Windows Memory Management for Windows Drivers
|
|
||||||
"ExFreeToLookasideListEx", "ExFreeToPagedLookasideList", "ExFreeToNPagedLookasideList",
|
|
||||||
"NdisFreeMemoryWithTagPriority", "StorPortFreeMdl", "StorPortFreePool",
|
|
||||||
// --- NetBSD pool manager
|
|
||||||
"pool_put", "pool_cache_put"
|
|
||||||
]) and
|
|
||||||
freedArg = 1
|
|
||||||
or
|
|
||||||
this.hasGlobalOrStdName(["HeapFree", "HeapReAlloc"]) and
|
|
||||||
freedArg = 2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override int getFreedArg() { result = freedArg }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* Provides models for C++ containers `std::array`, `std::vector`, `std::deque`, `std::list` and `std::forward_list`.
|
* Provides models for C++ containers `std::array`, `std::vector`, `std::deque`, `std::list` and `std::forward_list`.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import semmle.code.cpp.models.interfaces.Taint
|
import semmle.code.cpp.models.interfaces.FlowSource
|
||||||
import semmle.code.cpp.models.interfaces.Iterator
|
import semmle.code.cpp.models.interfaces.Iterator
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,73 +55,6 @@ private class Vector extends StdSequenceContainer {
|
|||||||
Vector() { this.hasQualifiedName(["std", "bsl"], "vector") }
|
Vector() { this.hasQualifiedName(["std", "bsl"], "vector") }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Additional model for standard container constructors that reference the
|
|
||||||
* value type of the container (that is, the `T` in `std::vector<T>`). For
|
|
||||||
* example the fill constructor:
|
|
||||||
* ```
|
|
||||||
* std::vector<std::string> v(100, potentially_tainted_string);
|
|
||||||
* ```
|
|
||||||
*/
|
|
||||||
private class StdSequenceContainerConstructor extends Constructor, TaintFunction {
|
|
||||||
StdSequenceContainerConstructor() {
|
|
||||||
this.getDeclaringType() instanceof Vector or
|
|
||||||
this.getDeclaringType() instanceof Deque or
|
|
||||||
this.getDeclaringType() instanceof List or
|
|
||||||
this.getDeclaringType() instanceof ForwardList
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the index of a parameter to this function that is a reference to the
|
|
||||||
* value type of the container.
|
|
||||||
*/
|
|
||||||
int getAValueTypeParameterIndex() {
|
|
||||||
this.getParameter(result).getUnspecifiedType().(ReferenceType).getBaseType() =
|
|
||||||
this.getDeclaringType().getTemplateArgument(0).(Type).getUnspecifiedType() // i.e. the `T` of this `std::vector<T>`
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the index of a parameter to this function that is an iterator.
|
|
||||||
*/
|
|
||||||
int getAnIteratorParameterIndex() { this.getParameter(result).getType() instanceof Iterator }
|
|
||||||
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// taint flow from any parameter of the value type to the returned object
|
|
||||||
(
|
|
||||||
input.isParameterDeref(this.getAValueTypeParameterIndex()) or
|
|
||||||
input.isParameter(this.getAnIteratorParameterIndex())
|
|
||||||
) and
|
|
||||||
(
|
|
||||||
output.isReturnValue() // TODO: this is only needed for AST data flow, which treats constructors as returning the new object
|
|
||||||
or
|
|
||||||
output.isQualifierObject()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The standard container function `data`.
|
|
||||||
*/
|
|
||||||
private class StdSequenceContainerData extends TaintFunction {
|
|
||||||
StdSequenceContainerData() {
|
|
||||||
this.getClassAndName("data") instanceof Array or
|
|
||||||
this.getClassAndName("data") instanceof Vector
|
|
||||||
}
|
|
||||||
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// flow from container itself (qualifier) to return value
|
|
||||||
input.isQualifierObject() and
|
|
||||||
output.isReturnValueDeref()
|
|
||||||
or
|
|
||||||
// reverse flow from returned reference to the qualifier (for writes to
|
|
||||||
// `data`)
|
|
||||||
input.isReturnValueDeref() and
|
|
||||||
output.isQualifierObject()
|
|
||||||
}
|
|
||||||
|
|
||||||
override predicate isPartialWrite(FunctionOutput output) { output.isQualifierObject() }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard container functions `push_back` and `push_front`.
|
* The standard container functions `push_back` and `push_front`.
|
||||||
*/
|
*/
|
||||||
@@ -143,35 +76,6 @@ class StdSequenceContainerPush extends MemberFunction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class StdSequenceContainerPushModel extends StdSequenceContainerPush, TaintFunction {
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// flow from parameter to qualifier
|
|
||||||
input.isParameterDeref(0) and
|
|
||||||
output.isQualifierObject()
|
|
||||||
}
|
|
||||||
|
|
||||||
override predicate isPartialWrite(FunctionOutput output) { output.isQualifierObject() }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The standard container functions `front` and `back`.
|
|
||||||
*/
|
|
||||||
private class StdSequenceContainerFrontBack extends TaintFunction {
|
|
||||||
StdSequenceContainerFrontBack() {
|
|
||||||
this.getClassAndName(["front", "back"]) instanceof Array or
|
|
||||||
this.getClassAndName(["front", "back"]) instanceof Deque or
|
|
||||||
this.getClassAndName("front") instanceof ForwardList or
|
|
||||||
this.getClassAndName(["front", "back"]) instanceof List or
|
|
||||||
this.getClassAndName(["front", "back"]) instanceof Vector
|
|
||||||
}
|
|
||||||
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// flow from object to returned reference
|
|
||||||
input.isQualifierObject() and
|
|
||||||
output.isReturnValueDeref()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard container functions `insert` and `insert_after`.
|
* The standard container functions `insert` and `insert_after`.
|
||||||
*/
|
*/
|
||||||
@@ -198,58 +102,6 @@ class StdSequenceContainerInsert extends MemberFunction {
|
|||||||
int getAnIteratorParameterIndex() { this.getParameter(result).getType() instanceof Iterator }
|
int getAnIteratorParameterIndex() { this.getParameter(result).getType() instanceof Iterator }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class StdSequenceContainerInsertModel extends StdSequenceContainerInsert, TaintFunction {
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// flow from parameter to container itself (qualifier) and return value
|
|
||||||
(
|
|
||||||
input.isQualifierObject() or
|
|
||||||
input.isParameterDeref(this.getAValueTypeParameterIndex()) or
|
|
||||||
input.isParameter(this.getAnIteratorParameterIndex())
|
|
||||||
) and
|
|
||||||
(
|
|
||||||
output.isQualifierObject() or
|
|
||||||
output.isReturnValue()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override predicate isPartialWrite(FunctionOutput output) { output.isQualifierObject() }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The standard container function `assign`.
|
|
||||||
*/
|
|
||||||
private class StdSequenceContainerAssign extends TaintFunction {
|
|
||||||
StdSequenceContainerAssign() {
|
|
||||||
this.getClassAndName("assign") instanceof Deque or
|
|
||||||
this.getClassAndName("assign") instanceof ForwardList or
|
|
||||||
this.getClassAndName("assign") instanceof List or
|
|
||||||
this.getClassAndName("assign") instanceof Vector
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the index of a parameter to this function that is a reference to the
|
|
||||||
* value type of the container.
|
|
||||||
*/
|
|
||||||
int getAValueTypeParameterIndex() {
|
|
||||||
this.getParameter(result).getUnspecifiedType().(ReferenceType).getBaseType() =
|
|
||||||
this.getDeclaringType().getTemplateArgument(0).(Type).getUnspecifiedType() // i.e. the `T` of this `std::vector<T>`
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the index of a parameter to this function that is an iterator.
|
|
||||||
*/
|
|
||||||
int getAnIteratorParameterIndex() { this.getParameter(result).getType() instanceof Iterator }
|
|
||||||
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// flow from parameter to container itself (qualifier)
|
|
||||||
(
|
|
||||||
input.isParameterDeref(this.getAValueTypeParameterIndex()) or
|
|
||||||
input.isParameter(this.getAnIteratorParameterIndex())
|
|
||||||
) and
|
|
||||||
output.isQualifierObject()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard container functions `at` and `operator[]`.
|
* The standard container functions `at` and `operator[]`.
|
||||||
*/
|
*/
|
||||||
@@ -261,20 +113,6 @@ class StdSequenceContainerAt extends MemberFunction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class StdSequenceContainerAtModel extends StdSequenceContainerAt, TaintFunction {
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// flow from qualifier to referenced return value
|
|
||||||
input.isQualifierObject() and
|
|
||||||
output.isReturnValueDeref()
|
|
||||||
or
|
|
||||||
// reverse flow from returned reference to the qualifier
|
|
||||||
input.isReturnValueDeref() and
|
|
||||||
output.isQualifierObject()
|
|
||||||
}
|
|
||||||
|
|
||||||
override predicate isPartialWrite(FunctionOutput output) { output.isQualifierObject() }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard `emplace` function.
|
* The standard `emplace` function.
|
||||||
*/
|
*/
|
||||||
@@ -297,20 +135,6 @@ class StdSequenceEmplace extends MemberFunction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class StdSequenceEmplaceModel extends StdSequenceEmplace, TaintFunction {
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// flow from any parameter except the position iterator to qualifier and return value
|
|
||||||
// (here we assume taint flow from any constructor parameter to the constructed object)
|
|
||||||
input.isParameterDeref([1 .. this.getNumberOfParameters() - 1]) and
|
|
||||||
(
|
|
||||||
output.isQualifierObject() or
|
|
||||||
output.isReturnValue()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override predicate isPartialWrite(FunctionOutput output) { output.isQualifierObject() }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard vector `emplace` function.
|
* The standard vector `emplace` function.
|
||||||
*/
|
*/
|
||||||
@@ -340,17 +164,6 @@ class StdSequenceEmplaceBack extends MemberFunction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class StdSequenceEmplaceBackModel extends StdSequenceEmplaceBack, TaintFunction {
|
|
||||||
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
|
|
||||||
// flow from any parameter to qualifier
|
|
||||||
// (here we assume taint flow from any constructor parameter to the constructed object)
|
|
||||||
input.isParameterDeref([0 .. this.getNumberOfParameters() - 1]) and
|
|
||||||
output.isQualifierObject()
|
|
||||||
}
|
|
||||||
|
|
||||||
override predicate isPartialWrite(FunctionOutput output) { output.isQualifierObject() }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard vector `emplace_back` function.
|
* The standard vector `emplace_back` function.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -89,6 +89,14 @@ abstract class AllocationFunction extends Function {
|
|||||||
predicate requiresDealloc() { any() }
|
predicate requiresDealloc() { any() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if an external allocation model exists for the given parameters.
|
||||||
|
*/
|
||||||
|
extensible predicate allocationFunctionModel(
|
||||||
|
string namespace, string type, boolean subtypes, string name, string sizeArg, string multArg,
|
||||||
|
string reallocPtrArg, boolean requiresDealloc
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An `operator new` or `operator new[]` function that may be associated with
|
* An `operator new` or `operator new[]` function that may be associated with
|
||||||
* `new` or `new[]` expressions. Note that `new` and `new[]` are not function
|
* `new` or `new[]` expressions. Note that `new` and `new[]` are not function
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ abstract class DeallocationFunction extends Function {
|
|||||||
int getFreedArg() { none() }
|
int getFreedArg() { none() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if an external deallocation model exists for the given parameters.
|
||||||
|
*/
|
||||||
|
extensible predicate deallocationFunctionModel(
|
||||||
|
string namespace, string type, boolean subtypes, string name, string freedArg
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An `operator delete` or `operator delete[]` function that may be associated
|
* An `operator delete` or `operator delete[]` function that may be associated
|
||||||
* with `delete` or `delete[]` expressions. Note that `delete` and `delete[]`
|
* with `delete` or `delete[]` expressions. Note that `delete` and `delete[]`
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ module FlowFromFree<FlowFromFreeParamSig P> {
|
|||||||
e = any(StoreInstruction store).getDestinationAddress().getUnconvertedResultExpression()
|
e = any(StoreInstruction store).getDestinationAddress().getUnconvertedResultExpression()
|
||||||
)
|
)
|
||||||
or
|
or
|
||||||
n.asExpr() instanceof ArrayExpr
|
[n.asExpr(), n.asIndirectExpr()] instanceof ArrayExpr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 1.0.3
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
|
|
||||||
## 1.0.2
|
## 1.0.2
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* @kind problem
|
* @kind problem
|
||||||
* @problem.severity warning
|
* @problem.severity warning
|
||||||
* @security-severity 9.3
|
* @security-severity 9.3
|
||||||
* @precision medium
|
* @precision high
|
||||||
* @id cpp/unsafe-strncat
|
* @id cpp/unsafe-strncat
|
||||||
* @tags reliability
|
* @tags reliability
|
||||||
* correctness
|
* correctness
|
||||||
|
|||||||
@@ -215,13 +215,18 @@ predicate noThrowInTryBlock(NewOrNewArrayExpr newExpr, BadAllocCatchBlock catchB
|
|||||||
*/
|
*/
|
||||||
predicate nullCheckInThrowingNew(NewOrNewArrayExpr newExpr, GuardCondition guard) {
|
predicate nullCheckInThrowingNew(NewOrNewArrayExpr newExpr, GuardCondition guard) {
|
||||||
newExpr.getAllocator() instanceof ThrowingAllocator and
|
newExpr.getAllocator() instanceof ThrowingAllocator and
|
||||||
(
|
// There can be many guard conditions that compares `newExpr` againgst 0.
|
||||||
// Handles null comparisons.
|
// For example, for `if(!p)` both `p` and `!p` are guard conditions. To not
|
||||||
guard.ensuresEq(globalValueNumber(newExpr).getAnExpr(), any(NullValue null), _, _, _)
|
// produce duplicates results we pick the "first" guard condition according
|
||||||
or
|
// to some arbitrary ordering (i.e., location information). This means `!p` is the
|
||||||
// Handles `if(ptr)` and `if(!ptr)` cases.
|
// element that we use to construct the alert.
|
||||||
guard = globalValueNumber(newExpr).getAnExpr()
|
guard =
|
||||||
)
|
min(GuardCondition gc, int startline, int startcolumn, int endline, int endcolumn |
|
||||||
|
gc.comparesEq(globalValueNumber(newExpr).getAnExpr(), 0, _, _) and
|
||||||
|
gc.getLocation().hasLocationInfo(_, startline, startcolumn, endline, endcolumn)
|
||||||
|
|
|
||||||
|
gc order by startline, startcolumn, endline, endcolumn
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
from NewOrNewArrayExpr newExpr, Element element, string msg, string elementString
|
from NewOrNewArrayExpr newExpr, Element element, string msg, string elementString
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
category: queryMetadata
|
||||||
|
---
|
||||||
|
* The precision of `cpp/unsafe-strncat` ("Potentially unsafe call to strncat") has been increased to `high`. As a result, it will be run by default as part of the Code Scanning suite.
|
||||||
3
cpp/ql/src/change-notes/released/1.0.3.md
Normal file
3
cpp/ql/src/change-notes/released/1.0.3.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## 1.0.3
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.0.2
|
lastReleaseVersion: 1.0.3
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/cpp-queries
|
name: codeql/cpp-queries
|
||||||
version: 1.0.2
|
version: 1.0.4-dev
|
||||||
groups:
|
groups:
|
||||||
- cpp
|
- cpp
|
||||||
- queries
|
- queries
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
#include "b.h"
|
#include "b.h"
|
||||||
static int has_angle_b = __has_include(<b.h>);
|
static int has_angle_b = __has_include(<b.h>);
|
||||||
|
|
||||||
// semmle-extractor-options: -I${testdir}/dir2 -iquote ${testdir}/dir1 --edg --clang
|
// semmle-extractor-options: -I${testdir}/dir2 -iquote ${testdir}/dir1 --clang
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
semmle-extractor-options: --edg --microsoft
|
semmle-extractor-options: --microsoft
|
||||||
|
|||||||
@@ -1,22 +1,21 @@
|
|||||||
| arguments.c | 1 | --preprocessArgs |
|
| arguments.c | 1 | --preprocessArgs |
|
||||||
| arguments.c | 2 | --force-recompute |
|
| arguments.c | 2 | --edg |
|
||||||
| arguments.c | 3 | --edg |
|
| arguments.c | 3 | --force-recompute |
|
||||||
| arguments.c | 4 | --disable_system_macros |
|
| arguments.c | 4 | --edg |
|
||||||
| arguments.c | 5 | --edg |
|
| arguments.c | 5 | --disable_system_macros |
|
||||||
| arguments.c | 6 | --codeql-verbosity |
|
| arguments.c | 6 | --edg |
|
||||||
| arguments.c | 7 | --edg |
|
| arguments.c | 7 | --codeql-verbosity |
|
||||||
| arguments.c | 8 | 2 |
|
| arguments.c | 8 | --edg |
|
||||||
| arguments.c | 9 | --edg |
|
| arguments.c | 9 | 2 |
|
||||||
| arguments.c | 10 | --target |
|
| arguments.c | 10 | --edg |
|
||||||
| arguments.c | 11 | --edg |
|
| arguments.c | 11 | --target |
|
||||||
| arguments.c | 12 | linux_x86_64 |
|
| arguments.c | 12 | --edg |
|
||||||
| arguments.c | 13 | --edg |
|
| arguments.c | 13 | linux_x86_64 |
|
||||||
| arguments.c | 14 | -D |
|
| arguments.c | 14 | --edg |
|
||||||
| arguments.c | 15 | --edg |
|
| arguments.c | 15 | -D |
|
||||||
| arguments.c | 16 | __CODEQL_TEST__ |
|
| arguments.c | 16 | --edg |
|
||||||
| arguments.c | 17 | --gcc |
|
| arguments.c | 17 | __CODEQL_TEST__ |
|
||||||
| arguments.c | 18 | --predefined_macros |
|
| arguments.c | 18 | --gcc |
|
||||||
| arguments.c | 19 | <tools>/qltest/predefined_macros |
|
| arguments.c | 19 | -w |
|
||||||
| arguments.c | 20 | -w |
|
| arguments.c | 20 | -Werror |
|
||||||
| arguments.c | 21 | -Werror |
|
| arguments.c | 21 | arguments.c |
|
||||||
| arguments.c | 22 | arguments.c |
|
|
||||||
|
|||||||
@@ -4,8 +4,5 @@ from Compilation c, int i, string s
|
|||||||
// Skip the extractor name; it'll vary depending on platform
|
// Skip the extractor name; it'll vary depending on platform
|
||||||
where
|
where
|
||||||
i > 0 and
|
i > 0 and
|
||||||
s =
|
s = c.getArgument(i).replaceAll("\\", "/")
|
||||||
c.getArgument(i)
|
|
||||||
.replaceAll("\\", "/")
|
|
||||||
.regexpReplaceAll(".*(/qltest/predefined_macros)", "<tools>$1")
|
|
||||||
select c.getAFileCompiled().toString(), i, s
|
select c.getAFileCompiled().toString(), i, s
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
semmle-extractor-options: --edg --clang
|
semmle-extractor-options: --clang
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
| declspec.cpp:4:23:4:43 | Use fatal() instead | declspec.cpp:4:59:4:62 | exit | declspec.cpp:4:12:4:21 | deprecated | Use fatal() instead |
|
| declspec.cpp:4:23:4:43 | Use fatal() instead | declspec.cpp:4:59:4:62 | exit | declspec.cpp:4:12:4:21 | deprecated | Use fatal() instead |
|
||||||
|
| routine_attributes2.cpp:5:6:5:11 | hidden | routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.cpp:5:6:5:11 | visibility | hidden |
|
||||||
|
| routine_attributes2.cpp:5:6:5:11 | hidden | routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.cpp:5:6:5:11 | visibility | hidden |
|
||||||
|
| routine_attributes2.h:3:6:3:11 | hidden | routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.h:3:6:3:11 | visibility | hidden |
|
||||||
|
| routine_attributes2.h:3:6:3:11 | hidden | routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.h:3:6:3:11 | visibility | hidden |
|
||||||
| routine_attributes.c:3:53:3:59 | dummy | routine_attributes.c:3:12:3:24 | named_weakref | routine_attributes.c:3:44:3:50 | weakref | dummy |
|
| routine_attributes.c:3:53:3:59 | dummy | routine_attributes.c:3:12:3:24 | named_weakref | routine_attributes.c:3:44:3:50 | weakref | dummy |
|
||||||
| routine_attributes.c:4:62:4:68 | dummy | routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:55:4:59 | alias | dummy |
|
| routine_attributes.c:4:62:4:68 | dummy | routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:55:4:59 | alias | dummy |
|
||||||
| routine_attributes.c:6:49:6:55 | dummy | routine_attributes.c:6:12:6:22 | plain_alias | routine_attributes.c:6:42:6:46 | alias | dummy |
|
| routine_attributes.c:6:49:6:55 | dummy | routine_attributes.c:6:12:6:22 | plain_alias | routine_attributes.c:6:42:6:46 | alias | dummy |
|
||||||
|
|||||||
@@ -18,6 +18,10 @@
|
|||||||
| header_export.cpp:14:16:14:26 | myFunction4 | header_export.cpp:14:1:14:9 | dllexport |
|
| header_export.cpp:14:16:14:26 | myFunction4 | header_export.cpp:14:1:14:9 | dllexport |
|
||||||
| header_export.cpp:18:6:18:16 | myFunction5 | header.h:10:2:10:10 | dllexport |
|
| header_export.cpp:18:6:18:16 | myFunction5 | header.h:10:2:10:10 | dllexport |
|
||||||
| header_export.cpp:18:6:18:16 | myFunction5 | header.h:10:2:10:10 | dllimport |
|
| header_export.cpp:18:6:18:16 | myFunction5 | header.h:10:2:10:10 | dllimport |
|
||||||
|
| routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.cpp:5:6:5:11 | visibility |
|
||||||
|
| routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.cpp:5:6:5:11 | visibility |
|
||||||
|
| routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.h:3:6:3:11 | visibility |
|
||||||
|
| routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.h:3:6:3:11 | visibility |
|
||||||
| routine_attributes.c:3:12:3:24 | named_weakref | routine_attributes.c:3:44:3:50 | weakref |
|
| routine_attributes.c:3:12:3:24 | named_weakref | routine_attributes.c:3:44:3:50 | weakref |
|
||||||
| routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:46:4:52 | weakref |
|
| routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:46:4:52 | weakref |
|
||||||
| routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:55:4:59 | alias |
|
| routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:55:4:59 | alias |
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#define HIDDEN __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#include "routine_attributes2.h"
|
||||||
|
|
||||||
|
void HIDDEN a_routine() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
void HIDDEN a_routine();
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#define HIDDEN __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#include "routine_attributes2.h"
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.cpp:5:7:5:12 | visibility | type_attributes2.cpp:5:7:5:12 | hidden |
|
||||||
|
| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.h:3:7:3:12 | visibility | type_attributes2.h:3:7:3:12 | hidden |
|
||||||
|
| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.h:3:7:3:12 | visibility | type_attributes2.h:3:7:3:12 | hidden |
|
||||||
| type_attributes_ms.cpp:4:67:4:75 | IDispatch | type_attributes_ms.cpp:4:19:4:22 | uuid | type_attributes_ms.cpp:4:24:4:63 | {00020400-0000-0000-c000-000000000046} |
|
| type_attributes_ms.cpp:4:67:4:75 | IDispatch | type_attributes_ms.cpp:4:19:4:22 | uuid | type_attributes_ms.cpp:4:24:4:63 | {00020400-0000-0000-c000-000000000046} |
|
||||||
| type_attributes_ms.cpp:5:30:5:33 | Str1 | type_attributes_ms.cpp:5:12:5:16 | align | type_attributes_ms.cpp:5:18:5:19 | 32 |
|
| type_attributes_ms.cpp:5:30:5:33 | Str1 | type_attributes_ms.cpp:5:12:5:16 | align | type_attributes_ms.cpp:5:18:5:19 | 32 |
|
||||||
| type_attributes_ms.cpp:6:55:6:62 | IUnknown | type_attributes_ms.cpp:6:2:6:2 | uuid | type_attributes_ms.cpp:6:2:6:2 | 00000000-0000-0000-c000-000000000046 |
|
| type_attributes_ms.cpp:6:55:6:62 | IUnknown | type_attributes_ms.cpp:6:2:6:2 | uuid | type_attributes_ms.cpp:6:2:6:2 | 00000000-0000-0000-c000-000000000046 |
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
| file://:0:0:0:0 | short __attribute((__may_alias__)) | type_attributes.c:25:30:25:42 | may_alias |
|
| file://:0:0:0:0 | short __attribute((__may_alias__)) | type_attributes.c:25:30:25:42 | may_alias |
|
||||||
|
| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.cpp:5:7:5:12 | visibility |
|
||||||
|
| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.h:3:7:3:12 | visibility |
|
||||||
|
| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.h:3:7:3:12 | visibility |
|
||||||
| type_attributes.c:5:36:5:51 | my_packed_struct | type_attributes.c:5:23:5:32 | packed |
|
| type_attributes.c:5:36:5:51 | my_packed_struct | type_attributes.c:5:23:5:32 | packed |
|
||||||
| type_attributes.c:10:54:10:54 | (unnamed class/struct/union) | type_attributes.c:10:30:10:50 | transparent_union |
|
| type_attributes.c:10:54:10:54 | (unnamed class/struct/union) | type_attributes.c:10:30:10:50 | transparent_union |
|
||||||
| type_attributes.c:16:54:16:54 | (unnamed class/struct/union) | type_attributes.c:16:30:16:50 | transparent_union |
|
| type_attributes.c:16:54:16:54 | (unnamed class/struct/union) | type_attributes.c:16:30:16:50 | transparent_union |
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#define HIDDEN __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#include "type_attributes2.h"
|
||||||
|
|
||||||
|
class HIDDEN a_class {
|
||||||
|
};
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
class HIDDEN a_class;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#define HIDDEN __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#include "type_attributes2.h"
|
||||||
@@ -6,6 +6,10 @@
|
|||||||
| ms_var_attributes.cpp:12:42:12:46 | field | ms_var_attributes.cpp:12:14:12:21 | property |
|
| ms_var_attributes.cpp:12:42:12:46 | field | ms_var_attributes.cpp:12:14:12:21 | property |
|
||||||
| ms_var_attributes.cpp:20:34:20:37 | pBuf | ms_var_attributes.cpp:20:12:20:12 | SAL_volatile |
|
| ms_var_attributes.cpp:20:34:20:37 | pBuf | ms_var_attributes.cpp:20:12:20:12 | SAL_volatile |
|
||||||
| ms_var_attributes.h:5:22:5:27 | myInt3 | ms_var_attributes.h:5:1:5:9 | dllexport |
|
| ms_var_attributes.h:5:22:5:27 | myInt3 | ms_var_attributes.h:5:1:5:9 | dllexport |
|
||||||
|
| var_attributes2.cpp:5:12:5:21 | a_variable | var_attributes2.cpp:5:5:5:10 | visibility |
|
||||||
|
| var_attributes2.cpp:5:12:5:21 | a_variable | var_attributes2.cpp:5:5:5:10 | visibility |
|
||||||
|
| var_attributes2.cpp:5:12:5:21 | a_variable | var_attributes2.h:3:12:3:17 | visibility |
|
||||||
|
| var_attributes2.cpp:5:12:5:21 | a_variable | var_attributes2.h:3:12:3:17 | visibility |
|
||||||
| var_attributes.c:1:12:1:19 | weak_var | var_attributes.c:1:36:1:39 | weak |
|
| var_attributes.c:1:12:1:19 | weak_var | var_attributes.c:1:36:1:39 | weak |
|
||||||
| var_attributes.c:2:12:2:22 | weakref_var | var_attributes.c:2:39:2:45 | weakref |
|
| var_attributes.c:2:12:2:22 | weakref_var | var_attributes.c:2:39:2:45 | weakref |
|
||||||
| var_attributes.c:3:12:3:19 | used_var | var_attributes.c:3:36:3:39 | used |
|
| var_attributes.c:3:12:3:19 | used_var | var_attributes.c:3:36:3:39 | used |
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#define HIDDEN __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#include "var_attributes2.h"
|
||||||
|
|
||||||
|
int HIDDEN a_variable;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
extern int HIDDEN a_variable;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#define HIDDEN __attribute__((visibility("hidden")))
|
||||||
|
|
||||||
|
#include "var_attributes2.h"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// semmle-extractor-options: --edg --clang
|
// semmle-extractor-options: --clang
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// semmle-extractor-options: --edg --clang --edg --c++11 --edg --nullptr
|
// semmle-extractor-options: --clang --edg --c++11 --edg --nullptr
|
||||||
|
|
||||||
static int has_nullptr_f = __has_feature(cxx_nullptr);
|
static int has_nullptr_f = __has_feature(cxx_nullptr);
|
||||||
static int has_nullptr_e = __has_extension(cxx_nullptr);
|
static int has_nullptr_e = __has_extension(cxx_nullptr);
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
semmle-extractor-options: --edg --clang
|
semmle-extractor-options: --clang
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// For the canonical behaviour, run: clang -E -w test.cpp
|
// For the canonical behaviour, run: clang -E -w test.cpp
|
||||||
#define __builtin_TRAP __builtin_trap
|
#define __builtin_TRAP __builtin_trap
|
||||||
#define BAR "bar.h"
|
#define BAR "bar.h"
|
||||||
// semmle-extractor-options: --edg --clang --expect_errors
|
// semmle-extractor-options: --clang --expect_errors
|
||||||
#if defined(__has_include)
|
#if defined(__has_include)
|
||||||
static int has_include = 1;
|
static int has_include = 1;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
semmle-extractor-options: --edg --clang --edg --ms_extensions
|
semmle-extractor-options: --clang --edg --ms_extensions
|
||||||
|
|||||||
@@ -45,3 +45,7 @@
|
|||||||
| test.cpp:122:9:122:9 | b |
|
| test.cpp:122:9:122:9 | b |
|
||||||
| test.cpp:125:13:125:20 | ! ... |
|
| test.cpp:125:13:125:20 | ! ... |
|
||||||
| test.cpp:125:14:125:17 | call to safe |
|
| test.cpp:125:14:125:17 | call to safe |
|
||||||
|
| test.cpp:131:6:131:21 | call to __builtin_expect |
|
||||||
|
| test.cpp:135:6:135:21 | call to __builtin_expect |
|
||||||
|
| test.cpp:141:6:141:21 | call to __builtin_expect |
|
||||||
|
| test.cpp:145:6:145:21 | call to __builtin_expect |
|
||||||
|
|||||||
@@ -164,10 +164,46 @@
|
|||||||
| 126 | call to test3_condition != 0 when ... && ... is true |
|
| 126 | call to test3_condition != 0 when ... && ... is true |
|
||||||
| 126 | call to test3_condition != 0 when call to test3_condition is true |
|
| 126 | call to test3_condition != 0 when call to test3_condition is true |
|
||||||
| 126 | call to test3_condition == 0 when call to test3_condition is false |
|
| 126 | call to test3_condition == 0 when call to test3_condition is false |
|
||||||
|
| 131 | ... + ... != a+0 when call to __builtin_expect is false |
|
||||||
|
| 131 | ... + ... == a+0 when call to __builtin_expect is true |
|
||||||
|
| 131 | a != ... + ...+0 when call to __builtin_expect is false |
|
||||||
|
| 131 | a != b+42 when call to __builtin_expect is false |
|
||||||
|
| 131 | a == ... + ...+0 when call to __builtin_expect is true |
|
||||||
|
| 131 | a == b+42 when call to __builtin_expect is true |
|
||||||
| 131 | b != 0 when b is true |
|
| 131 | b != 0 when b is true |
|
||||||
|
| 131 | b != a+-42 when call to __builtin_expect is false |
|
||||||
| 131 | b == 0 when b is false |
|
| 131 | b == 0 when b is false |
|
||||||
|
| 131 | b == a+-42 when call to __builtin_expect is true |
|
||||||
|
| 131 | call to __builtin_expect != 0 when call to __builtin_expect is true |
|
||||||
|
| 131 | call to __builtin_expect == 0 when call to __builtin_expect is false |
|
||||||
|
| 135 | ... + ... != a+0 when call to __builtin_expect is true |
|
||||||
|
| 135 | ... + ... == a+0 when call to __builtin_expect is false |
|
||||||
|
| 135 | a != ... + ...+0 when call to __builtin_expect is true |
|
||||||
|
| 135 | a != b+42 when call to __builtin_expect is true |
|
||||||
|
| 135 | a == ... + ...+0 when call to __builtin_expect is false |
|
||||||
|
| 135 | a == b+42 when call to __builtin_expect is false |
|
||||||
|
| 135 | b != a+-42 when call to __builtin_expect is true |
|
||||||
|
| 135 | b == a+-42 when call to __builtin_expect is false |
|
||||||
|
| 135 | call to __builtin_expect != 0 when call to __builtin_expect is true |
|
||||||
|
| 135 | call to __builtin_expect == 0 when call to __builtin_expect is false |
|
||||||
| 137 | 0 != 0 when 0 is true |
|
| 137 | 0 != 0 when 0 is true |
|
||||||
| 137 | 0 == 0 when 0 is false |
|
| 137 | 0 == 0 when 0 is false |
|
||||||
|
| 141 | 42 != a+0 when call to __builtin_expect is false |
|
||||||
|
| 141 | 42 == a+0 when call to __builtin_expect is true |
|
||||||
|
| 141 | a != 42 when call to __builtin_expect is false |
|
||||||
|
| 141 | a != 42+0 when call to __builtin_expect is false |
|
||||||
|
| 141 | a == 42 when call to __builtin_expect is true |
|
||||||
|
| 141 | a == 42+0 when call to __builtin_expect is true |
|
||||||
|
| 141 | call to __builtin_expect != 0 when call to __builtin_expect is true |
|
||||||
|
| 141 | call to __builtin_expect == 0 when call to __builtin_expect is false |
|
||||||
|
| 145 | 42 != a+0 when call to __builtin_expect is true |
|
||||||
|
| 145 | 42 == a+0 when call to __builtin_expect is false |
|
||||||
|
| 145 | a != 42 when call to __builtin_expect is true |
|
||||||
|
| 145 | a != 42+0 when call to __builtin_expect is true |
|
||||||
|
| 145 | a == 42 when call to __builtin_expect is false |
|
||||||
|
| 145 | a == 42+0 when call to __builtin_expect is false |
|
||||||
|
| 145 | call to __builtin_expect != 0 when call to __builtin_expect is true |
|
||||||
|
| 145 | call to __builtin_expect == 0 when call to __builtin_expect is false |
|
||||||
| 146 | ! ... != 0 when ! ... is true |
|
| 146 | ! ... != 0 when ! ... is true |
|
||||||
| 146 | ! ... == 0 when ! ... is false |
|
| 146 | ! ... == 0 when ! ... is false |
|
||||||
| 146 | x != 0 when ! ... is false |
|
| 146 | x != 0 when ! ... is false |
|
||||||
|
|||||||
@@ -104,3 +104,7 @@
|
|||||||
| test.cpp:122:9:122:9 | b | true | 125 | 125 |
|
| test.cpp:122:9:122:9 | b | true | 125 | 125 |
|
||||||
| test.cpp:125:13:125:20 | ! ... | true | 125 | 125 |
|
| test.cpp:125:13:125:20 | ! ... | true | 125 | 125 |
|
||||||
| test.cpp:125:14:125:17 | call to safe | false | 125 | 125 |
|
| test.cpp:125:14:125:17 | call to safe | false | 125 | 125 |
|
||||||
|
| test.cpp:131:6:131:21 | call to __builtin_expect | true | 131 | 132 |
|
||||||
|
| test.cpp:135:6:135:21 | call to __builtin_expect | true | 135 | 136 |
|
||||||
|
| test.cpp:141:6:141:21 | call to __builtin_expect | true | 141 | 142 |
|
||||||
|
| test.cpp:145:6:145:21 | call to __builtin_expect | true | 145 | 146 |
|
||||||
|
|||||||
@@ -159,6 +159,18 @@ binary
|
|||||||
| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:11:105:14 | 0.0 | != | test.cpp:105:6:105:6 | f | 0 | 105 | 106 |
|
| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:11:105:14 | 0.0 | != | test.cpp:105:6:105:6 | f | 0 | 105 | 106 |
|
||||||
| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:6 | i | != | test.cpp:111:11:111:14 | 0.0 | 0 | 111 | 112 |
|
| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:6 | i | != | test.cpp:111:11:111:14 | 0.0 | 0 | 111 | 112 |
|
||||||
| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:11:111:14 | 0.0 | != | test.cpp:111:6:111:6 | i | 0 | 111 | 112 |
|
| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:11:111:14 | 0.0 | != | test.cpp:111:6:111:6 | i | 0 | 111 | 112 |
|
||||||
|
| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:23 | a | == | test.cpp:131:28:131:28 | b | 42 | 131 | 132 |
|
||||||
|
| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:23 | a | == | test.cpp:131:28:131:33 | ... + ... | 0 | 131 | 132 |
|
||||||
|
| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:28:131:28 | b | == | test.cpp:131:23:131:23 | a | -42 | 131 | 132 |
|
||||||
|
| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:28:131:33 | ... + ... | == | test.cpp:131:23:131:23 | a | 0 | 131 | 132 |
|
||||||
|
| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:23 | a | != | test.cpp:135:28:135:28 | b | 42 | 135 | 136 |
|
||||||
|
| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:23 | a | != | test.cpp:135:28:135:33 | ... + ... | 0 | 135 | 136 |
|
||||||
|
| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:28:135:28 | b | != | test.cpp:135:23:135:23 | a | -42 | 135 | 136 |
|
||||||
|
| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:28:135:33 | ... + ... | != | test.cpp:135:23:135:23 | a | 0 | 135 | 136 |
|
||||||
|
| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | test.cpp:141:28:141:29 | 42 | 0 | 141 | 142 |
|
||||||
|
| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:28:141:29 | 42 | == | test.cpp:141:23:141:23 | a | 0 | 141 | 142 |
|
||||||
|
| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | test.cpp:145:28:145:29 | 42 | 0 | 145 | 146 |
|
||||||
|
| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:28:145:29 | 42 | != | test.cpp:145:23:145:23 | a | 0 | 145 | 146 |
|
||||||
unary
|
unary
|
||||||
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | 1 | 10 | 11 |
|
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | 1 | 10 | 11 |
|
||||||
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | 1 | 7 | 9 |
|
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | 1 | 7 | 9 |
|
||||||
@@ -270,3 +282,9 @@ unary
|
|||||||
| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | 125 | 125 |
|
| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | 125 | 125 |
|
||||||
| test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | != | 0 | 125 | 125 |
|
| test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | != | 0 | 125 | 125 |
|
||||||
| test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | == | 0 | 125 | 125 |
|
| test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | == | 0 | 125 | 125 |
|
||||||
|
| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:6:131:21 | call to __builtin_expect | != | 0 | 131 | 132 |
|
||||||
|
| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:6:135:21 | call to __builtin_expect | != | 0 | 135 | 136 |
|
||||||
|
| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:6:141:21 | call to __builtin_expect | != | 0 | 141 | 142 |
|
||||||
|
| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | 42 | 141 | 142 |
|
||||||
|
| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | != | 0 | 145 | 146 |
|
||||||
|
| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | 42 | 145 | 146 |
|
||||||
|
|||||||
@@ -125,4 +125,24 @@ void test(bool b)
|
|||||||
if (!safe(x)) return;
|
if (!safe(x)) return;
|
||||||
}
|
}
|
||||||
use(x);
|
use(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
void binary_test_builtin_expected(int a, int b) {
|
||||||
|
if(__builtin_expect(a == b + 42, 0)) {
|
||||||
|
use(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(__builtin_expect(a != b + 42, 0)) {
|
||||||
|
use(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void unary_test_builtin_expected(int a) {
|
||||||
|
if(__builtin_expect(a == 42, 0)) {
|
||||||
|
use(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(__builtin_expect(a != 42, 0)) {
|
||||||
|
use(a);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (additionalEdges.ql:31,6-14)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (additionalEdges.ql:31,6-14)
|
||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (additionalEdges.ql:31,31-39)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (additionalEdges.ql:31,31-39)
|
||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (additionalEdges.ql:32,7-15)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (additionalEdges.ql:32,7-15)
|
||||||
| tryExcept.c:7:7:7:7 | x | tryExcept.c:14:10:14:10 | x |
|
| tryExcept.c:7:7:7:7 | x | tryExcept.c:14:10:14:10 | x |
|
||||||
| tryExcept.c:7:13:7:14 | 0 | tryExcept.c:10:9:10:9 | y |
|
| tryExcept.c:7:13:7:14 | 0 | tryExcept.c:10:9:10:9 | y |
|
||||||
| tryExcept.c:10:9:10:9 | y | tryExcept.c:10:5:10:9 | ... = ... |
|
| tryExcept.c:10:9:10:9 | y | tryExcept.c:10:5:10:9 | ... = ... |
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (standardEdges.ql:4,6-14)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (standardEdges.ql:4,6-14)
|
||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (standardEdges.ql:4,31-39)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (standardEdges.ql:4,31-39)
|
||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (standardEdges.ql:5,7-15)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (standardEdges.ql:5,7-15)
|
||||||
| tryExcept.c:7:13:7:14 | 0 | tryExcept.c:10:9:10:9 | y |
|
| tryExcept.c:7:13:7:14 | 0 | tryExcept.c:10:9:10:9 | y |
|
||||||
| tryExcept.c:10:9:10:9 | y | tryExcept.c:10:5:10:9 | ... = ... |
|
| tryExcept.c:10:9:10:9 | y | tryExcept.c:10:5:10:9 | ... = ... |
|
||||||
|
|||||||
@@ -151,6 +151,9 @@ module IRTest {
|
|||||||
or
|
or
|
||||||
call.getTarget().getName() = "indirect_sink" and
|
call.getTarget().getName() = "indirect_sink" and
|
||||||
sink.asIndirectExpr() = e
|
sink.asIndirectExpr() = e
|
||||||
|
or
|
||||||
|
call.getTarget().getName() = "indirect_sink_const_ref" and
|
||||||
|
sink.asIndirectExpr() = e
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// semmle-extractor-options: --edg --clang
|
// semmle-extractor-options: --clang
|
||||||
|
|
||||||
int source();
|
int source();
|
||||||
void sink(int); void sink(const int *); void sink(int **); void indirect_sink(...);
|
void sink(int); void sink(const int *); void sink(int **); void indirect_sink(...);
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (has-parameter-flow-out.ql:5,18-61)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (has-parameter-flow-out.ql:5,18-61)
|
||||||
testFailures
|
testFailures
|
||||||
failures
|
failures
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (localFlow.ql:4,6-14)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (localFlow.ql:4,6-14)
|
||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (localFlow.ql:4,31-39)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (localFlow.ql:4,31-39)
|
||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (localFlow.ql:6,3-11)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (localFlow.ql:6,3-11)
|
||||||
| example.c:15:37:15:37 | b | example.c:15:37:15:37 | b |
|
| example.c:15:37:15:37 | b | example.c:15:37:15:37 | b |
|
||||||
| example.c:15:37:15:37 | b | example.c:19:6:19:6 | b |
|
| example.c:15:37:15:37 | b | example.c:19:6:19:6 | b |
|
||||||
| example.c:15:44:15:46 | pos | example.c:24:24:24:26 | pos |
|
| example.c:15:44:15:46 | pos | example.c:24:24:24:26 | pos |
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (test-number-of-outnodes.ql:5,18-61)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (test-number-of-outnodes.ql:5,18-61)
|
||||||
failures
|
failures
|
||||||
testFailures
|
testFailures
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (test-source-sink.ql:3,25-42)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (test-source-sink.ql:3,25-42)
|
||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (test-source-sink.ql:3,57-74)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (test-source-sink.ql:3,57-74)
|
||||||
astFlow
|
astFlow
|
||||||
| BarrierGuard.cpp:5:19:5:24 | source | BarrierGuard.cpp:9:10:9:15 | source |
|
| BarrierGuard.cpp:5:19:5:24 | source | BarrierGuard.cpp:9:10:9:15 | source |
|
||||||
| BarrierGuard.cpp:13:17:13:22 | source | BarrierGuard.cpp:15:10:15:15 | source |
|
| BarrierGuard.cpp:13:17:13:22 | source | BarrierGuard.cpp:15:10:15:15 | source |
|
||||||
@@ -313,6 +313,7 @@ irFlow
|
|||||||
| test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1027:19:1027:28 | *translated |
|
| test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1027:19:1027:28 | *translated |
|
||||||
| test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1031:19:1031:28 | *translated |
|
| test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1031:19:1031:28 | *translated |
|
||||||
| test.cpp:1045:14:1045:19 | call to source | test.cpp:1046:7:1046:10 | * ... |
|
| test.cpp:1045:14:1045:19 | call to source | test.cpp:1046:7:1046:10 | * ... |
|
||||||
|
| test.cpp:1081:27:1081:34 | call to source | test.cpp:1081:27:1081:34 | call to source |
|
||||||
| true_upon_entry.cpp:9:11:9:16 | call to source | true_upon_entry.cpp:13:8:13:8 | x |
|
| true_upon_entry.cpp:9:11:9:16 | call to source | true_upon_entry.cpp:13:8:13:8 | x |
|
||||||
| true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x |
|
| true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x |
|
||||||
| true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x |
|
| true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x |
|
||||||
|
|||||||
@@ -1073,3 +1073,10 @@ void single_object_in_both_cases(bool b, int x, int y) {
|
|||||||
*p = 0;
|
*p = 0;
|
||||||
sink(*p); // clean
|
sink(*p); // clean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void indirect_sink_const_ref(const T&);
|
||||||
|
|
||||||
|
void test_temp_with_conversion_from_materialization() {
|
||||||
|
indirect_sink_const_ref(source()); // $ ir MISSING: ast
|
||||||
|
}
|
||||||
@@ -1,5 +1,41 @@
|
|||||||
astTypeBugs
|
astTypeBugs
|
||||||
irTypeBugs
|
irTypeBugs
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary param] *0 in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary param] this in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] read: Argument[*0].Element in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] read: Argument[*0].Element[****] in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] read: Argument[*0].Element[***] in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] read: Argument[*0].Element[**] in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] read: Argument[*0].Element[*] in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] to write: Argument[this] in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] to write: Argument[this].Element in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] to write: Argument[this].Element[****] in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] to write: Argument[this].Element[***] in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] to write: Argument[this].Element[**] in iterator |
|
||||||
|
| ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | ../../../include/iterator.h:21:3:21:10 | [summary] to write: Argument[this].Element[*] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary param] *0 in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary param] this in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] read: Argument[*0].Element in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] read: Argument[*0].Element[****] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] read: Argument[*0].Element[***] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] read: Argument[*0].Element[**] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] read: Argument[*0].Element[*] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] to write: Argument[this] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] to write: Argument[this].Element in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] to write: Argument[this].Element[****] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] to write: Argument[this].Element[***] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] to write: Argument[this].Element[**] in iterator |
|
||||||
|
| ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | ../../../include/iterator.h:22:3:22:10 | [summary] to write: Argument[this].Element[*] in iterator |
|
||||||
|
| ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | [summary param] this in operator* |
|
||||||
|
| ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | [summary] read: Argument[this].Element in operator* |
|
||||||
|
| ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | [summary] read: Argument[this].Element[*] in operator* |
|
||||||
|
| ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | [summary] to write: ReturnValue[**] in operator* |
|
||||||
|
| ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | ../../../include/iterator.h:30:18:30:26 | [summary] to write: ReturnValue[*] in operator* |
|
||||||
|
| ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | [summary param] this in operator-> |
|
||||||
|
| ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | [summary] read: Argument[this].Element in operator-> |
|
||||||
|
| ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | [summary] read: Argument[this].Element[*] in operator-> |
|
||||||
|
| ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | [summary] to write: ReturnValue[**] in operator-> |
|
||||||
|
| ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | ../../../include/iterator.h:31:16:31:25 | [summary] to write: ReturnValue[*] in operator-> |
|
||||||
incorrectBaseType
|
incorrectBaseType
|
||||||
| clang.cpp:22:8:22:20 | *& ... | Expected 'Node.getType()' to be int, but it was int * |
|
| clang.cpp:22:8:22:20 | *& ... | Expected 'Node.getType()' to be int, but it was int * |
|
||||||
| clang.cpp:23:17:23:29 | *& ... | Expected 'Node.getType()' to be int, but it was int * |
|
| clang.cpp:23:17:23:29 | *& ... | Expected 'Node.getType()' to be int, but it was int * |
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
| Dubious member name "operator*" in summary model. |
|
||||||
|
| Dubious member name "operator->" in summary model. |
|
||||||
|
| Dubious member name "operator=" in summary model. |
|
||||||
|
| Dubious member name "operator[]" in summary model. |
|
||||||
|
| Dubious signature "(InputIterator,InputIterator,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(const deque &)" in summary model. |
|
||||||
|
| Dubious signature "(const deque &,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(const forward_list &)" in summary model. |
|
||||||
|
| Dubious signature "(const forward_list &,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(const list &)" in summary model. |
|
||||||
|
| Dubious signature "(const list &,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(const vector &)" in summary model. |
|
||||||
|
| Dubious signature "(const vector &,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(const_iterator,T &&)" in summary model. |
|
||||||
|
| Dubious signature "(const_iterator,const T &)" in summary model. |
|
||||||
|
| Dubious signature "(const_iterator,size_type,const T &)" in summary model. |
|
||||||
|
| Dubious signature "(deque &&)" in summary model. |
|
||||||
|
| Dubious signature "(deque &&,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(forward_list &&)" in summary model. |
|
||||||
|
| Dubious signature "(forward_list &&,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(list &&)" in summary model. |
|
||||||
|
| Dubious signature "(list &&,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(size_type,const T &)" in summary model. |
|
||||||
|
| Dubious signature "(size_type,const T &,const Allocator &)" in summary model. |
|
||||||
|
| Dubious signature "(vector &&)" in summary model. |
|
||||||
|
| Dubious signature "(vector &&,const Allocator &)" in summary model. |
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (partial-definition-diff.ql:7,8-51)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (partial-definition-diff.ql:7,8-51)
|
||||||
| A.cpp:25:13:25:13 | c | AST only |
|
| A.cpp:25:13:25:13 | c | AST only |
|
||||||
| A.cpp:27:28:27:28 | c | AST only |
|
| A.cpp:27:28:27:28 | c | AST only |
|
||||||
| A.cpp:28:23:28:26 | this | IR only |
|
| A.cpp:28:23:28:26 | this | IR only |
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
WARNING: Module DataFlow has been deprecated and may be removed in future (partial-definition.ql:6,8-51)
|
WARNING: module 'DataFlow' has been deprecated and may be removed in future (partial-definition.ql:6,8-51)
|
||||||
| A.cpp:25:7:25:10 | this |
|
| A.cpp:25:7:25:10 | this |
|
||||||
| A.cpp:25:13:25:13 | c |
|
| A.cpp:25:13:25:13 | c |
|
||||||
| A.cpp:27:22:27:25 | this |
|
| A.cpp:27:22:27:25 | this |
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user