summaryrefslogtreecommitdiff
path: root/vcl/source/window
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2013-05-22 17:46:20 +0200
committerCaolán McNamara <caolanm@redhat.com>2013-05-24 20:47:36 +0100
commit8f34685654814a796f63b285b61fbeba2bd62ba3 (patch)
tree8689a9ebd4e889cf62d197c8db285bebc945421b /vcl/source/window
parent09e7888105b7f8ca3894cecee22766ee0939a6c2 (diff)
Splitter::ImplInitHorVer(bool) should always initialize all state.
When creating a new Splitter ImplInitHorVer(bool) should always init all state independent from the current state because some variables might not be initialized yet. Conditional jump or move depends on uninitialised value(s) at 0x8293625: Splitter::ImplInitHorVer(bool) (split.cxx:70) by 0x82936DF: Splitter::ImplInit(Window*, long) (split.cxx:100) by 0x8293CC3: Splitter::Splitter(Window*, long) (split.cxx:157) by 0x2686BC48: ScTabSplitter::ScTabSplitter(Window*, long, ScViewData*) (tabsplit.cxx:28) ... Uninitialised value was created by a heap allocation at 0x4A08361: operator new(unsigned long) (vg_replace_malloc.c:298) by 0x2687D8F1: ScTabView::Init() (tabview5.cxx:90) by 0x2686C5D3: ScTabView::ScTabView(Window*, ScDocShell&, ScTabViewShell*) (tabview.cxx:261) ... The public method to change the internal state is Splitter::SetHorizontal() which does check the current state (and calls Splitter::ImplInitHorVer() only when there is a real state change). So the bNew != mbHorzSplit was redundant anyway. Change-Id: If84e8bff4c87d208416de3583202ce88d6982a99 Reviewed-on: https://gerrit.libreoffice.org/4007 Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org> Tested-by: Fridrich Strba <fridrich@documentfoundation.org> (cherry picked from commit 3fd6c700f85fdf775d64113aa027cc36db57a62a)
Diffstat (limited to 'vcl/source/window')
-rw-r--r--vcl/source/window/split.cxx34
1 files changed, 17 insertions, 17 deletions
diff --git a/vcl/source/window/split.cxx b/vcl/source/window/split.cxx
index 92a637e93ee2..13cc48663aa0 100644
--- a/vcl/source/window/split.cxx
+++ b/vcl/source/window/split.cxx
@@ -65,28 +65,28 @@ void Splitter::ImplInitSplitterData()
// -----------------------------------------------------------------------
+// Should only be called from a ImplInit method for initialization or
+// after checking bNew is different from the current mbHorzSplit value.
+// The public method that does that check is Splitter::SetHorizontal().
void Splitter::ImplInitHorVer(bool bNew)
{
- if(bNew != (bool)mbHorzSplit)
- {
- mbHorzSplit = bNew;
+ mbHorzSplit = bNew;
- PointerStyle ePointerStyle;
- const StyleSettings& rSettings = GetSettings().GetStyleSettings();
-
- if ( mbHorzSplit )
- {
- ePointerStyle = POINTER_HSPLIT;
- SetSizePixel( Size( rSettings.GetSplitSize(), rSettings.GetScrollBarSize() ) );
- }
- else
- {
- ePointerStyle = POINTER_VSPLIT;
- SetSizePixel( Size( rSettings.GetScrollBarSize(), rSettings.GetSplitSize() ) );
- }
+ PointerStyle ePointerStyle;
+ const StyleSettings& rSettings = GetSettings().GetStyleSettings();
- SetPointer( Pointer( ePointerStyle ) );
+ if ( mbHorzSplit )
+ {
+ ePointerStyle = POINTER_HSPLIT;
+ SetSizePixel( Size( rSettings.GetSplitSize(), rSettings.GetScrollBarSize() ) );
}
+ else
+ {
+ ePointerStyle = POINTER_VSPLIT;
+ SetSizePixel( Size( rSettings.GetScrollBarSize(), rSettings.GetSplitSize() ) );
+ }
+
+ SetPointer( Pointer( ePointerStyle ) );
}
// -----------------------------------------------------------------------