Loading django/contrib/gis/geos/prepared.py +6 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,12 @@ class PreparedGeometry(GEOSBase): ptr_type = capi.PREPGEOM_PTR def __init__(self, geom): if not isinstance(geom, GEOSGeometry): raise TypeError # Keeping a reference to the original geometry object to prevent it # from being garbage collected which could then crash the prepared one # See #21662 self._base_geom = geom if not isinstance(geom, GEOSGeometry): raise TypeError self.ptr = capi.geos_prepare(geom.ptr) def __del__(self): Loading django/contrib/gis/geos/tests/test_geos.py +4 −0 Original line number Diff line number Diff line Loading @@ -1043,6 +1043,10 @@ class GEOSTest(unittest.TestCase, TestDataMixin): self.assertEqual(mpoly.intersects(pnt), prep.intersects(pnt)) self.assertEqual(c, prep.covers(pnt)) # Original geometry deletion should not crash the prepared one (#21662) del mpoly self.assertTrue(prep.covers(Point(5, 5))) def test_line_merge(self): "Testing line merge support" ref_geoms = (fromstr('LINESTRING(1 1, 1 1, 3 3)'), Loading docs/releases/1.6.2.txt +2 −1 Original line number Diff line number Diff line Loading @@ -9,4 +9,5 @@ This is Django 1.6.2, a bugfix release for Django 1.6. Bug fixes ========= ... * Prevented the base geometry object of a prepared geometry to be garbage collected, which could lead to crash Django (#21662). Loading
django/contrib/gis/geos/prepared.py +6 −1 Original line number Diff line number Diff line Loading @@ -11,7 +11,12 @@ class PreparedGeometry(GEOSBase): ptr_type = capi.PREPGEOM_PTR def __init__(self, geom): if not isinstance(geom, GEOSGeometry): raise TypeError # Keeping a reference to the original geometry object to prevent it # from being garbage collected which could then crash the prepared one # See #21662 self._base_geom = geom if not isinstance(geom, GEOSGeometry): raise TypeError self.ptr = capi.geos_prepare(geom.ptr) def __del__(self): Loading
django/contrib/gis/geos/tests/test_geos.py +4 −0 Original line number Diff line number Diff line Loading @@ -1043,6 +1043,10 @@ class GEOSTest(unittest.TestCase, TestDataMixin): self.assertEqual(mpoly.intersects(pnt), prep.intersects(pnt)) self.assertEqual(c, prep.covers(pnt)) # Original geometry deletion should not crash the prepared one (#21662) del mpoly self.assertTrue(prep.covers(Point(5, 5))) def test_line_merge(self): "Testing line merge support" ref_geoms = (fromstr('LINESTRING(1 1, 1 1, 3 3)'), Loading
docs/releases/1.6.2.txt +2 −1 Original line number Diff line number Diff line Loading @@ -9,4 +9,5 @@ This is Django 1.6.2, a bugfix release for Django 1.6. Bug fixes ========= ... * Prevented the base geometry object of a prepared geometry to be garbage collected, which could lead to crash Django (#21662).