From caa4e449379bad1bd58332bce878f03aee6a4d36 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 8 Jun 2016 10:37:25 +0200 Subject: tst_QTcpSocket: Replace insignification on Windows by BLACKLIST. Partially reverts f3939d943ed132eaf3daead797d961c3ffbc31a5. Task-number: QTBUG-52714 Task-number: QTBUG-49332 Task-number: QTBUG-49333 Change-Id: I1f1b3278134b1e6156c0cb7006d396154c776a46 Reviewed-by: Timur Pocheptsov --- tests/auto/network/socket/qtcpsocket/BLACKLIST | 13 +++++++++++++ tests/auto/network/socket/qtcpsocket/test/test.pro | 2 -- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 tests/auto/network/socket/qtcpsocket/BLACKLIST (limited to 'tests/auto') diff --git a/tests/auto/network/socket/qtcpsocket/BLACKLIST b/tests/auto/network/socket/qtcpsocket/BLACKLIST new file mode 100644 index 0000000000..5fc2589323 --- /dev/null +++ b/tests/auto/network/socket/qtcpsocket/BLACKLIST @@ -0,0 +1,13 @@ +[bindThenResolveHost:first-fail] +windows +[bind:[::]] +windows +[bind:[::]:randomport] +windows +[invalidProxy:socks5-on-http] +windows +[disconnectWhileLookingUp] +windows +[timeoutConnect:ip] +windows +] diff --git a/tests/auto/network/socket/qtcpsocket/test/test.pro b/tests/auto/network/socket/qtcpsocket/test/test.pro index 325abcaab8..3e64b87b53 100644 --- a/tests/auto/network/socket/qtcpsocket/test/test.pro +++ b/tests/auto/network/socket/qtcpsocket/test/test.pro @@ -21,5 +21,3 @@ win32 { } else { DESTDIR = ../ } - -win32: CONFIG += insignificant_test # Hangs in release builds -- cgit v1.2.3 From 23173c725ce8b1c5b03498c9fa2bb334d40ec6f4 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Thu, 9 Jun 2016 10:36:50 +0200 Subject: QSslSocket (OpenSSL) - handle abort/close on sslErrors emitted If a user's code, attached to sslErrors signal, calls abort/close or disconnectFromHost but our SSL socket was configured not to verify a peer, no need to continue handshake after calling checkSslErrors (and finally crashing on invalid 'ssl' pointer). Task-number: QTBUG-53906 Change-Id: I7f185511d278f9d6f16e7d6c5ba424707141459c Reviewed-by: Edward Welbourne Reviewed-by: Timur Pocheptsov --- .../auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'tests/auto') diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index 257df13343..7846dc99c5 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -212,6 +212,7 @@ private slots: void ignoreSslErrorsList(); void ignoreSslErrorsListWithSlot_data(); void ignoreSslErrorsListWithSlot(); + void abortOnSslErrors(); void readFromClosedSocket(); void writeBigChunk(); void blacklistedCertificates(); @@ -250,6 +251,11 @@ protected slots: { socket->ignoreSslErrors(); } + void abortOnErrorSlot() + { + QSslSocket *sock = static_cast(sender()); + sock->abort(); + } void untrustedWorkaroundSlot(const QList &errors) { if (errors.size() == 1 && @@ -2311,6 +2317,27 @@ void tst_QSslSocket::ignoreSslErrorsListWithSlot() QSKIP("Skipping flaky test - See QTBUG-29941"); } +void tst_QSslSocket::abortOnSslErrors() +{ + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; + + SslServer server; + QVERIFY(server.listen()); + + QSslSocket clientSocket; + connect(&clientSocket, SIGNAL(sslErrors(QList)), this, SLOT(abortOnErrorSlot())); + clientSocket.connectToHostEncrypted("127.0.0.1", server.serverPort()); + clientSocket.ignoreSslErrors(); + + QEventLoop loop; + QTimer::singleShot(1000, &loop, SLOT(quit())); + loop.exec(); + + QCOMPARE(clientSocket.state(), QAbstractSocket::UnconnectedState); +} + // make sure a closed socket has no bytesAvailable() // related to https://bugs.webkit.org/show_bug.cgi?id=28016 void tst_QSslSocket::readFromClosedSocket() -- cgit v1.2.3 From 8e889378115c69508b050a511621ac8e30ec4158 Mon Sep 17 00:00:00 2001 From: Jesus Fernandez Date: Mon, 13 Jun 2016 19:09:15 +0200 Subject: Fix UNSIGNED values in QMYSQL The unsigned flag in columns was ignored when creating the list of bound values in a mysql table. So the result iteration with QSqlQuery::next stops after the first wrong truncated value. [ChangeLog][QtSql] Fixed QSqlQuery::prepare value truncation error when using UNSIGNED values in a MySQL database. Task-number: QTBUG-53969 Task-number: QTBUG-53237 Change-Id: I10d977993445f2794f1dd8c88b2e83517ef524f3 Reviewed-by: Milian Wolff --- tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'tests/auto') diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp index bd553d5ffd..f1c4333ccd 100644 --- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp @@ -233,6 +233,9 @@ private slots: void QTBUG_36211_data() { generic_data("QPSQL"); } void QTBUG_36211(); + void QTBUG_53969_data() { generic_data("QMYSQL"); } + void QTBUG_53969(); + void sqlite_constraint_data() { generic_data("QSQLITE"); } void sqlite_constraint(); @@ -3652,6 +3655,42 @@ void tst_QSqlQuery::QTBUG_36211() } } +void tst_QSqlQuery::QTBUG_53969() +{ + QFETCH( QString, dbName ); + QVector values = QVector() << 10 << 20 << 127 << 128 << 1, tableValues; + QSqlDatabase db = QSqlDatabase::database( dbName ); + CHECK_DATABASE( db ); + tableValues.reserve(values.size()); + if (tst_Databases::getDatabaseType(db) == QSqlDriver::MySqlServer) { + const QString tableName(qTableName("bug53969", __FILE__, db)); + tst_Databases::safeDropTable( db, tableName ); + + QSqlQuery q(db); + QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id INT AUTO_INCREMENT PRIMARY KEY, " + "test_number TINYINT(3) UNSIGNED)") + .arg(tableName))); + + QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (test_number) VALUES (:value)")); + + QVector::iterator begin = values.begin(), end = values.end(), it; + for (it = begin; it != end; ++it) { + q.bindValue(":value", *it); + QVERIFY_SQL(q, exec()); + } + + QVERIFY_SQL(q, prepare("SELECT test_number FROM " + tableName)); + QVERIFY_SQL(q, exec()); + + while (q.next()) { + bool ok; + tableValues.push_back(q.value(0).toUInt(&ok)); + QVERIFY(ok); + } + QCOMPARE(values, tableValues); + } +} + void tst_QSqlQuery::oraOCINumber() { QFETCH( QString, dbName ); -- cgit v1.2.3 From 17143bf47cc5d51ba4129f9e10a58964925fcc1b Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Wed, 18 May 2016 09:37:50 +0200 Subject: tst_QUdpSocket - remove insignificance This is the second attempt to remove 'insignificant' from UDP socket test to: - make changes ending up in regressions more difficult (hopefully impossible) to merge - switch to BLACKLIST if needed - make flaky tests more visible. For now this 'back to significant' will be accompanied by extended BLACKLIST. New in BLACKLIST: * OS X - datagram size-related problems (fixed in 5.7) * OS X - multicastLeaveAfterClose - will probably stay BLACKLISTED, seems to be a Darwin's quirk, can be fixed in OS X >= 10.10. * windows ... tst_QUdpSocket::echo seems to fail randomly on OS X/linux and it looks like it fails at the same time on different machines, should be something server-related (a guess only). Change-Id: Ib344348ffab03fab1b9309b80449a04d8ce247c6 Reviewed-by: Edward Welbourne Reviewed-by: Friedemann Kleint --- tests/auto/network/socket/qudpsocket/BLACKLIST | 22 +++++++++++++++++++--- tests/auto/network/socket/qudpsocket/test/test.pro | 2 -- 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/network/socket/qudpsocket/BLACKLIST b/tests/auto/network/socket/qudpsocket/BLACKLIST index 3e936aebf6..a245062df7 100644 --- a/tests/auto/network/socket/qudpsocket/BLACKLIST +++ b/tests/auto/network/socket/qudpsocket/BLACKLIST @@ -1,8 +1,24 @@ [multicast:same bind, group ipv6 address] * -[multicast:valid bind, group ipv6 address] +[multicast] osx -[multicast:dual bind, group ipv6 address] +[writeDatagramToNonExistingPeer] +windows osx -[multicast:same bind, group ipv4 address] +[asyncReadDatagram] +windows osx +[multicastLeaveAfterClose] +osx +[readyRead] +osx +[readyReadForEmptyDatagram] +osx +[echo] +linux +osx +[ipv6Loop] +osx +[loop] +osx + diff --git a/tests/auto/network/socket/qudpsocket/test/test.pro b/tests/auto/network/socket/qudpsocket/test/test.pro index 8ad16c652d..e4812416dc 100644 --- a/tests/auto/network/socket/qudpsocket/test/test.pro +++ b/tests/auto/network/socket/qudpsocket/test/test.pro @@ -22,5 +22,3 @@ wince* { } TARGET = tst_qudpsocket - -CONFIG+=insignificant_test # QTBUG-25367, QTBUG-25368 -- cgit v1.2.3 From c2b7841843f05fe902e6a94aee2c3f33b169009e Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Tue, 7 Jun 2016 16:52:13 +0200 Subject: Finally fix crash in inplace-modified data-constructed images Avoid all inplace modification of images using external data buffers. Since the QImage methods are documented to create a (modified) copy, there is afterwards no API requirement on the lifetime of the data buffer. This patch supersedes 509bc7e59c69937900cf258e64889a6e88edbcf0 Task-number: QTBUG-53721 Change-Id: I3ccc01619eb61d8630104449394e0b76df0af695 Reviewed-by: Friedemann Kleint Reviewed-by: Eskil Abrahamsen Blomfeldt --- tests/auto/gui/image/qimage/tst_qimage.cpp | 74 ++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 4 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index e8e1cd1896..435178a885 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -2447,6 +2447,35 @@ void tst_QImage::inplaceRgbSwapped() } QCOMPARE(imageSwapped.constScanLine(0), orginalPtr); + + for (int rw = 0; rw <= 1; rw++) { + // Test attempted inplace conversion of images created on existing buffer + uchar *volatileData = 0; + QImage orig = imageSwapped; + QImage dataSwapped; + { + QVERIFY(!orig.isNull()); + volatileData = new uchar[orig.byteCount()]; + memcpy(volatileData, orig.constBits(), orig.byteCount()); + + QImage dataImage; + if (rw) + dataImage = QImage(volatileData, orig.width(), orig.height(), orig.format()); + else + dataImage = QImage((const uchar *)volatileData, orig.width(), orig.height(), orig.format()); + + if (orig.colorCount()) + dataImage.setColorTable(orig.colorTable()); + + dataSwapped = std::move(dataImage).rgbSwapped(); + QVERIFY(!dataSwapped.isNull()); + delete[] volatileData; + } + + QVERIFY2(dataSwapped.constBits() != volatileData, rw ? "non-const" : "const"); + QCOMPARE(dataSwapped, orig.rgbSwapped()); + } + #endif } @@ -2529,6 +2558,35 @@ void tst_QImage::inplaceMirrored() } } QCOMPARE(imageMirrored.constScanLine(0), originalPtr); + + for (int rw = 0; rw <= 1; rw++) { + // Test attempted inplace conversion of images created on existing buffer + uchar *volatileData = 0; + QImage orig = imageMirrored; + QImage dataSwapped; + { + QVERIFY(!orig.isNull()); + volatileData = new uchar[orig.byteCount()]; + memcpy(volatileData, orig.constBits(), orig.byteCount()); + + QImage dataImage; + if (rw) + dataImage = QImage(volatileData, orig.width(), orig.height(), orig.format()); + else + dataImage = QImage((const uchar *)volatileData, orig.width(), orig.height(), orig.format()); + + if (orig.colorCount()) + dataImage.setColorTable(orig.colorTable()); + + dataSwapped = std::move(dataImage).mirrored(swap_horizontal, swap_vertical); + QVERIFY(!dataSwapped.isNull()); + delete[] volatileData; + } + + QVERIFY2(dataSwapped.constBits() != volatileData, rw ? "non-const" : "const"); + QCOMPARE(dataSwapped, orig.mirrored(swap_horizontal, swap_vertical)); + } + #endif } @@ -2680,16 +2738,24 @@ void tst_QImage::inplaceRgbConversion() static const quint32 readOnlyData[] = { 0xff0102ffU, 0xff0506ffU, 0xff0910ffU, 0xff1314ffU }; quint32 readWriteData[] = { 0xff0102ffU, 0xff0506ffU, 0xff0910ffU, 0xff1314ffU }; - QImage roImage((const uchar *)readOnlyData, 2, 2, format); - QImage roInplaceConverted = std::move(roImage).convertToFormat(dest_format); + QImage roInplaceConverted; + QImage rwInplaceConverted; + + { + QImage roImage((const uchar *)readOnlyData, 2, 2, format); + roInplaceConverted = std::move(roImage).convertToFormat(dest_format); - QImage rwImage((uchar *)readWriteData, 2, 2, format); - QImage rwInplaceConverted = std::move(rwImage).convertToFormat(dest_format); + QImage rwImage((uchar *)readWriteData, 2, 2, format); + rwInplaceConverted = std::move(rwImage).convertToFormat(dest_format); + } QImage roImage2((const uchar *)readOnlyData, 2, 2, format); QImage normalConverted = roImage2.convertToFormat(dest_format); + QVERIFY(roInplaceConverted.constBits() != (const uchar *)readOnlyData); QCOMPARE(normalConverted, roInplaceConverted); + + QVERIFY(rwInplaceConverted.constBits() != (const uchar *)readWriteData); QCOMPARE(normalConverted, rwInplaceConverted); } #endif -- cgit v1.2.3