From f16a865420eb8ea00defc6fa145b9015bfdec621 Mon Sep 17 00:00:00 2001 From: "Daniel J. Hofmann" Date: Fri, 18 Mar 2016 15:30:28 +0100 Subject: [PATCH] Make Tile plugin validate its parameters, fixes #2109 --- include/engine/api/tile_parameters.hpp | 14 ++++++++++++-- src/engine/plugins/tile.cpp | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/engine/api/tile_parameters.hpp b/include/engine/api/tile_parameters.hpp index 937b8a50f..261264c03 100644 --- a/include/engine/api/tile_parameters.hpp +++ b/include/engine/api/tile_parameters.hpp @@ -28,6 +28,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef ENGINE_API_TILE_PARAMETERS_HPP #define ENGINE_API_TILE_PARAMETERS_HPP +#include + namespace osrm { namespace engine @@ -41,8 +43,16 @@ struct TileParameters final unsigned y; unsigned z; - // FIXME check if x and y work with z - bool IsValid() { return z < 20; }; + bool IsValid() const + { + // https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Zoom_levels + // https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#X_and_Y + const auto valid_x = x <= static_cast(std::pow(2., z)) - 1; + const auto valid_y = y <= static_cast(std::pow(2., z)) - 1; + const auto valid_z = z < 20; + + return valid_x && valid_y && valid_z; + }; }; } } diff --git a/src/engine/plugins/tile.cpp b/src/engine/plugins/tile.cpp index 5eae0b465..f33a711d1 100644 --- a/src/engine/plugins/tile.cpp +++ b/src/engine/plugins/tile.cpp @@ -168,6 +168,8 @@ FixedLine coordinatesToTileLine(const util::Coordinate start, Status TilePlugin::HandleRequest(const api::TileParameters ¶meters, std::string &pbf_buffer) { + BOOST_ASSERT(parameters.IsValid()); + using namespace util::coordinate_calculation; double min_lon, min_lat, max_lon, max_lat;