summaryrefslogtreecommitdiff
path: root/dev-qt
diff options
context:
space:
mode:
Diffstat (limited to 'dev-qt')
-rw-r--r--dev-qt/Manifest.gzbin11881 -> 11883 bytes
-rw-r--r--dev-qt/qtbase/Manifest2
-rw-r--r--dev-qt/qtbase/files/qtbase-6.7.2-CVE-2024-39936.patch200
-rw-r--r--dev-qt/qtbase/qtbase-6.7.2-r1.ebuild350
-rw-r--r--dev-qt/qtnetwork/Manifest2
-rw-r--r--dev-qt/qtnetwork/files/qtnetwork-5.15.14-CVE-2024-39936.patch178
-rw-r--r--dev-qt/qtnetwork/qtnetwork-5.15.14-r1.ebuild64
-rw-r--r--dev-qt/qtwayland/Manifest3
-rw-r--r--dev-qt/qtwayland/files/qtwayland-6.7.2-null-screen.patch29
-rw-r--r--dev-qt/qtwayland/qtwayland-6.7.2-r3.ebuild (renamed from dev-qt/qtwayland/qtwayland-6.7.2-r2.ebuild)1
10 files changed, 828 insertions, 1 deletions
diff --git a/dev-qt/Manifest.gz b/dev-qt/Manifest.gz
index ddf834046884..0f1af1590a80 100644
--- a/dev-qt/Manifest.gz
+++ b/dev-qt/Manifest.gz
Binary files differ
diff --git a/dev-qt/qtbase/Manifest b/dev-qt/qtbase/Manifest
index 58b0c297a090..d977d8d6a912 100644
--- a/dev-qt/qtbase/Manifest
+++ b/dev-qt/qtbase/Manifest
@@ -2,7 +2,9 @@ AUX qtbase-6.5.2-hppa-forkfd-grow-stack.patch 1001 BLAKE2B 21fabd37d44ad496d2e11
AUX qtbase-6.5.2-no-symlink-check.patch 152 BLAKE2B 676ff8577f678fe3ed1e34e3fc8f7a9b16145259b2e23c432d4cb08465cb5d3a6685e557c9da862f3abb0d51459c7dc055155d804c3daef768bf0e9bdcc3b162 SHA512 6a82cb63812c7fa6d04e9ba9d017ce23ff1d620ec6ebcd575719678138d74e1298e3962d48e211ee72c9a533f03cb7a0fa47b428592a1402ec7ad1d1c487a4b4
AUX qtbase-6.6.1-forkfd-childstack-size.patch 1003 BLAKE2B abc1bc5633032fc55fca91ef3dcc33617b11694d7a9d97e5eac21c0b4aae900082b7158da08b8514a3424364a3c35cb49d46fa11a0739aadbb73766b7fee949a SHA512 9e1dfb3452858131db286cb30915871e46178bb0891b604a257745fad133676cdf0df5273b6f681c49b1c3d3245f2c6e0a5025ce19efe6a0ed8bf5a1b3a5a5f0
AUX qtbase-6.6.3-gcc14-avx512fp16.patch 470 BLAKE2B 616b4fdcee6819a0ca4de1220f7524e0df00e13912e2e28d5c204d1a3e2bc351b9cdc212b9169e4d84e2884df76d9722a73f29734c18fe50cc8e6583e41a5cc2 SHA512 1effa903d5d3c65ffc6af5fb2f9896346b4b90cd1f8a54f0a697f23f1c118dd1803b5f4fa9b4959cf4ba1c433d36ca21a6abe6cb3bfae84a811297566388e907
+AUX qtbase-6.7.2-CVE-2024-39936.patch 7171 BLAKE2B d1b6e9a35e35f1e6b3e7a7c975fb6719b8594ee5f3212bc18bfe4a1990d70424a682071551c5971d62d6351a38e36b6f4c4acb9241af1ad2e64ec604ca440394 SHA512 cd6b48ebe7c1dc1224a54f0d32845e598223a3c40c6da11b4639646fb073c6b5a2e54d9625ba0413afb876a83c2d50bdf616f4876154fb33fa941d6cbf053291
DIST qtbase-everywhere-src-6.7.2.tar.xz 49364504 BLAKE2B b48b8a8decafe3262d459b9446c25561851fef88b3316107c2909f5964e8122a558b5501a3e59667bdf4776d36ea5ba0d9f227538c45c1f8e94fbc8fff4244a6 SHA512 eb4b2f1fb02ab0ed5508d32449e140778278ff1a619cfcae14920b276b5c46e01a566d73fb8f84cf2cfc81e19cb11e53ab500df6b27d12ab875aa8c07bd15d6b
+EBUILD qtbase-6.7.2-r1.ebuild 9607 BLAKE2B dc4a72c4fe827c893bb100de8c326270529c0f184a7be820e72f03c8e4d696a155484ff3d121959a1707ca7808b689a70206bb458e07271dfe1c26ebafac7a83 SHA512 a594444552146c4b8aadfb5670f336391376dc134c766d703fb531d6f89652d1e25024fea45e92697286d7fde31264ade8b40fb11eac20e7dcfdc357e1c00834
EBUILD qtbase-6.7.2.ebuild 9553 BLAKE2B 141d9c8b0f1a288c7392fc60661e37e1c85349a2518bcdb9d042fe59eb63c59fd189fd5f1fa2b14aaab72356c7b63ce36425d5c95398a6621451c8afb5c355fa SHA512 87dfa9e3661f40feaee3d425a33f482301ae15920579c4b805872be51eee2f595179f2a83e2eab86d40daaff190da666959f9a6638cc3c827575221b031f499f
EBUILD qtbase-6.7.9999.ebuild 9559 BLAKE2B 5963ad805fab54ad09255d5fa42ee6f7abdba38aa2caf211138b3df78abb4f714d54122aaf66b7455a0740e40002ee77b0bb67a5bdba307ec02ae69a92607362 SHA512 4924e009671bfc94d8c2da05ea884ce8043d77adcbd2cc403c3badbf5034e1ea511bfb4df6d343a531471d472cb865e49bcc7f7028b195647f50bab4aa6f164f
EBUILD qtbase-6.8.9999.ebuild 9998 BLAKE2B 71b9fc07d2b968a92d9a421439488690a5e24a7da5b500592a7beba14aff4d6ec0eac4d78a4671c2697edb4d03d65995c708b34bc0db4b4be0f650fad3c5cb50 SHA512 c787767932b16b336f170dcfc9fa6529c941e92a7a160281aa7d40ae4e9d5eef86dc5f05a7955ba70b85eec4fff093f82bddb17ba63ac208758344e4df7cd57a
diff --git a/dev-qt/qtbase/files/qtbase-6.7.2-CVE-2024-39936.patch b/dev-qt/qtbase/files/qtbase-6.7.2-CVE-2024-39936.patch
new file mode 100644
index 000000000000..cc6238a55f1b
--- /dev/null
+++ b/dev-qt/qtbase/files/qtbase-6.7.2-CVE-2024-39936.patch
@@ -0,0 +1,200 @@
+https://bugs.gentoo.org/935869
+https://github.com/qt/qtbase/commit/2b1e36e183ce75c224305c7a94457b92f7a5cf58
+From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= <marten.nordheim@qt.io>
+Date: Tue, 25 Jun 2024 17:09:35 +0200
+Subject: [PATCH] HTTP2: Delay any communication until encrypted() can be
+ responded to
+
+We have the encrypted() signal that lets users do extra checks on the
+established connection. It is emitted as BlockingQueued, so the HTTP
+thread stalls until it is done emitting. Users can potentially call
+abort() on the QNetworkReply at that point, which is passed as a Queued
+call back to the HTTP thread. That means that any currently queued
+signal emission will be processed before the abort() call is processed.
+
+In the case of HTTP2 it is a little special since it is multiplexed and
+the code is built to start requests as they are available. This means
+that, while the code worked fine for HTTP1, since one connection only
+has one request, it is not working for HTTP2, since we try to send more
+requests in-between the encrypted() signal and the abort() call.
+
+This patch changes the code to delay any communication until the
+encrypted() signal has been emitted and processed, for HTTP2 only.
+It's done by adding a few booleans, both to know that we have to return
+early and so we can keep track of what events arose and what we need to
+resume once enough time has passed that any abort() call must have been
+processed.
+
+Fixes: QTBUG-126610
+--- a/src/network/access/qhttp2protocolhandler.cpp
++++ b/src/network/access/qhttp2protocolhandler.cpp
+@@ -304,10 +304,10 @@
+ }
+
+- if (!prefaceSent && !sendClientPreface())
+- return false;
+-
+ if (!requests.size())
+ return true;
+
++ if (!prefaceSent && !sendClientPreface())
++ return false;
++
+ m_channel->state = QHttpNetworkConnectionChannel::WritingState;
+ // Check what was promised/pushed, maybe we do not have to send a request
+--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
++++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
+@@ -210,4 +210,8 @@
+ {
+ Q_ASSERT(protocolHandler);
++ if (waitingForPotentialAbort) {
++ needInvokeSendRequest = true;
++ return false; // this return value is unused
++ }
+ return protocolHandler->sendRequest();
+ }
+@@ -222,7 +226,6 @@
+ {
+ QMetaObject::invokeMethod(this, [this] {
+- Q_ASSERT(protocolHandler);
+ if (reply)
+- protocolHandler->sendRequest();
++ sendRequest();
+ }, Qt::ConnectionType::QueuedConnection);
+ }
+@@ -231,4 +234,8 @@
+ {
+ Q_ASSERT(protocolHandler);
++ if (waitingForPotentialAbort) {
++ needInvokeReceiveReply = true;
++ return;
++ }
+ protocolHandler->_q_receiveReply();
+ }
+@@ -237,4 +244,8 @@
+ {
+ Q_ASSERT(protocolHandler);
++ if (waitingForPotentialAbort) {
++ needInvokeReadyRead = true;
++ return;
++ }
+ protocolHandler->_q_readyRead();
+ }
+@@ -1240,5 +1251,16 @@
+ // Similar to HTTP/1.1 counterpart below:
+ const auto &pair = std::as_const(h2RequestsToSend).first();
++ waitingForPotentialAbort = true;
+ emit pair.second->encrypted();
++
++ // We don't send or handle any received data until any effects from
++ // emitting encrypted() have been processed. This is necessary
++ // because the user may have called abort(). We may also abort the
++ // whole connection if the request has been aborted and there is
++ // no more requests to send.
++ QMetaObject::invokeMethod(this,
++ &QHttpNetworkConnectionChannel::checkAndResumeCommunication,
++ Qt::QueuedConnection);
++
+ // In case our peer has sent us its settings (window size, max concurrent streams etc.)
+ // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection).
+@@ -1258,4 +1280,26 @@
+ }
+
++
++void QHttpNetworkConnectionChannel::checkAndResumeCommunication()
++{
++ Q_ASSERT(connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2
++ || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct);
++
++ // Because HTTP/2 requires that we send a SETTINGS frame as the first thing we do, and respond
++ // to a SETTINGS frame with an ACK, we need to delay any handling until we can ensure that any
++ // effects from emitting encrypted() have been processed.
++ // This function is called after encrypted() was emitted, so check for changes.
++
++ if (!reply && h2RequestsToSend.isEmpty())
++ abort();
++ waitingForPotentialAbort = false;
++ if (needInvokeReadyRead)
++ _q_readyRead();
++ if (needInvokeReceiveReply)
++ _q_receiveReply();
++ if (needInvokeSendRequest)
++ sendRequest();
++}
++
+ void QHttpNetworkConnectionChannel::requeueHttp2Requests()
+ {
+--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
++++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
+@@ -75,4 +75,8 @@
+ bool ssl;
+ bool isInitialized;
++ bool waitingForPotentialAbort = false;
++ bool needInvokeReceiveReply = false;
++ bool needInvokeReadyRead = false;
++ bool needInvokeSendRequest = false;
+ ChannelState state;
+ QHttpNetworkRequest request; // current request, only used for HTTP
+@@ -147,4 +151,6 @@
+ void resendCurrentRequest();
+
++ void checkAndResumeCommunication();
++
+ bool isSocketBusy() const;
+ bool isSocketWriting() const;
+--- a/tests/auto/network/access/http2/tst_http2.cpp
++++ b/tests/auto/network/access/http2/tst_http2.cpp
+@@ -107,4 +107,6 @@
+ void duplicateRequestsWithAborts();
+
++ void abortOnEncrypted();
++
+ protected slots:
+ // Slots to listen to our in-process server:
+@@ -1480,4 +1482,46 @@
+ }
+
++void tst_Http2::abortOnEncrypted()
++{
++#if !QT_CONFIG(ssl)
++ QSKIP("TLS support is needed for this test");
++#else
++ clearHTTP2State();
++ serverPort = 0;
++
++ ServerPtr targetServer(newServer(defaultServerSettings, H2Type::h2Direct));
++
++ QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection);
++ runEventLoop();
++
++ nRequests = 1;
++ nSentRequests = 0;
++
++ const auto url = requestUrl(H2Type::h2Direct);
++ QNetworkRequest request(url);
++ request.setAttribute(QNetworkRequest::Http2DirectAttribute, true);
++
++ std::unique_ptr<QNetworkReply> reply{manager->get(request)};
++ reply->ignoreSslErrors();
++ connect(reply.get(), &QNetworkReply::encrypted, reply.get(), [reply = reply.get()](){
++ reply->abort();
++ });
++ connect(reply.get(), &QNetworkReply::errorOccurred, this, &tst_Http2::replyFinishedWithError);
++
++ runEventLoop();
++ STOP_ON_FAILURE
++
++ QCOMPARE(nRequests, 0);
++ QCOMPARE(reply->error(), QNetworkReply::OperationCanceledError);
++
++ const bool res = QTest::qWaitFor(
++ [this, server = targetServer.get()]() {
++ return serverGotSettingsACK || prefaceOK || nSentRequests > 0;
++ },
++ 500);
++ QVERIFY(!res);
++#endif // QT_CONFIG(ssl)
++}
++
+ void tst_Http2::serverStarted(quint16 port)
+ {
diff --git a/dev-qt/qtbase/qtbase-6.7.2-r1.ebuild b/dev-qt/qtbase/qtbase-6.7.2-r1.ebuild
new file mode 100644
index 000000000000..499bf7372d57
--- /dev/null
+++ b/dev-qt/qtbase/qtbase-6.7.2-r1.ebuild
@@ -0,0 +1,350 @@
+# Copyright 2021-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit qt6-build toolchain-funcs
+
+DESCRIPTION="Cross-platform application development framework"
+
+if [[ ${QT6_BUILD_TYPE} == release ]]; then
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+declare -A QT6_IUSE=(
+ [global]="+ssl +udev zstd"
+ [core]="icu"
+ [modules]="+concurrent +dbus +gui +network +sql +xml"
+
+ [gui]="
+ +X accessibility eglfs evdev gles2-only +libinput
+ opengl renderdoc tslib vulkan wayland +widgets
+ "
+ [network]="brotli gssapi libproxy sctp"
+ [sql]="mysql oci8 odbc postgres +sqlite"
+ [widgets]="cups gtk"
+
+ [optfeature]="nls" #810802
+)
+IUSE="${QT6_IUSE[*]}"
+REQUIRED_USE="
+ $(
+ printf '%s? ( gui ) ' ${QT6_IUSE[gui]//+/}
+ printf '%s? ( network ) ' ${QT6_IUSE[network]//+/}
+ printf '%s? ( sql ) ' ${QT6_IUSE[sql]//+/}
+ printf '%s? ( gui widgets ) ' ${QT6_IUSE[widgets]//+/}
+ )
+ accessibility? ( dbus )
+ eglfs? ( opengl )
+ gles2-only? ( opengl )
+ gui? ( || ( X eglfs wayland ) )
+ libinput? ( udev )
+ sql? ( || ( ${QT6_IUSE[sql]//+/} ) )
+ test? ( icu sql? ( sqlite ) )
+"
+
+# groups:
+# - global (configure.cmake)
+# - qtcore (src/corelib/configure.cmake)
+# - qtgui (src/gui/configure.cmake)
+# - qtnetwork (src/network/configure.cmake)
+# - qtprintsupport (src/printsupport/configure.cmake) [gui+widgets]
+# - qtsql (src/plugins/sqldrivers/configure.cmake)
+# dlopen: renderdoc
+RDEPEND="
+ sys-libs/zlib:=
+ ssl? ( dev-libs/openssl:= )
+ udev? ( virtual/libudev:= )
+ zstd? ( app-arch/zstd:= )
+
+ app-crypt/libb2
+ dev-libs/double-conversion:=
+ dev-libs/glib:2
+ dev-libs/libpcre2:=[pcre16,unicode(+)]
+ icu? ( dev-libs/icu:= )
+
+ dbus? ( sys-apps/dbus )
+ gui? (
+ media-libs/fontconfig
+ media-libs/freetype:2
+ media-libs/harfbuzz:=
+ media-libs/libjpeg-turbo:=
+ media-libs/libpng:=
+ x11-libs/libdrm
+ x11-libs/libxkbcommon[X?]
+ X? (
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libX11
+ x11-libs/libxcb:=
+ x11-libs/xcb-util-cursor
+ x11-libs/xcb-util-image
+ x11-libs/xcb-util-keysyms
+ x11-libs/xcb-util-renderutil
+ x11-libs/xcb-util-wm
+ )
+ accessibility? ( app-accessibility/at-spi2-core:2 )
+ eglfs? ( media-libs/mesa[gbm(+)] )
+ evdev? ( sys-libs/mtdev )
+ libinput? ( dev-libs/libinput:= )
+ opengl? (
+ gles2-only? ( media-libs/libglvnd )
+ !gles2-only? ( media-libs/libglvnd[X?] )
+ )
+ renderdoc? ( media-gfx/renderdoc )
+ tslib? ( x11-libs/tslib )
+ widgets? (
+ cups? ( net-print/cups )
+ gtk? (
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:3
+ x11-libs/pango
+ )
+ )
+ )
+ network? (
+ brotli? ( app-arch/brotli:= )
+ gssapi? ( virtual/krb5 )
+ libproxy? ( net-libs/libproxy )
+ )
+ sql? (
+ mysql? ( dev-db/mysql-connector-c:= )
+ oci8? ( dev-db/oracle-instantclient:=[sdk] )
+ odbc? ( dev-db/unixODBC )
+ postgres? ( dev-db/postgresql:* )
+ sqlite? ( dev-db/sqlite:3 )
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )
+ gui? (
+ vulkan? ( dev-util/vulkan-headers )
+ )
+ network? (
+ sctp? ( net-misc/lksctp-tools )
+ )
+ test? (
+ elibc_musl? ( sys-libs/timezone-data )
+ )
+"
+BDEPEND="zstd? ( app-arch/libarchive[zstd] )" #910392
+PDEPEND="
+ nls? ( ~dev-qt/qttranslations-${PV}:6 )
+ wayland? ( ~dev-qt/qtwayland-${PV}:6 )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-6.5.2-hppa-forkfd-grow-stack.patch
+ "${FILESDIR}"/${PN}-6.5.2-no-symlink-check.patch
+ "${FILESDIR}"/${PN}-6.6.1-forkfd-childstack-size.patch
+ "${FILESDIR}"/${PN}-6.6.3-gcc14-avx512fp16.patch
+ "${FILESDIR}"/${PN}-6.7.2-CVE-2024-39936.patch
+)
+
+src_prepare() {
+ qt6-build_src_prepare
+
+ if use test; then
+ # test itself has -Werror=strict-aliasing issues, drop for simplicity
+ sed -e '/add_subdirectory(qsharedpointer)/d' \
+ -i tests/auto/corelib/tools/CMakeLists.txt || die
+
+ # workaround for __extendhfxf2 being used for tst_qfloat16.cpp
+ # which is unavailable with compiler-rt (assume used if clang)
+ if tc-is-clang; then
+ sed -e '/add_subdirectory(qfloat16)/d' \
+ -i tests/auto/corelib/global/CMakeLists.txt || die
+ fi
+ fi
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_WITH_PCH=OFF
+
+ -DINSTALL_ARCHDATADIR="${QT6_ARCHDATADIR}"
+ -DINSTALL_BINDIR="${QT6_BINDIR}"
+ -DINSTALL_DATADIR="${QT6_DATADIR}"
+ -DINSTALL_DOCDIR="${QT6_DOCDIR}"
+ -DINSTALL_EXAMPLESDIR="${QT6_EXAMPLESDIR}"
+ -DINSTALL_INCLUDEDIR="${QT6_HEADERDIR}"
+ -DINSTALL_LIBDIR="${QT6_LIBDIR}"
+ -DINSTALL_LIBEXECDIR="${QT6_LIBEXECDIR}"
+ -DINSTALL_MKSPECSDIR="${QT6_MKSPECSDIR}"
+ -DINSTALL_PLUGINSDIR="${QT6_PLUGINDIR}"
+ -DINSTALL_QMLDIR="${QT6_QMLDIR}"
+ -DINSTALL_SYSCONFDIR="${QT6_SYSCONFDIR}"
+ -DINSTALL_TRANSLATIONSDIR="${QT6_TRANSLATIONDIR}"
+
+ -DQT_UNITY_BUILD=ON # ~30% faster build, affects other dev-qt/* too
+
+ -DQT_FEATURE_relocatable=OFF #927691
+ $(qt_feature ssl openssl)
+ $(qt_feature ssl openssl_linked)
+ $(qt_feature udev libudev)
+ $(qt_feature zstd)
+
+ # qtcore
+ $(qt_feature icu)
+
+ # tools
+ -DQT_FEATURE_androiddeployqt=OFF
+
+ # modules
+ $(qt_feature concurrent)
+ $(qt_feature dbus)
+ $(qt_feature gui)
+ $(qt_feature network)
+ $(qt_feature sql)
+ # trivial, and is often needed (sometimes even when not building tests)
+ -DQT_FEATURE_testlib=ON
+ $(qt_feature xml)
+ )
+
+ use gui && mycmakeargs+=(
+ $(qt_feature X xcb)
+ $(qt_feature X system_xcb_xinput)
+ $(qt_feature X xkbcommon_x11)
+ $(cmake_use_find_package X X11) # needed for truly no automagic
+ $(qt_feature accessibility accessibility_atspi_bridge)
+ $(qt_feature eglfs)
+ $(qt_feature evdev)
+ $(qt_feature evdev mtdev)
+ $(qt_feature libinput)
+ $(qt_feature renderdoc graphicsframecapture)
+ $(qt_feature tslib)
+ $(qt_feature vulkan)
+ $(qt_feature wayland)
+ $(qt_feature widgets)
+ -DINPUT_opengl=$(usex opengl $(usex gles2-only es2 desktop) no)
+ -DQT_FEATURE_system_textmarkdownreader=OFF # TODO?: package md4c
+ ) && use widgets && mycmakeargs+=(
+ # note: qtprintsupport is enabled w/ gui+widgets regardless of USE=cups
+ $(qt_feature cups)
+ $(qt_feature gtk gtk3)
+ )
+
+ use network && mycmakeargs+=(
+ $(qt_feature brotli)
+ $(qt_feature gssapi)
+ $(qt_feature libproxy)
+ $(qt_feature sctp)
+ $(usev test -DQT_SKIP_DOCKER_COMPOSE=ON)
+ )
+
+ use sql && mycmakeargs+=(
+ -DQT_FEATURE_sql_db2=OFF # unpackaged
+ -DQT_FEATURE_sql_ibase=OFF # unpackaged
+ -DQT_FEATURE_sql_mimer=OFF # unpackaged
+ $(qt_feature mysql sql_mysql)
+ $(qt_feature oci8 sql_oci)
+ $(usev oci8 -DOracle_ROOT="${ESYSROOT}"/usr/$(get_libdir)/oracle/client)
+ $(qt_feature odbc sql_odbc)
+ $(qt_feature postgres sql_psql)
+ $(qt_feature sqlite sql_sqlite)
+ $(qt_feature sqlite system_sqlite)
+ )
+
+ qt6-build_src_configure
+}
+
+src_test() {
+ local -x TZ=UTC
+ local -x LC_TIME=C
+
+ local CMAKE_SKIP_TESTS=(
+ # broken with out-of-source + if qtbase is not already installed
+ tst_moc
+ tst_qmake
+ # similarly broken when relocatable=OFF (bug #927691)
+ tst_qapplication
+ tst_qt_cmake_create
+ tst_uic
+ # needs x11/opengl, we *could* run these but tend to be flaky
+ # when opengl rendering is involved (even if software-only)
+ tst_qopengl{,config,widget,window}
+ tst_qgraphicsview
+ tst_qx11info
+ # fails with network sandbox
+ tst_qdnslookup
+ # fails with sandbox
+ tst_qsharedmemory
+ # typical to lack SCTP support on non-generic kernels
+ tst_qsctpsocket
+ # randomly fails without -j1, and not worth it over this (bug #916181)
+ tst_qfiledialog{,2}
+ # may randomly hang+timeout, perhaps related to -j as well
+ tst_qtimer
+ # these can be flaky depending on the environment/toolchain
+ tst_qlogging # backtrace log test can easily vary
+ tst_q{,raw}font # affected by available fonts / settings (bug #914737)
+ tst_qprinter # checks system's printers (bug #916216)
+ tst_qhighdpi # may detect users' settings and fail (bug #935364)
+ tst_qstorageinfo # checks mounted filesystems
+ # flaky due to using different test framework and fails with USE=-gui
+ tst_selftests
+ # known failing when using clang+glibc+stdc++, needs looking into
+ tst_qthread
+ # partially failing on x86 chroots and seemingly(?) harmless (dev-qt
+ # revdeps tests pass), skip globally to avoid keywording flakiness
+ tst_json
+ tst_qcolorspace
+ tst_qdoublevalidator
+ tst_qglobal
+ tst_qglyphrun
+ tst_qvectornd
+ tst_rcc
+ # similarly, but on armv7 and potentially others (bug #914028)
+ tst_qlineedit
+ tst_qpainter
+ # likewise, known failing on BE arches (bug #914033,914371,918878)
+ tst_qimagereader
+ tst_qimagewriter
+ tst_qpluginloader
+ tst_quuid # >=6.6.2 had related fixes, needs retesting
+ # partially broken on llvm-musl, needs looking into but skip to have
+ # a baseline for regressions (rest of dev-qt still passes with musl)
+ $(usev elibc_musl '
+ tst_qicoimageformat
+ tst_qimagereader
+ tst_qimage
+ tst_qprocess
+ ')
+ # fails due to hppa's NaN handling, needs looking into (bug #914371)
+ $(usev hppa '
+ tst_qcborvalue
+ tst_qnumeric
+ ')
+ # bug #914033
+ $(usev sparc '
+ tst_qbuffer
+ tst_qprocess
+ tst_qtconcurrentiteratekernel
+ ')
+ # note: for linux, upstream only really runs+maintains tests for amd64
+ # https://doc.qt.io/qt-6/supported-platforms.html
+ )
+
+ qt6-build_src_test
+}
+
+src_install() {
+ qt6-build_src_install
+
+ if use test; then
+ local delete_bins=( # need a better way to handle this
+ clientserver copier crashingServer desktopsettingsaware_helper
+ echo fileWriterProcess modal_helper nospace 'one space'
+ paster qcommandlineparser_test_helper qfileopeneventexternal
+ socketprocess syslocaleapp tst_qhashseed_helper 'two space s'
+ write-read-write
+ )
+ local delete=( # sigh
+ "${D}${QT6_BINDIR}"/test*
+ "${delete_bins[@]/#/${D}${QT6_BINDIR}/}"
+ )
+ # using -f given not tracking which tests may be skipped or not
+ rm -rf -- "${delete[@]}" || die
+ fi
+}
diff --git a/dev-qt/qtnetwork/Manifest b/dev-qt/qtnetwork/Manifest
index 451d38c5e60d..4c2b89c21cce 100644
--- a/dev-qt/qtnetwork/Manifest
+++ b/dev-qt/qtnetwork/Manifest
@@ -1,5 +1,7 @@
+AUX qtnetwork-5.15.14-CVE-2024-39936.patch 7381 BLAKE2B c946387ec8015fe4be214eb231e3cfd14bd64e660d0d246266fbe9e1fa8fff7db55ea0c0f13c7c45d777138e4921a5f6eedc45df8c043ea375b0a2251caf1580 SHA512 2a5efc9b17dd9c688c57caaa183ace4e6de34d0c14dc327ab5c74004adef4d7879d7bdf00c43fc847c395ec911dfa82678c360b0cdd99427e2e032007c237e32
DIST qtbase-5.15-gentoo-patchset-6.tar.xz 8288 BLAKE2B ad9695a528345dd3b8e9ce72b7bdfe8f744f16685a567bbc7862ba6c28e5a426260cb0b73e2573cb3a6f16f1785786898ffb44c90f5d75354b97e5756c7573db SHA512 97bc4d5375e1750a5578439ff320ee2e5e929df1dafe56b4e86f2de8ad26c91dc4002e45ad75d9f936347d49b9f54c0c42f8fc2cb7dfd4f54bf08a210b3bc720
DIST qtbase-5.15.14-gentoo-kde-1.tar.xz 329640 BLAKE2B 5bd2d84f48874267a3328bf04e764f327bc8b3d574f8715fe02c4691e1ea8b2c0218ab66d55031e805d151be99956c5dfce304cac72b1edd371e2c447292e1e8 SHA512 37a7479c0fd0160fedd087f6da221484d47585f082f33f59118a75f9fa7a2e0969b9e9ed1b1234821dc6ffe55c07d22d20dc2ea4d2ee1dbd061f57bb4bf7f518
DIST qtbase-everywhere-opensource-src-5.15.14.tar.xz 50887988 BLAKE2B 292814ff8b9030766ce9941f4f13af56425f385543ff41cecd5d86b0a562fd220c8d9126fc36cfa0eab96440a64ec6a497306e00a59d388d13d34c8ea10a9633 SHA512 1280e7da926ff0c888dc3455ebeb73708bf8e44a3fe77ecf015e902608d75d7304639271dedba63635f959411452cd2b64a6f9166365a3aa3440656c00120272
+EBUILD qtnetwork-5.15.14-r1.ebuild 1256 BLAKE2B b483b543f29001be9579ea6204ef4bdd95272317aaf32c544a9e7f84319770eecb474149b1a88c688aed8db519be061ee9e5bde5fdb893a43561228b7318e3c8 SHA512 fe02fc5ad7119bc0b645e3c4574540e52ec074959041b1b5c2c5d18966b4ccf8b84277695d9b58948c6e530d962a97936fbb7f246d6eeff120e5561a7b476eb4
EBUILD qtnetwork-5.15.14.ebuild 1184 BLAKE2B 6c7972f073bdbd38117943fa710fbbbc5274c5cab32f9af022541d4ed600254fe163804d8429eaf5cd4288b91588bb0c072aafd9fcd3c0159f3720d1b5a9efd6 SHA512 21aac350a0a251b61870392c53fad5e274a85e74f19436f50d82ed75ba10011ad07380e1c28548083cc2522b6b1916e9c6b0659f3a1e95ea407da6be0ba9f5bc
MISC metadata.xml 690 BLAKE2B 3e1cccd88cb778d868aa5aa650d9114a79eaf7b5961dc6222b2da3e5c7536a43c7481b6d56bb9176b36ed2560ccb0712635146872f370fdc1e319286133a1651 SHA512 e402ad3b586e305a6f7ee99f24edd505b1e76f7a957108fc252a4a1af8978ac113b9b1c56e4fb0bfb696bcf29a1295f52af6614924f0e3ae2d7f71810a3be707
diff --git a/dev-qt/qtnetwork/files/qtnetwork-5.15.14-CVE-2024-39936.patch b/dev-qt/qtnetwork/files/qtnetwork-5.15.14-CVE-2024-39936.patch
new file mode 100644
index 000000000000..c4445b2a72e8
--- /dev/null
+++ b/dev-qt/qtnetwork/files/qtnetwork-5.15.14-CVE-2024-39936.patch
@@ -0,0 +1,178 @@
+From 9f9a56d750caff8b4459e7e9bf82f1f4d725f72f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= <marten.nordheim@qt.io>
+Date: Tue, 25 Jun 2024 17:09:35 +0200
+Subject: [PATCH] HTTP2: Delay any communication until encrypted() can be
+ responded to
+
+We have the encrypted() signal that lets users do extra checks on the
+established connection. It is emitted as BlockingQueued, so the HTTP
+thread stalls until it is done emitting. Users can potentially call
+abort() on the QNetworkReply at that point, which is passed as a Queued
+call back to the HTTP thread. That means that any currently queued
+signal emission will be processed before the abort() call is processed.
+
+In the case of HTTP2 it is a little special since it is multiplexed and
+the code is built to start requests as they are available. This means
+that, while the code worked fine for HTTP1, since one connection only
+has one request, it is not working for HTTP2, since we try to send more
+requests in-between the encrypted() signal and the abort() call.
+
+This patch changes the code to delay any communication until the
+encrypted() signal has been emitted and processed, for HTTP2 only.
+It's done by adding a few booleans, both to know that we have to return
+early and so we can keep track of what events arose and what we need to
+resume once enough time has passed that any abort() call must have been
+processed.
+
+Fixes: QTBUG-126610
+Pick-to: 6.8 6.7 6.5 6.2 5.15 5.12
+Change-Id: Ic25a600c278203256e35f541026f34a8783235ae
+Reviewed-by: Marc Mutz <marc.mutz@qt.io>
+Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
+(cherry picked from commit b1e75376cc3adfc7da5502a277dfe9711f3e0536)
+(but really taken from upstream CVE-2024-39936-qtbase-5.15.patch)
+---
+ src/network/access/qhttp2protocolhandler.cpp | 6 +--
+ .../access/qhttpnetworkconnectionchannel.cpp | 46 ++++++++++++++++++-
+ .../access/qhttpnetworkconnectionchannel_p.h | 6 +++
+ 3 files changed, 53 insertions(+), 5 deletions(-)
+
+diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
+index ead88d781ae..926f3134a0e 100644
+--- a/src/network/access/qhttp2protocolhandler.cpp
++++ b/src/network/access/qhttp2protocolhandler.cpp
+@@ -375,12 +375,12 @@ bool QHttp2ProtocolHandler::sendRequest()
+ }
+ }
+
+- if (!prefaceSent && !sendClientPreface())
+- return false;
+-
+ if (!requests.size())
+ return true;
+
++ if (!prefaceSent && !sendClientPreface())
++ return false;
++
+ m_channel->state = QHttpNetworkConnectionChannel::WritingState;
+ // Check what was promised/pushed, maybe we do not have to send a request
+ // and have a response already?
+diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
+index 7620ca16470..13f9630c658 100644
+--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
++++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
+@@ -255,6 +255,10 @@ void QHttpNetworkConnectionChannel::abort()
+ bool QHttpNetworkConnectionChannel::sendRequest()
+ {
+ Q_ASSERT(!protocolHandler.isNull());
++ if (waitingForPotentialAbort) {
++ needInvokeSendRequest = true;
++ return false; // this return value is unused
++ }
+ return protocolHandler->sendRequest();
+ }
+
+@@ -267,21 +271,28 @@ bool QHttpNetworkConnectionChannel::sendRequest()
+ void QHttpNetworkConnectionChannel::sendRequestDelayed()
+ {
+ QMetaObject::invokeMethod(this, [this] {
+- Q_ASSERT(!protocolHandler.isNull());
+ if (reply)
+- protocolHandler->sendRequest();
++ sendRequest();
+ }, Qt::ConnectionType::QueuedConnection);
+ }
+
+ void QHttpNetworkConnectionChannel::_q_receiveReply()
+ {
+ Q_ASSERT(!protocolHandler.isNull());
++ if (waitingForPotentialAbort) {
++ needInvokeReceiveReply = true;
++ return;
++ }
+ protocolHandler->_q_receiveReply();
+ }
+
+ void QHttpNetworkConnectionChannel::_q_readyRead()
+ {
+ Q_ASSERT(!protocolHandler.isNull());
++ if (waitingForPotentialAbort) {
++ needInvokeReadyRead = true;
++ return;
++ }
+ protocolHandler->_q_readyRead();
+ }
+
+@@ -1289,7 +1300,18 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
+ // Similar to HTTP/1.1 counterpart below:
+ const auto &pairs = spdyRequestsToSend.values(); // (request, reply)
+ const auto &pair = pairs.first();
++ waitingForPotentialAbort = true;
+ emit pair.second->encrypted();
++
++ // We don't send or handle any received data until any effects from
++ // emitting encrypted() have been processed. This is necessary
++ // because the user may have called abort(). We may also abort the
++ // whole connection if the request has been aborted and there is
++ // no more requests to send.
++ QMetaObject::invokeMethod(this,
++ &QHttpNetworkConnectionChannel::checkAndResumeCommunication,
++ Qt::QueuedConnection);
++
+ // In case our peer has sent us its settings (window size, max concurrent streams etc.)
+ // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection).
+ QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
+@@ -1307,6 +1329,26 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
+ }
+ }
+
++void QHttpNetworkConnectionChannel::checkAndResumeCommunication()
++{
++ Q_ASSERT(connection->connectionType() > QHttpNetworkConnection::ConnectionTypeHTTP);
++
++ // Because HTTP/2 requires that we send a SETTINGS frame as the first thing we do, and respond
++ // to a SETTINGS frame with an ACK, we need to delay any handling until we can ensure that any
++ // effects from emitting encrypted() have been processed.
++ // This function is called after encrypted() was emitted, so check for changes.
++
++ if (!reply && spdyRequestsToSend.isEmpty())
++ abort();
++ waitingForPotentialAbort = false;
++ if (needInvokeReadyRead)
++ _q_readyRead();
++ if (needInvokeReceiveReply)
++ _q_receiveReply();
++ if (needInvokeSendRequest)
++ sendRequest();
++}
++
+ void QHttpNetworkConnectionChannel::requeueSpdyRequests()
+ {
+ QList<HttpMessagePair> spdyPairs = spdyRequestsToSend.values();
+diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h
+index d8ac3979d19..eac44464926 100644
+--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
++++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
+@@ -107,6 +107,10 @@ public:
+ QAbstractSocket *socket;
+ bool ssl;
+ bool isInitialized;
++ bool waitingForPotentialAbort = false;
++ bool needInvokeReceiveReply = false;
++ bool needInvokeReadyRead = false;
++ bool needInvokeSendRequest = false;
+ ChannelState state;
+ QHttpNetworkRequest request; // current request, only used for HTTP
+ QHttpNetworkReply *reply; // current reply for this request, only used for HTTP
+@@ -187,6 +191,8 @@ public:
+ void closeAndResendCurrentRequest();
+ void resendCurrentRequest();
+
++ void checkAndResumeCommunication();
++
+ bool isSocketBusy() const;
+ bool isSocketWriting() const;
+ bool isSocketWaiting() const;
+--
+2.45.2
+
diff --git a/dev-qt/qtnetwork/qtnetwork-5.15.14-r1.ebuild b/dev-qt/qtnetwork/qtnetwork-5.15.14-r1.ebuild
new file mode 100644
index 000000000000..b28dc1384dcf
--- /dev/null
+++ b/dev-qt/qtnetwork/qtnetwork-5.15.14-r1.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+if [[ ${PV} != *9999* ]]; then
+ QT5_KDEPATCHSET_REV=1
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+QT5_MODULE="qtbase"
+inherit qt5-build
+
+DESCRIPTION="Network abstraction library for the Qt5 framework"
+
+IUSE="gssapi libproxy sctp +ssl"
+
+DEPEND="
+ =dev-qt/qtcore-${QT5_PV}*:5=
+ sys-libs/zlib:=
+ gssapi? ( virtual/krb5 )
+ libproxy? ( net-libs/libproxy )
+ sctp? ( kernel_linux? ( net-misc/lksctp-tools ) )
+ ssl? ( >=dev-libs/openssl-1.1.1:0= )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=( "${FILESDIR}/${P}-CVE-2024-39936.patch" ) # bug 935869
+
+QT5_TARGET_SUBDIRS=(
+ src/network
+ src/plugins/bearer/generic
+)
+
+QT5_GENTOO_CONFIG=(
+ libproxy:libproxy:
+ ssl::SSL
+ ssl::OPENSSL
+ ssl:openssl-linked:LINKED_OPENSSL
+)
+
+QT5_GENTOO_PRIVATE_CONFIG=(
+ :network
+)
+
+src_configure() {
+ local myconf=(
+ $(qt_use gssapi feature-gssapi)
+ $(qt_use libproxy)
+ $(qt_use sctp)
+ $(usev ssl -openssl-linked)
+ )
+ qt5-build_src_configure
+}
+
+src_install() {
+ qt5-build_src_install
+
+ # workaround for bug 652650
+ if use ssl; then
+ sed -e "/^#define QT_LINKED_OPENSSL/s/$/ true/" \
+ -i "${D}${QT5_HEADERDIR}"/Gentoo/${PN}-qconfig.h || die
+ fi
+}
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest
index 6ba1294e779b..388fc3934a59 100644
--- a/dev-qt/qtwayland/Manifest
+++ b/dev-qt/qtwayland/Manifest
@@ -1,4 +1,5 @@
AUX qtwayland-6.7.2-drag-drop.patch 2349 BLAKE2B e22347050b017831c8039700dc3658c468e2e4577df2e9afabd73574b311c3f8c2ed5ca40138cd9b4bdf1e2bb9e4c5333ab2856a1a46e879ca84308f7cf585d4 SHA512 ea6780aed6ec30dae53e73d7be9329b1daa59db704c6d32aff776a72b12411fa1a0d4376d1bf295a57df9761e2f81d3644d626d37f7a7490324ee79dbd23ce5d
+AUX qtwayland-6.7.2-null-screen.patch 1208 BLAKE2B 7ccc921245d3dccb1c3ea440becc85959bf94fa0b7836097c862f966396d68850af660531edcdd4637ac2a752a8bf50bdca6260ceb753b921eee85783d4ab714 SHA512 b3336eb707abafc8928893ac3e61c708a7cb43873b2fdb1576ac6dc6c74b52d9ca45d80c30f3d5fb8d374fb72fbb19cb7b0b799528f820bcda87704375841516
AUX qtwayland-6.7.2-plasma-popup.patch 1032 BLAKE2B 81a0c2dceac3bde808f463d0d2ad6159fd362528b2b37ed018283a05e4d317f6d31fcf87815e2b041aece5f49ae60bd4dfd7a2861aa2ea71f914343e6ff422ad SHA512 c5a63dfd9ff7a3a36bc7fce76b7c6b7ceb12b03dd9f758690cbfca715afc8989c747b4a535749ee44f6827e3af576d614050e0672263a32b420dd37aee008fb0
AUX qtwayland-6.7.2-thread-safety.patch 2420 BLAKE2B 4e5d871bd93a24cc2bb5c879a9eb336aacbfe20c3a6df15777ccdfb41a4d2b84484097a7d0680a5c02631cb84864259cdc9e68d04b0ab654275bd73ec92700b8 SHA512 18978aac57472575ee2dbcd44d1dbb7d21e6a116589cd78d9530272e0c67c8e730d2bf8272cc92cbd78d460ba710cb408595e11c59dca2649d8565cf4e7b135f
DIST qtwayland-5.15.14-gentoo-kde-1.tar.xz 47472 BLAKE2B 3812e5f18bcb857cf3c76cf8a53525a84b14bc4cf8430f4339c1ef9a5d6208dcdfba3f052bcc80c6ad8815db2415207e2eb5ed07bbf9e7076be675f2a4cee3c0 SHA512 912bc902e4f9d945dac396c75a2af9896e3002535a51e6b5b07166c38b9d6ea073da3d93db07742a0db295dd5f8167fdef351230adcb2145704c36b576c0f5e3
@@ -6,7 +7,7 @@ DIST qtwayland-everywhere-opensource-src-5.15.14.tar.xz 560916 BLAKE2B a5edb2144
DIST qtwayland-everywhere-src-6.7.2.tar.xz 1123220 BLAKE2B 70c2d8942afc4e1629d2ef34b6c062ecb5800185bb37e150c1d66a5216606028d2f59668991bddb5036572c962e92c3658d336167a7f9ffbf3d2f4d609a771f9 SHA512 2cd4f45f05ae60bc7f82b94f2e9c217ee4b8322f60381e1b079b90e0687e51cfbeb10b5dd724e1cca7e422b1b101d2b91c0ee47b1a732411cef330fb052c97c2
EBUILD qtwayland-5.15.14.ebuild 1214 BLAKE2B 4d974a96e807dfbad6bf480bb6faf022828c9cab0fd5bc82b6c6455344fafd7a349f1f232fa62a00e32cc073cda39aead004657e7b4072f49890442baeda3252 SHA512 75966f4a890e77a29937d63ed50a8095d579fab4871f2d091bb410443a0101fabc592a6cfbe033b12d6f0663c196930a32c85a062a10de4f8dc13eee4103b86b
EBUILD qtwayland-6.7.2-r1.ebuild 1527 BLAKE2B efe529b2925dc1ec8ce987a3eed243afcece1963d84345aeb1b758d5fbbe59d29c06229eaa4ee88f9fd2f776ed9f34136f9c0750b9be3bbc1fcad93fc076ec14 SHA512 001a07a9ee53545f18ca970c9dc7caece8055a1eb559d6e52fc0a1c5e6c7f9b14ff03098c203d6f1f823283b6b1143edba980258073f0eb884b82e9d570d6026
-EBUILD qtwayland-6.7.2-r2.ebuild 1609 BLAKE2B dc92fd51dd6ddf104845bc682d7b4c1388f59e6c5937a6ef77c37f2e3015adf088ade2276b008bac5bb90b03d7cb83774857bf1e31e0dd2adfb323190dcea29a SHA512 4824a37fe6511187ff0909d1ae086b4f9aa96c5c98fe27a4a0723c54ad257d4d5f6ce0eef0b0c73ee0650a860977dc843bf0f03a6604218e8324dfd7ee0c626e
+EBUILD qtwayland-6.7.2-r3.ebuild 1647 BLAKE2B 9c7b25e745214f7c272688fe7a0b574ca3eae1d122e2269da410242b7a86cbcac1217f2c8564ad7bcc6a5e41d49e8a04d8704e0be5955ae2016d5cf22070bd2d SHA512 d14c2b24dc5321d865120aae6aab05e54095ba3ba46456694a6876e6b170a03d30f056e9754392fa94dda019e5a1feaf82abd7d55ab6a0366c0dfac2c78f0b34
EBUILD qtwayland-6.7.9999.ebuild 1229 BLAKE2B a2ef0eece20a69fae358c8c0e22dd05c7d5a04cdd508e1ecb90883c87a6bc365db6443413e7a2150282d26ba8666361b281bd261f5f7a34b0bff24abf96bb723 SHA512 9465226c56e239182b87812bf532ba63e2632830d24e5b7aff53160ba587834bdb7faf9dde05da61084e0a44551cbbbd5599f0988ed92c0e0bc77a016a0ce289
EBUILD qtwayland-6.8.9999.ebuild 1604 BLAKE2B 955233e9dce7287eab5e8ccb13b548e44bc31dc71a195f665c1422a33045a309a131cf4443714a31799a2c1a387fc0ffc1d4f653c6b7bd25de77cae8f92c2e68 SHA512 374607e7b5f0e65e89ce1dc9e2cb714212a876c556826ca92cfb347a6a7bea8dd2f94e3455dd3e2fd66cf16a5e23350e2ca4fb316139626eb0c7bc46f66fb800
EBUILD qtwayland-6.9999.ebuild 1604 BLAKE2B 955233e9dce7287eab5e8ccb13b548e44bc31dc71a195f665c1422a33045a309a131cf4443714a31799a2c1a387fc0ffc1d4f653c6b7bd25de77cae8f92c2e68 SHA512 374607e7b5f0e65e89ce1dc9e2cb714212a876c556826ca92cfb347a6a7bea8dd2f94e3455dd3e2fd66cf16a5e23350e2ca4fb316139626eb0c7bc46f66fb800
diff --git a/dev-qt/qtwayland/files/qtwayland-6.7.2-null-screen.patch b/dev-qt/qtwayland/files/qtwayland-6.7.2-null-screen.patch
new file mode 100644
index 000000000000..6a7e85a8f4b6
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-6.7.2-null-screen.patch
@@ -0,0 +1,29 @@
+Backport of [1] for [2], will be fixed in qtwayland-6.7.3.
+
+[1] https://codereview.qt-project.org/c/qt/qtwayland/+/576718
+[2] https://bugs.kde.org/show_bug.cgi?id=489072
+
+From: David Edmundson <davidedmundson@kde.org>
+Date: Wed, 10 Jul 2024 09:00:33 +0100
+Subject: [PATCH] client: Guard against windows being on a null screen
+
+calculateScreenFromSurfaceEvents uses the screen information from our
+surface enter events. If this is not set yet, or refers to outputs not
+yet complete we fall back to the QWindow::screen. This was introduced in
+e03613524fc9f6be5c4cd7e9bdb00bc09c7f1e0b.
+
+It was assumed that this would always be a valid value as QtBase keeps
+it updated, but there are apparently paths for it to still be null.
+
+It will be evaluated again when the surface receives a wl_enter event or
+the output that we have entered is finally initialised and we will then
+be marked as on the correct screen.
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -1406,5 +1406,5 @@
+ QPlatformScreen *newScreen = calculateScreenFromSurfaceEvents();
+
+- if (newScreen->screen() == window()->screen())
++ if (!newScreen || newScreen->screen() == window()->screen())
+ return;
+
diff --git a/dev-qt/qtwayland/qtwayland-6.7.2-r2.ebuild b/dev-qt/qtwayland/qtwayland-6.7.2-r3.ebuild
index eab3c3a8d3a5..7124b7617bf1 100644
--- a/dev-qt/qtwayland/qtwayland-6.7.2-r2.ebuild
+++ b/dev-qt/qtwayland/qtwayland-6.7.2-r3.ebuild
@@ -32,6 +32,7 @@ PATCHES=(
"${FILESDIR}"/${P}-plasma-popup.patch
"${FILESDIR}"/${P}-drag-drop.patch
"${FILESDIR}"/${P}-thread-safety.patch
+ "${FILESDIR}"/${P}-null-screen.patch
)
CMAKE_SKIP_TESTS=(