From: Petri Lehtinen Date: Fri, 4 Nov 2011 19:35:07 +0000 (+0200) Subject: Issue #3067: Fix the error raised by locale.setlocale() X-Git-Tag: v3.2.3rc1~428 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3c85fe07f40a18d9f5733e85b213a6992c5b2ed4;p=thirdparty%2FPython%2Fcpython.git Issue #3067: Fix the error raised by locale.setlocale() --- diff --git a/Lib/locale.py b/Lib/locale.py index 3dc4cafcb152..58cf0a75b37c 100644 --- a/Lib/locale.py +++ b/Lib/locale.py @@ -440,13 +440,17 @@ def _build_localename(localetuple): No aliasing or normalizing takes place. """ - language, encoding = localetuple - if language is None: - language = 'C' - if encoding is None: - return language - else: - return language + '.' + encoding + try: + language, encoding = localetuple + + if language is None: + language = 'C' + if encoding is None: + return language + else: + return language + '.' + encoding + except (TypeError, ValueError): + raise TypeError('Locale must be None, a string, or an iterable of two strings -- language code, encoding.') def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')): diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py index 5d4b5fb420a6..30480c15b964 100644 --- a/Lib/test/test_locale.py +++ b/Lib/test/test_locale.py @@ -407,6 +407,14 @@ class TestMiscellaneous(unittest.TestCase): locale.setlocale(locale.LC_CTYPE, loc) self.assertEqual(loc, locale.getlocale(locale.LC_CTYPE)) + def test_invalid_locale_format_in_localetuple(self): + with self.assertRaises(TypeError): + locale.setlocale(locale.LC_ALL, b'fi_FI') + + def test_invalid_iterable_in_localetuple(self): + with self.assertRaises(TypeError): + locale.setlocale(locale.LC_ALL, (b'not', b'valid')) + def test_main(): tests = [ diff --git a/Misc/ACKS b/Misc/ACKS index 5536ac60f552..6f2c2a11e443 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -717,6 +717,7 @@ John Popplewell Amrit Prem Paul Prescod Donovan Preston +Jyrki Pulliainen Steve Purcell Fernando Pérez Eduardo Pérez diff --git a/Misc/NEWS b/Misc/NEWS index c91c094a2fa4..7ef197731728 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -66,6 +66,9 @@ Core and Builtins Library ------- +- Issue #3067: locale.setlocale() now raises TypeError if the second + argument is an invalid iterable. Initial patch by Jyrki Pulliainen. + - Issue #13140: Fix the daemon_threads attribute of ThreadingMixIn. - Issue #13339: Fix compile error in posixmodule.c due to missing semicolon.