diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index dd4c73cdf14..5195930834d 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -35,7 +35,7 @@ import locale from test.support import (run_unittest, run_doctest, is_resource_enabled, requires_IEEE_754) from test.support import (check_warnings, import_fresh_module, TestFailed, - run_with_locale) + run_with_locale, cpython_only) import random import time import warnings @@ -574,6 +574,15 @@ class ExplicitConstructionTest(unittest.TestCase): # embedded NUL self.assertRaises(InvalidOperation, Decimal, "12\u00003") + @cpython_only + def test_from_legacy_strings(self): + import _testcapi + Decimal = self.decimal.Decimal + context = self.decimal.Context() + + s = _testcapi.unicode_legacy_string('9.999999') + self.assertEqual(str(Decimal(s)), '9.999999') + self.assertEqual(str(context.create_decimal(s)), '9.999999') def test_explicit_from_tuples(self): Decimal = self.decimal.Decimal diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c index e951ded5fff..0610a8bcec0 100644 --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -1892,7 +1892,9 @@ numeric_as_ascii(const PyObject *u, int strip_ws) Py_ssize_t j, len; int d; - assert(PyUnicode_IS_READY(u)); + if (PyUnicode_READY(u) == -1) { + return NULL; + } kind = PyUnicode_KIND(u); data = PyUnicode_DATA(u);