@@ -28,12 +28,21 @@ private class SmartPtr extends Class, PointerWrapper {
28
28
* - `std::shared_ptr<T>::operator->()`
29
29
* - `std::weak_ptr<T>::operator*()`
30
30
*/
31
- private class PointerUnwrapperFunction extends MemberFunction , AliasFunction , DataFlowFunction ,
32
- SideEffectFunction , TaintFunction {
31
+ private class PointerUnwrapperFunction extends MemberFunction , TaintFunction , DataFlowFunction ,
32
+ SideEffectFunction , AliasFunction {
33
33
PointerUnwrapperFunction ( ) {
34
34
exists ( PointerWrapper wrapper | wrapper .getAnUnwrapperFunction ( ) = this )
35
35
}
36
36
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
+
37
46
override predicate hasOnlySpecificReadSideEffects ( ) { any ( ) }
38
47
39
48
override predicate hasOnlySpecificWriteSideEffects ( ) { any ( ) }
@@ -50,20 +59,6 @@ private class PointerUnwrapperFunction extends MemberFunction, AliasFunction, Da
50
59
override predicate hasAddressFlow ( FunctionInput input , FunctionOutput output ) {
51
60
input .isQualifierObject ( ) and output .isReturnValue ( )
52
61
}
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
- }
67
62
}
68
63
69
64
/**
0 commit comments