11import python
2-
32private import semmle.python.objects.TObject
43private import semmle.python.objects.ObjectInternal
54private import semmle.python.pointsto.PointsTo
@@ -9,16 +8,11 @@ private import semmle.python.types.Builtins
98
109/** Class representing property objects in Python */
1110class PropertyInternal extends ObjectInternal , TProperty {
12-
1311 /** Gets the name of this property */
14- override string getName ( ) {
15- result = this .getGetter ( ) .getName ( )
16- }
12+ override string getName ( ) { result = this .getGetter ( ) .getName ( ) }
1713
1814 /** Gets the getter function of this property */
19- CallableObjectInternal getGetter ( ) {
20- this = TProperty ( _, _, result )
21- }
15+ CallableObjectInternal getGetter ( ) { this = TProperty ( _, _, result ) }
2216
2317 private CallNode getCallNode ( ) { this = TProperty ( result , _, _) }
2418
@@ -55,11 +49,9 @@ class PropertyInternal extends ObjectInternal, TProperty {
5549 )
5650 }
5751
58- private Context getContext ( ) { this = TProperty ( _, result , _) }
52+ private Context getContext ( ) { this = TProperty ( _, result , _) }
5953
60- override string toString ( ) {
61- result = "property " + this .getName ( )
62- }
54+ override string toString ( ) { result = "property " + this .getName ( ) }
6355
6456 override boolean booleanValue ( ) { result = true }
6557
@@ -79,7 +71,9 @@ class PropertyInternal extends ObjectInternal, TProperty {
7971
8072 override ControlFlowNode getOrigin ( ) { this = TProperty ( result , _, _) }
8173
82- override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) { none ( ) }
74+ override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
75+ none ( )
76+ }
8377
8478 override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) { none ( ) }
8579
@@ -89,7 +83,8 @@ class PropertyInternal extends ObjectInternal, TProperty {
8983
9084 override predicate calleeAndOffset ( Function scope , int paramOffset ) { none ( ) }
9185
92- pragma [ noinline] override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) {
86+ pragma [ noinline]
87+ override predicate attribute ( string name , ObjectInternal value , CfgOrigin origin ) {
9388 value = TPropertySetterOrDeleter ( this , name ) and origin = CfgOrigin:: unknown ( )
9489 }
9590
@@ -103,20 +98,28 @@ class PropertyInternal extends ObjectInternal, TProperty {
10398
10499 override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) { none ( ) }
105100
106- pragma [ noinline] override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
101+ pragma [ noinline]
102+ override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
107103 any ( ObjectInternal obj ) .binds ( cls , _, this ) and
108- value = this and origin = CfgOrigin:: fromCfgNode ( this .getOrigin ( ) )
104+ value = this and
105+ origin = CfgOrigin:: fromCfgNode ( this .getOrigin ( ) )
109106 }
110107
111- pragma [ noinline] override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
112- /* Just give an unknown value for now. We could improve this, but it would mean
108+ pragma [ noinline]
109+ override predicate descriptorGetInstance (
110+ ObjectInternal instance , ObjectInternal value , CfgOrigin origin
111+ ) {
112+ /*
113+ * Just give an unknown value for now. We could improve this, but it would mean
113114 * changing Contexts to account for property accesses.
114115 */
116+
115117 exists ( ClassObjectInternal cls , string name |
116118 name = this .getName ( ) and
117119 receiver_type ( _, name , instance , cls ) and
118120 cls .lookup ( name , this , _) and
119- origin = CfgOrigin:: unknown ( ) and value = ObjectInternal:: unknown ( )
121+ origin = CfgOrigin:: unknown ( ) and
122+ value = ObjectInternal:: unknown ( )
120123 )
121124 }
122125
@@ -128,40 +131,31 @@ class PropertyInternal extends ObjectInternal, TProperty {
128131 override ObjectInternal getIterNext ( ) { none ( ) }
129132
130133 override predicate isNotSubscriptedType ( ) { any ( ) }
131-
132134}
133135
134136private class PropertySetterOrDeleter extends ObjectInternal , TPropertySetterOrDeleter {
137+ override string toString ( ) { result = this .getProperty ( ) .toString ( ) + "." + this .getName ( ) }
135138
136- override string toString ( ) {
137- result = this .getProperty ( ) .toString ( ) + "." + this .getName ( )
138- }
139+ override string getName ( ) { this = TPropertySetterOrDeleter ( _, result ) }
139140
140- override string getName ( ) {
141- this = TPropertySetterOrDeleter ( _, result )
142- }
143-
144- PropertyInternal getProperty ( ) {
145- this = TPropertySetterOrDeleter ( result , _)
146- }
141+ PropertyInternal getProperty ( ) { this = TPropertySetterOrDeleter ( result , _) }
147142
148143 override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) {
149144 exists ( ControlFlowNode call |
150- obj = this .getProperty ( ) and obj = TProperty ( call , _, _) and
145+ obj = this .getProperty ( ) and
146+ obj = TProperty ( call , _, _) and
151147 origin = CfgOrigin:: fromCfgNode ( call )
152148 )
153149 }
154150
155- override predicate introducedAt ( ControlFlowNode node , PointsToContext context ) {
156- none ( )
157- }
151+ override predicate introducedAt ( ControlFlowNode node , PointsToContext context ) { none ( ) }
158152
159153 override ClassDecl getClassDeclaration ( ) { none ( ) }
160154
161155 override boolean isClass ( ) { result = false }
162156
163157 override ObjectInternal getClass ( ) {
164- result = TBuiltinClassObject ( Builtin:: special ( "MethodType" ) )
158+ result = TBuiltinClassObject ( Builtin:: special ( "MethodType" ) )
165159 }
166160
167161 override predicate notTestableForEquality ( ) { none ( ) }
@@ -170,7 +164,9 @@ private class PropertySetterOrDeleter extends ObjectInternal, TPropertySetterOrD
170164
171165 override ControlFlowNode getOrigin ( ) { none ( ) }
172166
173- override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) { none ( ) }
167+ override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
168+ none ( )
169+ }
174170
175171 override int intValue ( ) { none ( ) }
176172
@@ -196,23 +192,24 @@ private class PropertySetterOrDeleter extends ObjectInternal, TPropertySetterOrD
196192
197193 override ObjectInternal getIterNext ( ) { none ( ) }
198194
199- override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) { none ( ) }
195+ override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
196+ none ( )
197+ }
200198
201- override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) { none ( ) }
199+ override predicate descriptorGetInstance (
200+ ObjectInternal instance , ObjectInternal value , CfgOrigin origin
201+ ) {
202+ none ( )
203+ }
202204
203205 override predicate useOriginAsLegacyObject ( ) { none ( ) }
204206
205207 override predicate isNotSubscriptedType ( ) { any ( ) }
206-
207208}
208209
209-
210210/** A class representing classmethods in Python */
211211class ClassMethodObjectInternal extends ObjectInternal , TClassMethod {
212-
213- override string toString ( ) {
214- result = "classmethod(" + this .getFunction ( ) + ")"
215- }
212+ override string toString ( ) { result = "classmethod(" + this .getFunction ( ) + ")" }
216213
217214 override boolean booleanValue ( ) { result = true }
218215
@@ -224,9 +221,7 @@ class ClassMethodObjectInternal extends ObjectInternal, TClassMethod {
224221 }
225222
226223 /** Gets the function wrapped by this classmethod object */
227- CallableObjectInternal getFunction ( ) {
228- this = TClassMethod ( _, result )
229- }
224+ CallableObjectInternal getFunction ( ) { this = TClassMethod ( _, result ) }
230225
231226 override ClassDecl getClassDeclaration ( ) { none ( ) }
232227
@@ -240,7 +235,9 @@ class ClassMethodObjectInternal extends ObjectInternal, TClassMethod {
240235
241236 override ControlFlowNode getOrigin ( ) { this = TClassMethod ( result , _) }
242237
243- override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) { none ( ) }
238+ override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
239+ none ( )
240+ }
244241
245242 override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) { none ( ) }
246243
@@ -258,26 +255,31 @@ class ClassMethodObjectInternal extends ObjectInternal, TClassMethod {
258255
259256 override boolean isDescriptor ( ) { result = true }
260257
261- pragma [ noinline] override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
258+ pragma [ noinline]
259+ override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
262260 value = TBoundMethod ( cls , this .getFunction ( ) ) and
263261 origin = CfgOrigin:: unknown ( )
264262 }
265263
266- pragma [ noinline] override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
264+ pragma [ noinline]
265+ override predicate descriptorGetInstance (
266+ ObjectInternal instance , ObjectInternal value , CfgOrigin origin
267+ ) {
267268 any ( ObjectInternal obj ) .binds ( instance , _, this ) and
268269 value = TBoundMethod ( instance .getClass ( ) , this .getFunction ( ) ) and
269270 origin = CfgOrigin:: unknown ( )
270271 }
271272
272- /** Holds if attribute lookup on this object may "bind" `cls` to `descriptor`.
273+ /**
274+ * Holds if attribute lookup on this object may "bind" `cls` to `descriptor`.
273275 * `cls` will always be a class as this is a classmethod.
274276 * Here "bind" means that `instance` is passed to the `classmethod.__get__()` method
275277 * at runtime. The term "bind" is used as this most likely results in a bound-method.
276278 */
277- pragma [ noinline] override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) {
279+ pragma [ noinline]
280+ override predicate binds ( ObjectInternal cls , string name , ObjectInternal descriptor ) {
278281 descriptor = this .getFunction ( ) and
279- exists ( ObjectInternal instance |
280- any ( ObjectInternal obj ) .binds ( instance , name , this ) |
282+ exists ( ObjectInternal instance | any ( ObjectInternal obj ) .binds ( instance , name , this ) |
281283 instance .isClass ( ) = false and cls = instance .getClass ( )
282284 or
283285 instance .isClass ( ) = true and cls = instance
@@ -286,9 +288,7 @@ class ClassMethodObjectInternal extends ObjectInternal, TClassMethod {
286288
287289 override int length ( ) { none ( ) }
288290
289- override string getName ( ) {
290- result = this .getFunction ( ) .getName ( )
291- }
291+ override string getName ( ) { result = this .getFunction ( ) .getName ( ) }
292292
293293 override predicate contextSensitiveCallee ( ) { none ( ) }
294294
@@ -298,14 +298,10 @@ class ClassMethodObjectInternal extends ObjectInternal, TClassMethod {
298298 override ObjectInternal getIterNext ( ) { none ( ) }
299299
300300 override predicate isNotSubscriptedType ( ) { any ( ) }
301-
302301}
303302
304303class StaticMethodObjectInternal extends ObjectInternal , TStaticMethod {
305-
306- override string toString ( ) {
307- result = "staticmethod()"
308- }
304+ override string toString ( ) { result = "staticmethod()" }
309305
310306 override boolean booleanValue ( ) { result = true }
311307
@@ -316,9 +312,7 @@ class StaticMethodObjectInternal extends ObjectInternal, TStaticMethod {
316312 )
317313 }
318314
319- CallableObjectInternal getFunction ( ) {
320- this = TStaticMethod ( _, result )
321- }
315+ CallableObjectInternal getFunction ( ) { this = TStaticMethod ( _, result ) }
322316
323317 override ClassDecl getClassDeclaration ( ) { none ( ) }
324318
@@ -332,7 +326,9 @@ class StaticMethodObjectInternal extends ObjectInternal, TStaticMethod {
332326
333327 override ControlFlowNode getOrigin ( ) { this = TStaticMethod ( result , _) }
334328
335- override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) { none ( ) }
329+ override predicate callResult ( PointsToContext callee , ObjectInternal obj , CfgOrigin origin ) {
330+ none ( )
331+ }
336332
337333 override predicate callResult ( ObjectInternal obj , CfgOrigin origin ) { none ( ) }
338334
@@ -352,23 +348,29 @@ class StaticMethodObjectInternal extends ObjectInternal, TStaticMethod {
352348
353349 override boolean isDescriptor ( ) { result = true }
354350
355- pragma [ noinline] override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
351+ pragma [ noinline]
352+ override predicate descriptorGetClass ( ObjectInternal cls , ObjectInternal value , CfgOrigin origin ) {
356353 any ( ObjectInternal obj ) .binds ( cls , _, this ) and
357- value = this .getFunction ( ) and origin = CfgOrigin:: unknown ( )
354+ value = this .getFunction ( ) and
355+ origin = CfgOrigin:: unknown ( )
358356 }
359357
360- pragma [ noinline] override predicate descriptorGetInstance ( ObjectInternal instance , ObjectInternal value , CfgOrigin origin ) {
358+ pragma [ noinline]
359+ override predicate descriptorGetInstance (
360+ ObjectInternal instance , ObjectInternal value , CfgOrigin origin
361+ ) {
361362 any ( ObjectInternal obj ) .binds ( instance , _, this ) and
362- value = this .getFunction ( ) and origin = CfgOrigin:: unknown ( )
363+ value = this .getFunction ( ) and
364+ origin = CfgOrigin:: unknown ( )
363365 }
364366
365- override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) { none ( ) }
367+ override predicate binds ( ObjectInternal instance , string name , ObjectInternal descriptor ) {
368+ none ( )
369+ }
366370
367371 override int length ( ) { none ( ) }
368372
369- override string getName ( ) {
370- result = this .getFunction ( ) .getName ( )
371- }
373+ override string getName ( ) { result = this .getFunction ( ) .getName ( ) }
372374
373375 override predicate contextSensitiveCallee ( ) { none ( ) }
374376
@@ -378,5 +380,4 @@ class StaticMethodObjectInternal extends ObjectInternal, TStaticMethod {
378380 override ObjectInternal getIterNext ( ) { none ( ) }
379381
380382 override predicate isNotSubscriptedType ( ) { any ( ) }
381-
382383}
0 commit comments