Skip to content

Commit f6e7d79

Browse files
authored
Merge pull request #19383 from MathiasVP/add-missing-predicate-to-mad-generation
C++: Fix missing summaries in MaD generation
2 parents 35939ec + e942ec9 commit f6e7d79

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

cpp/ql/src/utils/modelgenerator/internal/CaptureModels.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,14 @@ module ModelGeneratorInput implements ModelGeneratorInputSig<Location, CppDataFl
295295
result = qualifierString()
296296
}
297297

298+
DataFlowPrivate::ParameterPosition getReturnKindParamPosition(DataFlowPrivate::ReturnKind k) {
299+
exists(int argumentIndex, int indirectionIndex |
300+
k.isIndirectReturn(argumentIndex) and
301+
k.getIndirectionIndex() = indirectionIndex and
302+
result = DataFlowPrivate::TIndirectionPosition(argumentIndex, indirectionIndex)
303+
)
304+
}
305+
298306
string getReturnValueString(DataFlowPrivate::ReturnKind k) {
299307
k.isNormalReturn() and
300308
exists(int indirectionIndex | indirectionIndex = k.getIndirectionIndex() |

cpp/ql/test/library-tests/dataflow/modelgenerator/dataflow/summaries.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ namespace Models {
131131

132132
//heuristic-summary=;;true;toplevel_function;(int *);;Argument[0];ReturnValue;taint;df-generated
133133
//heuristic-summary=;;true;toplevel_function;(int *);;Argument[*0];ReturnValue;taint;df-generated
134+
//heuristic-summary=;;true;toplevel_function;(int *);;Argument[0];Argument[*0];taint;df-generated
135+
//contentbased-summary=;;true;toplevel_function;(int *);;Argument[0];Argument[*0];taint;dfc-generated
134136
//contentbased-summary=;;true;toplevel_function;(int *);;Argument[0];ReturnValue;taint;dfc-generated
135137
//contentbased-summary=;;true;toplevel_function;(int *);;Argument[*0];ReturnValue;value;dfc-generated
136138
int toplevel_function(int* p) {
@@ -199,3 +201,18 @@ int get_x_from_union(U* u) {
199201
void set_x_in_union(U* u, int x) {
200202
u->x = x;
201203
}
204+
205+
struct HasInt {
206+
int x;
207+
};
208+
209+
//contentbased-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[1];Argument[*0];taint;dfc-generated
210+
//contentbased-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[1];Argument[*1];taint;dfc-generated
211+
//contentbased-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[*1];Argument[*0];value;dfc-generated
212+
//heuristic-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[1];Argument[*0];taint;df-generated
213+
//heuristic-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[1];Argument[*1];taint;df-generated
214+
//heuristic-summary=;;true;copy_struct;(HasInt *,const HasInt *);;Argument[*1];Argument[*0];taint;df-generated
215+
int copy_struct(HasInt *out, const HasInt *in) {
216+
*out = *in;
217+
return 1;
218+
}

0 commit comments

Comments
 (0)