summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-06-27 14:28:58 +0100
committerXisco Fauli <xiscofauli@libreoffice.org>2022-06-27 21:40:26 +0200
commitcff4a8943cd7bfd5b0e77dbc7e614a61de41276e (patch)
tree4ea0cb1f9aade016acaa7f4cfa363db1a1302127
parentsvtools: avoid divide by zero in calcCustomItemSize (diff)
downloadcore-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.cxx10
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() );
}
}