diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2023-11-12 13:49:16 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-11-13 03:47:45 +0000 |
commit | ef2a6ba74f2ac176744ede6ab057162f54f0ace1 (patch) | |
tree | 77d32ece224dc7205bcb8cf1bdc84b549f971e0f | |
parent | 83f7843403b76e7c0a6ff256e60003017f3068f0 (diff) |
QDial: don't crash when min==max and setting a value != min & max
QDial::bound() is crashing when min == max due to a division by zero.
Therefore check for this condition beforehand and return min.
Pick-to: 6.5 6.2 5.15
Fixes: QTBUG-104641
Change-Id: I612625af1ad18333d59a7771abfdec602301b58e
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
(cherry picked from commit e4315204b1412d74842b3167c3eb9a49dc233355)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/widgets/widgets/qdial.cpp | 2 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qdial/tst_qdial.cpp | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/widgets/widgets/qdial.cpp b/src/widgets/widgets/qdial.cpp index e16b6eadaf..14e96f8dc3 100644 --- a/src/widgets/widgets/qdial.cpp +++ b/src/widgets/widgets/qdial.cpp @@ -58,6 +58,8 @@ int QDialPrivate::bound(int val) const if (wrapping) { if ((val >= minimum) && (val <= maximum)) return val; + if (minimum == maximum) + return minimum; val = minimum + ((val - minimum) % (maximum - minimum)); if (val < minimum) val += maximum - minimum; diff --git a/tests/auto/widgets/widgets/qdial/tst_qdial.cpp b/tests/auto/widgets/widgets/qdial/tst_qdial.cpp index 1d8c970ef4..ebdbe3645e 100644 --- a/tests/auto/widgets/widgets/qdial/tst_qdial.cpp +++ b/tests/auto/widgets/widgets/qdial/tst_qdial.cpp @@ -17,6 +17,7 @@ private slots: void valueChanged(); void sliderMoved(); void wrappingCheck(); + void minEqualMaxValueOutsideRange(); void notchSize_data(); void notchSize(); @@ -172,6 +173,15 @@ void tst_QDial::wrappingCheck() } } +// QTBUG-104641 +void tst_QDial::minEqualMaxValueOutsideRange() +{ + QDial dial; + dial.setRange(30, 30); + dial.setWrapping(true); + dial.setValue(45); +} + /* Verify that the notchSizes calculated don't change compared to Qt 5.15 results for dial sizes at the edge values of the |