summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_decimal.py11
-rw-r--r--Modules/_decimal/_decimal.c4
2 files changed, 13 insertions, 2 deletions
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index dd4c73c..5195930 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 e951ded..0610a8b 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);