From 67dc29a96cf78ee4f4f2bfc42bfdde458138cd31 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Fri, 8 Aug 2014 10:34:13 +0300 Subject: winrt: Avoid divide-by-zero when starting sensors Several sensors were setting the dataRate without checking the value first. If the dataRate is zero, then don't set the native rate (use the default). Task-number: QTBUG-40664 Change-Id: I50e78fd071bd1f56e47baf23b74900b8a6e6c7eb Reviewed-by: Maurice Kalinowski --- src/plugins/sensors/winrt/winrtaccelerometer.cpp | 7 ++++++- src/plugins/sensors/winrt/winrtambientlightsensor.cpp | 7 ++++++- src/plugins/sensors/winrt/winrtcompass.cpp | 7 ++++++- src/plugins/sensors/winrt/winrtgyroscope.cpp | 7 ++++++- src/plugins/sensors/winrt/winrtrotationsensor.cpp | 7 ++++++- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/plugins/sensors/winrt/winrtaccelerometer.cpp b/src/plugins/sensors/winrt/winrtaccelerometer.cpp index 7029f11d..80d269c0 100644 --- a/src/plugins/sensors/winrt/winrtaccelerometer.cpp +++ b/src/plugins/sensors/winrt/winrtaccelerometer.cpp @@ -172,7 +172,12 @@ void WinRtAccelerometer::start() sensorError(hr); return; } - quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/sensor()->dataRate())); + + int dataRate = sensor()->dataRate(); + if (!dataRate) + return; + + quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/dataRate)); hr = d->sensor->put_ReportInterval(reportInterval); if (FAILED(hr)) { qCWarning(lcWinRtSensors) << "Unable to attach to set report interval." diff --git a/src/plugins/sensors/winrt/winrtambientlightsensor.cpp b/src/plugins/sensors/winrt/winrtambientlightsensor.cpp index 1164c9a0..8929b2a4 100644 --- a/src/plugins/sensors/winrt/winrtambientlightsensor.cpp +++ b/src/plugins/sensors/winrt/winrtambientlightsensor.cpp @@ -171,7 +171,12 @@ void WinRtAmbientLightSensor::start() sensorError(hr); return; } - quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/sensor()->dataRate())); + + int dataRate = sensor()->dataRate(); + if (!dataRate) + return; + + quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/dataRate)); hr = d->sensor->put_ReportInterval(reportInterval); if (FAILED(hr)) { qCWarning(lcWinRtSensors) << "Unable to attach to set report interval." diff --git a/src/plugins/sensors/winrt/winrtcompass.cpp b/src/plugins/sensors/winrt/winrtcompass.cpp index 9a3a150c..45aeeddc 100644 --- a/src/plugins/sensors/winrt/winrtcompass.cpp +++ b/src/plugins/sensors/winrt/winrtcompass.cpp @@ -191,7 +191,12 @@ void WinRtCompass::start() sensorError(hr); return; } - quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/sensor()->dataRate())); + + int dataRate = sensor()->dataRate(); + if (!dataRate) + return; + + quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/dataRate)); hr = d->sensor->put_ReportInterval(reportInterval); if (FAILED(hr)) { qCWarning(lcWinRtSensors) << "Unable to attach to set report interval." diff --git a/src/plugins/sensors/winrt/winrtgyroscope.cpp b/src/plugins/sensors/winrt/winrtgyroscope.cpp index 471ea7d5..0b1cbb98 100644 --- a/src/plugins/sensors/winrt/winrtgyroscope.cpp +++ b/src/plugins/sensors/winrt/winrtgyroscope.cpp @@ -169,7 +169,12 @@ void WinRtGyroscope::start() sensorError(hr); return; } - quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/sensor()->dataRate())); + + int dataRate = sensor()->dataRate(); + if (!dataRate) + return; + + quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/dataRate)); hr = d->sensor->put_ReportInterval(reportInterval); if (FAILED(hr)) { qCWarning(lcWinRtSensors) << "Unable to attach to set report interval." diff --git a/src/plugins/sensors/winrt/winrtrotationsensor.cpp b/src/plugins/sensors/winrt/winrtrotationsensor.cpp index 2e786012..e3616a9b 100644 --- a/src/plugins/sensors/winrt/winrtrotationsensor.cpp +++ b/src/plugins/sensors/winrt/winrtrotationsensor.cpp @@ -167,7 +167,12 @@ void WinRtRotationSensor::start() sensorError(hr); return; } - quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/sensor()->dataRate())); + + int dataRate = sensor()->dataRate(); + if (!dataRate) + return; + + quint32 reportInterval = qMax(d->minimumReportInterval, quint32(1000/dataRate)); hr = d->sensor->put_ReportInterval(reportInterval); if (FAILED(hr)) { qCWarning(lcWinRtSensors) << "Unable to attach to set report interval." -- cgit v1.2.3