lwgeom_free(ret);
lwgeom_free(geom);
lwgeom_free(blade);
+
+ /* See #2528 (1) -- memory leak test, needs valgrind to check */
+ geom = lwgeom_from_wkt("SRID=1;LINESTRING(0 1,10 1)", LW_PARSER_CHECK_NONE);
+ CU_ASSERT(geom != NULL);
+ blade = lwgeom_from_wkt("LINESTRING(7 0,7 3)", LW_PARSER_CHECK_NONE);
+ ret = lwgeom_split(geom, blade);
+ CU_ASSERT(ret != NULL);
+ wkt = lwgeom_to_ewkt(ret);
+ in_wkt = "SRID=1;GEOMETRYCOLLECTION(LINESTRING(0 1,7 1),LINESTRING(7 1,10 1))";
+ if (strcmp(in_wkt, wkt))
+ fprintf(stderr, "\nExp: %s\nObt: %s\n", in_wkt, wkt);
+ CU_ASSERT_STRING_EQUAL(wkt, in_wkt);
+ lwfree(wkt);
+ lwgeom_free(ret);
+ lwgeom_free(geom);
+ lwgeom_free(blade);
+
+ /* See #2528 (2) -- memory leak test, needs valgrind to check */
+ geom = lwgeom_from_wkt("SRID=1;POLYGON((0 1, 10 1, 10 10, 0 10, 0 1))", LW_PARSER_CHECK_NONE);
+ CU_ASSERT(geom != NULL);
+ blade = lwgeom_from_wkt("LINESTRING(7 0,7 20)", LW_PARSER_CHECK_NONE);
+ ret = lwgeom_split(geom, blade);
+ CU_ASSERT(ret != NULL);
+ wkt = lwgeom_to_ewkt(ret);
+ in_wkt = "SRID=1;GEOMETRYCOLLECTION(POLYGON((7 1,0 1,0 10,7 10,7 1)),POLYGON((7 10,10 10,10 1,7 1,7 10)))";
+ if (strcmp(in_wkt, wkt))
+ fprintf(stderr, "\nExp: %s\nObt: %s\n", in_wkt, wkt);
+ CU_ASSERT_STRING_EQUAL(wkt, in_wkt);
+ lwfree(wkt);
+ lwgeom_free(ret);
+ lwgeom_free(geom);
+ lwgeom_free(blade);
}
return NULL;
}
- if ( ! lwtype_is_collection(diff->type) )
+ out = lwgeom_as_lwcollection(diff);
+ if ( ! out )
{
components = lwalloc(sizeof(LWGEOM*)*1);
components[0] = diff;
}
else
{
- out = lwcollection_construct(COLLECTIONTYPE, lwline_in->srid,
- NULL, ((LWCOLLECTION*)diff)->ngeoms,
- ((LWCOLLECTION*)diff)->geoms);
+ /* Set SRID */
+ lwgeom_set_srid((LWGEOM*)out, lwline_in->srid);
+ /* Force collection type */
+ out->type = COLLECTIONTYPE;
}
out = lwcollection_construct_empty(COLLECTIONTYPE, lwpoly_in->srid,
hasZ, 0);
/* Allocate space for all polys */
- out->geoms = lwalloc(sizeof(LWGEOM*)*n);
+ out->geoms = lwrealloc(out->geoms, sizeof(LWGEOM*)*n);
assert(0 == out->ngeoms);
for (i=0; i<n; ++i)
{