summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-01-15 12:36:32 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-01-15 15:06:34 +0000
commit320504179eb5b7b8c52e54ea97c930ee7d8c1ae6 (patch)
tree41adb8f309484317c0ccc82511d2cead84bcf6d0 /src
parentbc0db957cd158af234f02fb1a9510eab60a491a2 (diff)
Fix access after free
If deleteLater is called from the destructor of LocationProviderQt, QtPositioningHelper shouldn't be accessing LocationProviderQt from its destructor. Change-Id: I1f2344edc1918fcfa566c3cd6045694cabf89768 Reviewed-by: Michael BrĂ¼ning <michael.bruning@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/location_provider_qt.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/core/location_provider_qt.cpp b/src/core/location_provider_qt.cpp
index 222d15354..485ea8d94 100644
--- a/src/core/location_provider_qt.cpp
+++ b/src/core/location_provider_qt.cpp
@@ -74,6 +74,7 @@ private:
QGeoPositionInfoSource *m_positionInfoSource;
void postToLocationProvider(const base::Closure &task);
+ friend class LocationProviderQt;
};
QtPositioningHelper::QtPositioningHelper(LocationProviderQt *provider)
@@ -85,7 +86,8 @@ QtPositioningHelper::QtPositioningHelper(LocationProviderQt *provider)
QtPositioningHelper::~QtPositioningHelper()
{
- m_locationProvider->m_positioningHelper = 0;
+ if (m_locationProvider)
+ m_locationProvider->m_positioningHelper = 0;
}
static bool isHighAccuracySource(const QGeoPositionInfoSource *source)
@@ -223,7 +225,10 @@ LocationProviderQt::LocationProviderQt()
LocationProviderQt::~LocationProviderQt()
{
- m_positioningHelper->deleteLater();
+ if (m_positioningHelper) {
+ m_positioningHelper->m_locationProvider = 0;
+ m_positioningHelper->deleteLater();
+ }
}
bool LocationProviderQt::StartProvider(bool highAccuracy)