mirror of https://github.com/python/cpython
Bug #1417699: Reject locale-specific decimal point in float()
and atof().
This commit is contained in:
parent
82c276ea33
commit
fcfff0a7fa
|
@ -113,6 +113,9 @@ class _LocaleTests(unittest.TestCase):
|
|||
"using eval('3.14') failed for %s" % loc)
|
||||
self.assertEquals(int(float('3.14') * 100), 314,
|
||||
"using float('3.14') failed for %s" % loc)
|
||||
if localeconv()['decimal_point'] != '.':
|
||||
self.assertRaises(ValueError, float,
|
||||
localeconv()['decimal_point'].join(['1', '23']))
|
||||
|
||||
def test_main():
|
||||
run_unittest(_LocaleTests)
|
||||
|
|
|
@ -558,13 +558,24 @@ class BuiltinTest(unittest.TestCase):
|
|||
@run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
|
||||
def test_float_with_comma(self):
|
||||
# set locale to something that doesn't use '.' for the decimal point
|
||||
# float must not accept the locale specific decimal point but
|
||||
# it still has to accept the normal python syntac
|
||||
import locale
|
||||
if not locale.localeconv()['decimal_point'] == ',':
|
||||
return
|
||||
|
||||
self.assertEqual(float(" 3,14 "), 3.14)
|
||||
self.assertEqual(float(" +3,14 "), 3.14)
|
||||
self.assertEqual(float(" -3,14 "), -3.14)
|
||||
self.assertEqual(float(" 3.14 "), 3.14)
|
||||
self.assertEqual(float("+3.14 "), 3.14)
|
||||
self.assertEqual(float("-3.14 "), -3.14)
|
||||
self.assertEqual(float(".14 "), .14)
|
||||
self.assertEqual(float("3. "), 3.0)
|
||||
self.assertEqual(float("3.e3 "), 3000.0)
|
||||
self.assertEqual(float("3.2e3 "), 3200.0)
|
||||
self.assertEqual(float("2.5e-1 "), 0.25)
|
||||
self.assertEqual(float("5e-1"), 0.5)
|
||||
self.assertRaises(ValueError, float, " 3,14 ")
|
||||
self.assertRaises(ValueError, float, " +3,14 ")
|
||||
self.assertRaises(ValueError, float, " -3,14 ")
|
||||
self.assertRaises(ValueError, float, " 0x3.1 ")
|
||||
self.assertRaises(ValueError, float, " -0x3.p-1 ")
|
||||
self.assertEqual(float(" 25.e-1 "), 2.5)
|
||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.5 beta 2?
|
|||
Core and builtins
|
||||
-----------------
|
||||
|
||||
- Bug #1417699: Reject locale-specific decimal point in float()
|
||||
and atof().
|
||||
|
||||
- Bug #1511381: codec_getstreamcodec() in codec.c is corrected to
|
||||
omit a default "error" argument for NULL pointer. This allows
|
||||
the parser to take a codec from cjkcodecs again.
|
||||
|
|
|
@ -90,6 +90,13 @@ PyOS_ascii_strtod(const char *nptr, char **endptr)
|
|||
p++;
|
||||
end = p;
|
||||
}
|
||||
else if (strncmp(p, decimal_point, decimal_point_len) == 0)
|
||||
{
|
||||
/* Python bug #1417699 */
|
||||
*endptr = (char*)nptr;
|
||||
errno = EINVAL;
|
||||
return val;
|
||||
}
|
||||
/* For the other cases, we need not convert the decimal point */
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue