From: Sandro Santilli Date: Wed, 19 Aug 2015 16:41:01 +0000 (+0000) Subject: Always return a fully owned object to lwgeom/geos function callers X-Git-Tag: 2.2.0rc1~143 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=718f4ee2ec082def9a75125b1452e50adb03bde1;p=postgis Always return a fully owned object to lwgeom/geos function callers See #3245 git-svn-id: http://svn.osgeo.org/postgis/trunk@13942 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/liblwgeom/lwgeom_geos.c b/liblwgeom/lwgeom_geos.c index dc6052c42..a6f0c16e0 100644 --- a/liblwgeom/lwgeom_geos.c +++ b/liblwgeom/lwgeom_geos.c @@ -545,11 +545,11 @@ lwgeom_intersection(const LWGEOM *geom1, const LWGEOM *geom2) /* A.Intersection(Empty) == Empty */ if ( lwgeom_is_empty(geom2) ) - return lwgeom_clone(geom2); + return lwgeom_clone_deep(geom2); /* Empty.Intersection(A) == Empty */ if ( lwgeom_is_empty(geom1) ) - return lwgeom_clone(geom1); + return lwgeom_clone_deep(geom1); /* ensure srids are identical */ srid = (int)(geom1->srid); @@ -689,7 +689,7 @@ lwgeom_unaryunion(const LWGEOM *geom1) /* Empty.UnaryUnion() == Empty */ if ( lwgeom_is_empty(geom1) ) - return lwgeom_clone(geom1); + return lwgeom_clone_deep(geom1); initGEOS(lwnotice, lwgeom_geos_error); @@ -741,11 +741,11 @@ lwgeom_difference(const LWGEOM *geom1, const LWGEOM *geom2) /* A.Difference(Empty) == A */ if ( lwgeom_is_empty(geom2) ) - return lwgeom_clone(geom1); + return lwgeom_clone_deep(geom1); /* Empty.Intersection(A) == Empty */ if ( lwgeom_is_empty(geom1) ) - return lwgeom_clone(geom1); + return lwgeom_clone_deep(geom1); /* ensure srids are identical */ srid = (int)(geom1->srid); @@ -815,11 +815,11 @@ lwgeom_symdifference(const LWGEOM* geom1, const LWGEOM* geom2) /* A.SymDifference(Empty) == A */ if ( lwgeom_is_empty(geom2) ) - return lwgeom_clone(geom1); + return lwgeom_clone_deep(geom1); /* Empty.DymDifference(B) == B */ if ( lwgeom_is_empty(geom1) ) - return lwgeom_clone(geom2); + return lwgeom_clone_deep(geom2); /* ensure srids are identical */ srid = (int)(geom1->srid); @@ -890,11 +890,11 @@ lwgeom_union(const LWGEOM *geom1, const LWGEOM *geom2) /* A.Union(empty) == A */ if ( lwgeom_is_empty(geom1) ) - return lwgeom_clone(geom2); + return lwgeom_clone_deep(geom2); /* B.Union(empty) == B */ if ( lwgeom_is_empty(geom2) ) - return lwgeom_clone(geom1); + return lwgeom_clone_deep(geom1); /* ensure srids are identical */ @@ -971,7 +971,7 @@ lwgeom_clip_by_rect(const LWGEOM *geom1, double x0, double y0, double x1, double /* A.Intersection(Empty) == Empty */ if ( lwgeom_is_empty(geom1) ) - return lwgeom_clone(geom1); + return lwgeom_clone_deep(geom1); is3d = FLAGS_GET_Z(geom1->flags); diff --git a/liblwgeom/lwgeom_geos_split.c b/liblwgeom/lwgeom_geos_split.c index 6b3886ad3..25173404c 100644 --- a/liblwgeom/lwgeom_geos_split.c +++ b/liblwgeom/lwgeom_geos_split.c @@ -170,7 +170,7 @@ lwline_split_by_point(const LWLINE* lwline_in, const LWPOINT* blade_in) FLAGS_GET_M(lwline_in->flags)); if ( lwline_split_by_point_to(lwline_in, blade_in, out) < 2 ) { - lwmline_add_lwline(out, lwline_clone(lwline_in)); + lwmline_add_lwline(out, lwline_clone_deep(lwline_in)); } /* Turn multiline into collection */ @@ -188,7 +188,7 @@ lwline_split_by_mpoint(const LWLINE* lwline_in, const LWMPOINT* mp) out = lwmline_construct_empty(lwline_in->srid, FLAGS_GET_Z(lwline_in->flags), FLAGS_GET_M(lwline_in->flags)); - lwmline_add_lwline(out, lwline_clone(lwline_in)); + lwmline_add_lwline(out, lwline_clone_deep(lwline_in)); for (i=0; ingeoms; ++i) {