Skip to content

Commit b9da6ce

Browse files
author
Dave Bartolomeo
committed
C++: Prepare for merge of smart pointer models
1 parent a447b04 commit b9da6ce

File tree

1 file changed

+11
-16
lines changed

1 file changed

+11
-16
lines changed

cpp/ql/src/semmle/code/cpp/models/implementations/SmartPointer.qll

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,21 @@ private class SmartPtr extends Class, PointerWrapper {
2828
* - `std::shared_ptr<T>::operator->()`
2929
* - `std::weak_ptr<T>::operator*()`
3030
*/
31-
private class PointerUnwrapperFunction extends MemberFunction, AliasFunction, DataFlowFunction,
32-
SideEffectFunction, TaintFunction {
31+
private class PointerUnwrapperFunction extends MemberFunction, TaintFunction, DataFlowFunction,
32+
SideEffectFunction, AliasFunction {
3333
PointerUnwrapperFunction() {
3434
exists(PointerWrapper wrapper | wrapper.getAnUnwrapperFunction() = this)
3535
}
3636

37+
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
38+
input.isReturnValueDeref() and
39+
output.isQualifierObject()
40+
}
41+
42+
override predicate hasDataFlow(FunctionInput input, FunctionOutput output) {
43+
input.isQualifierObject() and output.isReturnValue()
44+
}
45+
3746
override predicate hasOnlySpecificReadSideEffects() { any() }
3847

3948
override predicate hasOnlySpecificWriteSideEffects() { any() }
@@ -50,20 +59,6 @@ private class PointerUnwrapperFunction extends MemberFunction, AliasFunction, Da
5059
override predicate hasAddressFlow(FunctionInput input, FunctionOutput output) {
5160
input.isQualifierObject() and output.isReturnValue()
5261
}
53-
54-
override predicate hasDataFlow(FunctionInput input, FunctionOutput output) {
55-
input.isQualifierAddress() and output.isReturnValue()
56-
or
57-
input.isQualifierObject() and output.isReturnValueDeref()
58-
or
59-
input.isReturnValueDeref() and
60-
output.isQualifierObject()
61-
}
62-
63-
override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) {
64-
input.isQualifierObject() and
65-
output.isReturnValue()
66-
}
6762
}
6863

6964
/**

0 commit comments

Comments
 (0)