Rust: add back getAttr to ArrayExpr

This commit is contained in:
Paolo Tranquilli
2024-12-03 16:12:56 +01:00
parent c113503b41
commit 277c9f4087
19 changed files with 92 additions and 34 deletions

View File

@@ -359,7 +359,7 @@ fn get_fields(node: &AstNodeSrc) -> Vec<FieldInfo> {
result.push(FieldInfo {
name: "is_semicolon".to_string(),
tp: "predicate".to_string(),
is_many: true,
is_many: false,
});
}
_ => {}

View File

@@ -1,8 +1,8 @@
lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 2dfc45d5b2b93b3aa226924da7f9321c2d7a20e60ac7a6a48215118f73fdb181 f1ec54884508eb1f72dcda6677f8e11b79043e906b1c7f3e408e1606e290e347
lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 2a4a561c08eafa7dfcac45c40b1bbde65e401983be3af4e0850f016a6bb2a732 9c86adf714e681e013dc4a0d944f2aa153a143ef8a8033d87254db9ae18cd896
lib/codeql/rust/elements/Abi.qll 4c973d28b6d628f5959d1f1cc793704572fd0acaae9a97dfce82ff9d73f73476 250f68350180af080f904cd34cb2af481c5c688dc93edf7365fd0ae99855e893
lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be
lib/codeql/rust/elements/ArgList.qll 661f5100f5d3ef8351452d9058b663a2a5c720eea8cf11bedd628969741486a2 28e424aac01a90fb58cd6f9f83c7e4cf379eea39e636bc0ba07efc818be71c71
lib/codeql/rust/elements/ArrayExpr.qll 04e5710b083ce29b51e9c9cefd3fa24df5fbf79b0dbaef23b1724d7e708372e5 dd0b89075c985e67aaeb19e1750cc9301f0c1c991232d67a185797dcfe75b223
lib/codeql/rust/elements/ArrayExpr.qll e4e7cff3518c50ec908271906dd46c1fbe9098faa1e8cd06a27f0a6e8d165ed1 fe02a4f4197f57ecd1e8e82d6c9384148ec29d8b106d7f696795b2f325e4a71b
lib/codeql/rust/elements/ArrayListExpr.qll 451aedcecb479c385ff497588c7a07fda304fd5b873270223a4f2c804e96b245 a8cb008f6f732215623b5626c84b37b651ca01ccafb2cf4c835df35d5140c6ad
lib/codeql/rust/elements/ArrayRepeatExpr.qll 4b7ed5be7d2caaf69f6fc0cd05b0e2416c52d547b1a73fb23d5a13007f75f4dd f6366f21cc48376b5fdf37e8c5c2b19415d4cbdeef09f33bb99cde5cb0f5b0e7
lib/codeql/rust/elements/ArrayType.qll affd43d308200d60d08e8924cdbb2a17a827ebaa62a296e07bb9ce97451e3c4c 80589a7f79bf2ac293a027faf2589b3027a6c4a286533f2ffccad259a306a8cb
@@ -176,7 +176,6 @@ lib/codeql/rust/elements/internal/AbiImpl.qll 01439712ecadc9dc8da6f74d2e19cee13c
lib/codeql/rust/elements/internal/AddressableImpl.qll e01a6104980960f5708d5a0ada774ba21db9a344e33deeaf3d3239c627268c77 b8bfc711b267df305ac9fe5f6a994f051ddeca7fc95dacd76d1bae2d4fa7adde
lib/codeql/rust/elements/internal/ArgListConstructor.qll a73685c8792ae23a2d628e7357658efb3f6e34006ff6e9661863ef116ec0b015 0bee572a046e8dfc031b1216d729843991519d94ae66280f5e795d20aea07a22
lib/codeql/rust/elements/internal/ArgListImpl.qll 19664651c06b46530f0ae5745ccb3233afc97b9152e053761d641de6e9c62d38 40af167e571f5c255f264b3be7cc7f5ff42ec109661ca03dcee94e92f8facfc6
lib/codeql/rust/elements/internal/ArrayExprImpl.qll b43ef2dc4b3ae6c9d89b61abe41a3723309c341fdc881d8c3264c251d669c321 667ea0b7fccda95365562e4755435af634cc043dd46fe965be0676b8883e3d2a
lib/codeql/rust/elements/internal/ArrayExprInternal.qll 07a219b3d3fba3ff8b18e77686b2f58ab01acd99e0f5d5cad5d91af937e228f5 7528fc0e2064c481f0d6cbff3835950a044e429a2cd00c4d8442d2e132560d37
lib/codeql/rust/elements/internal/ArrayExprInternalConstructor.qll f9756bc40beee99c5e4355bf157030b440c532dff5bdf43e848b3aa1a00fea90 39467f7f313e6f9ede1fe92375ee408098dc65291ca8ee50e36a3684a2767836
lib/codeql/rust/elements/internal/ArrayExprInternalImpl.qll ae4488846c8309b2d4a51d54b36fce0a75107917c0b1f8af5ccf40797f570580 37838c7d6a04b95a16ed46e963d7e56def7a30b5e5ef1ab7e0dfdb5f256fa874
@@ -419,7 +418,7 @@ lib/codeql/rust/elements/internal/YieldExprImpl.qll af184649a348ddd0be16dee9daae
lib/codeql/rust/elements/internal/generated/Abi.qll 87e1ea6b2a8ebf60e1c69176632740e4e27fc56c3f173939b098ba376562b5fa 94b2121e71c4ec94d53a79f972c05a8484ef0d80ed638f53031e7cf4dc5343d5
lib/codeql/rust/elements/internal/generated/Addressable.qll 96a8b45166dd035b8d2c6d36b8b67019f2d4d0b4ccff6d492677c0c87197613e d8f1ce29feafc8ff7179399fc7eac5db031a7e1a8bc6b2cd75cfce1da3132e9b
lib/codeql/rust/elements/internal/generated/ArgList.qll 1b75b2d7dcf524eb468a0268af6293e9d17832d6bedf3feec49a535824339b57 2bcaf464454bdfdda45fbd24d063f0f1df0eb69f684197b37105adc8f72cd1ea
lib/codeql/rust/elements/internal/generated/ArrayExpr.qll 64d194a9a9d6467d123b90f910775ffc28b6c04e44990d6a1af6d1dbb2ec5bf5 ccc6183f9e90a6c11c5f79a068003a7d63db227fa69287d3ac12d48e8af63ac7
lib/codeql/rust/elements/internal/generated/ArrayExpr.qll 73806a0de8168b38a9436fa6b8c6d68c92eeab3d64a1ae7edfff82f871929992 7ad998cdd8f4fed226473517ad7a5765cb35608033047aad53bf8aa3969fd03b
lib/codeql/rust/elements/internal/generated/ArrayExprInternal.qll 67a7b0fae04b11cf771727ff39a123fb2d5ce6e2d650d32478fcb33a26ed5688 15833405fa85f6abe0e5146dac283cb5a142a07f08300ccc15a1dae30ed88942
lib/codeql/rust/elements/internal/generated/ArrayListExpr.qll f325163c2bd401286305330482bee20d060cecd24afa9e49deab7ba7e72ca056 ae3f5b303e31fc6c48b38172304ee8dcf3af2b2ba693767824ea8a944b6be0eb
lib/codeql/rust/elements/internal/generated/ArrayRepeatExpr.qll ac2035488d5b9328f01ce2dd5bd7598e3af1cbb383ddb48b648e1e8908ea82fc 3ec910b184115fb3750692287e8039560e20bd6a5fb26ac1f9c346424d8eaa48
@@ -520,7 +519,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b
lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60
lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6
lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273
lib/codeql/rust/elements/internal/generated/ParentChild.qll 2a2132e9df63ceeee7e2abbb6b6d9fd62856ae93d113b60ae7d8311d4c9535be b7aaa62c085e71c2dff42e7f2886770c48d964dfe45981c2857af4b9126a8a7b
lib/codeql/rust/elements/internal/generated/ParentChild.qll 8bec00eb2527dad0c361736d318745169296e4e949fc4263790d25c3286b2f79 91b5bd23de043906d91b3d7b75cd75b9cdc77e037a2be2af75912bc285068cbc
lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4
lib/codeql/rust/elements/internal/generated/Path.qll 4c1c8e840ed57880e574142b081b11d7a7428a009f10e3aa8f4645e211f6b2e0 989668cf0f1bdee7557e2f97c01e41d2a56848227fed41477833f5fc1e1d35f6
lib/codeql/rust/elements/internal/generated/PathExpr.qll 2096e3c1db22ee488a761690adabfc9cfdea501c99f7c5d96c0019cb113fc506 54245ce0449c4e263173213df01e079d5168a758503a5dbd61b25ad35a311140
@@ -599,9 +598,11 @@ test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871b
test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52
test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684
test/extractor-tests/generated/ArgList/ArgList_getArg.ql c07c946218489a0ad5fe89e5fd4a7f0ad84a73dc2e650729f48a340cb133be84 ff2382c0693f47e5eb1290aca325290e60c19d877b25b1d7e2ee96009f5fe934
test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql 5b6c0d3f9c75e2cfde4fbe6dc443cb992e91925ba108664b04b88f9567322c28 01b891665f2c8a98770e4b4ac284aafc0d680dbaa10ad54a7799eda62048e21a
test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql e6f9fe0dd6af5a1223e1e59827346aa2975bd665aeda36e8844ffb3a79c5e532 38576b6f7257c119917442e4f54fc883480e4da86d2542a1ac16d723ebbba039
test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.ql f1ca0521f641bed17581121c0f07c7f8737d9891acdde2c68de59a0684e86a34 496da6513cfee28a31274a2e72b5a58d843407ac5e4870296da0f0b8e7fc85c1
test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.ql 6920b532623e8c919701a83a059d9b1aac9e8673e7fdbe26e0a8af5ad6a34b8a 601137c715ce947d79f39d5b131d7ab167a16d29477eacdb1380cd647c4ebac4
test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql cdf73db3b37a9b98a1c63c51bdca9691fcd16f952ce8730385240b7194c55819 8dc29fb0db5df4c4cdd87b406cea92e6e6602908d087af16037a2dec6f9204b8
test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql 60a0df80fd34ca5c960b5e060c7090f8bbb8af83aba7099aa298a80e19a13346 c41f80601c7f50eee01c0ed7587e0198296d6a8a5b95c98dd8f865901d34ba5c
test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.ql fc6ca212aa633b73ee21f7564631c9ad345f15839656d88940dc686cf076a344 d580a367305adbe168996a294329b1adec36956a500ae9717a4af78cb2bef4e6
test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.ql 6b00037350fc36cc46345a290bda4c4d4ff99050b970d23eb94294313046a884 0687638b46e43bba9dda35d78ff7b40f976e5e38271eec77e7a21c28349dc42c
test/extractor-tests/generated/ArrayType/ArrayType.ql d781ea647d60218777261d82230bd85f989a4768a043e736d268363b5a777390 b5c7fa0aa1b8b1f3a82b8af7254bf20efd3477bba83ad53530959d1733636604
test/extractor-tests/generated/ArrayType/ArrayType_getConstArg.ql b6a250873bc2d553219b8301a15bd19a4044f590085992c532a800bf3ab744cb 5e6b9dbbe2d3ea7f6fa3fba4811517a528d5eb58169b69d1b9113e1508c6e627

3
rust/ql/.gitattributes generated vendored
View File

@@ -178,7 +178,6 @@
/lib/codeql/rust/elements/internal/AddressableImpl.qll linguist-generated
/lib/codeql/rust/elements/internal/ArgListConstructor.qll linguist-generated
/lib/codeql/rust/elements/internal/ArgListImpl.qll linguist-generated
/lib/codeql/rust/elements/internal/ArrayExprImpl.qll linguist-generated
/lib/codeql/rust/elements/internal/ArrayExprInternal.qll linguist-generated
/lib/codeql/rust/elements/internal/ArrayExprInternalConstructor.qll linguist-generated
/lib/codeql/rust/elements/internal/ArrayExprInternalImpl.qll linguist-generated
@@ -602,8 +601,10 @@
/test/extractor-tests/generated/ArgList/ArgList.ql linguist-generated
/test/extractor-tests/generated/ArgList/ArgList_getArg.ql linguist-generated
/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql linguist-generated
/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.ql linguist-generated
/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.ql linguist-generated
/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql linguist-generated
/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.ql linguist-generated
/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.ql linguist-generated
/test/extractor-tests/generated/ArrayType/ArrayType.ql linguist-generated
/test/extractor-tests/generated/ArrayType/ArrayType_getConstArg.ql linguist-generated

View File

@@ -111,6 +111,21 @@ module MakeCfgNodes<LocationSig Loc, InputSig<Loc> Input> {
* Gets the number of expressions of this array expression.
*/
int getNumberOfExprs() { result = count(int i | exists(this.getExpr(i))) }
/**
* Gets the `index`th attr of this array expression (0-based).
*/
Attr getAttr(int index) { result = node.getAttr(index) }
/**
* Gets any of the attrs of this array expression.
*/
Attr getAnAttr() { result = this.getAttr(_) }
/**
* Gets the number of attrs of this array expression.
*/
int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
}
final private class ParentArrayListExpr extends ParentAstNode, ArrayListExpr {

View File

@@ -4,6 +4,7 @@
*/
private import internal.ArrayExprImpl
import codeql.rust.elements.Attr
import codeql.rust.elements.Expr
/**

View File

@@ -1,4 +1,3 @@
// generated by codegen, remove this comment if you wish to edit this file
/**
* This module provides a hand-modifiable wrapper around the generated class `ArrayExpr`.
*
@@ -6,12 +5,15 @@
*/
private import codeql.rust.elements.internal.generated.ArrayExpr
private import codeql.rust.elements.internal.generated.Raw
private import codeql.rust.elements.internal.generated.Synth
/**
* INTERNAL: This module contains the customizable definition of `ArrayExpr` and should not
* be referenced directly.
*/
module Impl {
// the following QLdoc is generated: if you need to edit it, do it in the schema file
/**
* The base class for array expressions. For example:
* ```rust
@@ -19,5 +21,18 @@ module Impl {
* [1; 10];
* ```
*/
class ArrayExpr extends Generated::ArrayExpr { }
class ArrayExpr extends Generated::ArrayExpr {
cached
private Raw::ArrayExprInternal getUnderlyingEntity() {
this = Synth::TArrayListExpr(result) or this = Synth::TArrayRepeatExpr(result)
}
override Expr getExpr(int index) {
result = Synth::convertExprFromRaw(this.getUnderlyingEntity().getExpr(index))
}
override Attr getAttr(int index) {
result = Synth::convertAttrFromRaw(this.getUnderlyingEntity().getAttr(index))
}
}
}

View File

@@ -22,13 +22,6 @@ module Impl {
* ```
*/
class ArrayListExpr extends Generated::ArrayListExpr {
cached
private Raw::ArrayExprInternal getUnderlyingEntity() { this = Synth::TArrayListExpr(result) }
override string toString() { result = "[...]" }
override Expr getExpr(int index) {
result = Synth::convertExprFromRaw(this.getUnderlyingEntity().getExpr(index))
}
}
}

View File

@@ -21,9 +21,6 @@ module Impl {
* ```
*/
class ArrayRepeatExpr extends Generated::ArrayRepeatExpr {
cached
private Raw::ArrayExprInternal getUnderlyingEntity() { this = Synth::TArrayRepeatExpr(result) }
override string toString() {
result =
"[" + this.getRepeatOperand().toAbbreviatedString() + "; " +
@@ -33,9 +30,5 @@ module Impl {
override Expr getRepeatOperand() { result = this.getExpr(0) }
override Expr getRepeatLength() { result = this.getExpr(1) }
override Expr getExpr(int index) {
result = Synth::convertExprFromRaw(this.getUnderlyingEntity().getExpr(index))
}
}
}

View File

@@ -6,6 +6,7 @@
private import codeql.rust.elements.internal.generated.Synth
private import codeql.rust.elements.internal.generated.Raw
import codeql.rust.elements.Attr
import codeql.rust.elements.Expr
import codeql.rust.elements.internal.ExprImpl::Impl as ExprImpl
@@ -38,5 +39,20 @@ module Generated {
* Gets the number of expressions of this array expression.
*/
final int getNumberOfExprs() { result = count(int i | exists(this.getExpr(i))) }
/**
* Gets the `index`th attr of this array expression (0-based).
*/
Attr getAttr(int index) { none() }
/**
* Gets any of the attrs of this array expression.
*/
final Attr getAnAttr() { result = this.getAttr(_) }
/**
* Gets the number of attrs of this array expression.
*/
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
}
}

View File

@@ -1190,11 +1190,12 @@ private module Impl {
}
private Element getImmediateChildOfArrayExpr(ArrayExpr e, int index, string partialPredicateCall) {
exists(int b, int bExpr, int n, int nExpr |
exists(int b, int bExpr, int n, int nExpr, int nAttr |
b = 0 and
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
n = bExpr and
nExpr = n + 1 + max(int i | i = -1 or exists(e.getExpr(i)) | i) and
nAttr = nExpr + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and
(
none()
or
@@ -1202,6 +1203,9 @@ private module Impl {
or
result = e.getExpr(index - n) and
partialPredicateCall = "Expr(" + (index - n).toString() + ")"
or
result = e.getAttr(index - nExpr) and
partialPredicateCall = "Attr(" + (index - nExpr).toString() + ")"
)
)
}

View File

@@ -1 +1 @@
| gen_array_list_expr.rs:5:5:5:13 | [...] | getNumberOfExprs: | 3 |
| gen_array_list_expr.rs:5:5:5:13 | [...] | getNumberOfExprs: | 3 | getNumberOfAttrs: | 0 |

View File

@@ -2,9 +2,10 @@
import codeql.rust.elements
import TestUtils
from ArrayListExpr x, int getNumberOfExprs
from ArrayListExpr x, int getNumberOfExprs, int getNumberOfAttrs
where
toBeTested(x) and
not x.isUnknown() and
getNumberOfExprs = x.getNumberOfExprs()
select x, "getNumberOfExprs:", getNumberOfExprs
getNumberOfExprs = x.getNumberOfExprs() and
getNumberOfAttrs = x.getNumberOfAttrs()
select x, "getNumberOfExprs:", getNumberOfExprs, "getNumberOfAttrs:", getNumberOfAttrs

View File

@@ -0,0 +1,7 @@
// generated by codegen, do not edit
import codeql.rust.elements
import TestUtils
from ArrayListExpr x, int index
where toBeTested(x) and not x.isUnknown()
select x, index, x.getAttr(index)

View File

@@ -1 +1 @@
| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | getNumberOfExprs: | 2 | getRepeatOperand: | gen_array_repeat_expr.rs:5:6:5:6 | 1 | getRepeatLength: | gen_array_repeat_expr.rs:5:9:5:10 | 10 |
| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | getNumberOfExprs: | 2 | getNumberOfAttrs: | 0 | getRepeatOperand: | gen_array_repeat_expr.rs:5:6:5:6 | 1 | getRepeatLength: | gen_array_repeat_expr.rs:5:9:5:10 | 10 |

View File

@@ -2,12 +2,15 @@
import codeql.rust.elements
import TestUtils
from ArrayRepeatExpr x, int getNumberOfExprs, Expr getRepeatOperand, Expr getRepeatLength
from
ArrayRepeatExpr x, int getNumberOfExprs, int getNumberOfAttrs, Expr getRepeatOperand,
Expr getRepeatLength
where
toBeTested(x) and
not x.isUnknown() and
getNumberOfExprs = x.getNumberOfExprs() and
getNumberOfAttrs = x.getNumberOfAttrs() and
getRepeatOperand = x.getRepeatOperand() and
getRepeatLength = x.getRepeatLength()
select x, "getNumberOfExprs:", getNumberOfExprs, "getRepeatOperand:", getRepeatOperand,
"getRepeatLength:", getRepeatLength
select x, "getNumberOfExprs:", getNumberOfExprs, "getNumberOfAttrs:", getNumberOfAttrs,
"getRepeatOperand:", getRepeatOperand, "getRepeatLength:", getRepeatLength

View File

@@ -0,0 +1,7 @@
// generated by codegen, do not edit
import codeql.rust.elements
import TestUtils
from ArrayRepeatExpr x, int index
where toBeTested(x) and not x.isUnknown()
select x, index, x.getAttr(index)

View File

@@ -565,6 +565,7 @@ class ArrayExpr(Expr):
```
"""
exprs: list[Expr] | child
attrs: list[Attr] | child
@synth.from_class(ArrayExprInternal)
class ArrayListExpr(ArrayExpr):