diff options
author | J-P Nurmi <jpnurmi@digia.com> | 2014-02-20 18:03:10 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-21 18:55:31 +0100 |
commit | db32813a865fe8eda6a4ff87c71b791a26b343c3 (patch) | |
tree | 798efea85d2ab01680bb650161ac683679cee440 /src/quick/util/qquicktimeline.cpp | |
parent | 325161d1c4f4b9c41e620dc842f2ce503404e245 (diff) |
QQuickTimeLine: add missing time checks
The same check is done in QQuickTimeLine::pause(), move() and moveBy(),
where the time is passed as an argument. QQuickTimeLine::accel() and
accelDistance() calculate the time based on velocity and acceleration
or distance. With tiny values this calculation can result to a negative
time due to integer overflow.
Task-number: QTBUG-35046
Change-Id: I000e73d3f787375946e8f87a5d24153ae919bc8d
Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'src/quick/util/qquicktimeline.cpp')
-rw-r--r-- | src/quick/util/qquicktimeline.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/quick/util/qquicktimeline.cpp b/src/quick/util/qquicktimeline.cpp index 5305537d24..94e1f30215 100644 --- a/src/quick/util/qquicktimeline.cpp +++ b/src/quick/util/qquicktimeline.cpp @@ -396,6 +396,7 @@ int QQuickTimeLine::accel(QQuickTimeLineValue &timeLineValue, qreal velocity, qr acceleration = acceleration * -1.0f; int time = static_cast<int>(-1000 * velocity / acceleration); + if (time <= 0) return -1; QQuickTimeLinePrivate::Op op(QQuickTimeLinePrivate::Op::Accel, time, velocity, acceleration, d->order++); d->add(timeLineValue, op); @@ -428,6 +429,7 @@ int QQuickTimeLine::accel(QQuickTimeLineValue &timeLineValue, qreal velocity, qr acceleration = acceleration * -1.0f; int time = static_cast<int>(-1000 * velocity / acceleration); + if (time <= 0) return -1; QQuickTimeLinePrivate::Op op(QQuickTimeLinePrivate::Op::Accel, time, velocity, acceleration, d->order++); d->add(timeLineValue, op); @@ -450,6 +452,7 @@ int QQuickTimeLine::accelDistance(QQuickTimeLineValue &timeLineValue, qreal velo Q_ASSERT((distance >= 0.0f) == (velocity >= 0.0f)); int time = static_cast<int>(1000 * (2.0f * distance) / velocity); + if (time <= 0) return -1; QQuickTimeLinePrivate::Op op(QQuickTimeLinePrivate::Op::AccelDistance, time, velocity, distance, d->order++); d->add(timeLineValue, op); |