summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-08-14 10:29:30 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-08-17 14:50:50 +0200
commit692b2779c2c927079e656a9fc398d28cc2b08049 (patch)
treec510dcc4071d92c4504fd1b849819da0fa87fc58
parent4ba9ecd42f42bd5d809c540cbf93d799a4bd4b5d (diff)
tdf#135526 ranges overflowing to become negative
the properties panel uses huge min/maxes which can overflow when the number of digits changes Change-Id: Idbb998a065ce8f2b918fceea2076b794cbde3368 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100697 Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com> Reviewed-by: Michael Stahl <michael.stahl@cib.de> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--extensions/source/propctrlr/standardcontrol.cxx8
-rw-r--r--vcl/source/window/builder.cxx7
2 files changed, 12 insertions, 3 deletions
diff --git a/extensions/source/propctrlr/standardcontrol.cxx b/extensions/source/propctrlr/standardcontrol.cxx
index dc1891eab122..a9b422440932 100644
--- a/extensions/source/propctrlr/standardcontrol.cxx
+++ b/extensions/source/propctrlr/standardcontrol.cxx
@@ -327,9 +327,13 @@ namespace pcr
return getTypedControlWindow()->get_digits();
}
- void SAL_CALL ONumericControl::setDecimalDigits( ::sal_Int16 _decimaldigits )
+ void SAL_CALL ONumericControl::setDecimalDigits( ::sal_Int16 decimaldigits )
{
- getTypedControlWindow()->set_digits( _decimaldigits );
+ weld::MetricSpinButton* pControlWindow = getTypedControlWindow();
+ int min, max;
+ pControlWindow->get_range(min, max, FieldUnit::NONE);
+ pControlWindow->set_digits(decimaldigits);
+ pControlWindow->set_range(min, max, FieldUnit::NONE);
}
Optional< double > SAL_CALL ONumericControl::getMinValue()
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index d15d3e668937..14d6cdeed6ce 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -321,7 +321,12 @@ namespace weld
int MetricSpinButton::ConvertValue(int nValue, FieldUnit eInUnit, FieldUnit eOutUnit) const
{
- return vcl::ConvertValue(nValue, 0, m_xSpinButton->get_digits(), eInUnit, eOutUnit);
+ auto nRet = vcl::ConvertValue(nValue, 0, m_xSpinButton->get_digits(), eInUnit, eOutUnit);
+ if (nRet > SAL_MAX_INT32)
+ nRet = SAL_MAX_INT32;
+ else if (nRet < SAL_MIN_INT32)
+ nRet = SAL_MIN_INT32;
+ return nRet;
}
IMPL_LINK(MetricSpinButton, spin_button_input, int*, result, bool)