You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by hd...@apache.org on 2013/03/21 17:27:40 UTC

svn commit: r1459383 - in /openoffice/trunk/main/vcl: aqua/source/gdi/salnativewidgets.cxx unx/gtk/gdi/salnativewidgets-gtk.cxx unx/kde/salnativewidgets-kde.cxx win/source/gdi/salnativewidgets-luna.cxx

Author: hdu
Date: Thu Mar 21 16:27:40 2013
New Revision: 1459383

URL: http://svn.apache.org/r1459383
Log:
check native widget's control value type before converting to SpinbuttonValue or ScrollbarValue

Else problems like #i112873# or even crashes can and do happen.

Modified:
    openoffice/trunk/main/vcl/aqua/source/gdi/salnativewidgets.cxx
    openoffice/trunk/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
    openoffice/trunk/main/vcl/unx/kde/salnativewidgets-kde.cxx
    openoffice/trunk/main/vcl/win/source/gdi/salnativewidgets-luna.cxx

Modified: openoffice/trunk/main/vcl/aqua/source/gdi/salnativewidgets.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/aqua/source/gdi/salnativewidgets.cxx?rev=1459383&r1=1459382&r2=1459383&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/aqua/source/gdi/salnativewidgets.cxx (original)
+++ openoffice/trunk/main/vcl/aqua/source/gdi/salnativewidgets.cxx Thu Mar 21 16:27:40 2013
@@ -816,7 +816,7 @@ sal_Bool AquaSalGraphics::drawNativeCont
 
     case CTRL_SCROLLBAR:
         {
-            ScrollbarValue* pScrollbarVal = (ScrollbarValue *)&aValue;
+            const ScrollbarValue* pScrollbarVal = (aValue.getType() == CTRL_SCROLLBAR) ? static_cast<const ScrollbarValue*>(&aValue) : NULL;
 
             if( nPart == PART_DRAW_BACKGROUND_VERT ||
                 nPart == PART_DRAW_BACKGROUND_HORZ )
@@ -1085,16 +1085,13 @@ sal_Bool AquaSalGraphics::drawNativeCont
                 if(nState & CTRL_STATE_FOCUSED) HIThemeDrawFocusRect(&rc, true, mrContext, kHIThemeOrientationNormal);
                 
                 //buttons:
-                SpinbuttonValue* pSpinButtonVal = (SpinbuttonValue *)&aValue;
+                const SpinbuttonValue* pSpinButtonVal = (aValue.getType() == CTRL_SPINBUTTONS) ? static_cast<const SpinbuttonValue*>(&aValue) : NULL;
                 ControlState nUpperState = CTRL_STATE_ENABLED;//state of the upper button
                 ControlState nLowerState = CTRL_STATE_ENABLED;//and of the lower button
                 if(pSpinButtonVal) {//pSpinButtonVal is sometimes null
                     nUpperState = (ControlState) pSpinButtonVal->mnUpperState;
                     nLowerState = (ControlState) pSpinButtonVal->mnLowerState;
-                }
 
-                if( pSpinButtonVal )
-                {
                     HIThemeButtonDrawInfo aSpinInfo;
                     aSpinInfo.kind = kThemeIncDecButton;
                     aSpinInfo.state = kThemeStateActive;

Modified: openoffice/trunk/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx?rev=1459383&r1=1459382&r2=1459383&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx (original)
+++ openoffice/trunk/main/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx Thu Mar 21 16:27:40 2013
@@ -1375,7 +1375,7 @@ sal_Bool GtkSalGraphics::NWPaintGTKScrol
                                           const OUString& )
 {
     OSL_ASSERT( aValue.getType() == CTRL_SCROLLBAR );
-	const ScrollbarValue* pScrollbarVal = static_cast<const ScrollbarValue *>(&aValue);
+    const ScrollbarValue* pScrollbarVal = (aValue.getType() == CTRL_SCROLLBAR) ? static_cast<const ScrollbarValue*>(&aValue) : NULL;
     GdkPixmap*      pixmap = NULL;
 	Rectangle		pixmapRect, scrollbarRect;
 	GtkStateType	stateType;

Modified: openoffice/trunk/main/vcl/unx/kde/salnativewidgets-kde.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/unx/kde/salnativewidgets-kde.cxx?rev=1459383&r1=1459382&r2=1459383&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/unx/kde/salnativewidgets-kde.cxx (original)
+++ openoffice/trunk/main/vcl/unx/kde/salnativewidgets-kde.cxx Thu Mar 21 16:27:40 2013
@@ -514,7 +514,7 @@ sal_Bool WidgetPainter::drawStyledWidget
     }
     else if ( strcmp( "QSpinWidget", pClassName ) == 0 )
     {
-	const SpinbuttonValue *pValue = static_cast<const SpinbuttonValue *> ( &aValue );
+	const SpinbuttonValue* pValue = (aValue.getType() == CTRL_SPINBUTTONS) ? static_cast<const SpinbuttonValue*>(&aValue) : NULL;
 	
 	// Is any of the buttons pressed?
 	QStyle::SCFlags eActive = QStyle::SC_None;
@@ -603,7 +603,7 @@ sal_Bool WidgetPainter::drawStyledWidget
     }
     else if ( strcmp( "QScrollBar", pClassName ) == 0 )
     {
-	const ScrollbarValue *pValue = static_cast<const ScrollbarValue *> ( &aValue );
+	const ScrollbarValue* pScrollbarVal = (aValue.getType() == CTRL_SCROLLBAR) ? static_cast<const ScrollbarValue*>(&aValue) : NULL;
 
 	QStyle::SCFlags eActive = QStyle::SC_None;
 	if ( pValue )
@@ -1008,7 +1008,7 @@ QScrollBar *WidgetPainter::scrollBar( co
     m_pScrollBar->resize( qRect.size() );
     m_pScrollBar->setOrientation( bHorizontal? Qt::Horizontal: Qt::Vertical );
 
-    const ScrollbarValue *pValue = static_cast<const ScrollbarValue *> ( &aValue );
+    const ScrollbarValue* pScrollbarVal = (aValue.getType() == CTRL_SCROLLBAR) ? static_cast<const ScrollbarValue*>(&aValue) : NULL;
     if ( pValue )
     {
 	m_pScrollBar->setMinValue( pValue->mnMin );

Modified: openoffice/trunk/main/vcl/win/source/gdi/salnativewidgets-luna.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/win/source/gdi/salnativewidgets-luna.cxx?rev=1459383&r1=1459382&r2=1459383&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/win/source/gdi/salnativewidgets-luna.cxx (original)
+++ openoffice/trunk/main/vcl/win/source/gdi/salnativewidgets-luna.cxx Thu Mar 21 16:27:40 2013
@@ -570,7 +570,7 @@ sal_Bool ImplDrawNativeControl(	HDC hDC,
     {
         if( aValue.getType() == CTRL_SPINBUTTONS )
         {
-            const SpinbuttonValue *pValue = static_cast<const SpinbuttonValue*>(&aValue);
+            const SpinbuttonValue* pValue = (aValue.getType() == CTRL_SPINBUTTONS) ? static_cast<const SpinbuttonValue*>(&aValue) : NULL;
             sal_Bool bOk = sal_False;
 
             RECT rect;