summaryrefslogtreecommitdiff
path: root/dev-qt
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2025-04-08 08:43:12 +0100
committerV3n3RiX <venerix@koprulu.sector>2025-04-08 08:43:12 +0100
commite81d2dd033df3a61b874a9a37f951ca05eead86f (patch)
tree82bfb1314b75b6c04de41a378a4838b7a18b0d68 /dev-qt
parent288d9455931660abb6dfa534a78d45c7fb901477 (diff)
gentoo auto-resync : 08:04:2025 - 08:43:11
Diffstat (limited to 'dev-qt')
-rw-r--r--dev-qt/Manifest.gzbin11565 -> 11566 bytes
-rw-r--r--dev-qt/qtwebengine/Manifest3
-rw-r--r--dev-qt/qtwebengine/files/qtwebengine-6.9.0-QTBUG-133570.patch108
-rw-r--r--dev-qt/qtwebengine/qtwebengine-6.9.0-r1.ebuild (renamed from dev-qt/qtwebengine/qtwebengine-6.9.0.ebuild)1
-rw-r--r--dev-qt/qtxml/Manifest2
-rw-r--r--dev-qt/qtxml/files/qtxml-5.15.16-CVE-2025-30348.patch156
-rw-r--r--dev-qt/qtxml/qtxml-5.15.16-r1.ebuild31
7 files changed, 300 insertions, 1 deletions
diff --git a/dev-qt/Manifest.gz b/dev-qt/Manifest.gz
index 75fb91d7852b..412b37ee63d8 100644
--- a/dev-qt/Manifest.gz
+++ b/dev-qt/Manifest.gz
Binary files differ
diff --git a/dev-qt/qtwebengine/Manifest b/dev-qt/qtwebengine/Manifest
index 68a56cfde3e6..76b09e5306ce 100644
--- a/dev-qt/qtwebengine/Manifest
+++ b/dev-qt/qtwebengine/Manifest
@@ -9,6 +9,7 @@ AUX qtwebengine-6.8.2-cstdint.patch 1221 BLAKE2B 8e2131e54dc398c7518ba49b75e38db
AUX qtwebengine-6.8.2-glibc2.41.patch 978 BLAKE2B 23c7aeaa6edec047215f1a7905e8a0474e19c0efbb26c3594fa4d86b9f9fb29c52ef5ce18fb643bcc8dbc93281fd477a356e1c89b8fa6c04eed9be2b530e235a SHA512 61aef7ad8ef0687f92684ea272093f09a686e0265d213d064f43c3a9afd63d58de5b2adbd0a51c163dd2154c02d1b5e4fbc960f49b1d02521446e0b380f67d11
AUX qtwebengine-6.8.3-clang20.patch 925 BLAKE2B b7a43f8efbd7e9b0d58c6c31fd7780357769703c8a35ef28de42abbe5d6392cc9a68ea31992d8df7e57d8e70c4ca62a51e59b2b0522b7b7d0c475c00c7a45829 SHA512 fc20e054594598022662b6a62e9a55f0553c55fac3ab876de48d9fa97130eddf2bf844cc44ee059c73323c105d197812326455644257948e74e4315e0c604238
AUX qtwebengine-6.8.3-pipewire1.4.patch 837 BLAKE2B 3266bcfbc1b76e491f51cc094ad03a579a89795895bed915356d91470daf21914cacd13ed28f6f178bd0c34dfd135c26fbcb7c665239c804fdc90a14c0b94c88 SHA512 d8defe246f194256e68c75a8fb011824f47c200f6003d65292384607b33f6d01ad682e42194a8f1ea98a2a6b087e92b202570ed1960bf566ae86648e97ec53d5
+AUX qtwebengine-6.9.0-QTBUG-133570.patch 3680 BLAKE2B 7841470adec5ce0dbae703afb70b227d5c9933127012e69a7284b4fca8e51ff51a234080681dfcf690474a06d1241056f3d1a8c5a8fb7fa3dadd21570d8f6243 SHA512 77548bea3a45f99d3c4e9427a48cf1e7b8909c9ab75db2c4fd5b01c4f1b15e5cccb13cecb5320f72cd729814114e02c5d871fd43f94fe172e1a95621a4fa1b1c
AUX qtwebengine-6.9.0-x11-pixmap-leak.patch 1789 BLAKE2B 609280175bdacddfbf03cc553aa814ab4ff6be147f43c864416f2c1611f043ef6d4a05f9c1e3f2a834a175f91ef10e8eb881a582ee4ef3d4eefa26cf96d6bbb1 SHA512 53d932583942b2dd7fc04b2a7a8c5a5b6860f28312c7a1f0ed0571149ddb34c1d180218847d5898c33f2b3039fa06c5751f25a7d85afcb8b54a0fa6992e6644b
DIST qtwebengine-5.15.14_p20240510-patchset.tar.xz 20780 BLAKE2B 516d4c628c4b027ab3a7159da006a57173be91de3eb4b7f308029953d4fd19fb3e790ca38e79d17fef75d8d9b392676650acb9285d5913f9ebecaa4136575c47 SHA512 492979d118d6bd9165ee194724e38b627d19c89dbe1daa6b2f55e4a8fc7676748a1eacb9623ee05e09140c2c4a2ac82ddafaef5c45630a117ce0ed14b240a474
DIST qtwebengine-5.15.16_p20241115.tar.xz 301382752 BLAKE2B 08adfae6228a91f1f4b2a603a28881d9cf97f339d951217f3837d614ebb58aff9b0963220be04cc9a17869b6021a6d7687848bd8ccd1c8c49115a5e6944be84b SHA512 50e0bc7b4236859b4419f2f8eaf37e47c1994c30ca3bf584dd2f4996b5f8ba7cd31c8aae48c28f0fcd39c144490f5e451c7ecf5d340e7b10fa2e37666ef21100
@@ -20,7 +21,7 @@ DIST qtwebengine-everywhere-src-6.9.0.tar.xz 672153992 BLAKE2B aa5d7c77624857b32
EBUILD qtwebengine-5.15.16_p20241115.ebuild 7879 BLAKE2B ce3061b704385359455c0885efe935b9bf1f8e5627ba06a9fbafb1c95cfccdef6f39331868bbaf3d5794d708e7bb6c01cbef28c1880f45fb60d9e81cc73dcf53 SHA512 c31bca254f0962e39f763f49f22930d7c6d51a68169b72e9bf9afb111a01e40c15c82d86743f185480f092c85e8e17c51dc4e07ee7557ac449a00a8d3952be6f
EBUILD qtwebengine-6.8.2-r1.ebuild 10408 BLAKE2B 42d215e450b4cc2d22fc4f747f4fe4d236b45532273da4741e9f6d2c6d1847ae1c01fe69dafa77b7175b2e50ae8a19eba61693b24fefadd64fcbee51be96aea7 SHA512 9d7b181cf090f9ecccde4d34fd74d2aba1336793992e001aacf6009c917b9e5489d5e26c8b4228634e8f80c38110aecd71c45846ee9c5c28686a30e7f5c5a0ff
EBUILD qtwebengine-6.8.3.ebuild 10613 BLAKE2B 4ec64ce1ff7d319d3136b98f50ff911c69633a4e63f41871b7a86a76969a13b21b515a40fdcf787b0e741e6df76111c8a307c313e09aa60673acab4e20132156 SHA512 1b2cd55b27792d5439e661cf109412f438cc312e474841a0fc5120c81457feec1896063618e60dd3d10fdf6aa8dcb9425e596df3d51a2ef9517d56f250cd2fa2
-EBUILD qtwebengine-6.9.0.ebuild 10686 BLAKE2B 643024f97fa020236dd323a804a59c2b624052c9460c73fad7b50ddd7fa1e21ca3f5ac8561935a76143ee31288cfb6910f94f806c8df649d14978311f5e3f9f0 SHA512 1ad18dbec32c3a6ebe314c843c13ca6ac01feb74cfa657a02470071ec1e064e082e26c606778483f5d0c22761eb3285e81e07453db6682da83a6071cf778a9d2
+EBUILD qtwebengine-6.9.0-r1.ebuild 10732 BLAKE2B abf665190745df9895361b2e574264113e392de9d08c157aa3b3abd545c5e8e053bb7c3536dafcc2c60e43ae097ef6df5bc106981f7d1692de6d7f831aa98966 SHA512 1f1542bc24d504c0668ab64ae66a6be09e64207984f083dd2e76ad3bd9daaf10a1b72f65aedec5b81dc0acb42692e77b7363438768ea7a6dfeb53e44f28fc095
EBUILD qtwebengine-6.9.9999.ebuild 10637 BLAKE2B e5871f4e6c5aa7e421b64734e84c149719c90aee315507a1908df610125d340c8877ee92ea1c01e142e0e69357b00f1209841da0ea581c8b7f689d1da3a42072 SHA512 e7f421b9e3be617b8fc0780e462b49675631b0d1fe650ea1c26ff87f1141b9ac3b788060d70a63640401ac6e23b5cff719fc7ef6b1cf4cbe47280ce307fae18c
EBUILD qtwebengine-6.9999.ebuild 10549 BLAKE2B 6c756c374da5f23f553553a8391fd845f966cdd33b12d9a54174174d3cbb2c68c60e018f88fea79a834c79dab979e6f2050e20f15eec5f590d2298cfe415fb32 SHA512 a443a5fddab1269c87b73aa2175fdaf6c0a3bf0b59215d22c27c246f4abb353d9bb5647b4b7f3a91d8765fcc8947553d2da28282d9cba75831f0abbe206a6a6a
MISC metadata.xml 1236 BLAKE2B 9a47d6cb2641ee53f22926095457c11f8da65a3705863a3ae0496d5bb656ac65acb744b5420deb95afee6ac9f141933b4f45690459e92c71089fe72727854a28 SHA512 9a640a386cc03804858fc02b24299896c03eff53a07db00862bab9d7dd259ca839e890921fcf222c8275cad16b418e423e7e485c03e74e01ab86979553251b4c
diff --git a/dev-qt/qtwebengine/files/qtwebengine-6.9.0-QTBUG-133570.patch b/dev-qt/qtwebengine/files/qtwebengine-6.9.0-QTBUG-133570.patch
new file mode 100644
index 000000000000..decd83aa9b1b
--- /dev/null
+++ b/dev-qt/qtwebengine/files/qtwebengine-6.9.0-QTBUG-133570.patch
@@ -0,0 +1,108 @@
+https://bugs.kde.org/show_bug.cgi?id=497691
+https://github.com/qutebrowser/qutebrowser/issues/8534
+https://bugreports.qt.io/browse/QTBUG-133570
+https://codereview.qt-project.org/c/qt/qtwebengine/+/634920
+--- a/src/core/configure/BUILD.root.gn.in
++++ b/src/core/configure/BUILD.root.gn.in
+@@ -406,4 +406,5 @@
+ "//ui/base/x:gl",
+ "//ui/gfx/linux:gpu_memory_buffer_support_x11",
++ "//ui/gfx/x",
+ ]
+
+@@ -411,4 +412,6 @@
+ "//ui/ozone/platform/x11/gl_egl_utility_x11.cc",
+ "//ui/ozone/platform/x11/gl_egl_utility_x11.h",
++ "//ui/ozone/platform/x11/native_pixmap_egl_x11_binding.cc",
++ "//ui/ozone/platform/x11/native_pixmap_egl_x11_binding.h",
+ ]
+ }
+--- a/src/core/ozone/gl_ozone_angle_qt.cpp
++++ b/src/core/ozone/gl_ozone_angle_qt.cpp
+@@ -1,5 +1,9 @@
+-// Copyright (C) 2024 The Qt Company Ltd.
++// Copyright (C) 2025 The Qt Company Ltd.
+ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
++// Copyright 2016 The Chromium Authors
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
+ #include "gl_ozone_angle_qt.h"
+
+@@ -13,4 +17,6 @@
+ #if BUILDFLAG(IS_OZONE_X11)
+ #include "ozone_util_qt.h"
++
++#include "ui/ozone/platform/x11/native_pixmap_egl_x11_binding.h"
+ #endif
+
+@@ -21,4 +27,32 @@
+
+ namespace ui {
++namespace {
++// Based on //ui/ozone/platform/x11/x11_surface_factory.cc
++enum class NativePixmapSupportType {
++ // Importing native pixmaps not supported.
++ kNone,
++
++ // Native pixmaps are imported directly into EGL using the
++ // EGL_EXT_image_dma_buf_import extension.
++ kDMABuf,
++
++ // Native pixmaps are first imported as X11 pixmaps using DRI3 and then into
++ // EGL.
++ kX11Pixmap,
++};
++
++NativePixmapSupportType GetNativePixmapSupportType()
++{
++ if (gl::GLSurfaceEGL::GetGLDisplayEGL()->ext->b_EGL_EXT_image_dma_buf_import)
++ return NativePixmapSupportType::kDMABuf;
++
++#if BUILDFLAG(IS_OZONE_X11)
++ if (NativePixmapEGLX11Binding::CanImportNativeGLXPixmap())
++ return NativePixmapSupportType::kX11Pixmap;
++#endif
++
++ return NativePixmapSupportType::kNone;
++}
++} // namespace
+
+ bool GLOzoneANGLEQt::LoadGLES2Bindings(const gl::GLImplementationParts & /*implementation*/)
+@@ -74,5 +108,14 @@
+ bool GLOzoneANGLEQt::CanImportNativePixmap(gfx::BufferFormat format)
+ {
+- return gl::GLSurfaceEGL::GetGLDisplayEGL()->ext->b_EGL_EXT_image_dma_buf_import;
++ switch (GetNativePixmapSupportType()) {
++ case NativePixmapSupportType::kDMABuf:
++ return NativePixmapEGLBinding::IsBufferFormatSupported(format);
++#if BUILDFLAG(IS_OZONE_X11)
++ case NativePixmapSupportType::kX11Pixmap:
++ return NativePixmapEGLX11Binding::IsBufferFormatSupported(format);
++#endif
++ default:
++ return false;
++ }
+ }
+
+@@ -83,6 +126,17 @@
+ GLenum target, GLuint texture_id)
+ {
+- return NativePixmapEGLBinding::Create(pixmap, plane_format, plane, plane_size, color_space,
+- target, texture_id);
++ switch (GetNativePixmapSupportType()) {
++ case NativePixmapSupportType::kDMABuf:
++ return NativePixmapEGLBinding::Create(pixmap, plane_format, plane, plane_size, color_space,
++ target, texture_id);
++#if BUILDFLAG(IS_OZONE_X11)
++ case NativePixmapSupportType::kX11Pixmap:
++ return NativePixmapEGLX11Binding::Create(pixmap, plane_format, plane_size, target,
++ texture_id);
++#endif
++ default:
++ NOTREACHED();
++ return nullptr;
++ }
+ }
+
diff --git a/dev-qt/qtwebengine/qtwebengine-6.9.0.ebuild b/dev-qt/qtwebengine/qtwebengine-6.9.0-r1.ebuild
index 5366adc7bed8..d01308b28bb7 100644
--- a/dev-qt/qtwebengine/qtwebengine-6.9.0.ebuild
+++ b/dev-qt/qtwebengine/qtwebengine-6.9.0-r1.ebuild
@@ -109,6 +109,7 @@ PATCHES+=(
"${FILESDIR}"/${PN}-6.8.2-glibc2.41.patch
"${FILESDIR}"/${PN}-6.8.3-pipewire1.4.patch
"${FILESDIR}"/${PN}-6.9.0-x11-pixmap-leak.patch
+ "${FILESDIR}"/${PN}-6.9.0-QTBUG-133570.patch
)
python_check_deps() {
diff --git a/dev-qt/qtxml/Manifest b/dev-qt/qtxml/Manifest
index e6e6c7631c16..5a5942212ed5 100644
--- a/dev-qt/qtxml/Manifest
+++ b/dev-qt/qtxml/Manifest
@@ -1,5 +1,7 @@
+AUX qtxml-5.15.16-CVE-2025-30348.patch 6107 BLAKE2B 8ab8bc0dfd9adacfec736259cf88519f12eb9dfae815838b4cf2e73e20854885f724081488194768a958d4646b6fdadf6cfa9fd28b652bfb5108af729a430043 SHA512 a351976aca39e5b52a2acad8c8a59df49584b73e3d591b18c68125f2bb96debfdbb5954502c59043be03f21e062fcb0956f84e6680ab0f8cfa1e2d967c428b6d
DIST qtbase-5.15-gentoo-patchset-6.tar.xz 8288 BLAKE2B ad9695a528345dd3b8e9ce72b7bdfe8f744f16685a567bbc7862ba6c28e5a426260cb0b73e2573cb3a6f16f1785786898ffb44c90f5d75354b97e5756c7573db SHA512 97bc4d5375e1750a5578439ff320ee2e5e929df1dafe56b4e86f2de8ad26c91dc4002e45ad75d9f936347d49b9f54c0c42f8fc2cb7dfd4f54bf08a210b3bc720
DIST qtbase-5.15.16-gentoo-kde-1.tar.xz 319504 BLAKE2B 52675483f6be19a3efbddbe68335ee575852859137c51ca9e7cc219740a3529d270cb2af085eee8de1964c2171eab4f0c64b79c03f1bac453a4829748aff528d SHA512 0a38ce02b563f79364f3559fda4d4e13092ee79b820fb780db10e40af3bac158ee139e1a216f4de3c986eacbd933965e7ed8c261de7a65d487981887aed840dd
DIST qtbase-everywhere-opensource-src-5.15.16.tar.xz 51392072 BLAKE2B f7f83f18f91200350eff4d2d8d56769b537540290434a1c434d7c891b0b533d5a77000b5a670228a947d74c21f131f207b31aeb96f1f2ec867bbf608202c99b0 SHA512 190581c7df9763c2550466f884784d6f38817a087ab44fe57b99c1d1ac2ea3bae94ced8a6d0873a7999e523d63831d135cd7407812c8814ac4ef957840b7058e
+EBUILD qtxml-5.15.16-r1.ebuild 577 BLAKE2B ec72b4f7286695b89dac79b40fa3a57733abeb8dceacec62c7f416c021387d14f4b936952bed4b6101c6944372a54ffef72c28213ca95983c27eb62d57d53b78 SHA512 ee473c62ad18931c65dbc891497a0dbc52c7ff859a5a1cef41a2f0188dd4e3bf51c6ec89ea8430a173685ec2af34b359c65e5824562977bf951a052d2e416eca
EBUILD qtxml-5.15.16.ebuild 518 BLAKE2B 2979e881a3265cafba7cdbdc45c580ef3042fc750a651c94c337e12bbbc7f0522af803e4a8809b384fbf95781c6eddf7c1386f7e92251551b10ac926dc2e75cd SHA512 cd27ee2daf078ff32b06800d4e723874f3828b1045e254e5db6e564a9c598a1613a5a88ea77b5129938862037a34cd4ed5925ac781016d3b90767004e6edb7e3
MISC metadata.xml 482 BLAKE2B 651a49dc4a07f5e5a9c21990868e666d98acdea7d7b0b2c0e4c98eafc3da72c803d380e4abda30f33250f7bbd7654df713833ccdddcb975cbad6f92e488f643b SHA512 192c670abd7da29645513bf1d9297d942efdc49f5cf170861e7689fda47f51daa47f10c7c81c3b045366e0259179c6839ff7747197c9d792e8d0fd1a5818973e
diff --git a/dev-qt/qtxml/files/qtxml-5.15.16-CVE-2025-30348.patch b/dev-qt/qtxml/files/qtxml-5.15.16-CVE-2025-30348.patch
new file mode 100644
index 000000000000..bbc001a77d40
--- /dev/null
+++ b/dev-qt/qtxml/files/qtxml-5.15.16-CVE-2025-30348.patch
@@ -0,0 +1,156 @@
+From 16918c1df3e709df2a97281e3825d94c84edb668 Mon Sep 17 00:00:00 2001
+From: Christian Ehrlicher <ch.ehrlicher@gmx.de>
+Date: Tue, 06 Aug 2024 22:39:44 +0200
+Subject: [PATCH] XML/QDom: speedup encodeText()
+
+The code copied the whole string, then replaced parts inline, at
+the cost of relocating everything beyond, at each replacement.
+Instead, copy character by character (in chunks where possible)
+and append replacements as we skip what they replace.
+
+Manual conflict resolution for 6.5:
+- This is a manual cherry-pick. The original change was only
+ picked to 6.8, but the quadratic behavior is present in Qt 5, too.
+- Changed Task-number to Fixes: because this is the real fix;
+ the QString change, 315210de916d060c044c01e53ff249d676122b1b,
+ was unrelated to the original QTBUG-127549.
+
+Manual conflcit resolution for 5.15:
+- Kept/re-added QTextCodec::canEncode() check
+- Ported from Qt 6 to 5, to wit:
+ - qsizetype -> int
+ - QStringView::first/sliced(n) -> left/mid(n)
+ (these functions are clearly called in-range, so the widened
+ contract of the Qt 5 functions doesn't matter)
+- Ported from C++17- and C++14-isms to C++11:
+ - replaced polymorphic lambda with a normal one (this requires
+ rewriting the !canEncode() branch to use QByteArray/QLatin1String
+ instead of QString)
+- As a drive-by, corrected the indentation of the case labels to
+ horizontally align existing code (and follow Qt style)
+
+Fixes: QTBUG-127549
+Change-Id: I368482859ed0c4127f1eec2919183711b5488ada
+Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
+(cherry picked from commit 2ce08e3671b8d18b0284447e5908ce15e6e8f80f)
+Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
+(cherry picked from commit 225e235cf966a44af23dbe9aaaa2fd20ab6430ee)
+Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
+(cherry picked from commit 905a5bd421efff6a1d90b6140500d134d32ca745)
+---
+
+diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp
+index 872221c..bf70477 100644
+--- a/src/xml/dom/qdom.cpp
++++ b/src/xml/dom/qdom.cpp
+@@ -3676,59 +3676,67 @@
+ const QTextCodec *const codec = s.codec();
+ Q_ASSERT(codec);
+ #endif
+- QString retval(str);
+- int len = retval.length();
+- int i = 0;
++ QString retval;
++ int start = 0;
++ auto appendToOutput = [&](int cur, QLatin1String replacement)
++ {
++ if (start < cur) {
++ retval.reserve(str.size() + replacement.size());
++ retval.append(QStringView(str).left(cur).mid(start));
++ }
++ // Skip over str[cur], replaced by replacement
++ start = cur + 1;
++ retval.append(replacement);
++ };
+
+- while (i < len) {
+- const QChar ati(retval.at(i));
+-
+- if (ati == QLatin1Char('<')) {
+- retval.replace(i, 1, QLatin1String("&lt;"));
+- len += 3;
+- i += 4;
+- } else if (encodeQuotes && (ati == QLatin1Char('"'))) {
+- retval.replace(i, 1, QLatin1String("&quot;"));
+- len += 5;
+- i += 6;
+- } else if (ati == QLatin1Char('&')) {
+- retval.replace(i, 1, QLatin1String("&amp;"));
+- len += 4;
+- i += 5;
+- } else if (ati == QLatin1Char('>') && i >= 2 && retval[i - 1] == QLatin1Char(']') && retval[i - 2] == QLatin1Char(']')) {
+- retval.replace(i, 1, QLatin1String("&gt;"));
+- len += 3;
+- i += 4;
+- } else if (performAVN &&
+- (ati == QChar(0xA) ||
+- ati == QChar(0xD) ||
+- ati == QChar(0x9))) {
+- const QString replacement(QLatin1String("&#x") + QString::number(ati.unicode(), 16) + QLatin1Char(';'));
+- retval.replace(i, 1, replacement);
+- i += replacement.length();
+- len += replacement.length() - 1;
+- } else if (encodeEOLs && ati == QChar(0xD)) {
+- retval.replace(i, 1, QLatin1String("&#xd;")); // Replace a single 0xD with a ref for 0xD
+- len += 4;
+- i += 5;
+- } else {
++ const int len = str.size();
++ for (int cur = 0; cur < len; ++cur) {
++ switch (const char16_t ati = str[cur].unicode()) {
++ case u'<':
++ appendToOutput(cur, QLatin1String("&lt;"));
++ break;
++ case u'"':
++ if (encodeQuotes)
++ appendToOutput(cur, QLatin1String("&quot;"));
++ break;
++ case u'&':
++ appendToOutput(cur, QLatin1String("&amp;"));
++ break;
++ case u'>':
++ if (cur >= 2 && str[cur - 1] == u']' && str[cur - 2] == u']')
++ appendToOutput(cur, QLatin1String("&gt;"));
++ break;
++ case u'\r':
++ if (performAVN || encodeEOLs)
++ appendToOutput(cur, QLatin1String("&#xd;")); // \r == 0x0d
++ break;
++ case u'\n':
++ if (performAVN)
++ appendToOutput(cur, QLatin1String("&#xa;")); // \n == 0x0a
++ break;
++ case u'\t':
++ if (performAVN)
++ appendToOutput(cur, QLatin1String("&#x9;")); // \t == 0x09
++ break;
++ default:
+ #if QT_CONFIG(textcodec)
+ if(codec->canEncode(ati))
+- ++i;
++ ; // continue
+ else
+ #endif
+ {
+ // We have to use a character reference to get it through.
+- const ushort codepoint(ati.unicode());
+- const QString replacement(QLatin1String("&#x") + QString::number(codepoint, 16) + QLatin1Char(';'));
+- retval.replace(i, 1, replacement);
+- i += replacement.length();
+- len += replacement.length() - 1;
++ const QByteArray replacement = "&#x" + QByteArray::number(uint{ati}, 16) + ';';
++ appendToOutput(cur, QLatin1String{replacement});
+ }
++ break;
+ }
+ }
+-
+- return retval;
++ if (start > 0) {
++ retval.append(QStringView(str).left(len).mid(start));
++ return retval;
++ }
++ return str;
+ }
+
+ void QDomAttrPrivate::save(QTextStream& s, int, int) const
diff --git a/dev-qt/qtxml/qtxml-5.15.16-r1.ebuild b/dev-qt/qtxml/qtxml-5.15.16-r1.ebuild
new file mode 100644
index 000000000000..d94919409abc
--- /dev/null
+++ b/dev-qt/qtxml/qtxml-5.15.16-r1.ebuild
@@ -0,0 +1,31 @@
+# Copyright 1999-2025 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 ~x86"
+fi
+
+QT5_MODULE="qtbase"
+inherit qt5-build
+
+DESCRIPTION="Implementation of SAX and DOM for the Qt5 framework"
+
+IUSE=""
+
+RDEPEND="=dev-qt/qtcore-${QT5_PV}*:5="
+DEPEND="${RDEPEND}
+ test? ( =dev-qt/qtnetwork-${QT5_PV}* )
+"
+
+QT5_TARGET_SUBDIRS=(
+ src/xml
+)
+
+QT5_GENTOO_PRIVATE_CONFIG=(
+ :xml
+)
+
+PATCHES=( "${FILESDIR}/${P}-CVE-2025-30348.patch" )