plasma5-workspace/xembedsniproxy-check-for-null-geometry.patch
Hrvoje Senjan f059af1aa6 Accepting request 354930 from home:wolfi323:boo954623
- Add xembedsniproxy-check-for-null-geometry.patch: fixes an xembedsniproxy crash (boo#954623, kde#355463, kde#358227)

OBS-URL: https://build.opensuse.org/request/show/354930
OBS-URL: https://build.opensuse.org/package/show/KDE:Frameworks5/plasma5-workspace?expand=0&rev=165
2016-01-20 22:20:47 +00:00

60 lines
2.4 KiB
Diff

From: David Edmundson <kde@davidedmundson.co.uk>
Date: Mon, 21 Dec 2015 23:09:50 +0000
Subject: Check for null geometry in client window
X-Git-Url: http://quickgit.kde.org/?p=plasma-workspace.git&a=commitdiff&h=6232362cca7021e5b436d267e07f9d6875a20a4c
---
Check for null geometry in client window
BUG: 355463
---
--- a/xembed-sni-proxy/sniproxy.cpp
+++ b/xembed-sni-proxy/sniproxy.cpp
@@ -158,23 +158,30 @@
windowMoveConfigVals);
+ QSize clientWindowSize;
+
+ if (clientGeom) {
+ clientWindowSize = QSize(clientGeom->width, clientGeom->height);
+ }
//if the window is a clearly stupid size resize to be something sensible
//this is needed as chormium and such when resized just fill the icon with transparent space and only draw in the middle
//however spotify does need this as by default the window size is 900px wide.
//use an artbitrary heuristic to make sure icons are always sensible
- if (clientGeom->width > s_embedSize || clientGeom->height > s_embedSize )
+ if (clientWindowSize.isEmpty() || clientWindowSize.width() > s_embedSize || clientWindowSize.height() > s_embedSize )
{
+ qCDebug(SNIPROXY) << "Resizing window" << wid << Title() << "from w*h" << clientWindowSize;
+
const uint32_t windowMoveConfigVals[2] = { s_embedSize, s_embedSize };
xcb_configure_window(c, wid,
XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT,
windowMoveConfigVals);
- qCDebug(SNIPROXY) << "Resizing window" << wid << Title() << "from w*h" << clientGeom->width << clientGeom->height;
+ clientWindowSize = QSize(s_embedSize, s_embedSize);
}
//show the embedded window otherwise nothing happens
xcb_map_window(c, wid);
- xcb_clear_area(c, 0, wid, 0, 0, qMin(clientGeom->width, s_embedSize), qMin(clientGeom->height, s_embedSize));
+ xcb_clear_area(c, 0, wid, 0, 0, clientWindowSize.width(), clientWindowSize.height());
xcb_flush(c);
@@ -245,6 +252,10 @@
auto cookie = xcb_get_geometry(c, m_windowId);
QScopedPointer<xcb_get_geometry_reply_t, QScopedPointerPodDeleter>
geom(xcb_get_geometry_reply(c, cookie, Q_NULLPTR));
+
+ if (!geom) {
+ return QImage();
+ }
xcb_image_t *image = xcb_image_get(c, m_windowId, 0, 0, geom->width, geom->height, 0xFFFFFF, XCB_IMAGE_FORMAT_Z_PIXMAP);