mirror of
https://github.com/github/codeql.git
synced 2026-04-24 00:05:14 +02:00
Merge pull request #7413 from hvitved/csharp/fix-test
C#: Fix broken `FlowSummariesFiltered` test
This commit is contained in:
@@ -36,6 +36,25 @@ private import Conversion
|
||||
*/
|
||||
cached
|
||||
predicate implements(Overridable m1, Overridable m2, ValueOrRefType t) {
|
||||
implementsVirtualizable(m1, m2, t)
|
||||
or
|
||||
exists(DeclarationWithAccessors d1, DeclarationWithAccessors d2, int kind |
|
||||
implementsVirtualizable(d1, d2, t) and
|
||||
hasAccessor(d1, m1, pragma[only_bind_into](kind)) and
|
||||
hasAccessor(d2, m2, pragma[only_bind_into](kind))
|
||||
)
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate hasAccessor(DeclarationWithAccessors d, Accessor a, int kind) {
|
||||
a = d.getAnAccessor() and
|
||||
(
|
||||
accessors(a, kind, _, _, _) or
|
||||
event_accessors(a, kind, _, _, _)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate implementsVirtualizable(Virtualizable m1, Virtualizable m2, ValueOrRefType t) {
|
||||
exists(Interface i |
|
||||
i = m2.getDeclaringType() and
|
||||
t.getABaseInterface+() = i and
|
||||
@@ -66,7 +85,7 @@ predicate implements(Overridable m1, Overridable m2, ValueOrRefType t) {
|
||||
* for type `C`, because `C.M()` conflicts.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private Overridable getAnImplementedInterfaceMemberForSubType(Overridable m, ValueOrRefType t) {
|
||||
private Virtualizable getAnImplementedInterfaceMemberForSubType(Virtualizable m, ValueOrRefType t) {
|
||||
result = getACompatibleInterfaceMember(m) and
|
||||
t = m.getDeclaringType()
|
||||
or
|
||||
@@ -78,7 +97,7 @@ private Overridable getAnImplementedInterfaceMemberForSubType(Overridable m, Val
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private predicate hasMemberCompatibleWithInterfaceMember(ValueOrRefType t, Overridable m) {
|
||||
private predicate hasMemberCompatibleWithInterfaceMember(ValueOrRefType t, Virtualizable m) {
|
||||
m = getACompatibleInterfaceMember(t.getAMember())
|
||||
}
|
||||
|
||||
@@ -88,7 +107,7 @@ private predicate hasMemberCompatibleWithInterfaceMember(ValueOrRefType t, Overr
|
||||
* the interface member is accessed.
|
||||
*/
|
||||
pragma[nomagic]
|
||||
private Overridable getACompatibleInterfaceMember(Overridable m) {
|
||||
private Virtualizable getACompatibleInterfaceMember(Virtualizable m) {
|
||||
result = getACompatibleInterfaceMemberAux(m) and
|
||||
(
|
||||
// If there is both an implicit and an explicit compatible member
|
||||
@@ -100,14 +119,14 @@ private Overridable getACompatibleInterfaceMember(Overridable m) {
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private Overridable getACompatibleExplicitInterfaceMember(Overridable m, ValueOrRefType declType) {
|
||||
private Virtualizable getACompatibleExplicitInterfaceMember(Virtualizable m, ValueOrRefType declType) {
|
||||
result = getACompatibleInterfaceMemberAux(m) and
|
||||
declType = m.getDeclaringType() and
|
||||
m.implementsExplicitInterface()
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private Overridable getACompatibleInterfaceMemberAux(Overridable m) {
|
||||
private Virtualizable getACompatibleInterfaceMemberAux(Virtualizable m) {
|
||||
result = getACompatibleInterfaceAccessor(m) or
|
||||
result = getACompatibleInterfaceIndexer(m) or
|
||||
result = getACompatibleInterfaceMethod(m)
|
||||
|
||||
@@ -78,7 +78,6 @@ private import internal.DataFlowPublic
|
||||
private import internal.FlowSummaryImpl::Public
|
||||
private import internal.FlowSummaryImpl::Private::External
|
||||
private import internal.FlowSummaryImplSpecific
|
||||
private import semmle.code.csharp.dispatch.OverridableCallable
|
||||
|
||||
/**
|
||||
* A module importing the frameworks that provide external flow data,
|
||||
@@ -367,7 +366,7 @@ class UnboundCallable extends Callable {
|
||||
*/
|
||||
predicate overridesOrImplementsUnbound(UnboundCallable that) {
|
||||
exists(Callable c |
|
||||
this.(OverridableCallable).overridesOrImplements(c) and
|
||||
this.(Overridable).overridesOrImplements(c) and
|
||||
that = c.getUnboundDeclaration()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -187,6 +187,12 @@ edges
|
||||
| CollectionFlow.cs:373:52:373:53 | access to parameter ts [element] : A | CollectionFlow.cs:373:52:373:56 | access to array element |
|
||||
| CollectionFlow.cs:373:52:373:53 | access to parameter ts [element] : A | CollectionFlow.cs:373:52:373:56 | access to array element |
|
||||
| CollectionFlow.cs:375:49:375:52 | list [element] : A | CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:375:49:375:52 | list [element] : A | CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:375:49:375:52 | list [element] : A | CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:375:49:375:52 | list [element] : A | CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A | CollectionFlow.cs:375:63:375:69 | access to indexer |
|
||||
| CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A | CollectionFlow.cs:375:63:375:69 | access to indexer |
|
||||
| CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A | CollectionFlow.cs:375:63:375:69 | access to indexer |
|
||||
| CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A | CollectionFlow.cs:375:63:375:69 | access to indexer |
|
||||
| CollectionFlow.cs:377:61:377:64 | dict [element, property Value] : A | CollectionFlow.cs:377:75:377:78 | access to parameter dict [element, property Value] : A |
|
||||
| CollectionFlow.cs:377:75:377:78 | access to parameter dict [element, property Value] : A | CollectionFlow.cs:377:75:377:81 | access to indexer |
|
||||
@@ -198,6 +204,12 @@ edges
|
||||
| CollectionFlow.cs:381:41:381:42 | access to parameter ts [element] : A | CollectionFlow.cs:381:41:381:45 | access to array element : A |
|
||||
| CollectionFlow.cs:381:41:381:42 | access to parameter ts [element] : A | CollectionFlow.cs:381:41:381:45 | access to array element : A |
|
||||
| CollectionFlow.cs:383:43:383:46 | list [element] : A | CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:383:43:383:46 | list [element] : A | CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:383:43:383:46 | list [element] : A | CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:383:43:383:46 | list [element] : A | CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A | CollectionFlow.cs:383:52:383:58 | access to indexer : A |
|
||||
| CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A | CollectionFlow.cs:383:52:383:58 | access to indexer : A |
|
||||
| CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A | CollectionFlow.cs:383:52:383:58 | access to indexer : A |
|
||||
| CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A | CollectionFlow.cs:383:52:383:58 | access to indexer : A |
|
||||
| CollectionFlow.cs:385:58:385:61 | dict [element, property Value] : A | CollectionFlow.cs:385:67:385:70 | access to parameter dict [element, property Value] : A |
|
||||
| CollectionFlow.cs:385:67:385:70 | access to parameter dict [element, property Value] : A | CollectionFlow.cs:385:67:385:73 | access to indexer : A |
|
||||
@@ -390,6 +402,12 @@ nodes
|
||||
| CollectionFlow.cs:373:52:373:53 | access to parameter ts [element] : A | semmle.label | access to parameter ts [element] : A |
|
||||
| CollectionFlow.cs:373:52:373:56 | access to array element | semmle.label | access to array element |
|
||||
| CollectionFlow.cs:375:49:375:52 | list [element] : A | semmle.label | list [element] : A |
|
||||
| CollectionFlow.cs:375:49:375:52 | list [element] : A | semmle.label | list [element] : A |
|
||||
| CollectionFlow.cs:375:49:375:52 | list [element] : A | semmle.label | list [element] : A |
|
||||
| CollectionFlow.cs:375:49:375:52 | list [element] : A | semmle.label | list [element] : A |
|
||||
| CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A | semmle.label | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A | semmle.label | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A | semmle.label | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:375:63:375:66 | access to parameter list [element] : A | semmle.label | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:375:63:375:69 | access to indexer | semmle.label | access to indexer |
|
||||
| CollectionFlow.cs:377:61:377:64 | dict [element, property Value] : A | semmle.label | dict [element, property Value] : A |
|
||||
@@ -406,7 +424,16 @@ nodes
|
||||
| CollectionFlow.cs:381:41:381:45 | access to array element : A | semmle.label | access to array element : A |
|
||||
| CollectionFlow.cs:381:41:381:45 | access to array element : A | semmle.label | access to array element : A |
|
||||
| CollectionFlow.cs:383:43:383:46 | list [element] : A | semmle.label | list [element] : A |
|
||||
| CollectionFlow.cs:383:43:383:46 | list [element] : A | semmle.label | list [element] : A |
|
||||
| CollectionFlow.cs:383:43:383:46 | list [element] : A | semmle.label | list [element] : A |
|
||||
| CollectionFlow.cs:383:43:383:46 | list [element] : A | semmle.label | list [element] : A |
|
||||
| CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A | semmle.label | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A | semmle.label | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A | semmle.label | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:383:52:383:55 | access to parameter list [element] : A | semmle.label | access to parameter list [element] : A |
|
||||
| CollectionFlow.cs:383:52:383:58 | access to indexer : A | semmle.label | access to indexer : A |
|
||||
| CollectionFlow.cs:383:52:383:58 | access to indexer : A | semmle.label | access to indexer : A |
|
||||
| CollectionFlow.cs:383:52:383:58 | access to indexer : A | semmle.label | access to indexer : A |
|
||||
| CollectionFlow.cs:383:52:383:58 | access to indexer : A | semmle.label | access to indexer : A |
|
||||
| CollectionFlow.cs:385:58:385:61 | dict [element, property Value] : A | semmle.label | dict [element, property Value] : A |
|
||||
| CollectionFlow.cs:385:67:385:70 | access to parameter dict [element, property Value] : A | semmle.label | access to parameter dict [element, property Value] : A |
|
||||
|
||||
@@ -5,26 +5,56 @@
|
||||
| overrides.cs:172:27:172:30 | M<> | overrides.cs:162:11:162:14 | M<> |
|
||||
| overrides.cs:177:18:177:21 | M<> | overrides.cs:162:11:162:14 | M<> |
|
||||
| overrides.cs:193:19:193:22 | Prop | overrides.cs:182:16:182:19 | Prop |
|
||||
| overrides.cs:193:26:193:28 | get_Prop | overrides.cs:182:23:182:25 | get_Prop |
|
||||
| overrides.cs:193:45:193:47 | set_Prop | overrides.cs:182:28:182:30 | set_Prop |
|
||||
| overrides.cs:205:23:205:26 | Prop | overrides.cs:182:16:182:19 | Prop |
|
||||
| overrides.cs:205:23:205:26 | Prop | overrides.cs:182:16:182:19 | Prop |
|
||||
| overrides.cs:205:30:205:32 | get_Prop | overrides.cs:182:23:182:25 | get_Prop |
|
||||
| overrides.cs:205:30:205:32 | get_Prop | overrides.cs:182:23:182:25 | get_Prop |
|
||||
| overrides.cs:205:35:205:37 | set_Prop | overrides.cs:182:28:182:30 | set_Prop |
|
||||
| overrides.cs:205:35:205:37 | set_Prop | overrides.cs:182:28:182:30 | set_Prop |
|
||||
| overrides.cs:206:21:206:26 | Method | overrides.cs:198:14:198:19 | Method |
|
||||
| overrides.cs:206:21:206:26 | Method | overrides.cs:198:14:198:19 | Method |
|
||||
| overrides.cs:207:23:207:26 | Item | overrides.cs:200:16:200:19 | MyIndexer |
|
||||
| overrides.cs:207:23:207:26 | Item | overrides.cs:200:16:200:19 | MyIndexer |
|
||||
| overrides.cs:207:37:207:39 | get_Item | overrides.cs:200:30:200:32 | get_MyIndexer |
|
||||
| overrides.cs:207:37:207:39 | get_Item | overrides.cs:200:30:200:32 | get_MyIndexer |
|
||||
| overrides.cs:207:56:207:58 | set_Item | overrides.cs:200:35:200:37 | set_MyIndexer |
|
||||
| overrides.cs:207:56:207:58 | set_Item | overrides.cs:200:35:200:37 | set_MyIndexer |
|
||||
| overrides.cs:223:26:223:29 | M<> | overrides.cs:162:11:162:14 | M<> |
|
||||
| overrides.cs:224:28:224:35 | Property | overrides.cs:216:13:216:20 | Property |
|
||||
| overrides.cs:224:39:224:41 | get_Property | overrides.cs:216:24:216:26 | get_Property |
|
||||
| overrides.cs:224:44:224:46 | set_Property | overrides.cs:216:29:216:31 | set_Property |
|
||||
| overrides.cs:225:28:225:31 | Item | overrides.cs:217:13:217:16 | Item |
|
||||
| overrides.cs:225:42:225:44 | get_Item | overrides.cs:217:27:217:29 | get_Item |
|
||||
| overrides.cs:226:43:226:47 | Event | overrides.cs:218:28:218:32 | Event |
|
||||
| overrides.cs:226:43:226:47 | add_Event | overrides.cs:218:28:218:32 | add_Event |
|
||||
| overrides.cs:226:43:226:47 | remove_Event | overrides.cs:218:28:218:32 | remove_Event |
|
||||
| overrides.cs:241:24:241:27 | M<> | overrides.cs:162:11:162:14 | M<> |
|
||||
| overrides.cs:242:16:242:23 | Property | overrides.cs:216:13:216:20 | Property |
|
||||
| overrides.cs:242:27:242:29 | get_Property | overrides.cs:216:24:216:26 | get_Property |
|
||||
| overrides.cs:242:32:242:34 | set_Property | overrides.cs:216:29:216:31 | set_Property |
|
||||
| overrides.cs:243:16:243:19 | Item | overrides.cs:217:13:217:16 | Item |
|
||||
| overrides.cs:243:30:243:32 | get_Item | overrides.cs:217:27:217:29 | get_Item |
|
||||
| overrides.cs:244:31:244:35 | Event | overrides.cs:218:28:218:32 | Event |
|
||||
| overrides.cs:244:39:244:41 | add_Event | overrides.cs:218:28:218:32 | add_Event |
|
||||
| overrides.cs:244:47:244:52 | remove_Event | overrides.cs:218:28:218:32 | remove_Event |
|
||||
| overrides.cs:249:22:249:25 | M<> | overrides.cs:162:11:162:14 | M<> |
|
||||
| overrides.cs:250:24:250:31 | Property | overrides.cs:216:13:216:20 | Property |
|
||||
| overrides.cs:250:35:250:37 | get_Property | overrides.cs:216:24:216:26 | get_Property |
|
||||
| overrides.cs:250:40:250:42 | set_Property | overrides.cs:216:29:216:31 | set_Property |
|
||||
| overrides.cs:251:24:251:27 | Item | overrides.cs:217:13:217:16 | Item |
|
||||
| overrides.cs:251:38:251:40 | get_Item | overrides.cs:217:27:217:29 | get_Item |
|
||||
| overrides.cs:252:39:252:43 | Event | overrides.cs:218:28:218:32 | Event |
|
||||
| overrides.cs:252:39:252:43 | add_Event | overrides.cs:218:28:218:32 | add_Event |
|
||||
| overrides.cs:252:39:252:43 | remove_Event | overrides.cs:218:28:218:32 | remove_Event |
|
||||
| overrides.cs:267:27:267:30 | M<> | overrides.cs:162:11:162:14 | M<> |
|
||||
| overrides.cs:268:29:268:36 | Property | overrides.cs:216:13:216:20 | Property |
|
||||
| overrides.cs:268:40:268:42 | get_Property | overrides.cs:216:24:216:26 | get_Property |
|
||||
| overrides.cs:268:45:268:47 | set_Property | overrides.cs:216:29:216:31 | set_Property |
|
||||
| overrides.cs:269:29:269:32 | Item | overrides.cs:217:13:217:16 | Item |
|
||||
| overrides.cs:269:43:269:45 | get_Item | overrides.cs:217:27:217:29 | get_Item |
|
||||
| overrides.cs:270:44:270:48 | Event | overrides.cs:218:28:218:32 | Event |
|
||||
| overrides.cs:270:44:270:48 | add_Event | overrides.cs:218:28:218:32 | add_Event |
|
||||
| overrides.cs:270:44:270:48 | remove_Event | overrides.cs:218:28:218:32 | remove_Event |
|
||||
| overrides.cs:284:25:284:28 | M<> | overrides.cs:279:18:279:21 | M<> |
|
||||
|
||||
@@ -4,14 +4,29 @@
|
||||
| overrides.A1.Item[int] | overrides.I5.Item[int] | implements |
|
||||
| overrides.A1.M<T>(dynamic[], T) | overrides.I2<System.Object[]>.M<S>(Object[], S) | implements |
|
||||
| overrides.A1.Property | overrides.I5.Property | implements |
|
||||
| overrides.A1.add_Event(EventHandler) | overrides.I5.add_Event(EventHandler) | implements |
|
||||
| overrides.A1.get_Item(int) | overrides.I5.get_Item(int) | implements |
|
||||
| overrides.A1.get_Property() | overrides.I5.get_Property() | implements |
|
||||
| overrides.A1.remove_Event(EventHandler) | overrides.I5.remove_Event(EventHandler) | implements |
|
||||
| overrides.A1.set_Property(int) | overrides.I5.set_Property(int) | implements |
|
||||
| overrides.A4.Event | overrides.I5.Event | implements |
|
||||
| overrides.A4.Item[int] | overrides.I5.Item[int] | implements |
|
||||
| overrides.A4.M<T>(dynamic[], T) | overrides.I2<System.Object[]>.M<S>(Object[], S) | implements |
|
||||
| overrides.A4.Property | overrides.I5.Property | implements |
|
||||
| overrides.A4.add_Event(EventHandler) | overrides.I5.add_Event(EventHandler) | implements |
|
||||
| overrides.A4.get_Item(int) | overrides.I5.get_Item(int) | implements |
|
||||
| overrides.A4.get_Property() | overrides.I5.get_Property() | implements |
|
||||
| overrides.A4.remove_Event(EventHandler) | overrides.I5.remove_Event(EventHandler) | implements |
|
||||
| overrides.A4.set_Property(int) | overrides.I5.set_Property(int) | implements |
|
||||
| overrides.A6.Event | overrides.I5.Event | implements |
|
||||
| overrides.A6.Item[int] | overrides.I5.Item[int] | implements |
|
||||
| overrides.A6.M<T>(Object[], T) | overrides.I2<System.Object[]>.M<S>(Object[], S) | implements |
|
||||
| overrides.A6.Property | overrides.I5.Property | implements |
|
||||
| overrides.A6.add_Event(EventHandler) | overrides.I5.add_Event(EventHandler) | implements |
|
||||
| overrides.A6.get_Item(int) | overrides.I5.get_Item(int) | implements |
|
||||
| overrides.A6.get_Property() | overrides.I5.get_Property() | implements |
|
||||
| overrides.A6.remove_Event(EventHandler) | overrides.I5.remove_Event(EventHandler) | implements |
|
||||
| overrides.A6.set_Property(int) | overrides.I5.set_Property(int) | implements |
|
||||
| overrides.A8.Event | overrides.A1.Event | overrides |
|
||||
| overrides.A8.Item[int] | overrides.A1.Item[int] | overrides |
|
||||
| overrides.A8.M<T>(dynamic[], T) | overrides.A1.M<T>(dynamic[], T) | overrides |
|
||||
@@ -53,13 +68,23 @@
|
||||
| overrides.C2.Prop | overrides.C1.Prop | overrides |
|
||||
| overrides.C2.Prop | overrides.I3.Prop | implements |
|
||||
| overrides.C2.get_Prop() | overrides.C1.get_Prop() | overrides |
|
||||
| overrides.C2.get_Prop() | overrides.I3.get_Prop() | implements |
|
||||
| overrides.C2.set_Prop(string) | overrides.C1.set_Prop(string) | overrides |
|
||||
| overrides.C2.set_Prop(string) | overrides.I3.set_Prop(string) | implements |
|
||||
| overrides.C3<>.Item[int] | overrides.I4.MyIndexer[int] | implements |
|
||||
| overrides.C3<>.Method() | overrides.I4.Method() | implements |
|
||||
| overrides.C3<>.Prop | overrides.I3.Prop | implements |
|
||||
| overrides.C3<>.get_Item(int) | overrides.I4.get_MyIndexer(int) | implements |
|
||||
| overrides.C3<>.get_Prop() | overrides.I3.get_Prop() | implements |
|
||||
| overrides.C3<>.set_Item(int, string) | overrides.I4.set_MyIndexer(int, string) | implements |
|
||||
| overrides.C3<>.set_Prop(string) | overrides.I3.set_Prop(string) | implements |
|
||||
| overrides.C3<System.Int32>.Item[int] | overrides.I4.MyIndexer[int] | implements |
|
||||
| overrides.C3<System.Int32>.Method() | overrides.I4.Method() | implements |
|
||||
| overrides.C3<System.Int32>.Prop | overrides.I3.Prop | implements |
|
||||
| overrides.C3<System.Int32>.get_Item(int) | overrides.I4.get_MyIndexer(int) | implements |
|
||||
| overrides.C3<System.Int32>.get_Prop() | overrides.I3.get_Prop() | implements |
|
||||
| overrides.C3<System.Int32>.set_Item(int, string) | overrides.I4.set_MyIndexer(int, string) | implements |
|
||||
| overrides.C3<System.Int32>.set_Prop(string) | overrides.I3.set_Prop(string) | implements |
|
||||
| overrides.D.ToString() | overrides.C.ToString() | overrides |
|
||||
| overrides.D.f2() | overrides.A.f2() | overrides |
|
||||
| overrides.E2.M() | overrides.E.M() | overrides |
|
||||
|
||||
Reference in New Issue
Block a user