summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Marek Glogowski <jan-marek.glogowski@extern.cib.de>2019-11-13 13:02:01 +0000
committerJan-Marek Glogowski <glogow@fbihome.de>2019-11-13 16:51:24 +0100
commit9bc848cf0d301aa57eabcffa101a1cf87bad6470 (patch)
treed446edb5afaf3b7ee30cc6509a82c2d9b52b6d9c
parentfc950a685ec337f38b4b040c80272c00b8b88b77 (diff)
tdf#123851 Qt5 handle broken ScrollBar valueslibreoffice-6-4-branch-point
If the scrollbar has a mnMin == 0 and mnMax == 0 then nVisibleSize is set to -1?! I don't know if a negative nVisibleSize makes any sense, so this just handles this case without crashing LO with a SIGFPE in the Qt library. If min == max then the visible size is just zero. It's actually not clear, that this crash is the same then the bug report, but it fixes at least the later reproducer crash. Change-Id: Ib2dd51ddecfd24ddf2d89f746cbc8975269e13da Reviewed-on: https://gerrit.libreoffice.org/82600 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
-rw-r--r--vcl/qt5/Qt5Graphics_Controls.cxx10
1 files changed, 7 insertions, 3 deletions
diff --git a/vcl/qt5/Qt5Graphics_Controls.cxx b/vcl/qt5/Qt5Graphics_Controls.cxx
index bee5c33dc0e2..ff8537764bd9 100644
--- a/vcl/qt5/Qt5Graphics_Controls.cxx
+++ b/vcl/qt5/Qt5Graphics_Controls.cxx
@@ -487,13 +487,17 @@ bool Qt5Graphics_Controls::drawNativeControl(ControlType type, ControlPart part,
if (horizontal)
option.state |= QStyle::State_Horizontal;
- //setup parameters from the OO values
+ // If the scrollbar has a mnMin == 0 and mnMax == 0 then mnVisibleSize is set to -1?!
+ // I don't know if a negative mnVisibleSize makes any sense, so just handle this case
+ // without crashing LO with a SIGFPE in the Qt library.
+ const long nVisibleSize = (sbVal->mnMin == sbVal->mnMax) ? 0 : sbVal->mnVisibleSize;
+
option.minimum = sbVal->mnMin;
- option.maximum = sbVal->mnMax - sbVal->mnVisibleSize;
+ option.maximum = sbVal->mnMax - nVisibleSize;
option.maximum = qMax(option.maximum, option.minimum); // bnc#619772
option.sliderValue = sbVal->mnCur;
option.sliderPosition = sbVal->mnCur;
- option.pageStep = sbVal->mnVisibleSize;
+ option.pageStep = nVisibleSize;
if (part == ControlPart::DrawBackgroundHorz)
option.upsideDown
= (QGuiApplication::isRightToLeft()