[3.12] gh-106263: Fix segfault in signaldict_repr in _decimal module (#… (#107491)

Co-authored-by: sunmy2019 <59365878+sunmy2019@users.noreply.github.com>

(cherry picked from commit 3979150a0d)
This commit is contained in:
Charlie Zhao 2023-07-31 20:34:16 +08:00 committed by GitHub
parent 8f080a290b
commit 99518bbbf4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 59 additions and 3 deletions

View file

@ -5682,6 +5682,36 @@ class CWhitebox(unittest.TestCase):
self.assertEqual(Decimal(400) ** -1, Decimal('0.0025'))
def test_c_signaldict_segfault(self):
# See gh-106263 for details.
SignalDict = type(C.Context().flags)
sd = SignalDict()
err_msg = "invalid signal dict"
with self.assertRaisesRegex(ValueError, err_msg):
len(sd)
with self.assertRaisesRegex(ValueError, err_msg):
iter(sd)
with self.assertRaisesRegex(ValueError, err_msg):
repr(sd)
with self.assertRaisesRegex(ValueError, err_msg):
sd[C.InvalidOperation] = True
with self.assertRaisesRegex(ValueError, err_msg):
sd[C.InvalidOperation]
with self.assertRaisesRegex(ValueError, err_msg):
sd == C.Context().flags
with self.assertRaisesRegex(ValueError, err_msg):
C.Context().flags == sd
with self.assertRaisesRegex(ValueError, err_msg):
sd.copy()
@requires_docstrings
@requires_cdecimal
class SignatureTest(unittest.TestCase):