summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2012-09-22 07:23:12 (GMT)
committerGeorg Brandl <georg@python.org>2012-09-22 07:23:12 (GMT)
commit0085a2407574a4af46019bee279895bdafbd76b8 (patch)
treeadfe988557488cc52e34b16bb971f8a8727f1ae6
parentfd296ff5d6436ad3a782cca816783f05acd9fe78 (diff)
downloadcpython-0085a2407574a4af46019bee279895bdafbd76b8.zip
cpython-0085a2407574a4af46019bee279895bdafbd76b8.tar.gz
cpython-0085a2407574a4af46019bee279895bdafbd76b8.tar.bz2
Closes #15973: fix a segmentation fault when comparing timezone objects.
-rw-r--r--Lib/datetime.py2
-rw-r--r--Lib/test/datetimetester.py2
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/_datetimemodule.c6
4 files changed, 13 insertions, 0 deletions
diff --git a/Lib/datetime.py b/Lib/datetime.py
index a15c6b0..f506e9a 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -1854,6 +1854,8 @@ class timezone(tzinfo):
return (self._offset, self._name)
def __eq__(self, other):
+ if type(other) != timezone:
+ return False
return self._offset == other._offset
def __hash__(self):
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index a417170..931ef6f 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -235,6 +235,8 @@ class TestTimeZone(unittest.TestCase):
self.assertEqual(timezone(-5 * HOUR), timezone(-5 * HOUR, 'EST'))
with self.assertRaises(TypeError): timezone(ZERO) < timezone(ZERO)
self.assertIn(timezone(ZERO), {timezone(ZERO)})
+ self.assertTrue(timezone(ZERO) != None)
+ self.assertFalse(timezone(ZERO) == None)
def test_aware_datetime(self):
# test that timezone instances can be used by datetime
diff --git a/Misc/NEWS b/Misc/NEWS
index 882d274..f82da60 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -31,6 +31,9 @@ Library
Extension Modules
-----------------
+- Issue #15973: Fix a segmentation fault when comparing datetime timezone
+ objects.
+
- Issue #15977: Fix memory leak in Modules/_ssl.c when the function
_set_npn_protocols() is called multiple times, thanks to Daniel Sommermann.
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index 6df5c03..01c85d1 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -3215,6 +3215,12 @@ timezone_richcompare(PyDateTime_TimeZone *self,
{
if (op != Py_EQ && op != Py_NE)
Py_RETURN_NOTIMPLEMENTED;
+ if (Py_TYPE(other) != &PyDateTime_TimeZoneType) {
+ if (op == Py_EQ)
+ Py_RETURN_FALSE;
+ else
+ Py_RETURN_TRUE;
+ }
return delta_richcompare(self->offset, other->offset, op);
}