@@ -26,19 +26,13 @@ predicate isInitialVariableAccess(ControlFlowNode node, ValueVariable v) {
2626 * ```
2727 */
2828predicate hasInnerPointerAssignment (
29- ValueVariable v , PointerVariable innerPointer , ControlFlowNode innerPointerTaking
29+ ValueVariable v , PointerVariable innerPointer ,
30+ InnerPointerTakingFunctionByNameCall innerPointerTaking
3031) {
3132 exists ( Assignment assignment |
3233 assignment .getLValue ( ) .getAChild * ( ) .( VariableAccess ) .getTarget ( ) = innerPointer and
33- assignment .getRValue ( ) .getAChild * ( ) instanceof InnerPointerTakingFunctionByNameCall and
34- assignment
35- .getRValue ( )
36- .getAChild * ( )
37- .( InnerPointerTakingFunctionByNameCall )
38- .getAnArgument ( )
39- .( ValueAccess )
40- .getTarget ( ) = v and
41- assignment = innerPointerTaking
34+ assignment .getRValue ( ) .getAChild * ( ) = innerPointerTaking and
35+ innerPointerTaking .getAnArgument ( ) .( ValueAccess ) .getTarget ( ) = v
4236 )
4337}
4438
@@ -52,17 +46,15 @@ predicate hasInnerPointerAssignment(
5246 * ```
5347 */
5448predicate hasInnerPointerDeclaration (
55- ValueVariable v , PointerVariable innerPointer , ControlFlowNode innerPointerTaking
49+ ValueVariable v , PointerVariable innerPointer ,
50+ InnerPointerTakingFunctionByNameCall innerPointerTaking
5651) {
57- exists (
58- Declaration decl , VariableDeclarationEntry declEntry ,
59- InnerPointerTakingFunctionByNameCall pointerTakingCall
60- |
52+ exists ( Declaration decl , VariableDeclarationEntry declEntry |
6153 decl .getADeclarationEntry ( ) = declEntry and
6254 declEntry .getVariable ( ) = innerPointer and
63- innerPointer .getInitializer ( ) .getExpr ( ) = pointerTakingCall and
64- pointerTakingCall .getAnArgument ( ) .getAChild * ( ) .( ValueAccess ) .getTarget ( ) = v and
65- pointerTakingCall = innerPointerTaking
55+ innerPointer .getInitializer ( ) .getExpr ( ) = innerPointerTaking and
56+ innerPointerTaking .getAnArgument ( ) .getAChild * ( ) .( ValueAccess ) .getTarget ( ) = v and
57+ innerPointerTaking = innerPointerTaking
6658 )
6759}
6860
@@ -76,30 +68,28 @@ predicate hasInnerPointerDeclaration(
7668 * ```
7769 */
7870predicate hasInnerPointerFunctionCall (
79- ValueVariable v , PointerVariable innerPointer , ControlFlowNode innerPointerTaking
71+ ValueVariable v , PointerVariable innerPointer ,
72+ InnerPointerTakingFunctionByNameCall innerPointerTaking
8073) {
81- exists ( InnerPointerTakingFunctionByNameCall pointerTakingCall |
82- (
83- pointerTakingCall = innerPointerTaking and
84- pointerTakingCall .getAnArgument ( ) .getAChild * ( ) .( ValueAccess ) .getTarget ( ) = v
85- or
86- pointerTakingCall .getAnArgument ( ) .getAChild * ( ) .( FieldAccess ) .getQualifier ( ) = v .getAnAccess ( )
87- ) and
88- pointerTakingCall .getAnArgument ( ) .getAChild * ( ) .( PointerVariableAccess ) .getTarget ( ) =
89- innerPointer
90- )
74+ (
75+ innerPointerTaking .getAnArgument ( ) .getAChild * ( ) .( ValueAccess ) .getTarget ( ) = v
76+ or
77+ innerPointerTaking .getAnArgument ( ) .getAChild * ( ) .( FieldAccess ) .getQualifier ( ) = v .getAnAccess ( )
78+ ) and
79+ innerPointerTaking .getAnArgument ( ) .getAChild * ( ) .( PointerVariableAccess ) .getTarget ( ) = innerPointer
9180}
9281
9382/**
9483 * Checks if any of the inner pointer patterns exist for the given variables.
9584 */
9685predicate hasInnerPointerTaken (
97- ValueVariable v , PointerVariable innerPointer , ControlFlowNode innerPointerTaking
86+ ValueVariable v , PointerVariable innerPointer ,
87+ InnerPointerTakingFunctionByNameCall innerPointerTaking
9888) {
9989 hasInnerPointerAssignment ( v , innerPointer , innerPointerTaking )
10090 or
101- hasInnerPointerDeclaration ( v , innerPointer , innerPointerTaking )
102- or
91+ // or
92+ // hasInnerPointerDeclaration(v, innerPointer, innerPointerTaking)
10393 hasInnerPointerFunctionCall ( v , innerPointer , innerPointerTaking )
10494}
10595
@@ -138,23 +128,21 @@ predicate calleeParameterUsedInAlloc(Function callee, int idx) {
138128 )
139129}
140130
141-
142131/*
143- predicate passedToGcTrigger(ValueVariable v, ValueAccess initVAccess, FunctionCall gcTriggerCall) {
144- exists(int i |
145- initVAccess = v.getAnAccess() and
146- i < count(gcTriggerCall.getAnArgument()) and
147- gcTriggerCall.getAnArgumentSubExpr(i) = v.getAnAccess() and
148- isArgumentNotSafe(gcTriggerCall.getTarget(), i)
149- )
150- }
151- */
132+ * predicate passedToGcTrigger(ValueVariable v, ValueAccess initVAccess, FunctionCall gcTriggerCall) {
133+ * exists(int i |
134+ * initVAccess = v.getAnAccess() and
135+ * i < count(gcTriggerCall.getAnArgument()) and
136+ * gcTriggerCall.getAnArgumentSubExpr(i) = v.getAnAccess() and
137+ * isArgumentNotSafe(gcTriggerCall.getTarget(), i)
138+ * )
139+ * }
140+ */
152141
153142predicate notAccessedAfterGcTrigger ( ValueVariable v , GcTriggerCall gcTriggerCall ) {
154-
155143 not exists ( VariableAccess va |
156- va .getTarget ( ) = v and va = gcTriggerCall .getASuccessor + ( ) and not isGuardAccess ( va )
157- )
144+ va .getTarget ( ) = v and va = gcTriggerCall .getASuccessor + ( ) and not isGuardAccess ( va )
145+ )
158146 // notAfter(gcTriggerCall, v.getAnAccess())
159147}
160148
0 commit comments