mirror of
https://github.com/github/codeql.git
synced 2026-07-07 04:25:30 +02:00
Compare commits
179 Commits
codeql-cli
...
dbartol/ru
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd878a1f33 | ||
|
|
0f038355ff | ||
|
|
1cba147087 | ||
|
|
b5982643c7 | ||
|
|
8c3e5b6f56 | ||
|
|
43771d8f19 | ||
|
|
a7fb73a2b2 | ||
|
|
0795c244e9 | ||
|
|
bff243367c | ||
|
|
4bd43b4e70 | ||
|
|
46f9448043 | ||
|
|
166f8916cc | ||
|
|
b0f0a24b6a | ||
|
|
f78c6e0924 | ||
|
|
303b11ec36 | ||
|
|
a35dc7ea69 | ||
|
|
0a292fbaf5 | ||
|
|
7f5772b8a4 | ||
|
|
3f6a2850cc | ||
|
|
2c9af9ea30 | ||
|
|
039b2ecf9b | ||
|
|
592b46bea8 | ||
|
|
baec4adbb1 | ||
|
|
204afab427 | ||
|
|
1822dc4860 | ||
|
|
7a84132a6b | ||
|
|
23acc31885 | ||
|
|
928c66aea3 | ||
|
|
12048aefad | ||
|
|
0ce409efd7 | ||
|
|
6ded99ccb1 | ||
|
|
70a1a6454d | ||
|
|
4f79199498 | ||
|
|
cd95cc8f94 | ||
|
|
14cfac506e | ||
|
|
b263132ab2 | ||
|
|
347edc4ff6 | ||
|
|
74bc28534f | ||
|
|
0a57587189 | ||
|
|
17127356e8 | ||
|
|
09571135e6 | ||
|
|
653d1227e3 | ||
|
|
60ae374a88 | ||
|
|
91b6a6573c | ||
|
|
1812be7fa8 | ||
|
|
a7bb95249b | ||
|
|
ac05bfcf4e | ||
|
|
6325dd2ce1 | ||
|
|
a7fbfb2c2d | ||
|
|
fd5a3dad90 | ||
|
|
138b000891 | ||
|
|
db98880163 | ||
|
|
ca05697365 | ||
|
|
f08d10065c | ||
|
|
7cba263bc4 | ||
|
|
033f35fe42 | ||
|
|
f8458f6025 | ||
|
|
c48fcf1fb2 | ||
|
|
554ea29547 | ||
|
|
3363235b1c | ||
|
|
af15ebad7e | ||
|
|
0f8f5d2793 | ||
|
|
5cc34a16d1 | ||
|
|
53b0a3464d | ||
|
|
3bf2416e56 | ||
|
|
21e7a0e828 | ||
|
|
8e4939ee5d | ||
|
|
a4afff2c3c | ||
|
|
e7f99cdfb7 | ||
|
|
4ed0f7fc40 | ||
|
|
cc54e75235 | ||
|
|
67070e0f2a | ||
|
|
22a4cd3698 | ||
|
|
89a68fed7c | ||
|
|
4966ed1280 | ||
|
|
b916a7b5a7 | ||
|
|
05ffffe651 | ||
|
|
bc68e4456a | ||
|
|
7a589c4081 | ||
|
|
6ac82d6af2 | ||
|
|
9e5a814f72 | ||
|
|
868caf948c | ||
|
|
0dccbb9349 | ||
|
|
033cd1778e | ||
|
|
b5935fcd2d | ||
|
|
c7a9889606 | ||
|
|
bca5f4b74c | ||
|
|
d2c7decd02 | ||
|
|
96bf81ad6c | ||
|
|
819bd3b56f | ||
|
|
ba8489624d | ||
|
|
32fe74dd01 | ||
|
|
ea5248912d | ||
|
|
144053baea | ||
|
|
068acfd36a | ||
|
|
e9ac32fbd1 | ||
|
|
9089c9ca16 | ||
|
|
6b7f2a725e | ||
|
|
b249ee5a01 | ||
|
|
e7b0329d5d | ||
|
|
55c6bea08b | ||
|
|
4e5d2e27b1 | ||
|
|
c086945a9e | ||
|
|
6a862f2f80 | ||
|
|
ca1e9d7c75 | ||
|
|
fb20f6ca63 | ||
|
|
b390fac105 | ||
|
|
0258ce70a4 | ||
|
|
35961e454b | ||
|
|
8b174ea07c | ||
|
|
b18230af23 | ||
|
|
1761721ef6 | ||
|
|
aa024010b1 | ||
|
|
b6f412bbad | ||
|
|
06f6bac169 | ||
|
|
ede801ed88 | ||
|
|
148b78a5f8 | ||
|
|
91f9fb24d9 | ||
|
|
8652f611b7 | ||
|
|
d28e03cda5 | ||
|
|
c7be77c1af | ||
|
|
f38008e73d | ||
|
|
20d1ae1396 | ||
|
|
796a81a0ba | ||
|
|
4b7b2a2580 | ||
|
|
651052ba7a | ||
|
|
96797b4570 | ||
|
|
b4811906ea | ||
|
|
ce2877da5d | ||
|
|
eea85d8f82 | ||
|
|
b3d8c6b2e8 | ||
|
|
60cf1eccae | ||
|
|
0f06ddcff0 | ||
|
|
128c02b488 | ||
|
|
3e65c8de36 | ||
|
|
e9fdc8a34c | ||
|
|
80ad349a48 | ||
|
|
8093d57781 | ||
|
|
27852ddd05 | ||
|
|
0f5b70a802 | ||
|
|
2d7256862a | ||
|
|
3812ee463d | ||
|
|
a2d66ee155 | ||
|
|
e67f4be699 | ||
|
|
d7eaf9012f | ||
|
|
dd0012edcb | ||
|
|
03c6529961 | ||
|
|
7a9d341cb7 | ||
|
|
d935e9fb0f | ||
|
|
fdc305298d | ||
|
|
d0eab598b1 | ||
|
|
5c2df36786 | ||
|
|
9d178ab8d6 | ||
|
|
f93aac07c2 | ||
|
|
e1e980c2e8 | ||
|
|
821eb4f3e6 | ||
|
|
c77bf2b4eb | ||
|
|
c5ebc19a28 | ||
|
|
1b31c90d26 | ||
|
|
8f6ae6274d | ||
|
|
37212cc43f | ||
|
|
978a816f11 | ||
|
|
06ba814929 | ||
|
|
31dbadcbeb | ||
|
|
c9fab0b071 | ||
|
|
10d8aa454b | ||
|
|
c02430607a | ||
|
|
218bc8069b | ||
|
|
dcbcf7e2bd | ||
|
|
e6794a9af1 | ||
|
|
2019ddfa7f | ||
|
|
5c8ef28d12 | ||
|
|
bcb08bbc7b | ||
|
|
29a90235e8 | ||
|
|
d2ed92d6d0 | ||
|
|
d2b0d7a743 | ||
|
|
89167da177 | ||
|
|
065f3d1d7a | ||
|
|
cd5509a0f9 |
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
category: majorAnalysis
|
|
||||||
---
|
|
||||||
* Added support for TypeScript 5.7.
|
|
||||||
256
Cargo.lock
generated
256
Cargo.lock
generated
@@ -92,9 +92,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.94"
|
version = "1.0.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7"
|
checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "argfile"
|
name = "argfile"
|
||||||
@@ -116,11 +116,14 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
|
|||||||
name = "ast-generator"
|
name = "ast-generator"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
"either",
|
"either",
|
||||||
"itertools 0.12.1",
|
"itertools 0.14.0",
|
||||||
|
"mustache",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"ra_ap_stdx",
|
"ra_ap_stdx",
|
||||||
|
"serde",
|
||||||
"ungrammar",
|
"ungrammar",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -168,9 +171,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bstr"
|
name = "bstr"
|
||||||
version = "1.11.1"
|
version = "1.11.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8"
|
checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -184,9 +187,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytemuck"
|
name = "bytemuck"
|
||||||
version = "1.20.0"
|
version = "1.21.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a"
|
checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
@@ -228,9 +231,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.2.5"
|
version = "1.2.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e"
|
checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"shlex",
|
"shlex",
|
||||||
]
|
]
|
||||||
@@ -315,9 +318,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.23"
|
version = "4.5.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
|
checksum = "9560b07a799281c7e0958b9296854d6fafd4c5f31444a7e5bb1ad6dde5ccf1bd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
@@ -325,9 +328,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.5.23"
|
version = "4.5.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
|
checksum = "874e0dd3eb68bf99058751ac9712f622e61e6f393a94f7128fa26e3f02f5c7cd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
@@ -337,9 +340,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_derive"
|
name = "clap_derive"
|
||||||
version = "4.5.18"
|
version = "4.5.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
|
checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck 0.5.0",
|
"heck 0.5.0",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -411,8 +414,8 @@ dependencies = [
|
|||||||
"dunce",
|
"dunce",
|
||||||
"figment",
|
"figment",
|
||||||
"glob",
|
"glob",
|
||||||
"itertools 0.13.0",
|
"itertools 0.14.0",
|
||||||
"log",
|
"log 0.4.22",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"ra_ap_base_db",
|
"ra_ap_base_db",
|
||||||
"ra_ap_cfg",
|
"ra_ap_cfg",
|
||||||
@@ -585,7 +588,7 @@ version = "0.14.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5"
|
checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log 0.4.22",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -743,9 +746,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glob"
|
name = "glob"
|
||||||
version = "0.3.1"
|
version = "0.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "globset"
|
name = "globset"
|
||||||
@@ -755,7 +758,7 @@ checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"bstr",
|
"bstr",
|
||||||
"log",
|
"log 0.4.22",
|
||||||
"regex-automata 0.4.9",
|
"regex-automata 0.4.9",
|
||||||
"regex-syntax 0.8.5",
|
"regex-syntax 0.8.5",
|
||||||
]
|
]
|
||||||
@@ -922,9 +925,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.13.0"
|
version = "0.14.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
|
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
@@ -1020,6 +1023,15 @@ dependencies = [
|
|||||||
"scopeguard",
|
"scopeguard",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log"
|
||||||
|
version = "0.3.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
|
||||||
|
dependencies = [
|
||||||
|
"log 0.4.22",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.22"
|
version = "0.4.22"
|
||||||
@@ -1072,7 +1084,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
|
checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log 0.4.22",
|
||||||
"wasi",
|
"wasi",
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
@@ -1086,6 +1098,16 @@ dependencies = [
|
|||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mustache"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "51956ef1c5d20a1384524d91e616fb44dfc7d8f249bf696d49c97dd3289ecab5"
|
||||||
|
dependencies = [
|
||||||
|
"log 0.3.9",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nohash-hasher"
|
name = "nohash-hasher"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@@ -1105,7 +1127,7 @@ dependencies = [
|
|||||||
"inotify",
|
"inotify",
|
||||||
"kqueue",
|
"kqueue",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log 0.4.22",
|
||||||
"mio",
|
"mio",
|
||||||
"walkdir",
|
"walkdir",
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
@@ -1250,9 +1272,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-lite"
|
name = "pin-project-lite"
|
||||||
version = "0.2.15"
|
version = "0.2.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
|
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "powerfmt"
|
name = "powerfmt"
|
||||||
@@ -1293,18 +1315,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.37"
|
version = "1.0.38"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
|
checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra-ap-rustc_abi"
|
name = "ra-ap-rustc_abi"
|
||||||
version = "0.80.0"
|
version = "0.87.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "613760a3071b25a67a8d7bc97b37c7fd4722562e9479137b83ae9cf8f8c1601a"
|
checksum = "28b782af0a7a8df16ddf43cd70da9f17bc3b1ce712c9e4992b6edb16f5f53632"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.6.0",
|
"bitflags 2.6.0",
|
||||||
"ra-ap-rustc_index",
|
"ra-ap-rustc_index",
|
||||||
@@ -1313,20 +1335,19 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra-ap-rustc_index"
|
name = "ra-ap-rustc_index"
|
||||||
version = "0.80.0"
|
version = "0.87.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b2bc6b4ecede8ff28295041e22c2e66853f8e0125990c05135bad3c30bad12c"
|
checksum = "ce5742f134960482f543b35ecebec3cacc6d79a9a685713518b4d8d70c5f9aa8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
|
||||||
"ra-ap-rustc_index_macros",
|
"ra-ap-rustc_index_macros",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra-ap-rustc_index_macros"
|
name = "ra-ap-rustc_index_macros"
|
||||||
version = "0.80.0"
|
version = "0.87.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2374a39fb2d92d0509178c2b442eadca3cc10e403ef9729a040c1855b08ff261"
|
checksum = "d7ea011fcf68309a8835ad01d91c032cb18444617b00e2cab21d45b208164441"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -1335,9 +1356,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra-ap-rustc_lexer"
|
name = "ra-ap-rustc_lexer"
|
||||||
version = "0.80.0"
|
version = "0.87.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5a2cf8e48b69af3ecc29ed3449892e8a999111d2f75212a78aa242e117cf1711"
|
checksum = "eb76f0a4d4c20859e41f0a23bff0f37ab9ca9171c214a6c7dd72ea69434865dc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-properties",
|
"unicode-properties",
|
||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
@@ -1345,9 +1366,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra-ap-rustc_parse_format"
|
name = "ra-ap-rustc_parse_format"
|
||||||
version = "0.80.0"
|
version = "0.87.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8d6f59a22b559263c5c42747ae362cf5d4fb272293fa119a4623f8ec288f9656"
|
checksum = "06080bd35078305421a62da77f3c128482d8d44441b6da8ce9d146d1cd9cdb5b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ra-ap-rustc_index",
|
"ra-ap-rustc_index",
|
||||||
"ra-ap-rustc_lexer",
|
"ra-ap-rustc_lexer",
|
||||||
@@ -1355,9 +1376,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra-ap-rustc_pattern_analysis"
|
name = "ra-ap-rustc_pattern_analysis"
|
||||||
version = "0.80.0"
|
version = "0.87.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a7d0575b54ffe09bc5d2f158454bc05f0c30c01d9992310965f854be50ae22b8"
|
checksum = "68a3154fe4c20c177d7b3c678a2d3a97aba0cca156ddef88959915041889daf0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ra-ap-rustc_index",
|
"ra-ap-rustc_index",
|
||||||
"rustc-hash 2.1.0",
|
"rustc-hash 2.1.0",
|
||||||
@@ -1368,9 +1389,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_base_db"
|
name = "ra_ap_base_db"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "321b770750ff90b03af539ac6d47ca46208f6f747be97c0a4aaca3a428447c8f"
|
checksum = "55bd06c212246716572baf2babd2f4e8b2bbfedccdb2deb5107dc67f0cd9f727"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"la-arena",
|
"la-arena",
|
||||||
"lz4_flex",
|
"lz4_flex",
|
||||||
@@ -1389,9 +1410,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_cfg"
|
name = "ra_ap_cfg"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5023f50ebcf3656d85b96565dac56d50cc3e3d959c41592f457d2230d7be706a"
|
checksum = "4b507e0a9d182ac490400992264006b057d24f26164fb015a4927bedf4381d9f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ra_ap_intern",
|
"ra_ap_intern",
|
||||||
"ra_ap_tt",
|
"ra_ap_tt",
|
||||||
@@ -1400,10 +1421,16 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_hir"
|
name = "ra_ap_edition"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d07a9a085cf581d5f503aa467d32bbd1e5e7f94a3e86f881ca9c19b379570c62"
|
checksum = "287c134d67e3bfb606211b039acc711c3dfd74b61dc570beb18556901d2a4cde"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ra_ap_hir"
|
||||||
|
version = "0.0.257"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cf94ce7ef4564b34584ddecc20c948c746370256c1dd96babe1dff06f9992821"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"either",
|
"either",
|
||||||
@@ -1426,9 +1453,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_hir_def"
|
name = "ra_ap_hir_def"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "825c47fec7aab22c38ad9eba1d76102a95a6eb089e85b4e58308089d056c3cdc"
|
checksum = "95b60cb43d1dd97c6288436277174f09440a81e56c42c9c00b3747669ec18933"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"bitflags 2.6.0",
|
"bitflags 2.6.0",
|
||||||
@@ -1463,9 +1490,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_hir_expand"
|
name = "ra_ap_hir_expand"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1084b708f90de31888deb6e7f9cda5ebb8e6a59484143a3df0a4007dcf496b17"
|
checksum = "0e2884baf95b2ab8b7f6d88e0b3d3dcf9bc9c9fede8b6353cca1f93ec0db02df"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cov-mark",
|
"cov-mark",
|
||||||
"either",
|
"either",
|
||||||
@@ -1491,9 +1518,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_hir_ty"
|
name = "ra_ap_hir_ty"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "400a42e442b6d8f64adea48a8c9e39f76a1b9ed9964fd40222bd2d7cfe0a5a79"
|
checksum = "562c8a0bf46e3ace2493b8c42b6cfb506a6b992e2376e3f1b18b0252bf8b226b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"bitflags 2.6.0",
|
"bitflags 2.6.0",
|
||||||
@@ -1531,9 +1558,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_ide_db"
|
name = "ra_ap_ide_db"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d4ced45b107a8f4c1a4cee68b270d08832327b34ad0bf7794879342ac280bc8b"
|
checksum = "d16df71464447314e043790d407246af3d692815cd826bbfab9318ba50b0543a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"bitflags 2.6.0",
|
"bitflags 2.6.0",
|
||||||
@@ -1562,9 +1589,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_intern"
|
name = "ra_ap_intern"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e5432d6cf7382c06dab31b6c1772446c8576dd19fcbc007bc8a6fd8bca3d424d"
|
checksum = "29dd636c9c7c0b3ac0736a8e6e31202cae7b0b378ac1a8d73dd2c1f71c5931a4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dashmap",
|
"dashmap",
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
@@ -1575,15 +1602,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_limit"
|
name = "ra_ap_limit"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "822501c9f88830865ebedf944130dbe0603fa8d30a5da90f3224c1dcca2660de"
|
checksum = "4d1d98e79549c0a75f35d534042cbb3358a498985726bd5ae8f8f420e323a6ea"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_load-cargo"
|
name = "ra_ap_load-cargo"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2d5b002bcda197a4e9442c827dc86305d8fc1820fbbcb9814ff9bbc2c50f4e9c"
|
checksum = "7d448f55f96ac9c5ecfdea9261bc122f9b586f4e43b8fb53e62a54a11090d479"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
@@ -1603,9 +1630,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_mbe"
|
name = "ra_ap_mbe"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b4fce40b490b6bbca3d033f4cbf32ef07069423aa3edc1e00ec26ddabf503866"
|
checksum = "5ff107e50b96ceacd2046e9c1ffae526721f14a6e5c6671dff2be8ad6252fb23"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"cov-mark",
|
"cov-mark",
|
||||||
@@ -1624,34 +1651,33 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_parser"
|
name = "ra_ap_parser"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "573c14046174e3ef03a9d73841dbc52fd1d6224fffd1a0713aef95b45e024f75"
|
checksum = "af7c6b15845145bc4f1351c4e6f3a06c3c390dfc0a8fd1e40ee3f05b6f73ba77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"drop_bomb",
|
"drop_bomb",
|
||||||
"ra-ap-rustc_lexer",
|
"ra-ap-rustc_lexer",
|
||||||
|
"ra_ap_edition",
|
||||||
"ra_ap_limit",
|
"ra_ap_limit",
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_paths"
|
name = "ra_ap_paths"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "57aa6e3d7c45806434cdee09aa74b561723552732e8b089213fe821ae84404ec"
|
checksum = "01e41f198abdce6161d071fb88fb906189f9a6ee55dd7cfa1ba7bf5da41b2cd2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"camino",
|
"camino",
|
||||||
"serde",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_proc_macro_api"
|
name = "ra_ap_proc_macro_api"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "79d9595e05b422f3258c51f9a529129c9a59f99037deac652ff2cdd0c97e0bda"
|
checksum = "c719165f2e0e42706644e223f3b80dbab41061c4f60132d4a6a282bb67df6ef2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.7.0",
|
"indexmap 2.7.0",
|
||||||
"ra_ap_base_db",
|
|
||||||
"ra_ap_intern",
|
"ra_ap_intern",
|
||||||
"ra_ap_paths",
|
"ra_ap_paths",
|
||||||
"ra_ap_span",
|
"ra_ap_span",
|
||||||
@@ -1659,15 +1685,16 @@ dependencies = [
|
|||||||
"ra_ap_tt",
|
"ra_ap_tt",
|
||||||
"rustc-hash 2.1.0",
|
"rustc-hash 2.1.0",
|
||||||
"serde",
|
"serde",
|
||||||
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_profile"
|
name = "ra_ap_profile"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "459551d7e5a6dda9204c3741215c1f6a97cf6f4553e3c29294f7f8ac0ec91f57"
|
checksum = "43cf9a02881c4ce8107d2eb7454a4d386438fc99ee5bba021ff829b76cf29807"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -1677,9 +1704,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_project_model"
|
name = "ra_ap_project_model"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "171aacd6d1642f9d821f27fc318a503cfe10c5c6294193c401e991266e38a583"
|
checksum = "9238f0e90f2f9e7ab6a8c27916326668ab9d0971a1131b3d2ce51d806077af6a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"cargo_metadata",
|
"cargo_metadata",
|
||||||
@@ -1695,6 +1722,7 @@ dependencies = [
|
|||||||
"rustc-hash 2.1.0",
|
"rustc-hash 2.1.0",
|
||||||
"semver",
|
"semver",
|
||||||
"serde",
|
"serde",
|
||||||
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"tracing",
|
"tracing",
|
||||||
"triomphe",
|
"triomphe",
|
||||||
@@ -1702,9 +1730,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_salsa"
|
name = "ra_ap_salsa"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "504314128b0998f54d8e253a328a53e2a697f579f8d1f194b52f77cd8a540e36"
|
checksum = "288a0cd35aca45106f613e92a52c7fe63109c8ad2adfddd9181b55a8ced5fba4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.7.0",
|
"indexmap 2.7.0",
|
||||||
"itertools 0.12.1",
|
"itertools 0.12.1",
|
||||||
@@ -1720,9 +1748,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_salsa-macros"
|
name = "ra_ap_salsa-macros"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d957f6ec9a6f11cf9c8ce0f27711f4f9813bdd690b3efa6a280cb06a75b5a0fc"
|
checksum = "a417dc1192f6e1739560dac84f4d8ed18e4e0228144f13eba66191d7be494528"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck 0.4.1",
|
"heck 0.4.1",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -1732,9 +1760,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_span"
|
name = "ra_ap_span"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5c82fd3ff10c25958db0c254f8f4378cb75069017b675f4fe4c5e7d5f2827e71"
|
checksum = "10c82d730d56e5c0fadb2029f4347ef67b2453586a94cee40a151178ba77d1b4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hashbrown 0.14.5",
|
"hashbrown 0.14.5",
|
||||||
"la-arena",
|
"la-arena",
|
||||||
@@ -1748,9 +1776,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_stdx"
|
name = "ra_ap_stdx"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0be113ed187f4bf5403ebd8256d3d4aead8d265f670d534c646edea68516ef86"
|
checksum = "0b39817ff288eb2d922878e8b517a4569246606dab4313665e2fa9470ae3602a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"always-assert",
|
"always-assert",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
@@ -1763,9 +1791,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_syntax"
|
name = "ra_ap_syntax"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d5af8d681a9fd408be1b17f3b150eb98907fb72b9b44000ada9c3e9b6c059188"
|
checksum = "135493df963d932d4e4a9d9058db990384eb0a2fa694a06ecd1b161b0502c32e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cov-mark",
|
"cov-mark",
|
||||||
"either",
|
"either",
|
||||||
@@ -1783,9 +1811,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_syntax-bridge"
|
name = "ra_ap_syntax-bridge"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8f957885289e9789dffcd81ebfa4c2d49be3fad41f7718ffeacb3599f6d88678"
|
checksum = "a95c0fd654ff10425387c24c9b28004fda5794db212990b2a997938429e0c499"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ra_ap_intern",
|
"ra_ap_intern",
|
||||||
"ra_ap_parser",
|
"ra_ap_parser",
|
||||||
@@ -1799,9 +1827,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_toolchain"
|
name = "ra_ap_toolchain"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e067bd4107ec52a241b68398539632df0a850013907070002d4d403c3691e51c"
|
checksum = "1b5e4c88d75ba247f15dfa28a1291e3e75c887bc2b6d00f1fa0cc17789111840"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"camino",
|
"camino",
|
||||||
"home",
|
"home",
|
||||||
@@ -1809,9 +1837,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_tt"
|
name = "ra_ap_tt"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4c38deb50d7a26663c28deb01e5611b3b92b5a87298940e0638589f03c3faf62"
|
checksum = "f04de8deab5777101652f9c79275785589fe5c7375d0f18207edb040ffaead9b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrayvec",
|
"arrayvec",
|
||||||
"ra-ap-rustc_lexer",
|
"ra-ap-rustc_lexer",
|
||||||
@@ -1822,9 +1850,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_vfs"
|
name = "ra_ap_vfs"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "168a9378dd3f185ae94dda9c35e4d468a8ff105c8f4bb57e17f6e2312d84d1a8"
|
checksum = "78c33cc88cb19b3b6d8af79d07a6989871025ef092af61f8d261a5e63117390e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"fst",
|
"fst",
|
||||||
@@ -1838,9 +1866,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_ap_vfs-notify"
|
name = "ra_ap_vfs-notify"
|
||||||
version = "0.0.248"
|
version = "0.0.257"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1a5e13d88bf8bbd8dd02c96dd8d89e6cebc2757a0edf13b3b85007024fcf216c"
|
checksum = "f690622dc77b2f6cae03ad3a019fca808802dae0915977d186928d9a202c4761"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"notify",
|
"notify",
|
||||||
@@ -2036,18 +2064,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.216"
|
version = "1.0.217"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e"
|
checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.216"
|
version = "1.0.217"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e"
|
checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2056,9 +2084,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.133"
|
version = "1.0.135"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
|
checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"memchr",
|
"memchr",
|
||||||
@@ -2068,9 +2096,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_with"
|
name = "serde_with"
|
||||||
version = "3.11.0"
|
version = "3.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817"
|
checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"chrono",
|
"chrono",
|
||||||
@@ -2086,9 +2114,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_with_macros"
|
name = "serde_with_macros"
|
||||||
version = "3.11.0"
|
version = "3.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d"
|
checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"darling",
|
"darling",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -2160,7 +2188,7 @@ checksum = "61c910772f992ab17d32d6760e167d2353f4130ed50e796752689556af07dc6b"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"is-terminal",
|
"is-terminal",
|
||||||
"log",
|
"log 0.4.22",
|
||||||
"termcolor",
|
"termcolor",
|
||||||
"thread_local",
|
"thread_local",
|
||||||
]
|
]
|
||||||
@@ -2179,9 +2207,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.90"
|
version = "2.0.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
|
checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2313,7 +2341,7 @@ version = "0.2.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
|
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log 0.4.22",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"tracing-core",
|
"tracing-core",
|
||||||
]
|
]
|
||||||
@@ -2338,9 +2366,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tree-sitter"
|
name = "tree-sitter"
|
||||||
version = "0.24.5"
|
version = "0.24.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8ac95b18f0f727aaaa012bd5179a1916706ee3ed071920fdbda738750b0c0bf5"
|
checksum = "5f2434c86ba59ed15af56039cc5bf1acf8ba76ce301e32ef08827388ef285ec5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"regex",
|
"regex",
|
||||||
@@ -2502,7 +2530,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
|
checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"log",
|
"log 0.4.22",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn",
|
"syn",
|
||||||
|
|||||||
76
MODULE.bazel
76
MODULE.bazel
@@ -65,26 +65,92 @@ rust_host_tools.host_tools(
|
|||||||
# deps for python extractor
|
# deps for python extractor
|
||||||
# keep in sync by running `misc/bazel/3rdparty/update_cargo_deps.sh`
|
# keep in sync by running `misc/bazel/3rdparty/update_cargo_deps.sh`
|
||||||
py_deps = use_extension("//misc/bazel/3rdparty:py_deps_extension.bzl", "p")
|
py_deps = use_extension("//misc/bazel/3rdparty:py_deps_extension.bzl", "p")
|
||||||
use_repo(py_deps, "vendor__anyhow-1.0.44", "vendor__cc-1.0.70", "vendor__clap-2.33.3", "vendor__regex-1.5.5", "vendor__smallvec-1.6.1", "vendor__string-interner-0.12.2", "vendor__thiserror-1.0.29", "vendor__tree-sitter-0.20.4", "vendor__tree-sitter-graph-0.7.0")
|
use_repo(
|
||||||
|
py_deps,
|
||||||
|
"vendor__anyhow-1.0.44",
|
||||||
|
"vendor__cc-1.0.70",
|
||||||
|
"vendor__clap-2.33.3",
|
||||||
|
"vendor__regex-1.5.5",
|
||||||
|
"vendor__smallvec-1.6.1",
|
||||||
|
"vendor__string-interner-0.12.2",
|
||||||
|
"vendor__thiserror-1.0.29",
|
||||||
|
"vendor__tree-sitter-0.20.4",
|
||||||
|
"vendor__tree-sitter-graph-0.7.0",
|
||||||
|
)
|
||||||
|
|
||||||
# deps for ruby+rust
|
# deps for ruby+rust
|
||||||
# keep in sync by running `misc/bazel/3rdparty/update_cargo_deps.sh`
|
# keep in sync by running `misc/bazel/3rdparty/update_cargo_deps.sh`
|
||||||
tree_sitter_extractors_deps = use_extension("//misc/bazel/3rdparty:tree_sitter_extractors_extension.bzl", "r")
|
tree_sitter_extractors_deps = use_extension("//misc/bazel/3rdparty:tree_sitter_extractors_extension.bzl", "r")
|
||||||
use_repo(tree_sitter_extractors_deps, "vendor__anyhow-1.0.94", "vendor__argfile-0.2.1", "vendor__chrono-0.4.39", "vendor__clap-4.5.23", "vendor__dunce-1.0.5", "vendor__either-1.13.0", "vendor__encoding-0.2.33", "vendor__figment-0.10.19", "vendor__flate2-1.0.35", "vendor__glob-0.3.1", "vendor__globset-0.4.15", "vendor__itertools-0.12.1", "vendor__itertools-0.13.0", "vendor__lazy_static-1.5.0", "vendor__log-0.4.22", "vendor__num-traits-0.2.19", "vendor__num_cpus-1.16.0", "vendor__proc-macro2-1.0.92", "vendor__quote-1.0.37", "vendor__ra_ap_base_db-0.0.248", "vendor__ra_ap_cfg-0.0.248", "vendor__ra_ap_hir-0.0.248", "vendor__ra_ap_hir_def-0.0.248", "vendor__ra_ap_hir_expand-0.0.248", "vendor__ra_ap_ide_db-0.0.248", "vendor__ra_ap_intern-0.0.248", "vendor__ra_ap_load-cargo-0.0.248", "vendor__ra_ap_parser-0.0.248", "vendor__ra_ap_paths-0.0.248", "vendor__ra_ap_project_model-0.0.248", "vendor__ra_ap_span-0.0.248", "vendor__ra_ap_stdx-0.0.248", "vendor__ra_ap_syntax-0.0.248", "vendor__ra_ap_vfs-0.0.248", "vendor__rand-0.8.5", "vendor__rayon-1.10.0", "vendor__regex-1.11.1", "vendor__serde-1.0.216", "vendor__serde_json-1.0.133", "vendor__serde_with-3.11.0", "vendor__stderrlog-0.6.0", "vendor__syn-2.0.90", "vendor__tracing-0.1.41", "vendor__tracing-subscriber-0.3.19", "vendor__tree-sitter-0.24.5", "vendor__tree-sitter-embedded-template-0.23.2", "vendor__tree-sitter-json-0.24.8", "vendor__tree-sitter-ql-0.23.1", "vendor__tree-sitter-ruby-0.23.1", "vendor__triomphe-0.1.14", "vendor__ungrammar-1.16.1")
|
use_repo(
|
||||||
|
tree_sitter_extractors_deps,
|
||||||
|
"vendor__anyhow-1.0.95",
|
||||||
|
"vendor__argfile-0.2.1",
|
||||||
|
"vendor__chrono-0.4.39",
|
||||||
|
"vendor__clap-4.5.24",
|
||||||
|
"vendor__dunce-1.0.5",
|
||||||
|
"vendor__either-1.13.0",
|
||||||
|
"vendor__encoding-0.2.33",
|
||||||
|
"vendor__figment-0.10.19",
|
||||||
|
"vendor__flate2-1.0.35",
|
||||||
|
"vendor__glob-0.3.2",
|
||||||
|
"vendor__globset-0.4.15",
|
||||||
|
"vendor__itertools-0.14.0",
|
||||||
|
"vendor__lazy_static-1.5.0",
|
||||||
|
"vendor__log-0.4.22",
|
||||||
|
"vendor__mustache-0.9.0",
|
||||||
|
"vendor__num-traits-0.2.19",
|
||||||
|
"vendor__num_cpus-1.16.0",
|
||||||
|
"vendor__proc-macro2-1.0.92",
|
||||||
|
"vendor__quote-1.0.38",
|
||||||
|
"vendor__ra_ap_base_db-0.0.257",
|
||||||
|
"vendor__ra_ap_cfg-0.0.257",
|
||||||
|
"vendor__ra_ap_hir-0.0.257",
|
||||||
|
"vendor__ra_ap_hir_def-0.0.257",
|
||||||
|
"vendor__ra_ap_hir_expand-0.0.257",
|
||||||
|
"vendor__ra_ap_ide_db-0.0.257",
|
||||||
|
"vendor__ra_ap_intern-0.0.257",
|
||||||
|
"vendor__ra_ap_load-cargo-0.0.257",
|
||||||
|
"vendor__ra_ap_parser-0.0.257",
|
||||||
|
"vendor__ra_ap_paths-0.0.257",
|
||||||
|
"vendor__ra_ap_project_model-0.0.257",
|
||||||
|
"vendor__ra_ap_span-0.0.257",
|
||||||
|
"vendor__ra_ap_stdx-0.0.257",
|
||||||
|
"vendor__ra_ap_syntax-0.0.257",
|
||||||
|
"vendor__ra_ap_vfs-0.0.257",
|
||||||
|
"vendor__rand-0.8.5",
|
||||||
|
"vendor__rayon-1.10.0",
|
||||||
|
"vendor__regex-1.11.1",
|
||||||
|
"vendor__serde-1.0.217",
|
||||||
|
"vendor__serde_json-1.0.135",
|
||||||
|
"vendor__serde_with-3.12.0",
|
||||||
|
"vendor__stderrlog-0.6.0",
|
||||||
|
"vendor__syn-2.0.95",
|
||||||
|
"vendor__tracing-0.1.41",
|
||||||
|
"vendor__tracing-subscriber-0.3.19",
|
||||||
|
"vendor__tree-sitter-0.24.6",
|
||||||
|
"vendor__tree-sitter-embedded-template-0.23.2",
|
||||||
|
"vendor__tree-sitter-json-0.24.8",
|
||||||
|
"vendor__tree-sitter-ql-0.23.1",
|
||||||
|
"vendor__tree-sitter-ruby-0.23.1",
|
||||||
|
"vendor__triomphe-0.1.14",
|
||||||
|
"vendor__ungrammar-1.16.1",
|
||||||
|
)
|
||||||
|
|
||||||
http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
|
||||||
# rust-analyzer sources needed by the rust ast-generator (see `rust/ast-generator/README.md`)
|
# rust-analyzer sources needed by the rust ast-generator (see `rust/ast-generator/README.md`)
|
||||||
|
RUST_ANALYZER_SRC_TAG = "2025-01-07"
|
||||||
|
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "rust-analyzer-src",
|
name = "rust-analyzer-src",
|
||||||
build_file = "//rust/ast-generator:BUILD.rust-analyzer-src.bazel",
|
build_file = "//rust/ast-generator:BUILD.rust-analyzer-src.bazel",
|
||||||
integrity = "sha256-jl4KJmZku+ilMLnuX2NU+qa1v10IauSiDiz23sZo360=",
|
integrity = "sha256-eo8mIaUafZL8LOM65bDIIIXw1rNQ/P/x5RK/XUtgo5g=",
|
||||||
patch_args = ["-p1"],
|
patch_args = ["-p1"],
|
||||||
patches = [
|
patches = [
|
||||||
"//rust/ast-generator:patches/rust-analyzer.patch",
|
"//rust/ast-generator:patches/rust-analyzer.patch",
|
||||||
],
|
],
|
||||||
strip_prefix = "rust-analyzer-2024-12-16",
|
strip_prefix = "rust-analyzer-%s" % RUST_ANALYZER_SRC_TAG,
|
||||||
url = "https://github.com/rust-lang/rust-analyzer/archive/refs/tags/2024-12-16.tar.gz",
|
url = "https://github.com/rust-lang/rust-analyzer/archive/refs/tags/%s.tar.gz" % RUST_ANALYZER_SRC_TAG,
|
||||||
)
|
)
|
||||||
|
|
||||||
dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet")
|
dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/actions-all
|
name: codeql/actions-all
|
||||||
version: 0.4.0
|
version: 0.4.1-dev
|
||||||
library: true
|
library: true
|
||||||
warnOnImplicitThis: true
|
warnOnImplicitThis: true
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/actions-queries
|
name: codeql/actions-queries
|
||||||
version: 0.4.0
|
version: 0.4.1-dev
|
||||||
library: false
|
library: false
|
||||||
warnOnImplicitThis: true
|
warnOnImplicitThis: true
|
||||||
groups: [actions, queries]
|
groups: [actions, queries]
|
||||||
|
|||||||
@@ -247,7 +247,8 @@
|
|||||||
"javascript/ql/lib/semmle/javascript/security/internal/SensitiveDataHeuristics.qll",
|
"javascript/ql/lib/semmle/javascript/security/internal/SensitiveDataHeuristics.qll",
|
||||||
"python/ql/lib/semmle/python/security/internal/SensitiveDataHeuristics.qll",
|
"python/ql/lib/semmle/python/security/internal/SensitiveDataHeuristics.qll",
|
||||||
"ruby/ql/lib/codeql/ruby/security/internal/SensitiveDataHeuristics.qll",
|
"ruby/ql/lib/codeql/ruby/security/internal/SensitiveDataHeuristics.qll",
|
||||||
"swift/ql/lib/codeql/swift/security/internal/SensitiveDataHeuristics.qll"
|
"swift/ql/lib/codeql/swift/security/internal/SensitiveDataHeuristics.qll",
|
||||||
|
"rust/ql/lib/codeql/rust/security/internal/SensitiveDataHeuristics.qll"
|
||||||
],
|
],
|
||||||
"IncompleteUrlSubstringSanitization": [
|
"IncompleteUrlSubstringSanitization": [
|
||||||
"javascript/ql/src/Security/CWE-020/IncompleteUrlSubstringSanitization.qll",
|
"javascript/ql/src/Security/CWE-020/IncompleteUrlSubstringSanitization.qll",
|
||||||
|
|||||||
2383
cpp/downgrades/1a4bbe5ded083b9de87911c155fc99ca22ecb0ce/old.dbscheme
Normal file
2383
cpp/downgrades/1a4bbe5ded083b9de87911c155fc99ca22ecb0ce/old.dbscheme
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
|||||||
|
description: Support variable template specializations
|
||||||
|
compatibility: full
|
||||||
|
var_specialized.rel: delete
|
||||||
2382
cpp/downgrades/7eeff19bf7c89a350d3e43516a33c98a270cb057/old.dbscheme
Normal file
2382
cpp/downgrades/7eeff19bf7c89a350d3e43516a33c98a270cb057/old.dbscheme
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,4 @@
|
|||||||
|
description: Support concept id expressions
|
||||||
|
compatibility: full
|
||||||
|
concept_instantiation.rel: delete
|
||||||
|
is_type_constraint.rel: delete
|
||||||
2409
cpp/downgrades/dd32242a870867a532bb0b2a88a6a917a5b4c26f/old.dbscheme
Normal file
2409
cpp/downgrades/dd32242a870867a532bb0b2a88a6a917a5b4c26f/old.dbscheme
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
|||||||
|
description: Support requires clauses and type constraints
|
||||||
|
compatibility: full
|
||||||
|
fun_requires.rel: delete
|
||||||
|
var_requires.rel: delete
|
||||||
|
type_requires.rel: delete
|
||||||
|
type_template_type_constraint.rel: delete
|
||||||
2377
cpp/downgrades/f786eb3f5dfddb0ac914ab09551bf1c5c64b47c0/old.dbscheme
Normal file
2377
cpp/downgrades/f786eb3f5dfddb0ac914ab09551bf1c5c64b47c0/old.dbscheme
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
|||||||
|
description: Support concept templates
|
||||||
|
compatibility: full
|
||||||
|
concept_templates.rel: delete
|
||||||
|
concept_template_argument.rel: delete
|
||||||
|
concept_template_argument_value.rel: delete
|
||||||
5
cpp/ql/lib/change-notes/2024-12-23-concept-template.md
Normal file
5
cpp/ql/lib/change-notes/2024-12-23-concept-template.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
category: feature
|
||||||
|
---
|
||||||
|
* A new class `Concept` was introduced, which represents C++20 concepts.
|
||||||
|
* The `getTemplateArgumentType` and `getTemplateArgumentValue` predicates of the `Declaration` class now also yield template arguments of concepts.
|
||||||
5
cpp/ql/lib/change-notes/2024-12-24-concept-id.md
Normal file
5
cpp/ql/lib/change-notes/2024-12-24-concept-id.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
category: feature
|
||||||
|
---
|
||||||
|
* A new class `ConceptIdExpr` was introduced, which represents C++20 concept id expressions.
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
category: feature
|
||||||
|
---
|
||||||
|
* A new class `VariableTemplateSpecialization` was introduced, which represents explicit specializations of variable templates.
|
||||||
|
* A new predicate `isSpecialization` was added to the `Variable` class, which holds if the variable is a template specialization.
|
||||||
7
cpp/ql/lib/change-notes/2024-12-26-requires-clause.md
Normal file
7
cpp/ql/lib/change-notes/2024-12-26-requires-clause.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
category: feature
|
||||||
|
---
|
||||||
|
* New predicates `getARequiresClause`, `getTemplateRequiresClause` and `getFunctionRequiresClause` were added to the `FunctionDeclarationEntry` class, which yield the requires clauses when the entry represents a function template declaration with requires clauses.
|
||||||
|
* A new predicate `getRequiresClause` was added to the `TypeDeclarationEntry` class, which yields the requires clause when the entry represents a class template declaration with a requires clause.
|
||||||
|
* A new predicate `getRequiresClause` was added to the `VariableDeclarationEntry` class, which yields the requires clause when the entry represents a variable template declaration with a requires clause.
|
||||||
|
* A new predicate `getTypeConstraint` was added to the `TypeTemplateParameter` class, which yields the type constraint of the parameter if it exists.
|
||||||
4
cpp/ql/lib/change-notes/2025-01-07-config.md
Normal file
4
cpp/ql/lib/change-notes/2025-01-07-config.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
category: feature
|
||||||
|
---
|
||||||
|
* A new abstract class `ConfigurationTestFile` (`semmle.code.cpp.ConfigurationTestFile.ConfigurationTestFile`) was introduced, which represents files created to test the build configuration. A subclass `CmakeTryCompileFile` of `ConfigurationTestFile` was also introduced, which represents files created by CMake to test the build configuration.
|
||||||
8
cpp/ql/lib/ext/oleauto.model.yml
Normal file
8
cpp/ql/lib/ext/oleauto.model.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
extensions:
|
||||||
|
- addsTo:
|
||||||
|
pack: codeql/cpp-all
|
||||||
|
extensible: summaryModel
|
||||||
|
data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
|
||||||
|
- ["", "", False, "SysAllocString", "", "", "Argument[*0]", "ReturnValue[*]", "value", "manual"]
|
||||||
|
- ["", "", False, "SysAllocStringByteLen", "", "", "Argument[*0]", "ReturnValue[*]", "value", "manual"]
|
||||||
|
- ["", "", False, "SysAllocStringLen", "", "", "Argument[*0]", "ReturnValue[*]", "value", "manual"]
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/cpp-all
|
name: codeql/cpp-all
|
||||||
version: 3.1.0
|
version: 3.1.1-dev
|
||||||
groups: cpp
|
groups: cpp
|
||||||
dbscheme: semmlecode.cpp.dbscheme
|
dbscheme: semmlecode.cpp.dbscheme
|
||||||
extractor: cpp
|
extractor: cpp
|
||||||
|
|||||||
@@ -153,9 +153,139 @@ class NestedRequirementExpr extends Expr, @nested_requirement {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A C++ concept id expression.
|
* A C++ concept id expression.
|
||||||
|
*
|
||||||
|
* For example, if:
|
||||||
|
* ```cpp
|
||||||
|
* template<typename T, T X> concept C = ...;
|
||||||
|
* ...
|
||||||
|
* requires { C<int, 1>; };
|
||||||
|
* ```
|
||||||
|
* then `C<int, 1>` is a concept id expression that refers to
|
||||||
|
* the concept `C`.
|
||||||
*/
|
*/
|
||||||
class ConceptIdExpr extends RequirementExpr, @concept_id {
|
class ConceptIdExpr extends RequirementExpr, @concept_id {
|
||||||
override string toString() { result = "concept<...>" }
|
override string toString() {
|
||||||
|
result = this.getConcept().getName() + "<...>"
|
||||||
|
or
|
||||||
|
// The following is for backward compatibility with databases created with
|
||||||
|
// CodeQL 2.19.3, 2.19.4, and 2.20.0. Those databases include concept id
|
||||||
|
// expressions, but do not include concept template information.
|
||||||
|
not exists(this.getConcept()) and
|
||||||
|
result = "concept<...>"
|
||||||
|
}
|
||||||
|
|
||||||
override string getAPrimaryQlClass() { result = "ConceptIdExpr" }
|
override string getAPrimaryQlClass() { result = "ConceptIdExpr" }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if the concept id is used as a type constraint.
|
||||||
|
*
|
||||||
|
* In this case, the first template argument is implicit.
|
||||||
|
*/
|
||||||
|
predicate isTypeConstraint() { is_type_constraint(underlyingElement(this)) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the concept this concept id refers to.
|
||||||
|
*/
|
||||||
|
Concept getConcept() { concept_instantiation(underlyingElement(this), unresolveElement(result)) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a template argument passed to the concept.
|
||||||
|
*/
|
||||||
|
final Locatable getATemplateArgument() { result = this.getTemplateArgument(_) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the kind of a non-type template argument passed to the concept.
|
||||||
|
*/
|
||||||
|
final Locatable getATemplateArgumentKind() { result = this.getTemplateArgumentKind(_) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the `i`th template argument passed to the concept.
|
||||||
|
*
|
||||||
|
* For example, if:
|
||||||
|
* ```cpp
|
||||||
|
* template<typename T, T X> concept C = ...;
|
||||||
|
* ...
|
||||||
|
* requires { C<int, 1>; };
|
||||||
|
* ```
|
||||||
|
* then `getTemplateArgument(0)` yields `int`, and `getTemplateArgument(1)`
|
||||||
|
* yields `1`.
|
||||||
|
*
|
||||||
|
* If the concept id is a type constraint, then `getTemplateArgument(0)`
|
||||||
|
* will not yield a result.
|
||||||
|
*/
|
||||||
|
final Locatable getTemplateArgument(int index) {
|
||||||
|
if exists(this.getTemplateArgumentValue(index))
|
||||||
|
then result = this.getTemplateArgumentValue(index)
|
||||||
|
else result = this.getTemplateArgumentType(index)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the kind of the `i`th template argument value passed to the concept.
|
||||||
|
*
|
||||||
|
* For example, if:
|
||||||
|
* ```cpp
|
||||||
|
* template<typename T, T X> concept C = ...;
|
||||||
|
* ...
|
||||||
|
* requires { C<int, 1>; };
|
||||||
|
* ```
|
||||||
|
* then `getTemplateArgumentKind(1)` yields `int`, and there is no result for
|
||||||
|
* `getTemplateArgumentKind(0)`.
|
||||||
|
*/
|
||||||
|
final Locatable getTemplateArgumentKind(int index) {
|
||||||
|
exists(this.getTemplateArgumentValue(index)) and
|
||||||
|
result = this.getTemplateArgumentType(index)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the number of template arguments passed to the concept.
|
||||||
|
*/
|
||||||
|
final int getNumberOfTemplateArguments() {
|
||||||
|
result = count(int i | exists(this.getTemplateArgument(i)))
|
||||||
|
}
|
||||||
|
|
||||||
|
private Type getTemplateArgumentType(int index) {
|
||||||
|
exists(int i | if this.isTypeConstraint() then i = index - 1 else i = index |
|
||||||
|
concept_template_argument(underlyingElement(this), i, unresolveElement(result))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private Expr getTemplateArgumentValue(int index) {
|
||||||
|
exists(int i | if this.isTypeConstraint() then i = index - 1 else i = index |
|
||||||
|
concept_template_argument_value(underlyingElement(this), i, unresolveElement(result))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A C++ concept.
|
||||||
|
*
|
||||||
|
* For example:
|
||||||
|
* ```cpp
|
||||||
|
* template<class T>
|
||||||
|
* concept C = std::is_same<T, int>::value;
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
class Concept extends Declaration, @concept_template {
|
||||||
|
override string getAPrimaryQlClass() { result = "Concept" }
|
||||||
|
|
||||||
|
override Location getLocation() { concept_templates(underlyingElement(this), _, result) }
|
||||||
|
|
||||||
|
override string getName() { concept_templates(underlyingElement(this), result, _) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the constraint expression of the concept.
|
||||||
|
*
|
||||||
|
* For example, in
|
||||||
|
* ```cpp
|
||||||
|
* template<class T>
|
||||||
|
* concept C = std::is_same<T, int>::value;
|
||||||
|
* ```
|
||||||
|
* the constraint expression is `std::is_same<T, int>::value`.
|
||||||
|
*/
|
||||||
|
Expr getExpr() { result.getParent() = this }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a concept id expression that refers to this concept
|
||||||
|
*/
|
||||||
|
ConceptIdExpr getAReferringConceptIdExpr() { this = result.getConcept() }
|
||||||
}
|
}
|
||||||
|
|||||||
28
cpp/ql/lib/semmle/code/cpp/ConfigurationTestFile.qll
Normal file
28
cpp/ql/lib/semmle/code/cpp/ConfigurationTestFile.qll
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* Provides classes for identifying files that created to test the
|
||||||
|
* build configuration. It is often desirable to exclude these files
|
||||||
|
* from analysis.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import File
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A file created to test the system configuration.
|
||||||
|
*/
|
||||||
|
abstract class ConfigurationTestFile extends File { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A file created by CMake to test the system configuration.
|
||||||
|
*/
|
||||||
|
class CmakeTryCompileFile extends ConfigurationTestFile {
|
||||||
|
CmakeTryCompileFile() {
|
||||||
|
exists(Folder folder, Folder parent |
|
||||||
|
folder = this.getParentContainer() and
|
||||||
|
parent = folder.getParentContainer()
|
||||||
|
|
|
||||||
|
folder.getBaseName().matches("TryCompile-%") and
|
||||||
|
parent.getBaseName() = "CMakeScratch" and
|
||||||
|
parent.getParentContainer().getBaseName() = "CMakeFiles"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -235,7 +235,7 @@ class Declaration extends Locatable, @declaration {
|
|||||||
*
|
*
|
||||||
* `Foo<int, 1> bar;`
|
* `Foo<int, 1> bar;`
|
||||||
*
|
*
|
||||||
* Will have `getTemplateArgument())` return `int`, and
|
* Will have `getTemplateArgument(0)` return `int`, and
|
||||||
* `getTemplateArgument(1)` return `1`.
|
* `getTemplateArgument(1)` return `1`.
|
||||||
*/
|
*/
|
||||||
final Locatable getTemplateArgument(int index) {
|
final Locatable getTemplateArgument(int index) {
|
||||||
@@ -279,6 +279,8 @@ class Declaration extends Locatable, @declaration {
|
|||||||
variable_template_argument(underlyingElement(this), index, unresolveElement(result))
|
variable_template_argument(underlyingElement(this), index, unresolveElement(result))
|
||||||
or
|
or
|
||||||
template_template_argument(underlyingElement(this), index, unresolveElement(result))
|
template_template_argument(underlyingElement(this), index, unresolveElement(result))
|
||||||
|
or
|
||||||
|
concept_template_argument(underlyingElement(this), index, unresolveElement(result))
|
||||||
}
|
}
|
||||||
|
|
||||||
private Expr getTemplateArgumentValue(int index) {
|
private Expr getTemplateArgumentValue(int index) {
|
||||||
@@ -289,6 +291,8 @@ class Declaration extends Locatable, @declaration {
|
|||||||
variable_template_argument_value(underlyingElement(this), index, unresolveElement(result))
|
variable_template_argument_value(underlyingElement(this), index, unresolveElement(result))
|
||||||
or
|
or
|
||||||
template_template_argument_value(underlyingElement(this), index, unresolveElement(result))
|
template_template_argument_value(underlyingElement(this), index, unresolveElement(result))
|
||||||
|
or
|
||||||
|
concept_template_argument_value(underlyingElement(this), index, unresolveElement(result))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function {
|
|||||||
*/
|
*/
|
||||||
override Location getADeclarationLocation() { result = this.getADeclarationEntry().getLocation() }
|
override Location getADeclarationLocation() { result = this.getADeclarationEntry().getLocation() }
|
||||||
|
|
||||||
/** Holds if this Function is a Template specialization. */
|
/** Holds if this function is a template specialization. */
|
||||||
predicate isSpecialization() {
|
predicate isSpecialization() {
|
||||||
exists(FunctionDeclarationEntry fde |
|
exists(FunctionDeclarationEntry fde |
|
||||||
fun_decls(unresolveElement(fde), underlyingElement(this), _, _, _) and
|
fun_decls(unresolveElement(fde), underlyingElement(this), _, _, _) and
|
||||||
@@ -665,7 +665,7 @@ class FunctionDeclarationEntry extends DeclarationEntry, @fun_decl {
|
|||||||
/** Holds if this declaration is also a definition of its function. */
|
/** Holds if this declaration is also a definition of its function. */
|
||||||
override predicate isDefinition() { fun_def(underlyingElement(this)) }
|
override predicate isDefinition() { fun_def(underlyingElement(this)) }
|
||||||
|
|
||||||
/** Holds if this declaration is a Template specialization. */
|
/** Holds if this declaration is a template specialization. */
|
||||||
predicate isSpecialization() { fun_specialized(underlyingElement(this)) }
|
predicate isSpecialization() { fun_specialized(underlyingElement(this)) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -715,6 +715,27 @@ class FunctionDeclarationEntry extends DeclarationEntry, @fun_decl {
|
|||||||
* specification.
|
* specification.
|
||||||
*/
|
*/
|
||||||
predicate isNoExcept() { fun_decl_empty_noexcept(underlyingElement(this)) }
|
predicate isNoExcept() { fun_decl_empty_noexcept(underlyingElement(this)) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a requires clause if this declaration is a template with such a clause.
|
||||||
|
*/
|
||||||
|
Expr getARequiresClause() { fun_requires(underlyingElement(this), _, unresolveElement(result)) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the requires clause that appears after the template argument list if this
|
||||||
|
* declaration is a template with such a clause.
|
||||||
|
*/
|
||||||
|
Expr getTemplateRequiresClause() {
|
||||||
|
fun_requires(underlyingElement(this), 1, unresolveElement(result))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the requires clause that appears after the declarator if this declaration
|
||||||
|
* is a template with such a clause.
|
||||||
|
*/
|
||||||
|
Expr getFunctionRequiresClause() {
|
||||||
|
fun_requires(underlyingElement(this), 2, unresolveElement(result))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -88,6 +88,10 @@ private Declaration getAnEnclosingDeclaration(Locatable ast) {
|
|||||||
or
|
or
|
||||||
result = ast.(Initializer).getDeclaration()
|
result = ast.(Initializer).getDeclaration()
|
||||||
or
|
or
|
||||||
|
exists(ConceptIdExpr concept | ast = concept.getATemplateArgument() |
|
||||||
|
result = concept.getEnclosingFunction()
|
||||||
|
)
|
||||||
|
or
|
||||||
result = ast
|
result = ast
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,6 +111,12 @@ private newtype TPrintAstNode =
|
|||||||
TRequiresExprParametersNode(RequiresExpr req) {
|
TRequiresExprParametersNode(RequiresExpr req) {
|
||||||
shouldPrintDeclaration(getAnEnclosingDeclaration(req))
|
shouldPrintDeclaration(getAnEnclosingDeclaration(req))
|
||||||
} or
|
} or
|
||||||
|
TConceptIdExprArgumentsNode(ConceptIdExpr concept) {
|
||||||
|
shouldPrintDeclaration(getAnEnclosingDeclaration(concept))
|
||||||
|
} or
|
||||||
|
TConceptIdExprTypeArgumentNode(Type type, ConceptIdExpr concept, int childIndex) {
|
||||||
|
type = concept.getTemplateArgument(childIndex)
|
||||||
|
} or
|
||||||
TConstructorInitializersNode(Constructor ctor) {
|
TConstructorInitializersNode(Constructor ctor) {
|
||||||
ctor.hasEntryPoint() and
|
ctor.hasEntryPoint() and
|
||||||
shouldPrintDeclaration(ctor)
|
shouldPrintDeclaration(ctor)
|
||||||
@@ -357,6 +367,26 @@ class StringLiteralNode extends ExprNode {
|
|||||||
override string getValue() { result = "\"" + escapeString(expr.getValue()) + "\"" }
|
override string getValue() { result = "\"" + escapeString(expr.getValue()) + "\"" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A node representing a `ConceptIdExpr`.
|
||||||
|
*/
|
||||||
|
class ConceptIdExprNode extends ExprNode {
|
||||||
|
override ConceptIdExpr expr;
|
||||||
|
|
||||||
|
override PrintAstNode getChildInternal(int childIndex) {
|
||||||
|
result = super.getChildInternal(childIndex)
|
||||||
|
or
|
||||||
|
childIndex = -1 and
|
||||||
|
result.(ConceptIdExprArgumentsNode).getConceptIdExpr() = expr
|
||||||
|
}
|
||||||
|
|
||||||
|
override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
|
result = super.getChildAccessorPredicateInternal(childIndex)
|
||||||
|
or
|
||||||
|
childIndex = -1 and result = "<args>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A node representing a `Conversion`.
|
* A node representing a `Conversion`.
|
||||||
*/
|
*/
|
||||||
@@ -593,6 +623,63 @@ class InitializerNode extends AstNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A node representing the arguments of a `ConceptIdExpr`.
|
||||||
|
*/
|
||||||
|
class ConceptIdExprArgumentsNode extends PrintAstNode, TConceptIdExprArgumentsNode {
|
||||||
|
ConceptIdExpr concept;
|
||||||
|
|
||||||
|
ConceptIdExprArgumentsNode() { this = TConceptIdExprArgumentsNode(concept) }
|
||||||
|
|
||||||
|
final override string toString() { result = "" }
|
||||||
|
|
||||||
|
final override Location getLocation() { result = getRepresentativeLocation(concept) }
|
||||||
|
|
||||||
|
override PrintAstNode getChildInternal(int childIndex) {
|
||||||
|
exists(Locatable arg | arg = concept.getTemplateArgument(childIndex) |
|
||||||
|
result.(ConceptIdExprTypeArgumentNode).isArgumentNode(arg, concept, childIndex)
|
||||||
|
or
|
||||||
|
result.(ExprNode).getAst() = arg
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
|
exists(this.getChildInternal(childIndex)) and
|
||||||
|
result = "getTemplateArgument(" + childIndex + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the `ConceptIdExpr` for which this node represents the parameters.
|
||||||
|
*/
|
||||||
|
final ConceptIdExpr getConceptIdExpr() { result = concept }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A node representing a type argument of a `ConceptIdExpr`.
|
||||||
|
*/
|
||||||
|
class ConceptIdExprTypeArgumentNode extends PrintAstNode, TConceptIdExprTypeArgumentNode {
|
||||||
|
Type type;
|
||||||
|
ConceptIdExpr concept;
|
||||||
|
int index;
|
||||||
|
|
||||||
|
ConceptIdExprTypeArgumentNode() { this = TConceptIdExprTypeArgumentNode(type, concept, index) }
|
||||||
|
|
||||||
|
final override string toString() { result = qlClass(type) + type.toString() }
|
||||||
|
|
||||||
|
final override Location getLocation() { result = getRepresentativeLocation(type) }
|
||||||
|
|
||||||
|
override AstNode getChildInternal(int childIndex) { none() }
|
||||||
|
|
||||||
|
override string getChildAccessorPredicateInternal(int childIndex) { none() }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds if `t` is the `i`th template argument of `c`.
|
||||||
|
*/
|
||||||
|
predicate isArgumentNode(Type t, ConceptIdExpr c, int i) {
|
||||||
|
type = t and concept = c and index = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A node representing the parameters of a `Function`.
|
* A node representing the parameters of a `Function`.
|
||||||
*/
|
*/
|
||||||
@@ -611,7 +698,7 @@ class FunctionParametersNode extends PrintAstNode, TFunctionParametersNode {
|
|||||||
|
|
||||||
override string getChildAccessorPredicateInternal(int childIndex) {
|
override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
exists(this.getChildInternal(childIndex)) and
|
exists(this.getChildInternal(childIndex)) and
|
||||||
result = "getParameter(" + childIndex.toString() + ")"
|
result = "getParameter(" + childIndex + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -638,7 +725,7 @@ class RequiresExprParametersNode extends PrintAstNode, TRequiresExprParametersNo
|
|||||||
|
|
||||||
override string getChildAccessorPredicateInternal(int childIndex) {
|
override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
exists(this.getChildInternal(childIndex)) and
|
exists(this.getChildInternal(childIndex)) and
|
||||||
result = "getParameter(" + childIndex.toString() + ")"
|
result = "getParameter(" + childIndex + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -665,7 +752,7 @@ class ConstructorInitializersNode extends PrintAstNode, TConstructorInitializers
|
|||||||
|
|
||||||
final override string getChildAccessorPredicateInternal(int childIndex) {
|
final override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
exists(this.getChildInternal(childIndex)) and
|
exists(this.getChildInternal(childIndex)) and
|
||||||
result = "getInitializer(" + childIndex.toString() + ")"
|
result = "getInitializer(" + childIndex + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -692,7 +779,7 @@ class DestructorDestructionsNode extends PrintAstNode, TDestructorDestructionsNo
|
|||||||
|
|
||||||
final override string getChildAccessorPredicateInternal(int childIndex) {
|
final override string getChildAccessorPredicateInternal(int childIndex) {
|
||||||
exists(this.getChildInternal(childIndex)) and
|
exists(this.getChildInternal(childIndex)) and
|
||||||
result = "getDestruction(" + childIndex.toString() + ")"
|
result = "getDestruction(" + childIndex + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -59,6 +59,13 @@ class TypeTemplateParameter extends UserType, TemplateParameterImpl {
|
|||||||
override string getAPrimaryQlClass() { result = "TypeTemplateParameter" }
|
override string getAPrimaryQlClass() { result = "TypeTemplateParameter" }
|
||||||
|
|
||||||
override predicate involvesTemplateParameter() { any() }
|
override predicate involvesTemplateParameter() { any() }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the type constraint of this type template parameter.
|
||||||
|
*/
|
||||||
|
Expr getTypeConstraint() {
|
||||||
|
type_template_type_constraint(underlyingElement(this), unresolveElement(result))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -129,4 +129,9 @@ class TypeDeclarationEntry extends DeclarationEntry, @type_decl {
|
|||||||
* class or typedef.
|
* class or typedef.
|
||||||
*/
|
*/
|
||||||
predicate isTopLevel() { type_decl_top(underlyingElement(this)) }
|
predicate isTopLevel() { type_decl_top(underlyingElement(this)) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the requires clause if this declaration is a template with such a clause.
|
||||||
|
*/
|
||||||
|
Expr getRequiresClause() { type_requires(underlyingElement(this), unresolveElement(result)) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,6 +187,14 @@ class Variable extends Declaration, @variable {
|
|||||||
* `for (char c : str) { ... }`
|
* `for (char c : str) { ... }`
|
||||||
*/
|
*/
|
||||||
predicate isCompilerGenerated() { compgenerated(underlyingElement(this)) }
|
predicate isCompilerGenerated() { compgenerated(underlyingElement(this)) }
|
||||||
|
|
||||||
|
/** Holds if this variable is a template specialization. */
|
||||||
|
predicate isSpecialization() {
|
||||||
|
exists(VariableDeclarationEntry vde |
|
||||||
|
var_decls(unresolveElement(vde), underlyingElement(this), _, _, _) and
|
||||||
|
vde.isSpecialization()
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -267,6 +275,14 @@ class VariableDeclarationEntry extends DeclarationEntry, @var_decl {
|
|||||||
override predicate isDefinition() { var_def(underlyingElement(this)) }
|
override predicate isDefinition() { var_def(underlyingElement(this)) }
|
||||||
|
|
||||||
override string getASpecifier() { var_decl_specifiers(underlyingElement(this), result) }
|
override string getASpecifier() { var_decl_specifiers(underlyingElement(this), result) }
|
||||||
|
|
||||||
|
/** Holds if this declaration is a template specialization. */
|
||||||
|
predicate isSpecialization() { var_specialized(underlyingElement(this)) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the requires clause if this declaration is a template with such a clause.
|
||||||
|
*/
|
||||||
|
Expr getRequiresClause() { var_requires(underlyingElement(this), unresolveElement(result)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -594,7 +610,10 @@ class TemplateVariable extends Variable {
|
|||||||
/**
|
/**
|
||||||
* Gets an instantiation of this variable template.
|
* Gets an instantiation of this variable template.
|
||||||
*/
|
*/
|
||||||
Variable getAnInstantiation() { result.isConstructedFrom(this) }
|
Variable getAnInstantiation() {
|
||||||
|
result.isConstructedFrom(this) and
|
||||||
|
not result.isSpecialization()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -624,6 +643,21 @@ class VariableTemplateInstantiation extends Variable {
|
|||||||
TemplateVariable getTemplate() { result = tv }
|
TemplateVariable getTemplate() { result = tv }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An explicit specialization of a C++ variable template.
|
||||||
|
*/
|
||||||
|
class VariableTemplateSpecialization extends Variable {
|
||||||
|
VariableTemplateSpecialization() { this.isSpecialization() }
|
||||||
|
|
||||||
|
override string getAPrimaryQlClass() { result = "VariableTemplateSpecialization" }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the primary template for the specialization (the function template
|
||||||
|
* this specializes).
|
||||||
|
*/
|
||||||
|
TemplateVariable getPrimaryTemplate() { this.isConstructedFrom(result) }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A non-static local variable or parameter that is not part of an
|
* A non-static local variable or parameter that is not part of an
|
||||||
* uninstantiated template. Uninstantiated templates are purely syntax, and
|
* uninstantiated template. Uninstantiated templates are purely syntax, and
|
||||||
|
|||||||
@@ -529,8 +529,21 @@ private string getTypeName(Type t, boolean needsSpace) {
|
|||||||
needsSpace = false and
|
needsSpace = false and
|
||||||
(if needsSpace0 = true then result = s + " *" else result = s + "*")
|
(if needsSpace0 = true then result = s + " *" else result = s + "*")
|
||||||
or
|
or
|
||||||
|
// We don't need to check for `needsSpace0` here because the type of
|
||||||
|
// `x` in `int x[1024]` is formatted without a space between the bracket
|
||||||
|
// and the `int` by `Type.getName`. That is, calling `Type.getName` on
|
||||||
|
// the type of `x` gives `int[1024]` and not `int [1024]`.
|
||||||
|
needsSpace = false and
|
||||||
|
exists(ArrayType array | array = dt |
|
||||||
|
result = s + "[" + array.getArraySize() + "]"
|
||||||
|
or
|
||||||
|
not array.hasArraySize() and
|
||||||
|
result = s + "[]"
|
||||||
|
)
|
||||||
|
or
|
||||||
not dt instanceof ReferenceType and
|
not dt instanceof ReferenceType and
|
||||||
not dt instanceof PointerType and
|
not dt instanceof PointerType and
|
||||||
|
not dt instanceof ArrayType and
|
||||||
result = s and
|
result = s and
|
||||||
needsSpace = needsSpace0
|
needsSpace = needsSpace0
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,8 +12,14 @@ private import semmle.code.cpp.dataflow.ExternalFlow
|
|||||||
private import semmle.code.cpp.ir.IR
|
private import semmle.code.cpp.ir.IR
|
||||||
|
|
||||||
module Input implements InputSig<Location, DataFlowImplSpecific::CppDataFlow> {
|
module Input implements InputSig<Location, DataFlowImplSpecific::CppDataFlow> {
|
||||||
|
private import codeql.util.Void
|
||||||
|
|
||||||
class SummarizedCallableBase = Function;
|
class SummarizedCallableBase = Function;
|
||||||
|
|
||||||
|
class SourceBase = Void;
|
||||||
|
|
||||||
|
class SinkBase = Void;
|
||||||
|
|
||||||
ArgumentPosition callbackSelfParameterPosition() { result = TDirectPosition(-1) }
|
ArgumentPosition callbackSelfParameterPosition() { result = TDirectPosition(-1) }
|
||||||
|
|
||||||
ReturnKind getStandardReturnValueKind() { result.(NormalReturnKind).getIndirectionIndex() = 0 }
|
ReturnKind getStandardReturnValueKind() { result.(NormalReturnKind).getIndirectionIndex() = 0 }
|
||||||
@@ -93,6 +99,10 @@ private module StepsInput implements Impl::Private::StepsInputSig {
|
|||||||
DataFlowCall getACall(Public::SummarizedCallable sc) {
|
DataFlowCall getACall(Public::SummarizedCallable sc) {
|
||||||
result.getStaticCallTarget().getUnderlyingCallable() = sc
|
result.getStaticCallTarget().getUnderlyingCallable() = sc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() }
|
||||||
|
|
||||||
|
Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() }
|
||||||
}
|
}
|
||||||
|
|
||||||
module SourceSinkInterpretationInput implements
|
module SourceSinkInterpretationInput implements
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
private import Semantic
|
private import Semantic
|
||||||
|
private import SemanticLocation
|
||||||
private import SemanticExprSpecific::SemanticExprConfig as Specific
|
private import SemanticExprSpecific::SemanticExprConfig as Specific
|
||||||
private import SemanticType
|
private import SemanticType
|
||||||
|
|
||||||
@@ -15,7 +16,7 @@ private import SemanticType
|
|||||||
class SemExpr instanceof Specific::Expr {
|
class SemExpr instanceof Specific::Expr {
|
||||||
final string toString() { result = super.toString() }
|
final string toString() { result = super.toString() }
|
||||||
|
|
||||||
final Specific::Location getLocation() { result = super.getLocation() }
|
SemLocation getLocation() { result = super.getLocation() }
|
||||||
|
|
||||||
Opcode getOpcode() { result instanceof Opcode::Unknown }
|
Opcode getOpcode() { result instanceof Opcode::Unknown }
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ private import RangeAnalysisImpl
|
|||||||
private import codeql.rangeanalysis.RangeAnalysis
|
private import codeql.rangeanalysis.RangeAnalysis
|
||||||
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticExpr
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticExpr
|
||||||
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticType
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticType
|
||||||
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticLocation
|
||||||
|
|
||||||
module FloatDelta implements DeltaSig {
|
module FloatDelta implements DeltaSig {
|
||||||
class Delta = float;
|
class Delta = float;
|
||||||
@@ -22,7 +23,7 @@ module FloatDelta implements DeltaSig {
|
|||||||
Delta fromFloat(float f) { result = f }
|
Delta fromFloat(float f) { result = f }
|
||||||
}
|
}
|
||||||
|
|
||||||
module FloatOverflow implements OverflowSig<Sem, FloatDelta> {
|
module FloatOverflow implements OverflowSig<SemLocation, Sem, FloatDelta> {
|
||||||
predicate semExprDoesNotOverflow(boolean positively, SemExpr expr) {
|
predicate semExprDoesNotOverflow(boolean positively, SemExpr expr) {
|
||||||
exists(float lb, float ub, float delta |
|
exists(float lb, float ub, float delta |
|
||||||
typeBounds(expr.getSemType(), lb, ub) and
|
typeBounds(expr.getSemType(), lb, ub) and
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.Semantic
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.Semantic
|
||||||
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticLocation
|
||||||
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.analysis.FloatDelta
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.analysis.FloatDelta
|
||||||
private import RangeAnalysisImpl
|
private import RangeAnalysisImpl
|
||||||
private import codeql.rangeanalysis.RangeAnalysis
|
private import codeql.rangeanalysis.RangeAnalysis
|
||||||
|
|
||||||
module CppLangImplConstant implements LangSig<Sem, FloatDelta> {
|
module CppLangImplConstant implements LangSig<SemLocation, Sem, FloatDelta> {
|
||||||
/**
|
/**
|
||||||
* Ignore the bound on this expression.
|
* Ignore the bound on this expression.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ private import SemanticType
|
|||||||
private import codeql.rangeanalysis.RangeAnalysis
|
private import codeql.rangeanalysis.RangeAnalysis
|
||||||
private import ConstantAnalysis as ConstantAnalysis
|
private import ConstantAnalysis as ConstantAnalysis
|
||||||
|
|
||||||
module Sem implements Semantic {
|
module Sem implements Semantic<SemLocation> {
|
||||||
class Expr = SemExpr;
|
class Expr = SemExpr;
|
||||||
|
|
||||||
class ConstantIntegerExpr = ConstantAnalysis::SemConstantIntegerExpr;
|
class ConstantIntegerExpr = ConstantAnalysis::SemConstantIntegerExpr;
|
||||||
@@ -104,7 +104,7 @@ module Sem implements Semantic {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module SignAnalysis implements SignAnalysisSig<Sem> {
|
module SignAnalysis implements SignAnalysisSig<SemLocation, Sem> {
|
||||||
private import SignAnalysisCommon as SA
|
private import SignAnalysisCommon as SA
|
||||||
import SA::SignAnalysis<FloatDelta>
|
import SA::SignAnalysis<FloatDelta>
|
||||||
}
|
}
|
||||||
@@ -165,7 +165,7 @@ module AllBounds implements BoundSig<SemLocation, Sem, FloatDelta> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private module ModulusAnalysisInstantiated implements ModulusAnalysisSig<Sem> {
|
private module ModulusAnalysisInstantiated implements ModulusAnalysisSig<SemLocation, Sem> {
|
||||||
class ModBound = AllBounds::SemBound;
|
class ModBound = AllBounds::SemBound;
|
||||||
|
|
||||||
private import codeql.rangeanalysis.ModulusAnalysis as MA
|
private import codeql.rangeanalysis.ModulusAnalysis as MA
|
||||||
|
|||||||
@@ -3,12 +3,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.Semantic
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.Semantic
|
||||||
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticLocation
|
||||||
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.analysis.FloatDelta
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.analysis.FloatDelta
|
||||||
private import RangeAnalysisImpl
|
private import RangeAnalysisImpl
|
||||||
private import semmle.code.cpp.rangeanalysis.RangeAnalysisUtils
|
private import semmle.code.cpp.rangeanalysis.RangeAnalysisUtils
|
||||||
private import codeql.rangeanalysis.RangeAnalysis
|
private import codeql.rangeanalysis.RangeAnalysis
|
||||||
|
|
||||||
module CppLangImplRelative implements LangSig<Sem, FloatDelta> {
|
module CppLangImplRelative implements LangSig<SemLocation, Sem, FloatDelta> {
|
||||||
/**
|
/**
|
||||||
* Ignore the bound on this expression.
|
* Ignore the bound on this expression.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -10,11 +10,12 @@ private import codeql.rangeanalysis.RangeAnalysis
|
|||||||
private import RangeAnalysisImpl
|
private import RangeAnalysisImpl
|
||||||
private import SignAnalysisSpecific as Specific
|
private import SignAnalysisSpecific as Specific
|
||||||
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.Semantic
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.Semantic
|
||||||
|
private import semmle.code.cpp.rangeanalysis.new.internal.semantic.SemanticLocation
|
||||||
private import ConstantAnalysis
|
private import ConstantAnalysis
|
||||||
private import Sign
|
private import Sign
|
||||||
|
|
||||||
module SignAnalysis<DeltaSig D> {
|
module SignAnalysis<DeltaSig D> {
|
||||||
private import codeql.rangeanalysis.internal.RangeUtils::MakeUtils<Sem, D>
|
private import codeql.rangeanalysis.internal.RangeUtils::MakeUtils<SemLocation, Sem, D>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An SSA definition for which the analysis can compute the sign.
|
* An SSA definition for which the analysis can compute the sign.
|
||||||
|
|||||||
@@ -480,6 +480,19 @@ fun_decl_typedef_type(
|
|||||||
int typedeftype_id: @usertype ref
|
int typedeftype_id: @usertype ref
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
case @fun_requires.kind of
|
||||||
|
1 = @template_attached
|
||||||
|
| 2 = @function_attached
|
||||||
|
;
|
||||||
|
*/
|
||||||
|
|
||||||
|
fun_requires(
|
||||||
|
int id: @fun_decl ref,
|
||||||
|
int kind: int ref,
|
||||||
|
int constraint: @expr ref
|
||||||
|
);
|
||||||
|
|
||||||
param_decl_bind(
|
param_decl_bind(
|
||||||
unique int id: @var_decl ref,
|
unique int id: @var_decl ref,
|
||||||
int index: int ref,
|
int index: int ref,
|
||||||
@@ -495,11 +508,16 @@ var_decls(
|
|||||||
int location: @location_default ref
|
int location: @location_default ref
|
||||||
);
|
);
|
||||||
var_def(unique int id: @var_decl ref);
|
var_def(unique int id: @var_decl ref);
|
||||||
|
var_specialized(int id: @var_decl ref);
|
||||||
var_decl_specifiers(
|
var_decl_specifiers(
|
||||||
int id: @var_decl ref,
|
int id: @var_decl ref,
|
||||||
string name: string ref
|
string name: string ref
|
||||||
)
|
)
|
||||||
is_structured_binding(unique int id: @variable ref);
|
is_structured_binding(unique int id: @variable ref);
|
||||||
|
var_requires(
|
||||||
|
int id: @var_decl ref,
|
||||||
|
int constraint: @expr ref
|
||||||
|
);
|
||||||
|
|
||||||
type_decls(
|
type_decls(
|
||||||
unique int id: @type_decl,
|
unique int id: @type_decl,
|
||||||
@@ -510,6 +528,10 @@ type_def(unique int id: @type_decl ref);
|
|||||||
type_decl_top(
|
type_decl_top(
|
||||||
unique int type_decl: @type_decl ref
|
unique int type_decl: @type_decl ref
|
||||||
);
|
);
|
||||||
|
type_requires(
|
||||||
|
int id: @type_decl ref,
|
||||||
|
int constraint: @expr ref
|
||||||
|
);
|
||||||
|
|
||||||
namespace_decls(
|
namespace_decls(
|
||||||
unique int id: @namespace_decl,
|
unique int id: @namespace_decl,
|
||||||
@@ -789,6 +811,11 @@ nontype_template_parameters(
|
|||||||
int id: @expr ref
|
int id: @expr ref
|
||||||
);
|
);
|
||||||
|
|
||||||
|
type_template_type_constraint(
|
||||||
|
int id: @usertype ref,
|
||||||
|
int constraint: @expr ref
|
||||||
|
);
|
||||||
|
|
||||||
mangled_name(
|
mangled_name(
|
||||||
unique int id: @declaration ref,
|
unique int id: @declaration ref,
|
||||||
int mangled_name : @mangledname,
|
int mangled_name : @mangledname,
|
||||||
@@ -876,6 +903,29 @@ template_template_argument_value(
|
|||||||
int arg_value: @expr ref
|
int arg_value: @expr ref
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@concept = @concept_template | @concept_id;
|
||||||
|
|
||||||
|
concept_templates(
|
||||||
|
unique int concept_id: @concept_template,
|
||||||
|
string name: string ref,
|
||||||
|
int location: @location_default ref
|
||||||
|
);
|
||||||
|
concept_instantiation(
|
||||||
|
unique int to: @concept_id ref,
|
||||||
|
int from: @concept_template ref
|
||||||
|
);
|
||||||
|
is_type_constraint(int concept_id: @concept_id ref);
|
||||||
|
concept_template_argument(
|
||||||
|
int concept_id: @concept ref,
|
||||||
|
int index: int ref,
|
||||||
|
int arg_type: @type ref
|
||||||
|
);
|
||||||
|
concept_template_argument_value(
|
||||||
|
int concept_id: @concept ref,
|
||||||
|
int index: int ref,
|
||||||
|
int arg_value: @expr ref
|
||||||
|
);
|
||||||
|
|
||||||
routinetypes(
|
routinetypes(
|
||||||
unique int id: @routinetype,
|
unique int id: @routinetype,
|
||||||
int return_type: @type ref
|
int return_type: @type ref
|
||||||
@@ -1106,7 +1156,8 @@ frienddecls(
|
|||||||
| @declaredtype
|
| @declaredtype
|
||||||
| @variable
|
| @variable
|
||||||
| @enumconstant
|
| @enumconstant
|
||||||
| @frienddecl;
|
| @frienddecl
|
||||||
|
| @concept_template;
|
||||||
|
|
||||||
@member = @membervariable
|
@member = @membervariable
|
||||||
| @function
|
| @function
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
description: Support requires clauses and type constraints
|
||||||
|
compatibility: partial
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
description: Support concept templates
|
||||||
|
compatibility: partial
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
description: Support variable template specializations
|
||||||
|
compatibility: partial
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
description: Support concept id expressions
|
||||||
|
compatibility: partial
|
||||||
@@ -9,11 +9,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import cpp
|
import cpp
|
||||||
|
import semmle.code.cpp.ConfigurationTestFile
|
||||||
|
|
||||||
from GlobalVariable gv
|
from GlobalVariable gv
|
||||||
where
|
where
|
||||||
gv.getName().length() <= 3 and
|
gv.getName().length() <= 3 and
|
||||||
not gv.isStatic()
|
not gv.isStatic() and
|
||||||
|
not gv.getFile() instanceof ConfigurationTestFile // variables in files generated during configuration are likely false positives
|
||||||
select gv,
|
select gv,
|
||||||
"Poor global variable name '" + gv.getName() +
|
"Poor global variable name '" + gv.getName() +
|
||||||
"'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo)."
|
"'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo)."
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import cpp
|
|||||||
import semmle.code.cpp.commons.Buffer
|
import semmle.code.cpp.commons.Buffer
|
||||||
import semmle.code.cpp.ir.dataflow.DataFlow
|
import semmle.code.cpp.ir.dataflow.DataFlow
|
||||||
import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis
|
import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis
|
||||||
|
import semmle.code.cpp.ConfigurationTestFile
|
||||||
import LoopBounds
|
import LoopBounds
|
||||||
|
|
||||||
private predicate staticBufferBase(VariableAccess access, Variable v) {
|
private predicate staticBufferBase(VariableAccess access, Variable v) {
|
||||||
@@ -148,7 +149,10 @@ predicate outOfBounds(BufferAccess bufaccess, string msg) {
|
|||||||
|
|
||||||
from Element error, string msg
|
from Element error, string msg
|
||||||
where
|
where
|
||||||
overflowOffsetInLoop(error, msg) or
|
(
|
||||||
wrongBufferSize(error, msg) or
|
overflowOffsetInLoop(error, msg) or
|
||||||
outOfBounds(error, msg)
|
wrongBufferSize(error, msg) or
|
||||||
|
outOfBounds(error, msg)
|
||||||
|
) and
|
||||||
|
not error.getFile() instanceof ConfigurationTestFile // elements in files generated during configuration are likely false positives
|
||||||
select error, msg
|
select error, msg
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import cpp
|
import cpp
|
||||||
|
import semmle.code.cpp.ConfigurationTestFile
|
||||||
|
|
||||||
from EqualityOperation ro, Expr left, Expr right
|
from EqualityOperation ro, Expr left, Expr right
|
||||||
where
|
where
|
||||||
@@ -20,5 +21,6 @@ where
|
|||||||
ro.getAnOperand().getExplicitlyConverted().getType().getUnderlyingType() instanceof
|
ro.getAnOperand().getExplicitlyConverted().getType().getUnderlyingType() instanceof
|
||||||
FloatingPointType and
|
FloatingPointType and
|
||||||
not ro.getAnOperand().isConstant() and // comparisons to constants generate too many false positives
|
not ro.getAnOperand().isConstant() and // comparisons to constants generate too many false positives
|
||||||
not left.(VariableAccess).getTarget() = right.(VariableAccess).getTarget() // skip self comparison
|
not left.(VariableAccess).getTarget() = right.(VariableAccess).getTarget() and // skip self comparison
|
||||||
|
not ro.getFile() instanceof ConfigurationTestFile // expressions in files generated during configuration are likely false positives
|
||||||
select ro, "Equality checks on floating point values can yield unexpected results."
|
select ro, "Equality checks on floating point values can yield unexpected results."
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import cpp
|
import cpp
|
||||||
private import semmle.code.cpp.commons.Exclusions
|
import semmle.code.cpp.commons.Exclusions
|
||||||
|
import semmle.code.cpp.ConfigurationTestFile
|
||||||
|
|
||||||
class PureExprInVoidContext extends ExprInVoidContext {
|
class PureExprInVoidContext extends ExprInVoidContext {
|
||||||
PureExprInVoidContext() { this.isPure() }
|
PureExprInVoidContext() { this.isPure() }
|
||||||
@@ -90,6 +91,7 @@ where
|
|||||||
not peivc.getType() instanceof UnknownType and
|
not peivc.getType() instanceof UnknownType and
|
||||||
not functionContainsDisabledCodeRecursive(peivc.(FunctionCall).getTarget()) and
|
not functionContainsDisabledCodeRecursive(peivc.(FunctionCall).getTarget()) and
|
||||||
not functionDefinedInIfDefRecursive(peivc.(FunctionCall).getTarget()) and
|
not functionDefinedInIfDefRecursive(peivc.(FunctionCall).getTarget()) and
|
||||||
|
not peivc.getFile() instanceof ConfigurationTestFile and // expressions in files generated during configuration are likely false positives
|
||||||
if peivc instanceof FunctionCall
|
if peivc instanceof FunctionCall
|
||||||
then
|
then
|
||||||
exists(Function target |
|
exists(Function target |
|
||||||
|
|||||||
@@ -19,7 +19,10 @@
|
|||||||
|
|
||||||
import cpp
|
import cpp
|
||||||
import TooFewArguments
|
import TooFewArguments
|
||||||
|
import semmle.code.cpp.ConfigurationTestFile
|
||||||
|
|
||||||
from FunctionCall fc, Function f
|
from FunctionCall fc, Function f
|
||||||
where tooFewArguments(fc, f)
|
where
|
||||||
|
tooFewArguments(fc, f) and
|
||||||
|
not fc.getFile() instanceof ConfigurationTestFile // calls in files generated during configuration are likely false positives
|
||||||
select fc, "This call has fewer arguments than required by $@.", f, f.toString()
|
select fc, "This call has fewer arguments than required by $@.", f, f.toString()
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import semmle.code.cpp.security.BufferWrite
|
import semmle.code.cpp.security.BufferWrite
|
||||||
|
import semmle.code.cpp.ConfigurationTestFile
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See CWE-120/UnboundedWrite.ql for a summary of CWE-120 alert cases.
|
* See CWE-120/UnboundedWrite.ql for a summary of CWE-120 alert cases.
|
||||||
@@ -26,7 +27,8 @@ where
|
|||||||
bw.hasExplicitLimit() and // has an explicit size limit
|
bw.hasExplicitLimit() and // has an explicit size limit
|
||||||
destSize = max(getBufferSize(bw.getDest(), _)) and
|
destSize = max(getBufferSize(bw.getDest(), _)) and
|
||||||
bw.getExplicitLimit() > destSize and // but it's larger than the destination
|
bw.getExplicitLimit() > destSize and // but it's larger than the destination
|
||||||
not bw.getDest().getType().stripType() instanceof ErroneousType // destSize may be incorrect
|
not bw.getDest().getType().stripType() instanceof ErroneousType and // destSize may be incorrect
|
||||||
|
not bw.getFile() instanceof ConfigurationTestFile // expressions in files generated during configuration are likely false positives
|
||||||
select bw,
|
select bw,
|
||||||
"This '" + bw.getBWDesc() + "' operation is limited to " + bw.getExplicitLimit() +
|
"This '" + bw.getBWDesc() + "' operation is limited to " + bw.getExplicitLimit() +
|
||||||
" bytes but the destination is only " + destSize + " bytes."
|
" bytes but the destination is only " + destSize + " bytes."
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
import cpp
|
import cpp
|
||||||
import FilePermissions
|
import FilePermissions
|
||||||
|
import semmle.code.cpp.ConfigurationTestFile
|
||||||
|
|
||||||
predicate worldWritableCreation(FileCreationExpr fc, int mode) {
|
predicate worldWritableCreation(FileCreationExpr fc, int mode) {
|
||||||
mode = localUmask(fc).mask(fc.getMode()) and
|
mode = localUmask(fc).mask(fc.getMode()) and
|
||||||
@@ -27,6 +28,7 @@ predicate setWorldWritable(FunctionCall fc, int mode) {
|
|||||||
from Expr fc, int mode, string message
|
from Expr fc, int mode, string message
|
||||||
where
|
where
|
||||||
worldWritableCreation(fc, mode) and
|
worldWritableCreation(fc, mode) and
|
||||||
|
not fc.getFile() instanceof ConfigurationTestFile and // expressions in files generated during configuration are likely false positives
|
||||||
message =
|
message =
|
||||||
"A file may be created here with mode " + octalFileMode(mode) +
|
"A file may be created here with mode " + octalFileMode(mode) +
|
||||||
", which would make it world-writable."
|
", which would make it world-writable."
|
||||||
|
|||||||
4
cpp/ql/src/change-notes/2025-01-07-cmake.md
Normal file
4
cpp/ql/src/change-notes/2025-01-07-cmake.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
category: minorAnalysis
|
||||||
|
---
|
||||||
|
* The `cpp/badly-bounded-write`, `cpp/equality-on-floats`, `cpp/short-global-name`, `cpp/static-buffer-overflow`, `cpp/too-few-arguments`, `cpp/useless-expression`, `cpp/world-writable-file-creation` queries no longer produce alerts on files created by CMake to test the build configuration.
|
||||||
4
cpp/ql/src/change-notes/2025-01-09-SysAllocString.md
Normal file
4
cpp/ql/src/change-notes/2025-01-09-SysAllocString.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
category: minorAnalysis
|
||||||
|
---
|
||||||
|
* Added dataflow models for `SysAllocString` and related functions.
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/cpp-queries
|
name: codeql/cpp-queries
|
||||||
version: 1.3.1
|
version: 1.3.2-dev
|
||||||
groups:
|
groups:
|
||||||
- cpp
|
- cpp
|
||||||
- queries
|
- queries
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ edges
|
|||||||
| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | *send_buffer | provenance | Sink:MaD:6 |
|
| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | *send_buffer | provenance | Sink:MaD:6 |
|
||||||
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | provenance | |
|
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | provenance | |
|
||||||
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:10 |
|
| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:10 |
|
||||||
| test.cpp:4:5:4:11 | [summary param] 0 in ymlStep | test.cpp:4:5:4:11 | [summary] to write: ReturnValue in ymlStep | provenance | MaD:966 |
|
| test.cpp:4:5:4:11 | [summary param] 0 in ymlStep | test.cpp:4:5:4:11 | [summary] to write: ReturnValue in ymlStep | provenance | MaD:969 |
|
||||||
| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:7:10:7:18 | call to ymlSource | provenance | Src:MaD:964 |
|
| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:7:10:7:18 | call to ymlSource | provenance | Src:MaD:967 |
|
||||||
| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:11:10:11:10 | x | provenance | Sink:MaD:965 |
|
| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:11:10:11:10 | x | provenance | Sink:MaD:968 |
|
||||||
| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:13:18:13:18 | x | provenance | |
|
| test.cpp:7:10:7:18 | call to ymlSource | test.cpp:13:18:13:18 | x | provenance | |
|
||||||
| test.cpp:13:10:13:16 | call to ymlStep | test.cpp:13:10:13:16 | call to ymlStep | provenance | |
|
| test.cpp:13:10:13:16 | call to ymlStep | test.cpp:13:10:13:16 | call to ymlStep | provenance | |
|
||||||
| test.cpp:13:10:13:16 | call to ymlStep | test.cpp:15:10:15:10 | y | provenance | Sink:MaD:965 |
|
| test.cpp:13:10:13:16 | call to ymlStep | test.cpp:15:10:15:10 | y | provenance | Sink:MaD:968 |
|
||||||
| test.cpp:13:18:13:18 | x | test.cpp:4:5:4:11 | [summary param] 0 in ymlStep | provenance | |
|
| test.cpp:13:18:13:18 | x | test.cpp:4:5:4:11 | [summary param] 0 in ymlStep | provenance | |
|
||||||
| test.cpp:13:18:13:18 | x | test.cpp:13:10:13:16 | call to ymlStep | provenance | MaD:966 |
|
| test.cpp:13:18:13:18 | x | test.cpp:13:10:13:16 | call to ymlStep | provenance | MaD:969 |
|
||||||
nodes
|
nodes
|
||||||
| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | semmle.label | [summary param] *0 in buffer |
|
| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | semmle.label | [summary param] *0 in buffer |
|
||||||
| asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | semmle.label | [summary] to write: ReturnValue in buffer |
|
| asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | semmle.label | [summary] to write: ReturnValue in buffer |
|
||||||
|
|||||||
@@ -76,3 +76,5 @@
|
|||||||
| tests.cpp:437:5:437:36 | [summary] to write: ReturnValue in madCallReturnValueIgnoreFunction | ReturnNode | madCallReturnValueIgnoreFunction | madCallReturnValueIgnoreFunction |
|
| tests.cpp:437:5:437:36 | [summary] to write: ReturnValue in madCallReturnValueIgnoreFunction | ReturnNode | madCallReturnValueIgnoreFunction | madCallReturnValueIgnoreFunction |
|
||||||
| tests.cpp:459:5:459:31 | [summary param] *0 in parameter_ref_to_return_ref | ParameterNode | parameter_ref_to_return_ref | parameter_ref_to_return_ref |
|
| tests.cpp:459:5:459:31 | [summary param] *0 in parameter_ref_to_return_ref | ParameterNode | parameter_ref_to_return_ref | parameter_ref_to_return_ref |
|
||||||
| tests.cpp:459:5:459:31 | [summary] to write: ReturnValue[*] in parameter_ref_to_return_ref | ReturnNode | parameter_ref_to_return_ref | parameter_ref_to_return_ref |
|
| tests.cpp:459:5:459:31 | [summary] to write: ReturnValue[*] in parameter_ref_to_return_ref | ReturnNode | parameter_ref_to_return_ref | parameter_ref_to_return_ref |
|
||||||
|
| tests.cpp:471:5:471:17 | [summary param] *0 in receive_array | ParameterNode | receive_array | receive_array |
|
||||||
|
| tests.cpp:471:5:471:17 | [summary] to write: ReturnValue in receive_array | ReturnNode | receive_array | receive_array |
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ summarizedCallables
|
|||||||
| tests.cpp:436:6:436:25 | madCallArg0WithValue |
|
| tests.cpp:436:6:436:25 | madCallArg0WithValue |
|
||||||
| tests.cpp:437:5:437:36 | madCallReturnValueIgnoreFunction |
|
| tests.cpp:437:5:437:36 | madCallReturnValueIgnoreFunction |
|
||||||
| tests.cpp:459:5:459:31 | parameter_ref_to_return_ref |
|
| tests.cpp:459:5:459:31 | parameter_ref_to_return_ref |
|
||||||
|
| tests.cpp:471:5:471:17 | receive_array |
|
||||||
sourceCallables
|
sourceCallables
|
||||||
| tests.cpp:3:5:3:10 | source |
|
| tests.cpp:3:5:3:10 | source |
|
||||||
| tests.cpp:4:6:4:14 | sourcePtr |
|
| tests.cpp:4:6:4:14 | sourcePtr |
|
||||||
@@ -230,3 +231,9 @@ sourceCallables
|
|||||||
| tests.cpp:463:6:463:6 | x |
|
| tests.cpp:463:6:463:6 | x |
|
||||||
| tests.cpp:464:36:464:36 | s |
|
| tests.cpp:464:36:464:36 | s |
|
||||||
| tests.cpp:465:6:465:6 | y |
|
| tests.cpp:465:6:465:6 | y |
|
||||||
|
| tests.cpp:469:7:469:9 | INT |
|
||||||
|
| tests.cpp:471:23:471:23 | a |
|
||||||
|
| tests.cpp:473:6:473:23 | test_receive_array |
|
||||||
|
| tests.cpp:474:6:474:6 | x |
|
||||||
|
| tests.cpp:475:6:475:10 | array |
|
||||||
|
| tests.cpp:476:6:476:6 | y |
|
||||||
|
|||||||
@@ -98,7 +98,8 @@ private class TestSummaries extends SummaryModelCsv {
|
|||||||
";;false;madCallArg0ReturnToReturnFirst;;;Argument[0].ReturnValue;ReturnValue.Field[first];value",
|
";;false;madCallArg0ReturnToReturnFirst;;;Argument[0].ReturnValue;ReturnValue.Field[first];value",
|
||||||
";;false;madCallArg0WithValue;;;Argument[1];Argument[0].Parameter[0];value",
|
";;false;madCallArg0WithValue;;;Argument[1];Argument[0].Parameter[0];value",
|
||||||
";;false;madCallReturnValueIgnoreFunction;;;Argument[1];ReturnValue;value",
|
";;false;madCallReturnValueIgnoreFunction;;;Argument[1];ReturnValue;value",
|
||||||
";StructWithTypedefInParameter<T>;true;parameter_ref_to_return_ref;(const T &);;Argument[*0];ReturnValue[*];value"
|
";StructWithTypedefInParameter<T>;true;parameter_ref_to_return_ref;(const T &);;Argument[*0];ReturnValue[*];value",
|
||||||
|
";;false;receive_array;(int[20]);;Argument[*0];ReturnValue;taint"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -464,4 +464,15 @@ void test_parameter_ref_to_return_ref() {
|
|||||||
StructWithTypedefInParameter<int> s;
|
StructWithTypedefInParameter<int> s;
|
||||||
int y = s.parameter_ref_to_return_ref(x);
|
int y = s.parameter_ref_to_return_ref(x);
|
||||||
sink(y); // $ ir
|
sink(y); // $ ir
|
||||||
|
}
|
||||||
|
|
||||||
|
using INT = int;
|
||||||
|
|
||||||
|
int receive_array(INT a[20]); // $ interpretElement
|
||||||
|
|
||||||
|
void test_receive_array() {
|
||||||
|
int x = source();
|
||||||
|
int array[10] = {x};
|
||||||
|
int y = receive_array(array);
|
||||||
|
sink(y); // $ ir
|
||||||
}
|
}
|
||||||
@@ -7735,6 +7735,12 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future
|
|||||||
| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:790:11:790:12 | f2 [inner post update] | |
|
| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:790:11:790:12 | f2 [inner post update] | |
|
||||||
| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:791:7:791:8 | f2 | |
|
| taint.cpp:790:10:790:12 | ref arg & ... | taint.cpp:791:7:791:8 | f2 | |
|
||||||
| taint.cpp:790:11:790:12 | f2 | taint.cpp:790:10:790:12 | & ... | |
|
| taint.cpp:790:11:790:12 | f2 | taint.cpp:790:10:790:12 | & ... | |
|
||||||
|
| taint.cpp:805:12:805:25 | call to SysAllocString | taint.cpp:806:8:806:9 | p1 | |
|
||||||
|
| taint.cpp:806:8:806:9 | p1 | taint.cpp:806:7:806:9 | * ... | TAINT |
|
||||||
|
| taint.cpp:808:12:808:32 | call to SysAllocStringByteLen | taint.cpp:809:8:809:9 | p2 | |
|
||||||
|
| taint.cpp:809:8:809:9 | p2 | taint.cpp:809:7:809:9 | * ... | TAINT |
|
||||||
|
| taint.cpp:811:12:811:28 | call to SysAllocStringLen | taint.cpp:812:8:812:9 | p3 | |
|
||||||
|
| taint.cpp:812:8:812:9 | p3 | taint.cpp:812:7:812:9 | * ... | TAINT |
|
||||||
| vector.cpp:16:43:16:49 | source1 | vector.cpp:17:26:17:32 | source1 | |
|
| vector.cpp:16:43:16:49 | source1 | vector.cpp:17:26:17:32 | source1 | |
|
||||||
| vector.cpp:16:43:16:49 | source1 | vector.cpp:31:38:31:44 | source1 | |
|
| vector.cpp:16:43:16:49 | source1 | vector.cpp:31:38:31:44 | source1 | |
|
||||||
| vector.cpp:17:21:17:33 | call to vector | vector.cpp:19:14:19:14 | v | |
|
| vector.cpp:17:21:17:33 | call to vector | vector.cpp:19:14:19:14 | v | |
|
||||||
|
|||||||
@@ -789,4 +789,25 @@ void fopen_test(char* source) {
|
|||||||
FILE* f2;
|
FILE* f2;
|
||||||
fopen_s(&f2, source, "r");
|
fopen_s(&f2, source, "r");
|
||||||
sink(f2); // $ ast,ir
|
sink(f2); // $ ast,ir
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef wchar_t OLECHAR;
|
||||||
|
typedef OLECHAR* LPOLESTR;
|
||||||
|
typedef const LPOLESTR LPCOLESTR;
|
||||||
|
typedef OLECHAR* BSTR;
|
||||||
|
typedef const char* LPCSTR;
|
||||||
|
|
||||||
|
BSTR SysAllocString(const OLECHAR *);
|
||||||
|
BSTR SysAllocStringByteLen(LPCSTR, unsigned );
|
||||||
|
BSTR SysAllocStringLen(const OLECHAR *,unsigned);
|
||||||
|
|
||||||
|
void test_sysalloc() {
|
||||||
|
auto p1 = SysAllocString((LPOLESTR)indirect_source());
|
||||||
|
sink(*p1); // $ ir MISSING: ast
|
||||||
|
|
||||||
|
auto p2 = SysAllocStringByteLen(indirect_source(), 10);
|
||||||
|
sink(*p2); // $ ir MISSING: ast
|
||||||
|
|
||||||
|
auto p3 = SysAllocStringLen((LPOLESTR)indirect_source(), 10);
|
||||||
|
sink(*p3); // $ ir MISSING: ast
|
||||||
}
|
}
|
||||||
@@ -2021,6 +2021,14 @@ getParameterTypeName
|
|||||||
| taint.cpp:783:5:783:11 | fopen_s | 1 | const char * |
|
| taint.cpp:783:5:783:11 | fopen_s | 1 | const char * |
|
||||||
| taint.cpp:783:5:783:11 | fopen_s | 2 | const char * |
|
| taint.cpp:783:5:783:11 | fopen_s | 2 | const char * |
|
||||||
| taint.cpp:785:6:785:15 | fopen_test | 0 | char * |
|
| taint.cpp:785:6:785:15 | fopen_test | 0 | char * |
|
||||||
|
| taint.cpp:800:6:800:19 | SysAllocString | 0 | const OLECHAR * |
|
||||||
|
| taint.cpp:800:6:800:19 | SysAllocString | 0 | const wchar_t * |
|
||||||
|
| taint.cpp:801:6:801:26 | SysAllocStringByteLen | 0 | LPCSTR |
|
||||||
|
| taint.cpp:801:6:801:26 | SysAllocStringByteLen | 0 | const char * |
|
||||||
|
| taint.cpp:801:6:801:26 | SysAllocStringByteLen | 1 | unsigned int |
|
||||||
|
| taint.cpp:802:6:802:22 | SysAllocStringLen | 0 | const OLECHAR * |
|
||||||
|
| taint.cpp:802:6:802:22 | SysAllocStringLen | 0 | const wchar_t * |
|
||||||
|
| taint.cpp:802:6:802:22 | SysAllocStringLen | 1 | unsigned int |
|
||||||
| vector.cpp:13:6:13:9 | sink | 0 | int |
|
| vector.cpp:13:6:13:9 | sink | 0 | int |
|
||||||
| vector.cpp:14:27:14:30 | sink | 0 | vector> & |
|
| vector.cpp:14:27:14:30 | sink | 0 | vector> & |
|
||||||
| vector.cpp:14:27:14:30 | sink | 0 | vector> & |
|
| vector.cpp:14:27:14:30 | sink | 0 | vector> & |
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
typedef long long size_t;
|
||||||
|
|
||||||
|
size_t strlen(const char *s);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
strlen(""); // GOOD: the source file occurs in a `CMakeFiles/CMakeScratch/TryCompile-...` directory
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Likely Bugs/Likely Typos/ExprHasNoEffect.ql
|
||||||
@@ -52,8 +52,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
|||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(cert))
|
if (!string.IsNullOrWhiteSpace(cert))
|
||||||
{
|
{
|
||||||
logger.LogInfo("No certificate configured for Dependabot proxy.");
|
|
||||||
|
|
||||||
var certDirPath = new DirectoryInfo(Path.Join(tempWorkingDirectory.DirInfo.FullName, ".dependabot-proxy"));
|
var certDirPath = new DirectoryInfo(Path.Join(tempWorkingDirectory.DirInfo.FullName, ".dependabot-proxy"));
|
||||||
Directory.CreateDirectory(certDirPath.FullName);
|
Directory.CreateDirectory(certDirPath.FullName);
|
||||||
|
|
||||||
|
|||||||
@@ -46,9 +46,9 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
|||||||
{
|
{
|
||||||
logger.LogInfo($"Setting up Dependabot proxy at {this.proxy.Address}");
|
logger.LogInfo($"Setting up Dependabot proxy at {this.proxy.Address}");
|
||||||
|
|
||||||
startInfo.EnvironmentVariables.Add("HTTP_PROXY", this.proxy.Address);
|
startInfo.EnvironmentVariables["HTTP_PROXY"] = this.proxy.Address;
|
||||||
startInfo.EnvironmentVariables.Add("HTTPS_PROXY", this.proxy.Address);
|
startInfo.EnvironmentVariables["HTTPS_PROXY"] = this.proxy.Address;
|
||||||
startInfo.EnvironmentVariables.Add("SSL_CERT_FILE", this.proxy.CertificatePath);
|
startInfo.EnvironmentVariables["SSL_CERT_FILE"] = this.proxy.CertificatePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
return startInfo;
|
return startInfo;
|
||||||
|
|||||||
@@ -34,10 +34,25 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
|||||||
using var sw = new StreamWriter(analyzerConfigPath);
|
using var sw = new StreamWriter(analyzerConfigPath);
|
||||||
sw.WriteLine("is_global = true");
|
sw.WriteLine("is_global = true");
|
||||||
|
|
||||||
foreach (var f in cshtmls.Select(f => f.Replace('\\', '/')))
|
foreach (var cshtml in cshtmls)
|
||||||
{
|
{
|
||||||
sw.WriteLine($"\n[{f}]");
|
var adjustedPath = cshtml.Replace('\\', '/');
|
||||||
var base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(f)); // TODO: this should be the relative path of the file.
|
string? relativePath;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var csprojFolder = Path.GetDirectoryName(csprojFile);
|
||||||
|
relativePath = csprojFolder is not null ? Path.GetRelativePath(csprojFolder, cshtml) : cshtml;
|
||||||
|
relativePath = relativePath.Replace('\\', '/');
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
logger.LogWarning($"Failed to get relative path for {cshtml}: {e.Message}");
|
||||||
|
relativePath = adjustedPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
sw.WriteLine($"\n[{adjustedPath}]");
|
||||||
|
var base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(relativePath));
|
||||||
sw.WriteLine($"build_metadata.AdditionalFiles.TargetPath = {base64}");
|
sw.WriteLine($"build_metadata.AdditionalFiles.TargetPath = {base64}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/csharp-solorigate-all
|
name: codeql/csharp-solorigate-all
|
||||||
version: 1.7.31
|
version: 1.7.32-dev
|
||||||
groups:
|
groups:
|
||||||
- csharp
|
- csharp
|
||||||
- solorigate
|
- solorigate
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/csharp-solorigate-queries
|
name: codeql/csharp-solorigate-queries
|
||||||
version: 1.7.31
|
version: 1.7.32-dev
|
||||||
groups:
|
groups:
|
||||||
- csharp
|
- csharp
|
||||||
- solorigate
|
- solorigate
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<base href="/" />
|
||||||
|
<link rel="stylesheet" href="bootstrap/bootstrap.min.css" />
|
||||||
|
<link rel="stylesheet" href="app.css" />
|
||||||
|
<link rel="stylesheet" href="BlazorTest.styles.css" />
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" />
|
||||||
|
<HeadOutlet />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<Routes />
|
||||||
|
<script src="_framework/blazor.web.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
@inherits LayoutComponentBase
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<div class="sidebar">
|
||||||
|
<NavMenu />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="top-row px-4">
|
||||||
|
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<article class="content px-4">
|
||||||
|
@Body
|
||||||
|
</article>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="blazor-error-ui">
|
||||||
|
An unhandled error has occurred.
|
||||||
|
<a href="" class="reload">Reload</a>
|
||||||
|
<a class="dismiss">🗙</a>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
.page {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row {
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
border-bottom: 1px solid #d6d5d5;
|
||||||
|
justify-content: flex-end;
|
||||||
|
height: 3.5rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row ::deep a, .top-row ::deep .btn-link {
|
||||||
|
white-space: nowrap;
|
||||||
|
margin-left: 1.5rem;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row ::deep a:first-child {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 640.98px) {
|
||||||
|
.top-row {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row ::deep a, .top-row ::deep .btn-link {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 641px) {
|
||||||
|
.page {
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
width: 250px;
|
||||||
|
height: 100vh;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row.auth ::deep a:first-child {
|
||||||
|
flex: 1;
|
||||||
|
text-align: right;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row, article {
|
||||||
|
padding-left: 2rem !important;
|
||||||
|
padding-right: 1.5rem !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#blazor-error-ui {
|
||||||
|
background: lightyellow;
|
||||||
|
bottom: 0;
|
||||||
|
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
|
||||||
|
display: none;
|
||||||
|
left: 0;
|
||||||
|
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#blazor-error-ui .dismiss {
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
right: 0.75rem;
|
||||||
|
top: 0.5rem;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<div class="top-row ps-3 navbar navbar-dark">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<a class="navbar-brand" href="">BlazorTest</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="checkbox" title="Navigation menu" class="navbar-toggler" />
|
||||||
|
|
||||||
|
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
|
||||||
|
<nav class="flex-column">
|
||||||
|
|
||||||
|
<div class="nav-item px-3">
|
||||||
|
<NavLink class="nav-link" href="test">
|
||||||
|
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> Test
|
||||||
|
</NavLink>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
.navbar-toggler {
|
||||||
|
appearance: none;
|
||||||
|
cursor: pointer;
|
||||||
|
width: 3.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
color: white;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.5rem;
|
||||||
|
right: 1rem;
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-toggler:checked {
|
||||||
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-row {
|
||||||
|
height: 3.5rem;
|
||||||
|
background-color: rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: 1.25rem;
|
||||||
|
height: 1.25rem;
|
||||||
|
margin-right: 0.75rem;
|
||||||
|
top: -1px;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi-house-door-fill-nav-menu {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi-plus-square-fill-nav-menu {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi-list-nested-nav-menu {
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:first-of-type {
|
||||||
|
padding-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:last-of-type {
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item ::deep .nav-link {
|
||||||
|
color: #d7d7d7;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
height: 3rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
line-height: 3rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item ::deep a.active {
|
||||||
|
background-color: rgba(255,255,255,0.37);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item ::deep .nav-link:hover {
|
||||||
|
background-color: rgba(255,255,255,0.1);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-scrollable {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-toggler:checked ~ .nav-scrollable {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 641px) {
|
||||||
|
.navbar-toggler {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-scrollable {
|
||||||
|
/* Never collapse the sidebar for wide screens */
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
/* Allow sidebar to scroll for tall menus */
|
||||||
|
height: calc(100vh - 3.5rem);
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
@rendermode InteractiveServer
|
||||||
|
|
||||||
|
<input @bind="Param1" @bind:event="onchange" @bind:after="Fire">
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public string? Param1 { get; set; } = "";
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback<string?> ValueChanged { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback<string?> Param1Changed { get; set; }
|
||||||
|
|
||||||
|
private void Fire()
|
||||||
|
{
|
||||||
|
ValueChanged.InvokeAsync(Param1);
|
||||||
|
Param1Changed.InvokeAsync(Param1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
@rendermode InteractiveServer
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p>Value from InputText: @Value</p>
|
||||||
|
<p>Raw value from InputText: @(new MarkupString(Value))</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[Parameter]
|
||||||
|
public string Value { get; set; } = "";
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
@page "/Error"
|
||||||
|
@using System.Diagnostics
|
||||||
|
|
||||||
|
<PageTitle>Error</PageTitle>
|
||||||
|
|
||||||
|
<h1 class="text-danger">Error.</h1>
|
||||||
|
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||||
|
|
||||||
|
@if (ShowRequestId)
|
||||||
|
{
|
||||||
|
<p>
|
||||||
|
<strong>Request ID:</strong> <code>@RequestId</code>
|
||||||
|
</p>
|
||||||
|
}
|
||||||
|
|
||||||
|
<h3>Development Mode</h3>
|
||||||
|
<p>
|
||||||
|
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||||
|
It can result in displaying sensitive information from exceptions to end users.
|
||||||
|
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||||
|
and restarting the app.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
@code{
|
||||||
|
[CascadingParameter]
|
||||||
|
private HttpContext? HttpContext { get; set; }
|
||||||
|
|
||||||
|
private string? RequestId { get; set; }
|
||||||
|
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||||
|
|
||||||
|
protected override void OnInitialized() =>
|
||||||
|
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
@page "/"
|
||||||
|
@page "/test/{urlParam?}"
|
||||||
|
@rendermode InteractiveServer
|
||||||
|
|
||||||
|
<PageTitle>TestPage</PageTitle>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Route parameter</h3>
|
||||||
|
<p>Go to: <a href="/test/@XssUrl">/test/@XssUrl</a></p>
|
||||||
|
<p>Parameter from URL: @UrlParam</p>
|
||||||
|
<p>Raw parameter from URL: @((MarkupString)UrlParam)</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Query parameter</h3>
|
||||||
|
<p>Go to: <a href="/test/?qs=@XssUrl">/test/?qs=@XssUrl</a></p>
|
||||||
|
<p>Parameter from query string: @QueryParam</p>
|
||||||
|
<p>Raw parameter from query string: @(new MarkupString(QueryParam))</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Bind InputText component</h3>
|
||||||
|
<InputText @bind-Value="InputValue1" />
|
||||||
|
<p>Value from InputText: @InputValue1</p>
|
||||||
|
<p>Raw value from InputText: @(new MarkupString(InputValue1))</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Bind input element</h3>
|
||||||
|
<input @bind="InputValue2">
|
||||||
|
<p>Value from InputText: @InputValue2</p>
|
||||||
|
<p>Raw value from InputText: @(new MarkupString(InputValue2))</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Bind through object property</h3>
|
||||||
|
<input @bind="Container1.Value">
|
||||||
|
<p>Value from InputText: @Container1.Value</p>
|
||||||
|
<p>Raw value from InputText: @(new MarkupString(Container1.Value))</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Input component with custom event</h3>
|
||||||
|
<MyInput Param1="@InputValue3" ValueChanged="MyInputChanged" />
|
||||||
|
<p>Value from InputText: @InputValue3</p>
|
||||||
|
<p>Raw value from InputText: @(new MarkupString(InputValue3))</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Input component with binding</h3>
|
||||||
|
<MyInput @bind-Param1="InputValue4" />
|
||||||
|
<p>Value from InputText: @InputValue4</p>
|
||||||
|
<p>Raw value from InputText: @(new MarkupString(InputValue4))</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Input, Output components</h3>
|
||||||
|
<MyInput @bind-Param1="InputValue5" />
|
||||||
|
<MyOutput Value="@InputValue5" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Bind InputText, Output component</h3>
|
||||||
|
<InputText @bind-Value="InputValue6" />
|
||||||
|
<MyOutput Value="@InputValue6" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
public class Container
|
||||||
|
{
|
||||||
|
public string? Value { get; set; } = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private const string XssUrl = "<b>aaaa<%2Fb>";
|
||||||
|
private const string XssUrl2 = "<b>aaaa</b>";
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public string UrlParam { get; set; } = "";
|
||||||
|
|
||||||
|
[SupplyParameterFromQuery(Name = "qs")]
|
||||||
|
public string QueryParam { get; set; } = "";
|
||||||
|
|
||||||
|
public string InputValue1 { get; set; } = "";
|
||||||
|
public string InputValue2 { get; set; } = "";
|
||||||
|
public string InputValue3 { get; set; } = "";
|
||||||
|
public string InputValue4 { get; set; } = "";
|
||||||
|
public string InputValue5 { get; set; } = "";
|
||||||
|
public string InputValue6 { get; set; } = "";
|
||||||
|
|
||||||
|
public Container Container1 { get; set; } = new Container();
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
InputValue1 = XssUrl2;
|
||||||
|
InputValue2 = XssUrl2;
|
||||||
|
Container1.Value = XssUrl2;
|
||||||
|
InputValue3 = XssUrl2;
|
||||||
|
InputValue4 = XssUrl2;
|
||||||
|
InputValue5 = XssUrl2;
|
||||||
|
InputValue6 = XssUrl2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MyInputChanged(string value)
|
||||||
|
{
|
||||||
|
InputValue3 = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<Router AppAssembly="typeof(Program).Assembly">
|
||||||
|
<Found Context="routeData">
|
||||||
|
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
|
||||||
|
<FocusOnNavigate RouteData="routeData" Selector="h1" />
|
||||||
|
</Found>
|
||||||
|
</Router>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
@using System.Net.Http
|
||||||
|
@using System.Net.Http.Json
|
||||||
|
@using Microsoft.AspNetCore.Components.Forms
|
||||||
|
@using Microsoft.AspNetCore.Components.Routing
|
||||||
|
@using Microsoft.AspNetCore.Components.Web
|
||||||
|
@using static Microsoft.AspNetCore.Components.Web.RenderMode
|
||||||
|
@using Microsoft.AspNetCore.Components.Web.Virtualization
|
||||||
|
@using Microsoft.JSInterop
|
||||||
|
@using BlazorTest
|
||||||
|
@using BlazorTest.Components
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
using BlazorTest.Components;
|
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
|
// Add services to the container.
|
||||||
|
builder.Services.AddRazorComponents()
|
||||||
|
.AddInteractiveServerComponents();
|
||||||
|
|
||||||
|
var app = builder.Build();
|
||||||
|
|
||||||
|
// Configure the HTTP request pipeline.
|
||||||
|
if (!app.Environment.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Error", createScopeForErrors: true);
|
||||||
|
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||||
|
app.UseHsts();
|
||||||
|
}
|
||||||
|
|
||||||
|
app.UseHttpsRedirection();
|
||||||
|
|
||||||
|
app.UseStaticFiles();
|
||||||
|
app.UseAntiforgery();
|
||||||
|
|
||||||
|
app.MapRazorComponents<App>()
|
||||||
|
.AddInteractiveServerRenderMode();
|
||||||
|
|
||||||
|
app.Run();
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
|
"profiles": {
|
||||||
|
"http": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"applicationUrl": "http://localhost:5047",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AllowedHosts": "*"
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"sdk": {
|
||||||
|
"version": "9.0.100"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
html, body {
|
||||||
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
a, .btn-link {
|
||||||
|
color: #006bb7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #1b6ec2;
|
||||||
|
border-color: #1861ac;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
|
||||||
|
box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
padding-top: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.valid.modified:not([type=checkbox]) {
|
||||||
|
outline: 1px solid #26b050;
|
||||||
|
}
|
||||||
|
|
||||||
|
.invalid {
|
||||||
|
outline: 1px solid #e50000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.validation-message {
|
||||||
|
color: #e50000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blazor-error-boundary {
|
||||||
|
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
|
||||||
|
padding: 1rem 1rem 1rem 3.7rem;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blazor-error-boundary::after {
|
||||||
|
content: "An error has occurred."
|
||||||
|
}
|
||||||
|
|
||||||
|
.darker-border-checkbox.form-check-input {
|
||||||
|
border-color: #929292;
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user