Skip to content

Commit 5780a0d

Browse files
authored
Merge pull request #23016 from MathiasVP/replace-ql-models-with-mad-for-assoc-cleaned-up-step-1
C++: Allow forwarding to nested types `forwards` MaD models
2 parents dea08cb + da6b766 commit 5780a0d

6 files changed

Lines changed: 206 additions & 163 deletions

File tree

‎cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll‎

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,21 +1088,26 @@ private Type getForwardedConstructorType(
10881088
Function forwarder, string namespace, string type, boolean subtypes, string name,
10891089
string signature, string ext, string constructorType
10901090
) {
1091-
exists(int index |
1092-
forwardsModel(namespace, type, subtypes, name, signature, ext, _, constructorType, _, _, _) and
1093-
forwarder = interpretElement(namespace, type, subtypes, name, signature, ext)
1094-
|
1095-
exists(string typeArguments |
1091+
forwardsModel(namespace, type, subtypes, name, signature, ext, _, constructorType, _, _, _) and
1092+
forwarder = interpretElement(namespace, type, subtypes, name, signature, ext) and
1093+
(
1094+
exists(string typeArguments, int index |
10961095
parseAngles(type, _, typeArguments, "") and
10971096
constructorType = getAtIndex(typeArguments, index) and
10981097
result = forwarder.getDeclaringType().getTemplateArgument(index)
10991098
)
11001099
or
1101-
exists(string nameArguments |
1100+
exists(string nameArguments, int index |
11021101
parseAngles(name, _, nameArguments, "") and
11031102
constructorType = getAtIndex(nameArguments, index) and
11041103
result = forwarder.getTemplateArgument(index)
11051104
)
1105+
or
1106+
exists(TypedefType member |
1107+
member = forwarder.getDeclaringType().getAMember() and
1108+
member.hasName(constructorType) and
1109+
result = member.getUnderlyingType()
1110+
)
11061111
)
11071112
}
11081113

0 commit comments

Comments
 (0)