mirror of
https://github.com/python/cpython.git
synced 2025-10-09 08:31:26 +00:00
bpo-39871: Fix possible SystemError in atan2, copysign and remainder (GH-18806)
In math_2(), the first PyFloat_AsDouble() call should be checked for failure before the second call. Co-authored-by: Mark Dickinson <dickinsm@gmail.com>
This commit is contained in:
parent
3a8c56295d
commit
5208b4b379
3 changed files with 25 additions and 2 deletions
|
@ -1992,6 +1992,22 @@ class MathTests(unittest.TestCase):
|
|||
with self.subTest(x=x):
|
||||
self.assertEqual(math.ulp(-x), math.ulp(x))
|
||||
|
||||
def test_issue39871(self):
|
||||
# A SystemError should not be raised if the first arg to atan2(),
|
||||
# copysign(), or remainder() cannot be converted to a float.
|
||||
class F:
|
||||
def __float__(self):
|
||||
self.converted = True
|
||||
1/0
|
||||
for func in math.atan2, math.copysign, math.remainder:
|
||||
y = F()
|
||||
with self.assertRaises(TypeError):
|
||||
func("not a number", y)
|
||||
|
||||
# There should not have been any attempt to convert the second
|
||||
# argument to a float.
|
||||
self.assertFalse(getattr(y, "converted", False))
|
||||
|
||||
# Custom assertions.
|
||||
|
||||
def assertIsNaN(self, value):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue