From 9b10dc7974720ac185c779b1e05eac0901039191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20L=C3=BCbking?= Date: Wed, 6 Oct 2010 17:40:15 +0000 Subject: [PATCH] secure clientGroup pointer accesses BUG: 251388 CCBUG: 195907 CCBUG: 233756 svn path=/trunk/KDE/kdebase/workspace/; revision=1183245 --- bridge.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/bridge.cpp b/bridge.cpp index 1915cf855d..c7bc6679b3 100644 --- a/bridge.cpp +++ b/bridge.cpp @@ -233,6 +233,8 @@ QList< ClientGroupItem > Bridge::clientGroupItems() const long Bridge::itemId( int index ) { + if( !c->clientGroup() ) + return 0; const ClientList list = c->clientGroup()->clients(); return reinterpret_cast( list.at( index )); } @@ -246,12 +248,14 @@ int Bridge::visibleClientGroupItem() void Bridge::setVisibleClientGroupItem( int index ) { - c->clientGroup()->setVisible( index ); + if( c->clientGroup() ) + c->clientGroup()->setVisible( index ); } void Bridge::moveItemInClientGroup( int index, int before ) { - c->clientGroup()->move( index, before ); + if( c->clientGroup() ) + c->clientGroup()->move( index, before ); } void Bridge::moveItemToClientGroup( long itemId, int before ) @@ -262,17 +266,21 @@ void Bridge::moveItemToClientGroup( long itemId, int before ) kWarning(1212) << "****** ARBITRARY CODE EXECUTION ATTEMPT DETECTED ******"; return; } - c->workspace()->moveItemToClientGroup( item->clientGroup(), item->clientGroup()->indexOfClient( item ), + if( item->clientGroup() ) + c->workspace()->moveItemToClientGroup( item->clientGroup(), item->clientGroup()->indexOfClient( item ), c->clientGroup(), before ); } void Bridge::removeFromClientGroup( int index, const QRect& newGeom ) { - c->clientGroup()->remove( index, newGeom ); + if( c->clientGroup() ) + c->clientGroup()->remove( index, newGeom ); } void Bridge::closeClientGroupItem( int index ) { + if( !c->clientGroup() ) + return; const ClientList list = c->clientGroup()->clients(); if( index >= 0 || index <= list.count() ) list.at( index )->closeWindow(); @@ -280,12 +288,14 @@ void Bridge::closeClientGroupItem( int index ) void Bridge::closeAllInClientGroup() { - c->clientGroup()->closeAll(); + if( c->clientGroup() ) + c->clientGroup()->closeAll(); } void Bridge::displayClientMenu( int index, const QPoint& pos ) { - c->clientGroup()->displayClientMenu( index, pos ); + if( c->clientGroup() ) + c->clientGroup()->displayClientMenu( index, pos ); } KDecoration::WindowOperation Bridge::buttonToWindowOperation( Qt::MouseButtons button )