summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2009-12-01 21:59:18 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2009-12-01 21:59:18 (GMT)
commit64f3ca4206ebcb4b3166e0cd8fe0658628b04b4e (patch)
tree12004dc09fe16057d8b3845a273566b379112365
parentc2e1cb7d36ad387a06c6b7dadf30c6535f086280 (diff)
downloadcpython-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.py11
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/_localemodule.c8
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 = [
diff --git a/Misc/NEWS b/Misc/NEWS
index d3da7b9..46a5912 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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);