Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2015-08-12 10:39:49 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 03:01:03 +0300
commit8e343f909eb0919c66ef744b54ef83d631f5f7e8 (patch)
treec55c34d7fe1fa0e4efa7a59b949b1a058e913fe3 /render
parent7b8cfbb4c23b6d80a73b2c64ccdfa8a933318816 (diff)
Added small defense from invalid data in route rendering
Diffstat (limited to 'render')
-rw-r--r--render/route_renderer.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/render/route_renderer.cpp b/render/route_renderer.cpp
index ad11ce89cf..5ff1f0f0c1 100644
--- a/render/route_renderer.cpp
+++ b/render/route_renderer.cpp
@@ -95,7 +95,7 @@ void MergeAndClipBorders(vector<ArrowBorders> & borders)
return;
// mark groups
- for (size_t i = 0; i < borders.size() - 1; i++)
+ for (size_t i = 0; i + 1 < borders.size(); i++)
{
if (borders[i].m_endDistance >= borders[i + 1].m_startDistance)
borders[i + 1].m_groupIndex = borders[i].m_groupIndex;
@@ -127,7 +127,7 @@ double CalculateLength(vector<m2::PointD> const & points)
{
ASSERT_LESS(0, points.size(), ());
double len = 0;
- for (size_t i = 0; i < points.size() - 1; i++)
+ for (size_t i = 0; i + 1 < points.size(); i++)
len += (points[i + 1] - points[i]).Length();
return len;
}
@@ -137,7 +137,7 @@ vector<m2::PointD> AddPoints(double offset, vector<m2::PointD> const & points, b
vector<m2::PointD> result;
result.reserve(points.size() + 1);
double len = 0;
- for (size_t i = 0; i < points.size() - 1; i++)
+ for (size_t i = 0; i + 1 < points.size(); i++)
{
double dist = (points[i + 1] - points[i]).Length();
double l = len + dist;
@@ -178,7 +178,7 @@ vector<m2::PointD> CalculatePoints(m2::PolylineD const & polyline, double start,
vector<m2::PointD> const & path = polyline.GetPoints();
double len = 0;
bool started = false;
- for (size_t i = 0; i < path.size() - 1; i++)
+ for (size_t i = 0; i + 1 < path.size(); i++)
{
double dist = (path[i + 1] - path[i]).Length();
if (fabs(dist) < 1e-5)
@@ -209,8 +209,13 @@ vector<m2::PointD> CalculatePoints(m2::PolylineD const & polyline, double start,
}
len = l;
}
+ if (result.empty())
+ return result;
result = AddPoints(tailSize, result, true /* isTail */);
+ if (result.empty())
+ return result;
+
return AddPoints(CalculateLength(result) - headSize, result, false /* isTail */);
}