xcb: Avoid use-after-free in QXcbConnection::initializeScreens()

Extend the scope of the resources variable to avoid its
destruction while it's still in use.

Fixes: QTBUG-88512
Pick-to: 5.15 5.12
Change-Id: I3298aabc871ff455bd1203ec276e7600d3e151ef
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
bb10
Alexander Volkov 2020-11-16 00:50:35 +03:00 committed by Liang Qi
parent 36b1d37cef
commit 86b8c5c3f3
1 changed files with 4 additions and 2 deletions

View File

@ -288,6 +288,8 @@ void QXcbConnection::initializeScreens()
// RRGetScreenResources in this case.
auto resources_current = Q_XCB_REPLY(xcb_randr_get_screen_resources_current,
xcb_connection(), xcbScreen->root);
decltype(Q_XCB_REPLY(xcb_randr_get_screen_resources,
xcb_connection(), xcbScreen->root)) resources;
if (!resources_current) {
qWarning("failed to get the current screen resources");
} else {
@ -298,8 +300,8 @@ void QXcbConnection::initializeScreens()
timestamp = resources_current->config_timestamp;
outputs = xcb_randr_get_screen_resources_current_outputs(resources_current.get());
} else {
auto resources = Q_XCB_REPLY(xcb_randr_get_screen_resources,
xcb_connection(), xcbScreen->root);
resources = Q_XCB_REPLY(xcb_randr_get_screen_resources,
xcb_connection(), xcbScreen->root);
if (!resources) {
qWarning("failed to get the screen resources");
} else {