diff options
-rw-r--r-- | Lib/test/test_locale.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 16 | ||||
-rw-r--r-- | Modules/_localemodule.c | 4 |
3 files changed, 22 insertions, 9 deletions
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py index a91d358..c67fbfe 100644 --- a/Lib/test/test_locale.py +++ b/Lib/test/test_locale.py @@ -1,4 +1,4 @@ -from test.test_support import verbose, TestSkipped +from test.test_support import verbose, TestSkipped, TestFailed import locale import sys @@ -113,3 +113,12 @@ else: teststrop('\xed\x95\xa0', 'upper', '\xed\x95\xa0') finally: locale.setlocale(locale.LC_CTYPE, oldlocale) + +if hasattr(locale, "strcoll"): + # test crasher from bug #3303 + try: + locale.strcoll(u"a", None) + except TypeError: + pass + else: + raise TestFailed("TypeError not raised") @@ -56,17 +56,20 @@ Core and Builtins slice(None, 10, -1).indices(10) returns (9, 9, -1) instead of (9, 10, -1). -- Issue #3219: Calling a function with repeated keyword arguments, f(a=2, a=23), - would not cause a syntax error. This was a regression from 2.4 caused by the - switch to the new compiler. +- Issue #3219: Calling a function with repeated keyword arguments, + f(a=2, a=23), would not cause a syntax error. This was a regression + from 2.4 caused by the switch to the new compiler. -- Issue #2862: Make int and float freelist management consistent with other - freelists. Changes their CompactFreeList apis into ClearFreeList apis and - calls them via gc.collect(). +- Issue #2862: Make int and float freelist management consistent with + other freelists. Changes their CompactFreeList apis into + ClearFreeList apis and calls them via gc.collect(). Library ------- +- Issue #3303: Fix a crash in locale.strcoll() when calling it with + invalid arguments. + - Issue #3302: Fix several crashes when calling locale's gettext functions with None arguments. @@ -145,7 +148,6 @@ Tests and is now better documented. Explicit unit tests for this context manager have been added to test_warnings. - Build ----- diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index 09c025f..bf5d58d 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -301,7 +301,9 @@ PyLocale_strcoll(PyObject* self, PyObject* args) if (!PyUnicode_Check(os2)) { os2 = PyUnicode_FromObject(os2); if (!os2) { - Py_DECREF(os1); + if (rel1) { + Py_DECREF(os1); + } return NULL; } rel2 = 1; |