mirror of
https://github.com/github/codeql.git
synced 2025-12-20 10:46:30 +01:00
71 lines
1.5 KiB
Python
71 lines
1.5 KiB
Python
import random
|
|
cond = random.randint(0,1) == 1
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Calling different bound-methods based on conditional
|
|
# ------------------------------------------------------------------------------
|
|
|
|
class CrosstalkTestX:
|
|
def __init__(self):
|
|
self.x = None
|
|
self.y = None
|
|
|
|
def setx(self, value):
|
|
self.x = value
|
|
|
|
def setvalue(self, value):
|
|
self.x = value
|
|
|
|
|
|
class CrosstalkTestY:
|
|
def __init__(self):
|
|
self.x = None
|
|
self.y = None
|
|
|
|
def sety(self ,value):
|
|
self.y = value
|
|
|
|
def setvalue(self, value):
|
|
self.y = value
|
|
|
|
|
|
objx = CrosstalkTestX()
|
|
objy = CrosstalkTestY()
|
|
|
|
if cond:
|
|
func = objx.setx
|
|
else:
|
|
func = objy.sety
|
|
|
|
# What we're testing for is whether both objects are passed as self to both methods,
|
|
# which is wrong.
|
|
|
|
func(42)
|
|
|
|
|
|
if cond:
|
|
func = objx.setvalue
|
|
else:
|
|
func = objy.setvalue
|
|
|
|
func(43)
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Calling methods in different ways
|
|
# ------------------------------------------------------------------------------
|
|
|
|
class A(object):
|
|
def foo(self, arg="Default"):
|
|
print("A.foo", self, arg)
|
|
|
|
a = A()
|
|
if cond:
|
|
func = a.foo # `44` is passed as arg
|
|
else:
|
|
func = A.foo # `44` is passed as self
|
|
|
|
# What we're testing for is whether a single call ends up having both `a` and `44` is
|
|
# passed as self to `A.foo`, which is wrong.
|
|
|
|
func(44)
|