qt bug 提交
场景:发现QT 库的重大bug 了,如何向QT委员会提交意见
发现QT 库的重大bug 了,怎么向QT委员会提交意见?
发现了QT 的重大bug ,位于
文件 qsql_odbc.cpp ;
bool QODBCResult::exec();
这个函数里面
见 这部分:
case QVariant::String:
if (d->unicode) {
QString str = val.toString();
if (*ind != SQL_NULL_DATA)
*ind = str.length() * sizeof(SQLTCHAR);
SQLSMALLINT fSQLSMALLINT = qParamType[(QFlag)(bindValueType(i)) & QSql::InOut];
if (bindValueType(i) & QSql::Out) {
QVarLengthArray<SQLTCHAR> ba(toSQLTCHAR(str));
ba.reserve(str.capacity());
r = SQLBindParameter(d->hStmt,
i + 1,
qParamType[(QFlag)(bindValueType(i)) & QSql::InOut],
SQL_C_TCHAR,
strSize > 254 ? SQL_WLONGVARCHAR : SQL_WVARCHAR,
0,// god knows... don't change this!
0,
(void *)ba.constData(),
ba.size()*sizeof(SQLTCHAR),
ind);
tmpStorage.append(QByteArray((const char *)ba.constData(), ba.size()*sizeof(SQLTCHAR)));
break;
}
这段代码是有问题的。
QVarLengthArray<SQLTCHAR> ba(toSQLTCHAR(str));
这里申请的 ba
SQLBindParameter(。。。。。。(void *)ba.constData(),)
放在这里调用。
假如 这个地方是一个传出参数。
那么以后将读不到 这个变量,因为 这个一个局部变量。
tmpStorage.append(QByteArray((const char *)ba.constData(), ba.size()*sizeof(SQLTCHAR)));
break;
这里其实没有什么用,tmpStorage 保存的只是 ba的复制品,不是ba本身。 当 SQLBindParameter 是要从数据库读取数据的时候,其内容是复制到了 ba 本身,而不会影响到 tmpStorage。
谁能帮我把这个bug 提交到 QT bug 委员会啊。。。。。。
------解决方案--------------------
https://bugreports.qt.nokia.com//secure/Dashboard.jspa
------解决方案--------------------
容器都是使用引用计数的。
我没看出来是BUG。
------解决方案--------------------
发现QT 库的重大bug 了,怎么向QT委员会提交意见?
发现了QT 的重大bug ,位于
文件 qsql_odbc.cpp ;
bool QODBCResult::exec();
这个函数里面
见 这部分:
case QVariant::String:
if (d->unicode) {
QString str = val.toString();
if (*ind != SQL_NULL_DATA)
*ind = str.length() * sizeof(SQLTCHAR);
SQLSMALLINT fSQLSMALLINT = qParamType[(QFlag)(bindValueType(i)) & QSql::InOut];
if (bindValueType(i) & QSql::Out) {
QVarLengthArray<SQLTCHAR> ba(toSQLTCHAR(str));
ba.reserve(str.capacity());
r = SQLBindParameter(d->hStmt,
i + 1,
qParamType[(QFlag)(bindValueType(i)) & QSql::InOut],
SQL_C_TCHAR,
strSize > 254 ? SQL_WLONGVARCHAR : SQL_WVARCHAR,
0,// god knows... don't change this!
0,
(void *)ba.constData(),
ba.size()*sizeof(SQLTCHAR),
ind);
tmpStorage.append(QByteArray((const char *)ba.constData(), ba.size()*sizeof(SQLTCHAR)));
break;
}
这段代码是有问题的。
QVarLengthArray<SQLTCHAR> ba(toSQLTCHAR(str));
这里申请的 ba
SQLBindParameter(。。。。。。(void *)ba.constData(),)
放在这里调用。
假如 这个地方是一个传出参数。
那么以后将读不到 这个变量,因为 这个一个局部变量。
tmpStorage.append(QByteArray((const char *)ba.constData(), ba.size()*sizeof(SQLTCHAR)));
break;
这里其实没有什么用,tmpStorage 保存的只是 ba的复制品,不是ba本身。 当 SQLBindParameter 是要从数据库读取数据的时候,其内容是复制到了 ba 本身,而不会影响到 tmpStorage。
谁能帮我把这个bug 提交到 QT bug 委员会啊。。。。。。
------解决方案--------------------
https://bugreports.qt.nokia.com//secure/Dashboard.jspa
------解决方案--------------------
容器都是使用引用计数的。
我没看出来是BUG。
------解决方案--------------------