diff --git a/test/fixtures/lineto-huge-linestring.mvt b/test/fixtures/lineto-huge-linestring.mvt new file mode 100644 index 0000000..841e154 Binary files /dev/null and b/test/fixtures/lineto-huge-linestring.mvt differ diff --git a/test/fixtures/lineto-huge-polygon.mvt b/test/fixtures/lineto-huge-polygon.mvt new file mode 100644 index 0000000..e953be1 Binary files /dev/null and b/test/fixtures/lineto-huge-polygon.mvt differ diff --git a/test/fixtures/moveto-huge-linestring.mvt b/test/fixtures/moveto-huge-linestring.mvt new file mode 100644 index 0000000..56146ec Binary files /dev/null and b/test/fixtures/moveto-huge-linestring.mvt differ diff --git a/test/fixtures/moveto-huge-point.mvt b/test/fixtures/moveto-huge-point.mvt new file mode 100644 index 0000000..b5ddc47 Binary files /dev/null and b/test/fixtures/moveto-huge-point.mvt differ diff --git a/test/fixtures/moveto-huge-polygon.mvt b/test/fixtures/moveto-huge-polygon.mvt new file mode 100644 index 0000000..fb9fa8a Binary files /dev/null and b/test/fixtures/moveto-huge-polygon.mvt differ diff --git a/test/fixtures/moveto-original.mvt b/test/fixtures/moveto-original.mvt new file mode 100644 index 0000000..55a11b1 --- /dev/null +++ b/test/fixtures/moveto-original.mvt @@ -0,0 +1,3 @@ +;x0 + +000000000000000"0000000(€000000"‰ûûíÿ000000000 \ No newline at end of file diff --git a/test/unit/vector_tile.test.cpp b/test/unit/vector_tile.test.cpp index 87d37d2..706c650 100644 --- a/test/unit/vector_tile.test.cpp +++ b/test/unit/vector_tile.test.cpp @@ -101,15 +101,43 @@ TEST_CASE( "Read Feature-single-polygon.mvt" ) { REQUIRE(stringify_geom(geom) == "25, 17"); }*/ -TEST_CASE( "Prevent massive over allocation" ) { - std::string buffer = open_tile("test/test046.mvt"); +TEST_CASE( "Prevent massive over allocation - moveto point" ) { + std::string buffer = open_tile("test/fixtures/moveto-huge-point.mvt"); mapbox::vector_tile::buffer tile(buffer); auto const layer_names = tile.layerNames(); REQUIRE(layer_names.size() == 1); - REQUIRE(layer_names[0] == "0000000000"); - auto const layer = tile.getLayer("0000000000"); + REQUIRE(layer_names[0] == "hello"); + auto const layer = tile.getLayer("hello"); REQUIRE(layer.featureCount() == 1); - REQUIRE(layer.getName() == "0000000000"); + REQUIRE(layer.getName() == "hello"); + auto const feature = mapbox::vector_tile::feature(layer.getFeature(0),layer); + mapbox::vector_tile::points_arrays_type geom = feature.getGeometries(1.0); + REQUIRE(geom.capacity() <= 655360); +} + +TEST_CASE( "Prevent massive over allocation - moveto linestring" ) { + std::string buffer = open_tile("test/fixtures/moveto-huge-linestring.mvt"); + mapbox::vector_tile::buffer tile(buffer); + auto const layer_names = tile.layerNames(); + REQUIRE(layer_names.size() == 1); + REQUIRE(layer_names[0] == "hello"); + auto const layer = tile.getLayer("hello"); + REQUIRE(layer.featureCount() == 1); + REQUIRE(layer.getName() == "hello"); + auto const feature = mapbox::vector_tile::feature(layer.getFeature(0),layer); + mapbox::vector_tile::points_arrays_type geom = feature.getGeometries(1.0); + REQUIRE(geom.capacity() <= 655360); +} + +TEST_CASE( "Prevent massive over allocation - moveto polygon" ) { + std::string buffer = open_tile("test/fixtures/moveto-huge-linestring.mvt"); + mapbox::vector_tile::buffer tile(buffer); + auto const layer_names = tile.layerNames(); + REQUIRE(layer_names.size() == 1); + REQUIRE(layer_names[0] == "hello"); + auto const layer = tile.getLayer("hello"); + REQUIRE(layer.featureCount() == 1); + REQUIRE(layer.getName() == "hello"); auto const feature = mapbox::vector_tile::feature(layer.getFeature(0),layer); mapbox::vector_tile::points_arrays_type geom = feature.getGeometries(1.0); REQUIRE(geom.capacity() <= 655360);