mirror of
https://github.com/github/codeql.git
synced 2025-12-17 09:13:20 +01:00
50 lines
1.1 KiB
C++
50 lines
1.1 KiB
C++
void sink(void *o);
|
|
void *user_input(void);
|
|
|
|
namespace qualifiers {
|
|
|
|
struct Inner {
|
|
void *a;
|
|
|
|
void setA(void *value) { this->a = value; }
|
|
};
|
|
|
|
void pointerSetA(Inner *inner, void *value) { inner->a = value; }
|
|
void referenceSetA(Inner &inner, void *value) { inner.a = value; }
|
|
|
|
struct Outer {
|
|
Inner *inner;
|
|
|
|
Inner *getInner() { return inner; }
|
|
};
|
|
|
|
void assignToGetter(Outer outer) {
|
|
outer.getInner()->a = user_input();
|
|
sink(outer.inner->a); // $ ast,ir
|
|
}
|
|
|
|
void getterArgument1(Outer outer) {
|
|
outer.getInner()->setA(user_input());
|
|
sink(outer.inner->a); // $ ast,ir
|
|
}
|
|
|
|
void getterArgument2(Outer outer) {
|
|
pointerSetA(outer.getInner(), user_input());
|
|
sink(outer.inner->a); // $ ast,ir
|
|
}
|
|
|
|
void getterArgument2Ref(Outer outer) {
|
|
referenceSetA(*outer.getInner(), user_input());
|
|
sink(outer.inner->a); // $ ast,ir
|
|
}
|
|
|
|
void assignToGetterStar(Outer outer) {
|
|
(*outer.getInner()).a = user_input();
|
|
sink(outer.inner->a); // $ ast,ir
|
|
}
|
|
|
|
void assignToGetterAmp(Outer outer) {
|
|
(&outer)->getInner()->a = user_input();
|
|
sink(outer.inner->a); // $ ast,ir
|
|
}
|
|
} |