diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2019-10-18 17:28:21 +0200 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2019-10-22 07:05:00 +0200 |
commit | 1e94466b06190061a86e9918c5e45279171e600f (patch) | |
tree | 6496f4b37c0ee6de24d16554933b7e345af9340e /src | |
parent | a9bf6e652aa99784343c94b0181c9443205e2a82 (diff) |
QQmlIncubationController: remove a possible signed integer overflow
Port incubateFor / incubateWhile to qint64. Since the implementation
was doing calculations in nanoseconds, a few seconds incubation was
sufficient to cause an int overflow.
Change-Id: Iba68260a1fd62613aec17ba990ead221c0f7da10
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqmlincubator.cpp | 6 | ||||
-rw-r--r-- | src/qml/qml/qqmlvme_p.h | 14 |
2 files changed, 10 insertions, 10 deletions
diff --git a/src/qml/qml/qqmlincubator.cpp b/src/qml/qml/qqmlincubator.cpp index d9c965d3ea..4911cd2879 100644 --- a/src/qml/qml/qqmlincubator.cpp +++ b/src/qml/qml/qqmlincubator.cpp @@ -403,7 +403,7 @@ void QQmlIncubationController::incubateFor(int msecs) if (!d || !d->incubatorCount) return; - QQmlInstantiationInterrupt i(msecs * 1000000); + QQmlInstantiationInterrupt i(msecs * Q_INT64_C(1000000)); i.reset(); do { static_cast<QQmlIncubatorPrivate*>(d->incubatorList.first())->incubate(i); @@ -422,7 +422,7 @@ void QQmlIncubationController::incubateWhile(volatile bool *flag, int msecs) if (!d || !d->incubatorCount) return; - QQmlInstantiationInterrupt i(flag, msecs * 1000000); + QQmlInstantiationInterrupt i(flag, msecs * Q_INT64_C(1000000)); i.reset(); do { static_cast<QQmlIncubatorPrivate*>(d->incubatorList.first())->incubate(i); @@ -447,7 +447,7 @@ void QQmlIncubationController::incubateWhile(std::atomic<bool> *flag, int msecs) if (!d || !d->incubatorCount) return; - QQmlInstantiationInterrupt i(flag, msecs * 1000000); + QQmlInstantiationInterrupt i(flag, msecs * Q_INT64_C(1000000)); i.reset(); do { static_cast<QQmlIncubatorPrivate*>(d->incubatorList.first())->incubate(i); diff --git a/src/qml/qml/qqmlvme_p.h b/src/qml/qml/qqmlvme_p.h index 32b1631271..05a78a17fe 100644 --- a/src/qml/qml/qqmlvme_p.h +++ b/src/qml/qml/qqmlvme_p.h @@ -100,9 +100,9 @@ class QQmlInstantiationInterrupt { public: inline QQmlInstantiationInterrupt(); // ### Qt 6: remove - inline QQmlInstantiationInterrupt(volatile bool *runWhile, int nsecs=0); - inline QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, int nsecs = 0); - inline QQmlInstantiationInterrupt(int nsecs); + inline QQmlInstantiationInterrupt(volatile bool *runWhile, qint64 nsecs=0); + inline QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, qint64 nsecs = 0); + inline QQmlInstantiationInterrupt(qint64 nsecs); inline void reset(); inline bool shouldInterrupt() const; @@ -110,7 +110,7 @@ private: enum Mode { None, Time, LegacyFlag, Flag }; // ### Qt 6: remove LegacyFlag Mode mode; QElapsedTimer timer; - int nsecs = 0; + qint64 nsecs = 0; volatile bool *runWhileLegacy = nullptr; // ### Qt 6: remove std::atomic<bool> *runWhile = nullptr; }; @@ -156,17 +156,17 @@ QQmlInstantiationInterrupt::QQmlInstantiationInterrupt() { } -QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(volatile bool *runWhile, int nsecs) +QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(volatile bool *runWhile, qint64 nsecs) : mode(LegacyFlag), nsecs(nsecs), runWhileLegacy(runWhile) { } -QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, int nsecs) +QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(std::atomic<bool> *runWhile, qint64 nsecs) : mode(Flag), nsecs(nsecs), runWhile(runWhile) { } -QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(int nsecs) +QQmlInstantiationInterrupt::QQmlInstantiationInterrupt(qint64 nsecs) : mode(Time), nsecs(nsecs) { } |