diff options
author | Xtreak <tir.karthi@gmail.com> | 2019-01-07 20:39:14 +0530 |
---|---|---|
committer | Victor Stinner <vstinner@redhat.com> | 2019-01-07 16:09:14 +0100 |
commit | 3f7983a25a3d19779283c707fbdd5bc91b1587ef (patch) | |
tree | be67585aae69489545dcccfa2938a3274b811b7e | |
parent | a0bb51e44cd43a7d2836a96a3804162203e44514 (diff) | |
download | cpython-git-3f7983a25a3d19779283c707fbdd5bc91b1587ef.tar.gz |
bpo-35560: Remove assertion from format(float, "n") (GH-11288)
Fix an assertion error in format() in debug build for floating point
formatting with "n" format, zero padding and small width. Release build is
not impacted. Patch by Karthikeyan Singaravelan.
-rw-r--r-- | Lib/test/test_float.py | 19 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2018-12-22-22-19-51.bpo-35560.9vMWSP.rst | 3 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 2 |
3 files changed, 23 insertions, 1 deletions
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py index 06ea90c207..49c1fbcd4e 100644 --- a/Lib/test/test_float.py +++ b/Lib/test/test_float.py @@ -701,6 +701,25 @@ class FormatTestCase(unittest.TestCase): self.assertEqual(format(1234.56, '.4'), '1.235e+03') self.assertEqual(format(12345.6, '.4'), '1.235e+04') + def test_issue35560(self): + self.assertEqual(format(123.0, '00'), '123.0') + self.assertEqual(format(123.34, '00f'), '123.340000') + self.assertEqual(format(123.34, '00e'), '1.233400e+02') + self.assertEqual(format(123.34, '00g'), '123.34') + self.assertEqual(format(123.34, '00.10f'), '123.3400000000') + self.assertEqual(format(123.34, '00.10e'), '1.2334000000e+02') + self.assertEqual(format(123.34, '00.10g'), '123.34') + self.assertEqual(format(123.34, '01f'), '123.340000') + + self.assertEqual(format(-123.0, '00'), '-123.0') + self.assertEqual(format(-123.34, '00f'), '-123.340000') + self.assertEqual(format(-123.34, '00e'), '-1.233400e+02') + self.assertEqual(format(-123.34, '00g'), '-123.34') + self.assertEqual(format(-123.34, '00.10f'), '-123.3400000000') + self.assertEqual(format(-123.34, '00.10f'), '-123.3400000000') + self.assertEqual(format(-123.34, '00.10e'), '-1.2334000000e+02') + self.assertEqual(format(-123.34, '00.10g'), '-123.34') + class ReprTestCase(unittest.TestCase): def test_repr(self): floats_file = open(os.path.join(os.path.split(__file__)[0], diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-12-22-22-19-51.bpo-35560.9vMWSP.rst b/Misc/NEWS.d/next/Core and Builtins/2018-12-22-22-19-51.bpo-35560.9vMWSP.rst new file mode 100644 index 0000000000..01458f1108 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2018-12-22-22-19-51.bpo-35560.9vMWSP.rst @@ -0,0 +1,3 @@ +Fix an assertion error in :func:`format` in debug build for floating point +formatting with "n" format, zero padding and small width. Release build is +not impacted. Patch by Karthikeyan Singaravelan. diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index f1dcfe9ab7..304ea7471f 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -9381,6 +9381,7 @@ _PyUnicode_InsertThousandsGrouping( PyObject *thousands_sep, Py_UCS4 *maxchar) { + min_width = Py_MAX(0, min_width); if (writer) { assert(digits != NULL); assert(maxchar == NULL); @@ -9391,7 +9392,6 @@ _PyUnicode_InsertThousandsGrouping( } assert(0 <= d_pos); assert(0 <= n_digits); - assert(0 <= min_width); assert(grouping != NULL); if (digits != NULL) { |