From 5c9a3528b699fb5ca3c235557624b84202221430 Mon Sep 17 00:00:00 2001 From: George Kiagiadakis Date: Tue, 3 May 2011 12:36:52 +0000 Subject: [PATCH] Do not crash if the framebuffer plugin cannot be loaded. BUG: 272290 svn path=/trunk/KDE/kdenetwork/krfb/; revision=1230289 --- krfb/rfbserver.cpp | 3 +++ krfb/rfbservermanager.cpp | 40 ++++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/krfb/rfbserver.cpp b/krfb/rfbserver.cpp index dc1d120..cd5d6c0 100644 --- a/krfb/rfbserver.cpp +++ b/krfb/rfbserver.cpp @@ -88,6 +88,9 @@ bool RfbServer::start() { if (!d->screen) { d->screen = RfbServerManager::instance()->newScreen(); + if (!d->screen) { + return false; + } // server hooks d->screen->screenData = this; diff --git a/krfb/rfbservermanager.cpp b/krfb/rfbservermanager.cpp index 478261c..6447b96 100644 --- a/krfb/rfbservermanager.cpp +++ b/krfb/rfbservermanager.cpp @@ -175,29 +175,31 @@ void RfbServerManager::unregisterServer(RfbServer* server) rfbScreenInfoPtr RfbServerManager::newScreen() { - rfbScreenInfoPtr screen; + rfbScreenInfoPtr screen = NULL; - int w = d->fb->width(); - int h = d->fb->height(); - int depth = d->fb->depth(); - int bpp = depth >> 3; + if (!d->fb.isNull()) { + int w = d->fb->width(); + int h = d->fb->height(); + int depth = d->fb->depth(); + int bpp = depth >> 3; - if (bpp != 1 && bpp != 2 && bpp != 4) { - bpp = 4; + if (bpp != 1 && bpp != 2 && bpp != 4) { + bpp = 4; + } + + kDebug() << "bpp: " << bpp; + + rfbLogEnable(0); + + screen = rfbGetScreen(0, 0, w, h, 8, 3, bpp); + screen->paddedWidthInBytes = d->fb->paddedWidth(); + d->fb->getServerFormat(screen->serverFormat); + screen->frameBuffer = d->fb->data(); + + screen->desktopName = d->desktopName.constData(); + screen->cursor = d->myCursor; } - kDebug() << "bpp: " << bpp; - - rfbLogEnable(0); - - screen = rfbGetScreen(0, 0, w, h, 8, 3, bpp); - screen->paddedWidthInBytes = d->fb->paddedWidth(); - d->fb->getServerFormat(screen->serverFormat); - screen->frameBuffer = d->fb->data(); - - screen->desktopName = d->desktopName.constData(); - screen->cursor = d->myCursor; - return screen; }