summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-10-30 06:52:03 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-10-30 06:52:03 +0100
commitc51ca1d1b232ce1d6eaa9c6dd85de127e825d3af (patch)
tree7fe1901da1b8272f8a07226fb67986b5b83bda39
parentbe73bdc5d2491d036e5a6334dada453ed808dbc0 (diff)
parenta7a24784eeba6747d319eb911583bdd99ef38cdb (diff)
Merge remote-tracking branch 'origin/5.13.2' into 5.13
-rw-r--r--.qmake.conf2
-rw-r--r--dist/changes-5.13.269
-rw-r--r--mkspecs/features/mac/default_post.prf31
-rw-r--r--mkspecs/win32-icc/qmake.conf2
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp6
-rw-r--r--src/corelib/tools/qsimd_p.h2
-rw-r--r--src/network/ssl/qsslsocket_schannel.cpp3
-rw-r--r--src/platformsupport/fbconvenience/qfbvthandler.cpp4
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm36
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm2
-rw-r--r--src/plugins/platforms/ios/qioscontext.mm7
-rw-r--r--src/plugins/platforms/ios/quiview.mm12
-rw-r--r--src/tools/qfloat16-tables/gen_qfloat16_tables.cpp4
-rw-r--r--tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp49
14 files changed, 188 insertions, 41 deletions
diff --git a/.qmake.conf b/.qmake.conf
index a4cd16555d..c3e87640c3 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -4,4 +4,4 @@ CONFIG += warning_clean
QT_SOURCE_TREE = $$PWD
QT_BUILD_TREE = $$shadowed($$PWD)
-MODULE_VERSION = 5.13.1
+MODULE_VERSION = 5.13.2
diff --git a/dist/changes-5.13.2 b/dist/changes-5.13.2
new file mode 100644
index 0000000000..e23b5fdaa6
--- /dev/null
+++ b/dist/changes-5.13.2
@@ -0,0 +1,69 @@
+Qt 5.13.2 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.13.0 through 5.13.1.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.13 series is binary compatible with the 5.12.x series.
+Applications compiled for 5.12 will continue to run with 5.13.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* QtCore *
+****************************************************************************
+
+ - Fixed a bug that made qErrnoWarning() say there was no error when
+ generating the error message.
+
+ - QBitArray:
+ * Fixed two bugs that caused QBitArrays created using fromBits() not to
+ compare equal to the equivalent QBitArray created using other methods
+ if the size was zero or not a multiple of 4. If the size modulus 8 was
+ 5, 6, or 7, the data was actually incorrect.
+
+ - QCryptographicHash:
+ * Fixed a bug that caused the SHA-3 and Keccak algorithms to crash if
+ passed 256 MB of data or more.
+
+ - QObject:
+ * Fixed a resource leak caused by a race condition if multiple QObjects
+ were created at the same time, for the first time in an application,
+ from multiple threads (implies threads not started with QThread).
+
+****************************************************************************
+* QtGui *
+****************************************************************************
+
+ - Text:
+ * [QTBUG-69546] Fixed a crash bug in
+ QTextDocument::clearUndoRedoStacks(QTextDocument::UndoStack).
+
+****************************************************************************
+* QtSQL *
+****************************************************************************
+
+ - sqlite:
+ * Updated to v3.29.0
+
+****************************************************************************
+* Platform-Specific Changes *
+****************************************************************************
+
+ - Linux:
+ * [QTBUG-61916] Added an environment variable
+ QT_QPA_PRESERVE_CONSOLE_STATE that can be used to prevent Qt from
+ altering the tty screen and cursor settings when running with
+ platforms like linuxfb and eglfs.
+
+ - Android:
+ * [QTBUG-76036] Fixed an issue where menus would not work on 64 bit
+ builds.
diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf
index 26bd3e2e98..993f4d56a9 100644
--- a/mkspecs/features/mac/default_post.prf
+++ b/mkspecs/features/mac/default_post.prf
@@ -97,21 +97,22 @@ macx-xcode {
qmake_pkginfo_typeinfo.value = "????"
QMAKE_MAC_XCODE_SETTINGS += qmake_pkginfo_typeinfo
- !isEmpty(VERSION) {
- l = $$split(VERSION, '.') 0 0 # make sure there are at least three
- VER_MAJ = $$member(l, 0, 0)
- VER_MIN = $$member(l, 1, 1)
- VER_PAT = $$member(l, 2, 2)
- unset(l)
-
- qmake_full_version.name = QMAKE_FULL_VERSION
- qmake_full_version.value = $${VER_MAJ}.$${VER_MIN}.$${VER_PAT}
- QMAKE_MAC_XCODE_SETTINGS += qmake_full_version
-
- qmake_short_version.name = QMAKE_SHORT_VERSION
- qmake_short_version.value = $${VER_MAJ}.$${VER_MIN}
- QMAKE_MAC_XCODE_SETTINGS += qmake_short_version
- }
+ bundle_version = $$VERSION
+ isEmpty(bundle_version): bundle_version = 1.0.0
+
+ l = $$split(bundle_version, '.') 0 0 # make sure there are at least three
+ VER_MAJ = $$member(l, 0, 0)
+ VER_MIN = $$member(l, 1, 1)
+ VER_PAT = $$member(l, 2, 2)
+ unset(l)
+
+ qmake_full_version.name = QMAKE_FULL_VERSION
+ qmake_full_version.value = $${VER_MAJ}.$${VER_MIN}.$${VER_PAT}
+ QMAKE_MAC_XCODE_SETTINGS += qmake_full_version
+
+ qmake_short_version.name = QMAKE_SHORT_VERSION
+ qmake_short_version.value = $${VER_MAJ}.$${VER_MIN}
+ QMAKE_MAC_XCODE_SETTINGS += qmake_short_version
!isEmpty(QMAKE_XCODE_DEBUG_INFORMATION_FORMAT) {
debug_information_format.name = DEBUG_INFORMATION_FORMAT
diff --git a/mkspecs/win32-icc/qmake.conf b/mkspecs/win32-icc/qmake.conf
index 3cb0d58824..857959dc98 100644
--- a/mkspecs/win32-icc/qmake.conf
+++ b/mkspecs/win32-icc/qmake.conf
@@ -22,7 +22,7 @@ QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_DEBUG = $$QMAKE_CFLAGS_OPTIMIZE_DEBUG -Zi -MDd
QMAKE_CFLAGS_UTF8_SOURCE = -Qoption,cpp,--unicode_source_kind,UTF-8
QMAKE_CFLAGS_LTCG = -Qipo
-QMAKE_CFLAGS_DISABLE_LTCG = -Qno-ipo
+QMAKE_CFLAGS_DISABLE_LTCG = -Qipo-
QMAKE_CFLAGS_SSE2 = -QxSSE2
QMAKE_CFLAGS_SSE3 = -QxSSE3
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index df4876ace7..51d8002324 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -1569,12 +1569,14 @@ void VcprojGenerator::initExtraCompilerOutputs()
if (!outputVar.isEmpty() && otherFilters.contains(outputVar))
continue;
- QString tmp_out = project->first(outputs.first().toKey()).toQString();
+ QString tmp_out;
+ if (!outputs.isEmpty())
+ tmp_out = project->first(outputs.first().toKey()).toQString();
if (project->values(ProKey(*it + ".CONFIG")).indexOf("combine") != -1) {
// Combined output, only one file result
extraCompile.addFile(Option::fixPathToTargetOS(
replaceExtraCompilerVariables(tmp_out, QString(), QString(), NoShell), false));
- } else {
+ } else if (!inputVars.isEmpty()) {
// One output file per input
const ProStringList &tmp_in = project->values(inputVars.first().toKey());
for (int i = 0; i < tmp_in.count(); ++i) {
diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h
index d603631a24..397b0f55a6 100644
--- a/src/corelib/tools/qsimd_p.h
+++ b/src/corelib/tools/qsimd_p.h
@@ -346,7 +346,7 @@ extern Q_CORE_EXPORT QBasicAtomicInteger<unsigned> qt_cpu_features[2];
#endif
Q_CORE_EXPORT quint64 qDetectCpuFeatures();
-#if defined(Q_PROCESSOR_X86) && QT_COMPILER_SUPPORTS_HERE(RDRND)
+#if defined(Q_PROCESSOR_X86) && QT_COMPILER_SUPPORTS_HERE(RDRND) && !defined(QT_BOOTSTRAPPED)
Q_CORE_EXPORT qsizetype qRandomCpu(void *, qsizetype) Q_DECL_NOTHROW;
#else
static inline qsizetype qRandomCpu(void *, qsizetype) Q_DECL_NOTHROW
diff --git a/src/network/ssl/qsslsocket_schannel.cpp b/src/network/ssl/qsslsocket_schannel.cpp
index 339ecf4da2..46c109b6e5 100644
--- a/src/network/ssl/qsslsocket_schannel.cpp
+++ b/src/network/ssl/qsslsocket_schannel.cpp
@@ -974,6 +974,7 @@ bool QSslSocketBackendPrivate::performHandshake()
bool QSslSocketBackendPrivate::verifyHandshake()
{
Q_Q(QSslSocket);
+ sslErrors.clear();
const bool isClient = mode == QSslSocket::SslClientMode;
#define CHECK_STATUS(status) \
@@ -1062,7 +1063,7 @@ bool QSslSocketBackendPrivate::verifyHandshake()
}
// verifyCertContext returns false if the user disconnected while it was checking errors.
- if (certificateContext && sslErrors.isEmpty() && !verifyCertContext(certificateContext))
+ if (certificateContext && !verifyCertContext(certificateContext))
return false;
if (!checkSslErrors() || state != QAbstractSocket::ConnectedState) {
diff --git a/src/platformsupport/fbconvenience/qfbvthandler.cpp b/src/platformsupport/fbconvenience/qfbvthandler.cpp
index 7bb9e28ac2..8aab0bada4 100644
--- a/src/platformsupport/fbconvenience/qfbvthandler.cpp
+++ b/src/platformsupport/fbconvenience/qfbvthandler.cpp
@@ -70,6 +70,10 @@ QT_BEGIN_NAMESPACE
#ifdef VTH_ENABLED
static void setTTYCursor(bool enable)
{
+ static bool ignore = qEnvironmentVariableIntValue("QT_QPA_PRESERVE_CONSOLE_STATE");
+ if (ignore)
+ return;
+
const char * const devs[] = { "/dev/tty0", "/dev/tty", "/dev/console", 0 };
int fd = -1;
for (const char * const *dev = devs; *dev; ++dev) {
diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
index e8ea194897..c450e91d49 100644
--- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
+++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
@@ -478,30 +478,42 @@ QStringList QCoreTextFontDatabase::fallbacksForFamily(const QString &family, QFo
if (cascadeList) {
QStringList fallbackList;
const int numCascades = CFArrayGetCount(cascadeList);
+
+ int symbolIndex = -1;
+ int notoSansUniversalIndex = -1;
for (int i = 0; i < numCascades; ++i) {
CTFontDescriptorRef fontFallback = (CTFontDescriptorRef) CFArrayGetValueAtIndex(cascadeList, i);
QCFString fallbackFamilyName = (CFStringRef) CTFontDescriptorCopyAttribute(fontFallback, kCTFontFamilyNameAttribute);
- fallbackList.append(QString::fromCFString(fallbackFamilyName));
+
+ QString fallbackName = QString::fromCFString(fallbackFamilyName);
+ fallbackList.append(fallbackName);
+
+ if (!qt_isFontFamilyPopulated(fallbackName))
+ const_cast<QCoreTextFontDatabase *>(this)->populateFromDescriptor(fontFallback, fallbackName);
+
+ if (fallbackName == QLatin1String(".Apple Symbols Fallback"))
+ symbolIndex = fallbackList.size() - 1;
+ else if (fallbackName == QLatin1String(".Noto Sans Universal"))
+ notoSansUniversalIndex = fallbackList.size() - 1;
}
// .Apple Symbols Fallback will be at the beginning of the list and we will
// detect that this has glyphs for Arabic and other writing systems.
// Since it is a symbol font, it should be the last resort, so that
// the proper fonts for these writing systems are preferred.
- int symbolIndex = fallbackList.indexOf(QLatin1String(".Apple Symbols Fallback"));
- if (symbolIndex >= 0)
+ if (symbolIndex >= 0) {
fallbackList.move(symbolIndex, fallbackList.size() - 1);
+ if (notoSansUniversalIndex > symbolIndex)
+ --notoSansUniversalIndex;
+ }
- addExtraFallbacks(&fallbackList);
+ // .Noto Sans Universal appears to have a bug when the application
+ // does not have a valid Info.plist, which causes it to return glyph #4
+ // (a question mark) for any character.
+ if (notoSansUniversalIndex >= 0)
+ fallbackList.move(notoSansUniversalIndex, fallbackList.size() - 1);
- // Since iOS 13, the cascade list may contain meta-fonts which have not been
- // populated to the database, such as ".AppleJapaneseFont". It is important that we
- // include this in the fallback list, in order to get fallback support for all
- // languages
- for (const QString &fallback : fallbackList) {
- if (!qt_isFontFamilyPopulated(fallback))
- const_cast<QCoreTextFontDatabase *>(this)->populateFamily(fallback);
- }
+ addExtraFallbacks(&fallbackList);
extern QStringList qt_sort_families_by_writing_system(QChar::Script, const QStringList &);
fallbackList = qt_sort_families_by_writing_system(script, fallbackList);
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
index 072dd1a28a..30c80ebd86 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
@@ -471,7 +471,7 @@ void QCoreTextFontEngine::draw(CGContextRef ctx, qreal x, qreal y, const QTextIt
const qreal firstY = positions[0].y.toReal();
for (int i = 0; i < glyphs.size(); ++i) {
cgPositions[i].x = positions[i].x.toReal() - firstX;
- cgPositions[i].y = positions[i].y.toReal() - firstY;
+ cgPositions[i].y = firstY - positions[i].y.toReal();
cgGlyphs[i] = glyphs[i];
}
diff --git a/src/plugins/platforms/ios/qioscontext.mm b/src/plugins/platforms/ios/qioscontext.mm
index 535e7d7aa6..cecbb17039 100644
--- a/src/plugins/platforms/ios/qioscontext.mm
+++ b/src/plugins/platforms/ios/qioscontext.mm
@@ -332,11 +332,8 @@ bool QIOSContext::verifyGraphicsHardwareAvailability()
);
});
- if (applicationBackgrounded) {
- static const char warning[] = "OpenGL ES calls are not allowed while an application is backgrounded";
- Q_ASSERT_X(!applicationBackgrounded, "QIOSContext", warning);
- qCWarning(lcQpaGLContext, warning);
- }
+ if (applicationBackgrounded)
+ qCWarning(lcQpaGLContext, "OpenGL ES calls are not allowed while an application is backgrounded");
return !applicationBackgrounded;
}
diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm
index e64c05d099..4e3657ec37 100644
--- a/src/plugins/platforms/ios/quiview.mm
+++ b/src/plugins/platforms/ios/quiview.mm
@@ -628,6 +628,18 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
#endif
}
+#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(130000)
+- (void)addInteraction:(id<UIInteraction>)interaction
+{
+ if (__builtin_available(iOS 13.0, *)) {
+ if ([interaction isKindOfClass:UITextInteraction.class])
+ return; // Prevent iOS from adding UITextInteraction
+ }
+
+ [super addInteraction:interaction];
+}
+#endif
+
@end
@implementation UIView (QtHelpers)
diff --git a/src/tools/qfloat16-tables/gen_qfloat16_tables.cpp b/src/tools/qfloat16-tables/gen_qfloat16_tables.cpp
index 17fc978039..6f0997bc25 100644
--- a/src/tools/qfloat16-tables/gen_qfloat16_tables.cpp
+++ b/src/tools/qfloat16-tables/gen_qfloat16_tables.cpp
@@ -79,7 +79,7 @@ qint32 main(qint32 argc, char **argv)
fid.write("#include <QtCore/qfloat16.h>\n\n");
fid.write("QT_BEGIN_NAMESPACE\n\n");
- fid.write("#if !defined(__F16C__) && !defined(__ARM_FP16_FORMAT_IEEE)\n\n");
+ fid.write("#if !defined(__ARM_FP16_FORMAT_IEEE)\n\n");
fid.write("const quint32 qfloat16::mantissatable[2048] = {\n");
fid.write("0,\n");
@@ -156,7 +156,7 @@ qint32 main(qint32 argc, char **argv)
fid.write("};\n\n");
- fid.write("#endif // !__F16C__ && !__ARM_FP16_FORMAT_IEEE\n\n");
+ fid.write("#endif // !__ARM_FP16_FORMAT_IEEE\n\n");
fid.write("QT_END_NAMESPACE\n");
fid.close();
return 0;
diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index 66475e55ad..79ea505d11 100644
--- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -259,6 +259,8 @@ private slots:
void disabledProtocols_data();
void disabledProtocols();
+ void oldErrorsOnSocketReuse();
+
void setEmptyDefaultConfiguration(); // this test should be last
protected slots:
@@ -4192,6 +4194,53 @@ void tst_QSslSocket::disabledProtocols()
}
}
+void tst_QSslSocket::oldErrorsOnSocketReuse()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return; // not relevant
+ SslServer server;
+ server.protocol = QSsl::TlsV1_1;
+ server.m_certFile = testDataDir + "certs/fluke.cert";
+ server.m_keyFile = testDataDir + "certs/fluke.key";
+ QVERIFY(server.listen(QHostAddress::SpecialAddress::LocalHost));
+
+ QSslSocket socket;
+ socket.setProtocol(QSsl::TlsV1_1);
+ QList<QSslError> errorList;
+ auto connection = connect(&socket, QOverload<const QList<QSslError> &>::of(&QSslSocket::sslErrors),
+ [&socket, &errorList](const QList<QSslError> &errors) {
+ errorList += errors;
+ socket.ignoreSslErrors(errors);
+ socket.resume();
+ });
+
+ socket.connectToHostEncrypted(QString::fromLatin1("localhost"), server.serverPort());
+ QVERIFY(QTest::qWaitFor([&socket](){ return socket.isEncrypted(); }));
+ socket.disconnectFromHost();
+ if (socket.state() != QAbstractSocket::UnconnectedState) {
+ QVERIFY(QTest::qWaitFor(
+ [&socket](){
+ return socket.state() == QAbstractSocket::UnconnectedState;
+ }));
+ }
+
+ auto oldList = errorList;
+ errorList.clear();
+ server.close();
+ server.m_certFile = testDataDir + "certs/bogus-client.crt";
+ server.m_keyFile = testDataDir + "certs/bogus-client.key";
+ QVERIFY(server.listen(QHostAddress::SpecialAddress::LocalHost));
+
+ socket.connectToHostEncrypted(QString::fromLatin1("localhost"), server.serverPort());
+ QVERIFY(QTest::qWaitFor([&socket](){ return socket.isEncrypted(); }));
+
+ for (const auto &error : oldList) {
+ QVERIFY2(!errorList.contains(error),
+ "The new errors should not contain any of the old ones");
+ }
+}
+
#endif // QT_NO_SSL
QTEST_MAIN(tst_QSslSocket)