Accept Unicode legacy strings in the Decimal constructor.

This commit is contained in:
Stefan Krah 2012-11-10 23:09:04 +01:00
parent 6b0bdab429
commit 6e467049c6
2 changed files with 13 additions and 2 deletions

View File

@ -35,7 +35,7 @@ import locale
from test.support import (run_unittest, run_doctest, is_resource_enabled, from test.support import (run_unittest, run_doctest, is_resource_enabled,
requires_IEEE_754) requires_IEEE_754)
from test.support import (check_warnings, import_fresh_module, TestFailed, from test.support import (check_warnings, import_fresh_module, TestFailed,
run_with_locale) run_with_locale, cpython_only)
import random import random
import time import time
import warnings import warnings
@ -574,6 +574,15 @@ class ExplicitConstructionTest(unittest.TestCase):
# embedded NUL # embedded NUL
self.assertRaises(InvalidOperation, Decimal, "12\u00003") 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): def test_explicit_from_tuples(self):
Decimal = self.decimal.Decimal Decimal = self.decimal.Decimal

View File

@ -1892,7 +1892,9 @@ numeric_as_ascii(const PyObject *u, int strip_ws)
Py_ssize_t j, len; Py_ssize_t j, len;
int d; int d;
assert(PyUnicode_IS_READY(u)); if (PyUnicode_READY(u) == -1) {
return NULL;
}
kind = PyUnicode_KIND(u); kind = PyUnicode_KIND(u);
data = PyUnicode_DATA(u); data = PyUnicode_DATA(u);