From 517722e29791790b5480cdd7918a022bd1fbbbc5 Mon Sep 17 00:00:00 2001 From: Paolo Angelelli Date: Mon, 5 Jun 2017 20:50:38 +0200 Subject: Fix for incorrect QGeoPathPrivate::contains Change-Id: I4067d6df69aad0af9495a29532a34f0a7e992596 Reviewed-by: Alex Blasche --- src/positioning/qgeopath.cpp | 2 +- tests/auto/qgeopath/tst_qgeopath.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/positioning/qgeopath.cpp b/src/positioning/qgeopath.cpp index b24daec6..ad3536af 100644 --- a/src/positioning/qgeopath.cpp +++ b/src/positioning/qgeopath.cpp @@ -464,7 +464,7 @@ bool QGeoPathPrivate::contains(const QGeoCoordinate &coordinate) const QDoubleVector2D candidate = ( (p-a).length() < (p-b).length() ) ? a : b; - if (u < (b - a).length() + if (u > 0 && u < 1 && (p-intersection).length() < (p-candidate).length() ) // And it falls in the segment candidate = intersection; diff --git a/tests/auto/qgeopath/tst_qgeopath.cpp b/tests/auto/qgeopath/tst_qgeopath.cpp index 8c4ac767..9244394a 100644 --- a/tests/auto/qgeopath/tst_qgeopath.cpp +++ b/tests/auto/qgeopath/tst_qgeopath.cpp @@ -275,8 +275,8 @@ void tst_QGeoPath::contains_data() c.append(QGeoCoordinate(3,0)); QTest::newRow("One of the points") << c[0] << c[1] << c[2] << 0.0 << QGeoCoordinate(2, 2) << true; - QTest::newRow("Not so far away") << c[0] << c[1] << c[2] << 0.0 << QGeoCoordinate(0, 0) << false; - QTest::newRow("Not so far away and large line") << c[0] << c[1] << c[2] << 100000.0 << QGeoCoordinate(0, 0) << true; + QTest::newRow("Not so far away") << c[0] << c[1] << c[2] << 0.0 << QGeoCoordinate(0.8, 0.8) << false; + QTest::newRow("Not so far away and large line") << c[0] << c[1] << c[2] << 100000.0 << QGeoCoordinate(0.8, 0.8) << true; } void tst_QGeoPath::contains() @@ -378,7 +378,7 @@ void tst_QGeoPath::extendShape_data() QTest::newRow("One of the points") << c[0] << c[1] << c[2] << 0.0 << QGeoCoordinate(2, 2) << true << true; QTest::newRow("Not so far away") << c[0] << c[1] << c[2] << 0.0 << QGeoCoordinate(0, 0) << false << true; - QTest::newRow("Not so far away and large line") << c[0] << c[1] << c[2] << 100000.0 << QGeoCoordinate(0, 0) << true << true; + QTest::newRow("Not so far away and large line") << c[0] << c[1] << c[2] << 100000.0 << QGeoCoordinate(0.8, 0.8) << true << true; } QTEST_MAIN(tst_QGeoPath) -- cgit v1.2.1