<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/b8d0a41395f0b106c8e2e32acb31ed629b645b2e">https://github.com/macports/macports-ports/commit/b8d0a41395f0b106c8e2e32acb31ed629b645b2e</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit b8d0a41395f0b106c8e2e32acb31ed629b645b2e
</span>Author: Christopher Chavez <chrischavez@gmx.us>
AuthorDate: Mon Aug 14 02:10:21 2023 -0500

<span style='display:block; white-space:pre;color:#404040;'>    qt5-qtbase: add PySide2 workaround, security patches
</span>---
 aqua/qt5/Portfile                                  |   8 +-
 aqua/qt5/files/CVE-2023-37369-qtbase-5.15.diff     | 203 +++++++++++++++++++
 aqua/qt5/files/CVE-2023-38197-qtbase-5.15.diff     | 219 +++++++++++++++++++++
 ...ase-5.15.9-work-around-pyside2-brokenness.patch | 136 +++++++++++++
 4 files changed, 565 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt5/Portfile b/aqua/qt5/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 160babb485c..f8ec1a13e4e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/aqua/qt5/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt5/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -13,6 +13,7 @@ license             {LGPL-3 GPL-3 OpenSSLException}
</span> 
 homepage            https://www.qt.io
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# When updating, also update py-pyside2
</span> set qt_version      5.15.10
 version             ${qt_version}
 set middle_name     everywhere-opensource
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -213,7 +214,7 @@ array set modules {
</span>         {"Qt Core" "Qt GUI" "Qt Network" "Qt SQL" "Qt Test" "Qt Widgets" "Qt Concurrent" "Qt D-Bus" "Qt OpenGL" "Qt Platform Headers" "Qt Print Support" "Qt XML"}
         ""
         "variant overrides: "
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        "revision 0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "revision 1"
</span>         "License: "
     }
     qtcharts {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1079,8 +1080,13 @@ foreach {module module_info} [array get modules] {
</span>                 CVE-2023-32762-qtbase-5.15.diff
                 CVE-2023-32763-qtbase-5.15.diff
                 CVE-2023-33285-qtbase-5.15.diff
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                CVE-2023-37369-qtbase-5.15.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                CVE-2023-38197-qtbase-5.15.diff
</span>             }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            # see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=270715
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            patchfiles-append qtbase-5.15.9-work-around-pyside2-brokenness.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>             # Neither "pkg-config --cflags Qt5Core" nor "pkg-config --cflags-only-I Qt5Core" will allow
             #     a configure script to find CPPFLAGS since the include mechanism relies on
             #     -F and -framework BOTH being set
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt5/files/CVE-2023-37369-qtbase-5.15.diff b/aqua/qt5/files/CVE-2023-37369-qtbase-5.15.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..69f4d958564
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt5/files/CVE-2023-37369-qtbase-5.15.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,203 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7cd457ba3a..11d162cb79 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1302,15 +1302,18 @@ inline int QXmlStreamReaderPrivate::fastScanContentCharList()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Fast scan an XML attribute name (e.g. "xml:lang").
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline QXmlStreamReaderPrivate::FastScanNameResult
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++QXmlStreamReaderPrivate::fastScanName(Value *val)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int n = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     uint c;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     while ((c = getChar()) != StreamEOF) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (n >= 4096) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             // This is too long to be a sensible name, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            // can exhaust memory
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            // can exhaust memory, or the range of decltype(*prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            raiseNamePrefixTooLongError();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         switch (c) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case '\n':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1339,23 +1342,23 @@ inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case '+':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case '*':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             putChar(c);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (prefix && *prefix == n+1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                *prefix = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (val && val->prefix == n + 1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                val->prefix = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 putChar(':');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 --n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            return n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return FastScanNameResult(n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case ':':
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (prefix) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                if (*prefix == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    *prefix = n+2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (val) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (val->prefix == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    val->prefix = n + 2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 } else { // only one colon allowed according to the namespace spec.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     putChar(c);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    return n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    return FastScanNameResult(n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 putChar(c);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                return n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return FastScanNameResult(n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             Q_FALLTHROUGH();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1364,12 +1367,12 @@ inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (prefix)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        *prefix = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (val)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        val->prefix = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int pos = textBuffer.size() - n;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     putString(textBuffer, pos);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     textBuffer.resize(pos);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return FastScanNameResult(0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enum NameChar { NameBeginning, NameNotBeginning, NotName };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1878,6 +1881,14 @@ void QXmlStreamReaderPrivate::raiseWellFormedError(const QString &message)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     raiseError(QXmlStreamReader::NotWellFormedError, message);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void QXmlStreamReaderPrivate::raiseNamePrefixTooLongError()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // TODO: add a ImplementationLimitsExceededError and use it instead
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    raiseError(QXmlStreamReader::NotWellFormedError,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++               QXmlStream::tr("Length of XML attribute name exceeds implemnetation limits (4KiB "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                              "characters)."));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void QXmlStreamReaderPrivate::parseError()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream.g b/src/corelib/serialization/qxmlstream.g
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4321fed68a..8c6a1a5887 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream.g
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream.g
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -516,7 +516,16 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int fastScanLiteralContent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int fastScanSpace();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int fastScanContentCharList();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int fastScanName(int *prefix = nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    struct FastScanNameResult {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        FastScanNameResult() : ok(false) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        explicit FastScanNameResult(int len) : addToLen(len), ok(true) { }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        operator bool() { return ok; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        int operator*() { Q_ASSERT(ok); return addToLen; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        int addToLen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        bool ok;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    FastScanNameResult fastScanName(Value *val = nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     inline int fastScanNMTOKEN();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -525,6 +534,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void raiseError(QXmlStreamReader::Error error, const QString& message = QString());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void raiseWellFormedError(const QString &message);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    void raiseNamePrefixTooLongError();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QXmlStreamEntityResolver *entityResolver;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1811,7 +1821,12 @@ space_opt ::= space;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ qname ::= LETTER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case $rule_number: {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sym(1).len += fastScanName(&sym(1).prefix);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            Value &val = sym(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (auto res = fastScanName(&val))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                val.len += *res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (atEnd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 resume($rule_number);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1822,7 +1837,11 @@ qname ::= LETTER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ name ::= LETTER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case $rule_number:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sym(1).len += fastScanName();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (auto res = fastScanName())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                sym(1).len += *res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (atEnd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 resume($rule_number);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e5bde7b98e..b01484cac3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1005,7 +1005,16 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int fastScanLiteralContent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int fastScanSpace();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int fastScanContentCharList();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    int fastScanName(int *prefix = nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    struct FastScanNameResult {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        FastScanNameResult() : ok(false) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        explicit FastScanNameResult(int len) : addToLen(len), ok(true) { }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        operator bool() { return ok; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        int operator*() { Q_ASSERT(ok); return addToLen; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        int addToLen;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        bool ok;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    FastScanNameResult fastScanName(Value *val = nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     inline int fastScanNMTOKEN();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1014,6 +1023,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void raiseError(QXmlStreamReader::Error error, const QString& message = QString());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     void raiseWellFormedError(const QString &message);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    void raiseNamePrefixTooLongError();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QXmlStreamEntityResolver *entityResolver;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1939,7 +1949,12 @@ bool QXmlStreamReaderPrivate::parse()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case 262: {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sym(1).len += fastScanName(&sym(1).prefix);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            Value &val = sym(1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (auto res = fastScanName(&val))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                val.len += *res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (atEnd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 resume(262);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1947,7 +1962,11 @@ bool QXmlStreamReaderPrivate::parse()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case 263:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sym(1).len += fastScanName();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (auto res = fastScanName())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                sym(1).len += *res;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (atEnd) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 resume(263);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt5/files/CVE-2023-38197-qtbase-5.15.diff b/aqua/qt5/files/CVE-2023-38197-qtbase-5.15.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..93166cef162
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt5/files/CVE-2023-38197-qtbase-5.15.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,219 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bf8a2a9..6ab5d49 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -160,7 +160,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     addData() or by waiting for it to arrive on the device().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     \value UnexpectedElementError The parser encountered an element
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    that was different to those it expected.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    or token that was different to those it expected.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -295,13 +295,34 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   QXmlStreamReader is a well-formed XML 1.0 parser that does \e not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   include external parsed entities. As long as no error occurs, the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  application code can thus be assured that the data provided by the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  stream reader satisfies the W3C's criteria for well-formed XML. For
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  example, you can be certain that all tags are indeed nested and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  closed properly, that references to internal entities have been
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  replaced with the correct replacement text, and that attributes have
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  been normalized or added according to the internal subset of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  DTD.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  application code can thus be assured, that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li the data provided by the stream reader satisfies the W3C's
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      criteria for well-formed XML,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li tokens are provided in a valid order.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \endlist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  Unless QXmlStreamReader raises an error, it guarantees the following:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li All tags are nested and closed properly.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li References to internal entities have been replaced with the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      correct replacement text.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li Attributes have been normalized or added according to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      internal subset of the \l DTD.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li Tokens of type \l StartDocument happen before all others,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      aside from comments and processing instructions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li At most one DOCTYPE element (a token of type \l DTD) is present.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \li If present, the DOCTYPE appears before all other elements,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      aside from StartDocument, comments and processing instructions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \endlist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  In particular, once any token of type \l StartElement, \l EndElement,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \l Characters, \l EntityReference or \l EndDocument is seen, no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  tokens of type StartDocument or DTD will be seen. If one is present in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  the input stream, out of order, an error is raised.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  \note The token types \l Comment and \l ProcessingInstruction may appear
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  anywhere in the stream.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   If an error occurs while parsing, atEnd() and hasError() return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   true, and error() returns the error that occurred. The functions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -620,6 +641,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         d->token = -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return readNext();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    d->checkToken();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return d->type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -740,6 +762,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const char QXmlStreamReader_XmlContextString[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "Prolog\0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    "Body\0";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const short QXmlStreamReader_XmlContextString_indices[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    0, 7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     \property  QXmlStreamReader::namespaceProcessing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     The namespace-processing flag of the stream reader
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -775,6 +805,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          QXmlStreamReader_tokenTypeString_indices[d->type]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \internal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \return \param ctxt (Prolog/Body) as a string.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++QString contextString(QXmlStreamReaderPrivate::XmlContext ctxt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return QLatin1String(QXmlStreamReader_XmlContextString +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                         QXmlStreamReader_XmlContextString_indices[static_cast<int>(ctxt)]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif // QT_NO_XMLSTREAMREADER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QXmlStreamPrivateTagStack::QXmlStreamPrivateTagStack()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -866,6 +906,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     type = QXmlStreamReader::NoToken;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     error = QXmlStreamReader::NoError;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    currentContext = XmlContext::Prolog;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    foundDTD = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4061,6 +4103,92 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static bool isTokenAllowedInContext(QXmlStreamReader::TokenType type,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                               QXmlStreamReaderPrivate::XmlContext loc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    switch (type) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::StartDocument:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::DTD:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return loc == QXmlStreamReaderPrivate::XmlContext::Prolog;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::StartElement:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::EndElement:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::Characters:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::EntityReference:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::EndDocument:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return loc == QXmlStreamReaderPrivate::XmlContext::Body;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::Comment:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::ProcessingInstruction:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::NoToken:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case QXmlStreamReader::Invalid:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \internal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \brief QXmlStreamReader::isValidToken
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \return \c true if \param type is a valid token type.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \return \c false if \param type is an unexpected token,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   which indicates a non-well-formed or invalid XML stream.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++bool QXmlStreamReaderPrivate::isValidToken(QXmlStreamReader::TokenType type)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Don't change currentContext, if Invalid or NoToken occur in the prolog
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (type == QXmlStreamReader::Invalid || type == QXmlStreamReader::NoToken)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // If a token type gets rejected in the body, there is no recovery
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const bool result = isTokenAllowedInContext(type, currentContext);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (result || currentContext == XmlContext::Body)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // First non-Prolog token observed => switch context to body and check again.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    currentContext = XmlContext::Body;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return isTokenAllowedInContext(type, currentContext);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   \internal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   Checks token type and raises an error, if it is invalid
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   in the current context (prolog/body).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++void QXmlStreamReaderPrivate::checkToken()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    Q_Q(QXmlStreamReader);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // The token type must be consumed, to keep track if the body has been reached.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const XmlContext context = currentContext;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const bool ok = isValidToken(type);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Do nothing if an error has been raised already (going along with an unexpected token)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (error != QXmlStreamReader::Error::NoError)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!ok) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        raiseError(QXmlStreamReader::UnexpectedElementError,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   QLatin1String("Unexpected token type %1 in %2.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   .arg(q->tokenString(), contextString(context)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (type != QXmlStreamReader::DTD)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    // Raise error on multiple DTD tokens
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (foundDTD) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        raiseError(QXmlStreamReader::UnexpectedElementError,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   QLatin1String("Found second DTD token in %1.").arg(contextString(context)));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        foundDTD = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  \fn bool QXmlStreamAttributes::hasAttribute(const QString &qualifiedName) const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  \since 4.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8f7c9e0..708059b 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/corelib/serialization/qxmlstream_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -804,6 +804,17 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool atEnd;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    enum class XmlContext
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        Prolog,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        Body,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    XmlContext currentContext = XmlContext::Prolog;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bool foundDTD = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    bool isValidToken(QXmlStreamReader::TokenType type);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    void checkToken();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /*!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       \sa setType()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      */
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt5/files/qtbase-5.15.9-work-around-pyside2-brokenness.patch b/aqua/qt5/files/qtbase-5.15.9-work-around-pyside2-brokenness.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..96c6c8c0547
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt5/files/qtbase-5.15.9-work-around-pyside2-brokenness.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,136 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From https://github.com/OpenMandrivaAssociation/qt5-qtbase/commit/20f97a4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -up qtbase-everywhere-src-5.15.9/src/gui/kernel/qevent.h.5~ qtbase-everywhere-src-5.15.9/src/gui/kernel/qevent.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/kernel/qevent.h.5~     2023-03-23 20:06:47.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/kernel/qevent.h        2023-04-15 23:23:40.599956996 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -104,15 +104,15 @@ protected:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_GUI_EXPORT QMouseEvent : public QInputEvent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QMouseEvent(Type type, const QPointF &localPos, Qt::MouseButton button,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QMouseEvent(QEvent::Type type, const QPointF &localPos, Qt::MouseButton button,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QMouseEvent(Type type, const QPointF &localPos, const QPointF &screenPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QMouseEvent(QEvent::Type type, const QPointF &localPos, const QPointF &screenPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 Qt::MouseButton button, Qt::MouseButtons buttons,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 Qt::KeyboardModifiers modifiers);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QMouseEvent(Type type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QMouseEvent(QEvent::Type type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 Qt::MouseButton button, Qt::MouseButtons buttons,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 Qt::KeyboardModifiers modifiers);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QMouseEvent(Type type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QMouseEvent(QEvent::Type type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 Qt::MouseButton button, Qt::MouseButtons buttons,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QMouseEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -154,7 +154,7 @@ protected:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_GUI_EXPORT QHoverEvent : public QInputEvent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QHoverEvent(Type type, const QPointF &pos, const QPointF &oldPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QHoverEvent(QEvent::Type type, const QPointF &pos, const QPointF &oldPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QHoverEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef QT_NO_INTEGER_EVENT_COORDINATES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -282,12 +282,12 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if QT_DEPRECATED_SINCE(5, 15)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // Actually deprecated since 5.4, in docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QT_DEPRECATED_VERSION_X_5_15("Use the other QTabletEvent constructor")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QTabletEvent(Type t, const QPointF &pos, const QPointF &globalPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QTabletEvent(QEvent::Type t, const QPointF &pos, const QPointF &globalPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  int device, int pointerType, qreal pressure, int xTilt, int yTilt,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  qreal tangentialPressure, qreal rotation, int z,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  Qt::KeyboardModifiers keyState, qint64 uniqueID); // ### remove in Qt 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QTabletEvent(Type t, const QPointF &pos, const QPointF &globalPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QTabletEvent(QEvent::Type t, const QPointF &pos, const QPointF &globalPos,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  int device, int pointerType, qreal pressure, int xTilt, int yTilt,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  qreal tangentialPressure, qreal rotation, int z,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  Qt::KeyboardModifiers keyState, qint64 uniqueID,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -377,9 +377,9 @@ protected:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_GUI_EXPORT QKeyEvent : public QInputEvent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers, const QString& text = QString(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString& text = QString(),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               bool autorep = false, ushort count = 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    QKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               const QString &text = QString(), bool autorep = false, ushort count = 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QKeyEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -399,7 +399,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // Functions for the extended key event information
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if QT_DEPRECATED_SINCE(5, 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    static inline QKeyEvent *createExtendedKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    static inline QKeyEvent *createExtendedKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                              quint32 nativeScanCode, quint32 nativeVirtualKey,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                              quint32 nativeModifiers,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                              const QString& text = QString(), bool autorep = false,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -682,7 +682,7 @@ class Q_GUI_EXPORT QDragMoveEvent : publ
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QDragMoveEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                   Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Type type = DragMove);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                   Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = QEvent::DragMove);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QDragMoveEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     inline QRect answerRect() const { return rect; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -up qtbase-everywhere-src-5.15.9/src/widgets/graphicsview/qgraphicssceneevent.h.5~ qtbase-everywhere-src-5.15.9/src/widgets/graphicsview/qgraphicssceneevent.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/widgets/graphicsview/qgraphicssceneevent.h.5~      2023-03-23 20:06:47.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/widgets/graphicsview/qgraphicssceneevent.h 2023-04-15 23:22:38.038387091 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -82,7 +82,7 @@ class QGraphicsSceneMouseEventPrivate;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_WIDGETS_EXPORT QGraphicsSceneMouseEvent : public QGraphicsSceneEvent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    explicit QGraphicsSceneMouseEvent(Type type = None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    explicit QGraphicsSceneMouseEvent(QEvent::Type type = QEvent::None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QGraphicsSceneMouseEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QPointF pos() const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -136,7 +136,7 @@ class QGraphicsSceneWheelEventPrivate;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_WIDGETS_EXPORT QGraphicsSceneWheelEvent : public QGraphicsSceneEvent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    explicit QGraphicsSceneWheelEvent(Type type = None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    explicit QGraphicsSceneWheelEvent(QEvent::Type type = QEvent::None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QGraphicsSceneWheelEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QPointF pos() const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -171,7 +171,7 @@ class Q_WIDGETS_EXPORT QGraphicsSceneCon
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     enum Reason { Mouse, Keyboard, Other };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    explicit QGraphicsSceneContextMenuEvent(Type type = None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    explicit QGraphicsSceneContextMenuEvent(QEvent::Type type = QEvent::None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QGraphicsSceneContextMenuEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QPointF pos() const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -198,7 +198,7 @@ class QGraphicsSceneHoverEventPrivate;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_WIDGETS_EXPORT QGraphicsSceneHoverEvent : public QGraphicsSceneEvent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    explicit QGraphicsSceneHoverEvent(Type type = None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    explicit QGraphicsSceneHoverEvent(QEvent::Type type = QEvent::None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QGraphicsSceneHoverEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QPointF pos() const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -231,7 +231,7 @@ class QGraphicsSceneHelpEventPrivate;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_WIDGETS_EXPORT QGraphicsSceneHelpEvent : public QGraphicsSceneEvent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    explicit QGraphicsSceneHelpEvent(Type type = None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    explicit QGraphicsSceneHelpEvent(QEvent::Type type = QEvent::None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QGraphicsSceneHelpEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QPointF scenePos() const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -249,7 +249,7 @@ class QGraphicsSceneDragDropEventPrivate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class Q_WIDGETS_EXPORT QGraphicsSceneDragDropEvent : public QGraphicsSceneEvent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    explicit QGraphicsSceneDragDropEvent(Type type = None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    explicit QGraphicsSceneDragDropEvent(QEvent::Type type = QEvent::None);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ~QGraphicsSceneDragDropEvent();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QPointF pos() const;
</span>\ No newline at end of file
</pre><pre style='margin:0'>

</pre>