diff options
author | Georg Brandl <georg@python.org> | 2012-09-22 07:23:12 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2012-09-22 07:23:12 (GMT) |
commit | 0085a2407574a4af46019bee279895bdafbd76b8 (patch) | |
tree | adfe988557488cc52e34b16bb971f8a8727f1ae6 | |
parent | fd296ff5d6436ad3a782cca816783f05acd9fe78 (diff) | |
download | cpython-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.py | 2 | ||||
-rw-r--r-- | Lib/test/datetimetester.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/_datetimemodule.c | 6 |
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 @@ -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); } |