Date: Sun, 11 Jul 2021 16:12:04 GMT From: Adriaan de Groot <adridg@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: e093f1162c35 - main - databases/qt5-sqldrivers-mysql: fix against mysql 5.7.34 Message-ID: <202107111612.16BGC4tB026192@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by adridg: URL: https://cgit.FreeBSD.org/ports/commit/?id=e093f1162c353f3d62dce85e9e74053fc9a4743c commit e093f1162c353f3d62dce85e9e74053fc9a4743c Author: Adriaan de Groot <adridg@FreeBSD.org> AuthorDate: 2021-07-11 15:52:29 +0000 Commit: Adriaan de Groot <adridg@FreeBSD.org> CommitDate: 2021-07-11 16:12:01 +0000 databases/qt5-sqldrivers-mysql: fix against mysql 5.7.34 In mysql 5.7.34 binding a parameter to a 0-sized buffer triggers an assert() -- previously this was DBG_ASSERT. This triggers crashes in databases/akonadi in particular, which binds blobs of size 0. This patch allows akonadi with the default mysql to start (at all) again. The patch file previously held a Qt4-era patch which had long ago had a better patch applied upstream (the comment in the patch refers to that). The old stuff has been removed, leaving only the parameter-fix. --- databases/qt5-sqldrivers-mysql/Makefile | 1 + ...ch-src_plugins_sqldrivers_mysql_qsql__mysql.cpp | 77 +++++----------------- 2 files changed, 16 insertions(+), 62 deletions(-) diff --git a/databases/qt5-sqldrivers-mysql/Makefile b/databases/qt5-sqldrivers-mysql/Makefile index cb439f9671af..04a43c5fb77d 100644 --- a/databases/qt5-sqldrivers-mysql/Makefile +++ b/databases/qt5-sqldrivers-mysql/Makefile @@ -1,3 +1,4 @@ +PORTREVISION= 1 DB= MYSQL DB_DESC= MySQL diff --git a/databases/qt5-sqldrivers-mysql/files/patch-src_plugins_sqldrivers_mysql_qsql__mysql.cpp b/databases/qt5-sqldrivers-mysql/files/patch-src_plugins_sqldrivers_mysql_qsql__mysql.cpp index 00e133f9195f..d76cd1b67365 100644 --- a/databases/qt5-sqldrivers-mysql/files/patch-src_plugins_sqldrivers_mysql_qsql__mysql.cpp +++ b/databases/qt5-sqldrivers-mysql/files/patch-src_plugins_sqldrivers_mysql_qsql__mysql.cpp @@ -1,63 +1,16 @@ -https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-1.html - -Incompatible Change: The my_bool type is no longer used in MySQL -source code. Any third-party code that used this type to represent -C boolean variables should use the bool or int C type instead. - -Note -The change from my_bool to bool means that the mysql.h header file -now requires a C++ or C99 compiler to compile. - -(Bug #25597667) - -For Qt5, which requires C++11, the following line single-line -definition for mysql_bool is less-fragile and more C++y: - using mysql_bool = decltype(MYSQL_BIND::is_null_value); -This does not apply to the Qt4 port, which allows older compilers -and the less-fragile approach would therefore break on old-gcc-in-base -architectures. - ---- src/plugins/sqldrivers/mysql/qsql_mysql.cpp.orig 2020-03-11 15:29:12 UTC +--- src/plugins/sqldrivers/mysql/qsql_mysql.cpp.orig 2020-10-27 08:02:11 UTC +++ src/plugins/sqldrivers/mysql/qsql_mysql.cpp -@@ -71,6 +71,14 @@ Q_DECLARE_METATYPE(MYSQL_STMT*) - // by redefining it we can regain source compatibility. - using my_bool = decltype(mysql_stmt_bind_result(nullptr, nullptr)); - -+// MYSQL 8.0.1 no longer uses the my_bool type: -+// https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-1.html -+#if (MYSQL_VERSION_ID >= 80001) && !defined(MARIADB_BASE_VERSION) -+typedef bool mysql_bool; -+#else -+typedef my_bool mysql_bool; -+#endif -+ - QT_BEGIN_NAMESPACE - - class QMYSQLDriverPrivate : public QSqlDriverPrivate -@@ -930,7 +938,7 @@ bool QMYSQLResult::exec() - MYSQL_BIND* currBind; - QVector<MYSQL_TIME *> timeVector; - QVector<QByteArray> stringVector; -- QVector<my_bool> nullVector; -+ QVector<mysql_bool> nullVector; - - const QVector<QVariant> values = boundValues(); - -@@ -951,7 +959,7 @@ bool QMYSQLResult::exec() - - currBind = &d->outBinds[i]; - -- nullVector[i] = static_cast<my_bool>(val.isNull()); -+ nullVector[i] = static_cast<mysql_bool>(val.isNull()); - currBind->is_null = &nullVector[i]; - currBind->length = 0; - currBind->is_unsigned = 0; -@@ -1048,7 +1056,7 @@ bool QMYSQLResult::exec() - d->rowsAffected = mysql_stmt_affected_rows(d->stmt); - - if (isSelect()) { -- my_bool update_max_length = true; -+ mysql_bool update_max_length = true; - - r = mysql_stmt_bind_result(d->stmt, d->inBinds); - if (r != 0) { +@@ -352,11 +360,11 @@ void QMYSQLResultPrivate::bindBlobs() + + for(i = 0; i < fields.count(); ++i) { + fieldInfo = fields.at(i).myField; +- if (qIsBlob(inBinds[i].buffer_type) && meta && fieldInfo) { ++ if (qIsBlob(inBinds[i].buffer_type) && meta && fieldInfo && fieldInfo->max_length) { + bind = &inBinds[i]; + bind->buffer_length = fieldInfo->max_length; + delete[] static_cast<char*>(bind->buffer); +- bind->buffer = new char[fieldInfo->max_length]; ++ bind->buffer = new char[bind->buffer_length]; + fields[i].outField = static_cast<char*>(bind->buffer); + } + }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202107111612.16BGC4tB026192>