summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorZackery Spytz <zspytz@gmail.com>2019-05-31 09:46:36 (GMT)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-05-31 09:46:36 (GMT)
commitc7f803b08ed5211701c75f98ba9ada85d45ac155 (patch)
treea283b57dae8d45875c48b3143a11aef601fb3d9f /Lib
parentc7f7069e77c58e83b847c0bfe4d5aadf6add2e68 (diff)
downloadcpython-c7f803b08ed5211701c75f98ba9ada85d45ac155.zip
cpython-c7f803b08ed5211701c75f98ba9ada85d45ac155.tar.gz
cpython-c7f803b08ed5211701c75f98ba9ada85d45ac155.tar.bz2
bpo-36379: __ipow__ must be a ternaryfunc, not a binaryfunc (GH-13546)
If a type's __ipow__ method was implemented in C, attempting to use the *modulo* parameter would cause crashes. https://bugs.python.org/issue36379
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_capi.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 795aa78..4dd78bb 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -184,6 +184,13 @@ class CAPITest(unittest.TestCase):
o @= m1
self.assertEqual(o, ("matmul", 42, m1))
+ def test_c_type_with_ipow(self):
+ # When the __ipow__ method of a type was implemented in C, using the
+ # modulo param would cause segfaults.
+ o = _testcapi.ipowType()
+ self.assertEqual(o.__ipow__(1), (1, None))
+ self.assertEqual(o.__ipow__(2, 2), (2, 2))
+
def test_return_null_without_error(self):
# Issue #23571: A function must not return NULL without setting an
# error