summarylogtreecommitdiffstats
path: root/qtbug-95639.patch
diff options
context:
space:
mode:
Diffstat (limited to 'qtbug-95639.patch')
-rw-r--r--qtbug-95639.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/qtbug-95639.patch b/qtbug-95639.patch
new file mode 100644
index 000000000000..1235a9fd24f0
--- /dev/null
+++ b/qtbug-95639.patch
@@ -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;
+ }