[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#996040: Acknowledgement (qml-module-qtpositioning: Bogus Altitude, Direction and Speed values with geoclue2 backend)




Control: tags -1 patch

A simple fix, once it's seen.

As a bonus, fix the invalid altitude detection.

>From f83eb0b27b0e9458a371b725a8e360ef4230cc8a Mon Sep 17 00:00:00 2001
From: Teemu Ikonen <tpikonen@mailbox.org>
Date: Thu, 14 Oct 2021 21:22:23 +0300
Subject: [PATCH 1/2] Fix assignment vs. comparison precedence error in
 geoclue2 plugin

Replace constructs of type

 if(const auto foo = location.foo() > bar)
     // foo is boolean

with

 const auto foo = location.foo();
 if(foo > bar)
    // foo equals location.foo()
---
 .../geoclue2/qgeopositioninfosource_geoclue2.cpp    | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp
index 10484e3..d92230d 100644
--- a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp
+++ b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp
@@ -410,7 +410,9 @@ void QGeoPositionInfoSourceGeoclue2::handleNewLocation(const QDBusObjectPath &ol
     } else {
         QGeoCoordinate coordinate(location.latitude(),
                                   location.longitude());
-        if (const auto altitude = location.altitude() > std::numeric_limits<double>::min())
+
+        const auto altitude = location.altitude();
+        if (altitude > std::numeric_limits<double>::min())
             coordinate.setAltitude(altitude);
 
         const Timestamp ts = location.timestamp();
@@ -426,11 +428,14 @@ void QGeoPositionInfoSourceGeoclue2::handleNewLocation(const QDBusObjectPath &ol
         const auto accuracy = location.accuracy();
         // We assume that an accuracy as 0.0 means that it comes from a sattelite.
         m_lastPositionFromSatellite = qFuzzyCompare(accuracy, 0.0);
-
         m_lastPosition.setAttribute(QGeoPositionInfo::HorizontalAccuracy, accuracy);
-        if (const auto speed = location.speed() >= 0.0)
+
+        const auto speed = location.speed();
+        if (speed >= 0.0)
             m_lastPosition.setAttribute(QGeoPositionInfo::GroundSpeed, speed);
-        if (const auto heading = location.heading() >= 0.0)
+
+        const auto heading = location.heading();
+        if (heading >= 0.0)
             m_lastPosition.setAttribute(QGeoPositionInfo::Direction, heading);
 
         emit positionUpdated(m_lastPosition);
-- 
2.30.2

>From 3d5e2c302be87ba84681c45cd206b050ea71761f Mon Sep 17 00:00:00 2001
From: Teemu Ikonen <tpikonen@mailbox.org>
Date: Thu, 14 Oct 2021 21:56:29 +0300
Subject: [PATCH 2/2] Fix detection of invalid altitude values in geoclue2
 plugin

Replace std::numeric_limits<double>::min() with ::lowest().
---
 .../position/geoclue2/qgeopositioninfosource_geoclue2.cpp       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp
index d92230d..e3be986 100644
--- a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp
+++ b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp
@@ -412,7 +412,7 @@ void QGeoPositionInfoSourceGeoclue2::handleNewLocation(const QDBusObjectPath &ol
                                   location.longitude());
 
         const auto altitude = location.altitude();
-        if (altitude > std::numeric_limits<double>::min())
+        if (altitude > std::numeric_limits<double>::lowest())
             coordinate.setAltitude(altitude);
 
         const Timestamp ts = location.timestamp();
-- 
2.30.2


Reply to: