diff options
| author | Pablo Galindo <Pablogsal@gmail.com> | 2019-08-22 20:24:25 +0100 |
|---|---|---|
| committer | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-08-22 12:24:25 -0700 |
| commit | 4be11c009abe88175fa164b45e4838e7267dfa97 (patch) | |
| tree | 19f0c688af902ba0403f3c5c0d5e51b4949e66d7 | |
| parent | 8889627b53e1eea2e32590f1867fbb0b0fc7407f (diff) | |
| download | cpython-git-4be11c009abe88175fa164b45e4838e7267dfa97.tar.gz | |
bpo-37915: Fix comparison between tzinfo objects and timezone objects (GH-15390)
https://bugs.python.org/issue37915
Automerge-Triggered-By: @pablogsal
| -rw-r--r-- | Lib/test/datetimetester.py | 5 | ||||
| -rw-r--r-- | Misc/NEWS.d/next/Library/2019-08-22-16-13-27.bpo-37915.xyoZI5.rst | 3 | ||||
| -rw-r--r-- | Modules/_datetimemodule.c | 3 |
3 files changed, 10 insertions, 1 deletions
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index d0101c98bc..58004870a0 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -413,6 +413,11 @@ class TestTimeZone(unittest.TestCase): with self.assertRaises(ValueError): timezone(delta) + def test_comparison_with_tzinfo(self): + # Constructing tzinfo objects directly should not be done by users + # and serves only to check the bug described in bpo-37915 + self.assertNotEqual(timezone.utc, tzinfo()) + self.assertNotEqual(timezone(timedelta(hours=1)), tzinfo()) ############################################################################# # Base class for testing a particular aspect of timedelta, time, date and diff --git a/Misc/NEWS.d/next/Library/2019-08-22-16-13-27.bpo-37915.xyoZI5.rst b/Misc/NEWS.d/next/Library/2019-08-22-16-13-27.bpo-37915.xyoZI5.rst new file mode 100644 index 0000000000..1dc9ea4b8c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-08-22-16-13-27.bpo-37915.xyoZI5.rst @@ -0,0 +1,3 @@ +Fix a segmentation fault that appeared when comparing instances of +``datetime.timezone`` and ``datetime.tzinfo`` objects. Patch by Pablo +Galindo. diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 6d28b3e511..56eaccdf17 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -32,6 +32,7 @@ #define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType) #define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType) +#define PyTimezone_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeZoneType) /*[clinic input] module datetime @@ -3745,7 +3746,7 @@ timezone_richcompare(PyDateTime_TimeZone *self, { if (op != Py_EQ && op != Py_NE) Py_RETURN_NOTIMPLEMENTED; - if (!PyTZInfo_Check(other)) { + if (!PyTimezone_Check(other)) { Py_RETURN_NOTIMPLEMENTED; } return delta_richcompare(self->offset, other->offset, op); |
