diff options
author | Caolán McNamara <caolanm@redhat.com> | 2022-06-27 14:28:58 +0100 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2022-06-27 21:40:26 +0200 |
commit | cff4a8943cd7bfd5b0e77dbc7e614a61de41276e (patch) | |
tree | 4ea0cb1f9aade016acaa7f4cfa363db1a1302127 | |
parent | svtools: avoid divide by zero in calcCustomItemSize (diff) | |
download | core-cff4a8943cd7bfd5b0e77dbc7e614a61de41276e.tar.gz core-cff4a8943cd7bfd5b0e77dbc7e614a61de41276e.zip |
sw: avoid divide by zero in SwTextGridPage::CharorLineChangedHdl
See https://crashreport.libreoffice.org/stats/signature/SwTextGridPage::CharorLineChangedHdl(weld::SpinButton%20&)
disable the offending widget if the value is zero.
crash reproducible under gen with CJK features enabled by: format, page
style, text grid, grid (lines and characters), max base text size of
1000 and then click in "characters per line" and then click in "lines
per page".
Change-Id: Ic0f8131955ab01412dd54bdd5d3bffe518938fb5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136470
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r-- | sw/source/ui/misc/pggrid.cxx | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sw/source/ui/misc/pggrid.cxx b/sw/source/ui/misc/pggrid.cxx index 875bee7ad331..46f78140a927 100644 --- a/sw/source/ui/misc/pggrid.cxx +++ b/sw/source/ui/misc/pggrid.cxx @@ -318,10 +318,13 @@ void SwTextGridPage::UpdatePageSize(const SfxItemSet& rSet) { sal_Int32 nCharsPerLine = m_aPageSize.Width() / nTextSize; m_xCharsPerLineNF->set_max(nCharsPerLine); + m_xCharsPerLineNF->set_sensitive(nCharsPerLine != 0); m_xCharsPerLineNF->set_value(nCharsPerLine); - m_xLinesPerPageNF->set_max(m_aPageSize.Height() / + sal_Int32 nMaxLines = m_aPageSize.Height() / ( m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)) + - m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP)))); + m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP))); + m_xLinesPerPageNF->set_max(nMaxLines); + m_xLinesPerPageNF->set_sensitive(nMaxLines != 0); SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() ); SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() ); } @@ -371,6 +374,7 @@ IMPL_LINK(SwTextGridPage, CharorLineChangedHdl, weld::SpinButton&, rField, void) ( m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)) + m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP)))); m_xLinesPerPageNF->set_max(nMaxLines); + m_xLinesPerPageNF->set_sensitive(nMaxLines != 0); } SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() ); SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() ); @@ -417,6 +421,7 @@ IMPL_LINK(SwTextGridPage, TextSizeChangedHdl, weld::MetricSpinButton&, rField, v sal_Int32 nMaxChars = m_aPageSize.Width() / nTextSize; m_xCharsPerLineNF->set_value(nMaxChars); m_xCharsPerLineNF->set_max(nMaxChars); + m_xCharsPerLineNF->set_sensitive(nMaxChars != 0); SetLinesOrCharsRanges( *m_xCharsRangeFT , m_xCharsPerLineNF->get_max() ); } } @@ -426,6 +431,7 @@ IMPL_LINK(SwTextGridPage, TextSizeChangedHdl, weld::MetricSpinButton&, rField, v ( m_xTextSizeMF->denormalize(m_xTextSizeMF->get_value(FieldUnit::TWIP)) + m_xRubySizeMF->denormalize(m_xRubySizeMF->get_value(FieldUnit::TWIP)))); m_xLinesPerPageNF->set_max(nMaxLines); + m_xLinesPerPageNF->set_sensitive(nMaxLines != 0); SetLinesOrCharsRanges( *m_xLinesRangeFT , m_xLinesPerPageNF->get_max() ); } } |