#7419: Fix a crash on Windows in locale.setlocale() when the category
is outside the allowed range.
This commit is contained in:
parent
7072f74dc8
commit
d728871ee1
|
@ -360,6 +360,17 @@ class TestMiscellaneous(unittest.TestCase):
|
|||
# test crasher from bug #3303
|
||||
self.assertRaises(TypeError, locale.strcoll, u"a", None)
|
||||
|
||||
def test_setlocale_category(self):
|
||||
locale.setlocale(locale.LC_ALL)
|
||||
locale.setlocale(locale.LC_TIME)
|
||||
locale.setlocale(locale.LC_CTYPE)
|
||||
locale.setlocale(locale.LC_COLLATE)
|
||||
locale.setlocale(locale.LC_MONETARY)
|
||||
locale.setlocale(locale.LC_NUMERIC)
|
||||
|
||||
# crasher from bug #7419
|
||||
self.assertRaises(locale.Error, locale.setlocale, 12345)
|
||||
|
||||
|
||||
def test_main():
|
||||
tests = [
|
||||
|
|
|
@ -12,10 +12,13 @@ What's New in Python 2.7 alpha 1
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #7419: setlocale() could crash the interpreter on Windows when called
|
||||
with invalid values.
|
||||
|
||||
- Issue #3382: 'F' formatting for float and complex now convert the
|
||||
result to upper case. This only affects 'inf' and 'nan', since 'f'
|
||||
no longer converts to 'g' for large values.
|
||||
|
||||
|
||||
- Remove switch from "%f" formatting to "%g" formatting for floats
|
||||
larger than 1e50 in absolute value.
|
||||
|
||||
|
|
|
@ -163,6 +163,14 @@ PyLocale_setlocale(PyObject* self, PyObject* args)
|
|||
if (!PyArg_ParseTuple(args, "i|z:setlocale", &category, &locale))
|
||||
return NULL;
|
||||
|
||||
#if defined(MS_WINDOWS)
|
||||
if (category < LC_MIN || category > LC_MAX)
|
||||
{
|
||||
PyErr_SetString(Error, "invalid locale category");
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (locale) {
|
||||
/* set locale */
|
||||
result = setlocale(category, locale);
|
||||
|
|
Loading…
Reference in New Issue