Files
codeql/python/ql/test/query-tests/Classes/undefined-attribute/undefined_attribute.py
2018-11-19 15:15:54 +00:00

264 lines
4.3 KiB
Python

#Non existent class attribute
class Attributes(object):
exists1 = 1
def __init__(self):
self.exists2 = 2
def method(self):
self.may_exist = 3
def ok1(self):
print (self.exists1)
def ok2(self):
print (self.exists2)
def ok3(self):
self.local_exists = 4
print (self.local_exists)
def neca1(self):
print (self.not_exists)
def neca2(self):
print (self.may_exist)
#This is OK
class SetViaDict(object):
def __init__(self, x):
self.__dict__['x'] = x
def use_x(self):
return self.x
#This is also OK
class SetLocally(object):
def use_x(self):
self.x = 1
return self.x
class UsesSetattr(object):
def __init__(self, vals):
for k, v in vals.items():
setattr(self, k, v)
def use_values(self):
return self.x, self.y, self.z
#OK
class GuardedByHasAttr(object):
def ok4(self):
if hasattr(self, "x"):
return self.x
else:
return None
class HasGetAttr(object):
def __getattr__(self, name):
return name
def use_values(self):
return self.x, self.y, self.z
class HasGetAttribute(object):
def __getattribute__(self, name):
return name
def use_values(self):
return self.x, self.y, self.z
class DecoratedInit(object):
@decorator
def __init__(self):
self.x = x
def use(self):
return self.x
#This is not OK
class NoInit(object):
def use_y(self):
return self.y
#This is also OK
class SetLocally2(object):
def __init__(self):
pass
def use_y(self):
self.x = 0
self.y = 1
if cond:
print(self.y)
else:
return False
return self.y
#Guarded
class Guarded(object):
def __init__(self):
self.guard = False
def set_x(self):
self.guard = True
self.x = 1
def use_x(self):
if self.guard:
return self.x
else:
return 0
#ODASA-2034
class ODASA2034A(object):
def __init__(self, data):
d = self.__dict__
d['data'] = data
def use_data(self):
return self.data
class ODASA2034B(object):
def __init__(self, key, value):
d = self.__dict__
d[key] = value
def use_data(self):
return self.data
class Test5(object):
def readFromStream(stream):
word = stream.read(4)
if word == "true":
return BooleanObject(True)
elif word == "fals":
stream.read(1)
return BooleanObject(False)
assert False
readFromStream = staticmethod(readFromStream)
class Test1(object):
def __init__(self, application):
self.rabbitmq_channel = None
def queue_declared(frame): # called in callback
self.return_queue = frame.method.queue
def use_it(self):
return self.return_queue
#Check for FPs when overriding builtin methods
class PrintingDict(dict):
def pop(self):
print ("pop")
return dict.pop(self)
def __setitem__(self, key, value):
print("__setitem__")
return dict.__setitem__(self, key, value)
#Locally set by Call
#ODASA-4612
class WSGIContext(object):
def _app_call(self, env):
self._response_headers = None
class Odasa4612(WSGIContext):
def meth1(self, arg):
val = self._app_call(arg)
if self._response_headers is None:
self._response_headers = []
class OK9(object):
cls_attr = 0
def __init__(self):
self.attr = self.cls_attr
class Foo1(object):
pass
foo = Foo1()
setattr(foo, 'a', 1)
assert foo.a == 1
class Foo2(object):
pass
setattr(Foo2, 'a', 1)
assert Foo2.a == 1
# False positive observed at customer
class Customer1(object):
def x(self):
if not hasattr(self, "attr"):
return None
else:
return self.attr
#ODASA-4619
class Odasa4619a(object):
def call(self):
host = self.glance_host
port = self.glance_port
class Odasa4619b(object):
def call(self):
host = self.glance_host
port = self.glance_port
@decorator
def foo(self):
(x, self.glance_host,
self.glance_port, y) = bar()