Avoid use-after-free in QXcbConnection::initializeScreens()
authorDebian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Sun, 28 Nov 2021 14:12:50 +0000 (14:12 +0000)
committerDmitry Shachnev <mitya57@debian.org>
Sun, 28 Nov 2021 14:12:50 +0000 (14:12 +0000)
Origin: upstream, https://code.qt.io/cgit/qt/qtbase.git/commit/?id=86b8c5c3f32c2457
Last-Update: 2020-11-23

Gbp-Pq: Name xcb_screens_uaf.patch

src/plugins/platforms/xcb/qxcbconnection_screens.cpp

index 9ba71ada3734448f2efac31c337ebe8aa9c6b624..ec099101f5a6922b01af03af67f954e3f2430eb5 100644 (file)
@@ -290,6 +290,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 {
@@ -300,8 +302,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 {