diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-12-01 21:59:18 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-12-01 21:59:18 (GMT) |
commit | 64f3ca4206ebcb4b3166e0cd8fe0658628b04b4e (patch) | |
tree | 12004dc09fe16057d8b3845a273566b379112365 | |
parent | c2e1cb7d36ad387a06c6b7dadf30c6535f086280 (diff) | |
download | cpython-64f3ca4206ebcb4b3166e0cd8fe0658628b04b4e.zip cpython-64f3ca4206ebcb4b3166e0cd8fe0658628b04b4e.tar.gz cpython-64f3ca4206ebcb4b3166e0cd8fe0658628b04b4e.tar.bz2 |
Merged revisions 76625 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r76625 | amaury.forgeotdarc | 2009-12-01 22:51:04 +0100 (mar., 01 déc. 2009) | 3 lines
#7419: Fix a crash on Windows in locale.setlocale() when the category
is outside the allowed range.
........
-rw-r--r-- | Lib/test/test_locale.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/_localemodule.c | 8 |
3 files changed, 22 insertions, 0 deletions
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py index 8dfaf90..8c17f87 100644 --- a/Lib/test/test_locale.py +++ b/Lib/test/test_locale.py @@ -353,6 +353,17 @@ class TestMiscellaneous(unittest.TestCase): self.assertRaises(TypeError, locale.strcoll, "a", None) self.assertRaises(TypeError, locale.strcoll, b"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,6 +12,9 @@ What's New in Python 3.2 Alpha 1? Core and Builtins ----------------- +- Issue #7419: setlocale() could crash the interpreter on Windows when called + with invalid values. + - Issue #6077: On Windows, files opened with tempfile.TemporaryFile in "wt+" mode would appear truncated on the first '0x1a' byte (aka. Ctrl+Z). diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index fa6ab8f..aabc3ac 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -133,6 +133,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); |