mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.6.x] Fixed #21662 -- Kept parent reference in prepared geometry
Thanks Robert Scott for the report.
Backport of 542198c1d0 from master.
			
			
This commit is contained in:
		| @@ -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): | ||||
|   | ||||
| @@ -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)'), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user