From 278fc50c07fcfb90b681c1401eaa9ed40bb1778c Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 19 Jul 2008 12:46:12 +0000 Subject: #3303: fix crash with invalid Py_DECREF in strcoll(). --- Lib/test/test_locale.py | 11 ++++++++++- Misc/NEWS | 16 +++++++++------- 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") diff --git a/Misc/NEWS b/Misc/NEWS index 2226e8a..dc0dbf3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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; -- cgit v0.12