Date: Saturday, August 14, 2021 @ 08:13:16
  Author: arojas
Revision: 422077

Fix issues with MariaDB 10.6 (FS#71753 FS#71582)

Added:
  qt5-base/trunk/qtbug-95639.patch
Modified:
  qt5-base/trunk/PKGBUILD

-------------------+
 PKGBUILD          |    9 ++++--
 qtbug-95639.patch |   77 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 83 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2021-08-13 21:53:44 UTC (rev 422076)
+++ PKGBUILD    2021-08-14 08:13:16 UTC (rev 422077)
@@ -4,7 +4,7 @@
 pkgbase=qt5-base
 pkgname=(qt5-base qt5-xcb-private-headers)
 pkgver=5.15.2+kde+r215
-pkgrel=1
+pkgrel=2
 _commit=2583b4f9397d60c4dd8403ca18c9df5bdf1c5583
 arch=('x86_64')
 url='https://www.qt.io'
@@ -30,10 +30,12 @@
 _pkgfqn=qtbase
 source=(git+https://invent.kde.org/qt/qt/$_pkgfqn#commit=$_commit
         qt5-base-cflags.patch
-        qt5-base-nostrip.patch)
+        qt5-base-nostrip.patch
+        qtbug-95639.patch)
 sha256sums=('SKIP'
             'cf707cd970650f8b60f8897692b36708ded9ba116723ec8fcd885576783fe85c'
-            '4b93f6a79039e676a56f9d6990a324a64a36f143916065973ded89adc621e094')
+            '4b93f6a79039e676a56f9d6990a324a64a36f143916065973ded89adc621e094'
+            '562e4ff501d52326658af751a596b948113271774cfa6692f1db0c7cf6609fa4')
 
 pkgver() {
   cd $_pkgfqn
@@ -47,6 +49,7 @@
 
   patch -p1 < ../qt5-base-cflags.patch # Use system CFLAGS in qmake
   patch -p1 < ../qt5-base-nostrip.patch # Don't strip binaries with qmake
+  patch -p1 < ../qtbug-95639.patch # Fix issues with MariaDB 10.6
 }
 
 build() {

Added: qtbug-95639.patch
===================================================================
--- qtbug-95639.patch                           (rev 0)
+++ qtbug-95639.patch   2021-08-14 08:13:16 UTC (rev 422077)
@@ -0,0 +1,77 @@
+diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp 
b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
+index a641935dc5..b1cf4548d1 100644
+--- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
++++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
+@@ -209,7 +209,7 @@ public:
+     struct QMyField
+     {
+         char *outField = nullptr;
+-        MYSQL_FIELD *myField = nullptr;
++        const MYSQL_FIELD *myField = nullptr;
+         QMetaType::Type type = QMetaType::UnknownType;
+         my_bool nullIndicator = false;
+         ulong bufLength = 0ul;
+@@ -346,14 +346,10 @@ static bool qIsInteger(int t)
+ 
+ void QMYSQLResultPrivate::bindBlobs()
+ {
+-    int i;
+-    MYSQL_FIELD *fieldInfo;
+-    MYSQL_BIND *bind;
+-
+-    for(i = 0; i < fields.count(); ++i) {
+-        fieldInfo = fields.at(i).myField;
++    for(int i = 0; i < fields.count(); ++i) {
++        const MYSQL_FIELD *fieldInfo = fields.at(i).myField;
+         if (qIsBlob(inBinds[i].buffer_type) && meta && fieldInfo) {
+-            bind = &inBinds[i];
++            MYSQL_BIND *bind = &inBinds[i];
+             bind->buffer_length = fieldInfo->max_length;
+             delete[] static_cast<char*>(bind->buffer);
+             bind->buffer = new char[fieldInfo->max_length];
+@@ -378,35 +374,32 @@ bool QMYSQLResultPrivate::bindInValues()
+     inBinds = new MYSQL_BIND[fields.size()];
+     memset(inBinds, 0, fields.size() * sizeof(MYSQL_BIND));
+ 
+-    MYSQL_FIELD *fieldInfo;
++    const MYSQL_FIELD *fieldInfo;
+ 
+     while((fieldInfo = mysql_fetch_field(meta))) {
++        MYSQL_BIND *bind = &inBinds[i];
++
+         QMyField &f = fields[i];
+         f.myField = fieldInfo;
+-
++        bind->buffer_length = f.bufLength = fieldInfo->length + 1;
++        bind->buffer_type = fieldInfo->type;
+         f.type = qDecodeMYSQLType(fieldInfo->type, fieldInfo->flags);
+         if (qIsBlob(fieldInfo->type)) {
+             // the size of a blob-field is available as soon as we call
+             // mysql_stmt_store_result()
+             // after mysql_stmt_exec() in QMYSQLResult::exec()
+-            fieldInfo->length = 0;
++            bind->buffer_length = f.bufLength = 0;
+             hasBlobs = true;
+         } else if (qIsInteger(f.type)) {
+-            fieldInfo->length = 8;
++            bind->buffer_length = f.bufLength = 8;
+         } else {
+-            fieldInfo->type = MYSQL_TYPE_STRING;
++            bind->buffer_type = MYSQL_TYPE_STRING;
+         }
+-        bind = &inBinds[i];
+-        field = new char[fieldInfo->length + 1];
+-        memset(field, 0, fieldInfo->length + 1);
+-
+-        bind->buffer_type = fieldInfo->type;
+-        bind->buffer = field;
+-        bind->buffer_length = f.bufLength = fieldInfo->length + 1;
+         bind->is_null = &f.nullIndicator;
+         bind->length = &f.bufLength;
+         bind->is_unsigned = fieldInfo->flags & UNSIGNED_FLAG ? 1 : 0;
+-        f.outField=field;
++        char *field = new char[bind->buffer_length + 1]{};
++        bind->buffer = f.outField = field;
+ 
+         ++i;
+     }

Reply via email to