summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXtreak <tir.karthi@gmail.com>2019-01-07 20:39:14 +0530
committerVictor Stinner <vstinner@redhat.com>2019-01-07 16:09:14 +0100
commit3f7983a25a3d19779283c707fbdd5bc91b1587ef (patch)
treebe67585aae69489545dcccfa2938a3274b811b7e
parenta0bb51e44cd43a7d2836a96a3804162203e44514 (diff)
downloadcpython-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.py19
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2018-12-22-22-19-51.bpo-35560.9vMWSP.rst3
-rw-r--r--Objects/unicodeobject.c2
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) {