extensions/source/propctrlr/standardcontrol.cxx |    8 ++++++--
 vcl/source/window/builder.cxx                   |    7 ++++++-
 2 files changed, 12 insertions(+), 3 deletions(-)

New commits:
commit 692b2779c2c927079e656a9fc398d28cc2b08049
Author:     Caolán McNamara <[email protected]>
AuthorDate: Fri Aug 14 10:29:30 2020 +0100
Commit:     Caolán McNamara <[email protected]>
CommitDate: Mon Aug 17 14:50:50 2020 +0200

    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 <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Caolán McNamara <[email protected]>

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)
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to