Commit 542198c1 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #21662 -- Kept parent reference in prepared geometry

Thanks Robert Scott for the report.
parent 1716b7ce
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -12,6 +12,10 @@ class PreparedGeometry(GEOSBase):
    ptr_type = capi.PREPGEOM_PTR

    def __init__(self, geom):
        # 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)
+4 −0
Original line number Diff line number Diff line
@@ -1046,6 +1046,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)'),