#7419: Fix a crash on Windows in locale.setlocale() when the category

is outside the allowed range.
This commit is contained in:
Amaury Forgeot d'Arc 2009-12-01 21:51:04 +00:00
parent 7072f74dc8
commit d728871ee1
3 changed files with 23 additions and 1 deletions

View File

@ -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 = [

View File

@ -12,6 +12,9 @@ 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.

View File

@ -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);