From 66b6b689239dad3f017d2a3495df748cbee5debb Mon Sep 17 00:00:00 2001 From: Mushtaq Ali Date: Fri, 6 Jul 2018 20:26:14 +0500 Subject: [PATCH] Fixed #29543 -- Fixed CPointerBase.__del__() ImportError crash. --- AUTHORS | 1 + django/contrib/gis/ptr.py | 2 +- tests/gis_tests/test_ptr.py | 8 ++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index c2fad3204b..4ccdac886c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -602,6 +602,7 @@ answer newbie questions, and generally made Django that much better: Morten Bagai msaelices msundstr + Mushtaq Ali Mykola Zamkovoi Nagy Károly Nasimul Haque diff --git a/django/contrib/gis/ptr.py b/django/contrib/gis/ptr.py index afc83fdd22..a5a117a19a 100644 --- a/django/contrib/gis/ptr.py +++ b/django/contrib/gis/ptr.py @@ -34,5 +34,5 @@ class CPointerBase: if self.destructor and self._ptr: try: self.destructor(self.ptr) - except (AttributeError, TypeError): + except (AttributeError, ImportError, TypeError): pass # Some part might already have been garbage collected diff --git a/tests/gis_tests/test_ptr.py b/tests/gis_tests/test_ptr.py index ca318a28eb..1d80e24f92 100644 --- a/tests/gis_tests/test_ptr.py +++ b/tests/gis_tests/test_ptr.py @@ -64,3 +64,11 @@ class CPointerBaseTests(SimpleTestCase): fg.ptr = ptr del fg destructor_mock.assert_called_with(ptr) + + def test_destructor_catches_importerror(self): + class FakeGeom(CPointerBase): + destructor = mock.Mock(side_effect=ImportError) + + fg = FakeGeom() + fg.ptr = fg.ptr_type(1) + del fg