lwline_free(line2);
lwline_free(line1);
+ /* Appending a read-only pointarray is allowed */
+ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 10, 10 0)"));
+ line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(10 0,11 0)"));
+ FLAGS_SET_READONLY(line2->points->flags, 1);
+ ret = ptarray_append_ptarray(line1->points, line2->points, -1);
+ CU_ASSERT(ret == LW_SUCCESS);
+ wkt = lwgeom_to_text(lwline_as_lwgeom(line1));
+ CU_ASSERT_STRING_EQUAL(wkt, "LINESTRING(0 10,10 0,11 0)");
+ lwfree(wkt);
+ lwline_free(line2);
+ lwline_free(line1);
+
+ /* Appending to a read-only pointarray is forbidden */
+ line1 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(0 10, 10 0)"));
+ line2 = lwgeom_as_lwline(lwgeom_from_text("LINESTRING(10 0,11 0)"));
+ FLAGS_SET_READONLY(line1->points->flags, 1);
+ ret = ptarray_append_ptarray(line1->points, line2->points, -1);
+ CU_ASSERT(ret == LW_FAILURE);
+ lwline_free(line2);
+ lwline_free(line1);
+
}
static void test_ptarray_locate_point(void)
if ( ! npoints ) return LW_SUCCESS; /* nothing more to do */
- if( pa1->flags != pa2->flags )
+ if( FLAGS_GET_READONLY(pa1->flags) )
+ {
+ lwerror("ptarray_append_ptarray: target pointarray is read-only");
+ return LW_FAILURE;
+ }
+
+ if( FLAGS_GET_ZM(pa1->flags) != FLAGS_GET_ZM(pa2->flags) )
{
lwerror("ptarray_append_ptarray: appending mixed dimensionality is not allowed");
return LW_FAILURE;