summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2008-07-19 12:46:12 (GMT)
committerGeorg Brandl <georg@python.org>2008-07-19 12:46:12 (GMT)
commit278fc50c07fcfb90b681c1401eaa9ed40bb1778c (patch)
tree4d07aeaddee59163b28e59820c8d9700682d324f
parent6b41a8e156d7c38947a082016ffb58de8d2485ce (diff)
downloadcpython-278fc50c07fcfb90b681c1401eaa9ed40bb1778c.zip
cpython-278fc50c07fcfb90b681c1401eaa9ed40bb1778c.tar.gz
cpython-278fc50c07fcfb90b681c1401eaa9ed40bb1778c.tar.bz2
#3303: fix crash with invalid Py_DECREF in strcoll().
-rw-r--r--Lib/test/test_locale.py11
-rw-r--r--Misc/NEWS16
-rw-r--r--Modules/_localemodule.c4
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;