summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Ehrlicher <ch.ehrlicher@gmx.de>2023-11-12 13:49:16 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-11-13 03:47:45 +0000
commitef2a6ba74f2ac176744ede6ab057162f54f0ace1 (patch)
tree77d32ece224dc7205bcb8cf1bdc84b549f971e0f
parent83f7843403b76e7c0a6ff256e60003017f3068f0 (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.cpp2
-rw-r--r--tests/auto/widgets/widgets/qdial/tst_qdial.cpp10
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