summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2020-11-10 11:58:27 -0800
committerGitHub <noreply@github.com>2020-11-10 14:58:27 -0500
commitdae5d728bc3f1d4039b64e4ec3a9036fd5d19587 (patch)
treeabd107d8a4d2a1fd3217eb3b96eed5d6ade9ca78
parent[3.6] bpo-42103: Improve validation of Plist files. (GH-22882) (GH-23118) (diff)
downloadcpython-dae5d728bc3f1d4039b64e4ec3a9036fd5d19587.tar.gz
cpython-dae5d728bc3f1d4039b64e4ec3a9036fd5d19587.tar.bz2
cpython-dae5d728bc3f1d4039b64e4ec3a9036fd5d19587.zip
bpo-35560: Remove assertion from format(float, "n") (GH-11288) (GH-23231)
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. (cherry picked from commit 3f7983a25a3d19779283c707fbdd5bc91b1587ef) Co-authored-by: Xtreak <tir.karthi@gmail.com>
-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 61551e5c990..b3ac891b358 100644
--- a/Lib/test/test_float.py
+++ b/Lib/test/test_float.py
@@ -697,6 +697,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 00000000000..01458f11088
--- /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 0e64bf943db..ed70c6b9465 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -9473,6 +9473,7 @@ _PyUnicode_InsertThousandsGrouping(
PyObject *thousands_sep,
Py_UCS4 *maxchar)
{
+ min_width = Py_MAX(0, min_width);
if (writer) {
assert(digits != NULL);
assert(maxchar == NULL);
@@ -9483,7 +9484,6 @@ _PyUnicode_InsertThousandsGrouping(
}
assert(0 <= d_pos);
assert(0 <= n_digits);
- assert(0 <= min_width);
assert(grouping != NULL);
if (digits != NULL) {