summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-04-21 21:40:01 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2020-04-21 21:40:01 +0200
commita15c7260cc83707dcdd05d7d9c23317536601fdc (patch)
tree3f60e05467b1a9f38a692e37a4e44675baf71732
parent47eba459905ef884931aa1247c847f7a98a77b28 (diff)
parente10e5318bc02a48a866b76b6f0b7f268d16af642 (diff)
Merge remote-tracking branch 'origin/5.15' into 5.15.0
-rw-r--r--doc/global/externalsites/external-resources.qdoc16
-rw-r--r--mkspecs/common/ghs-integrity-armv8.conf12
-rw-r--r--mkspecs/devices/integrity-armv8-SA8155P/qmake.conf43
-rw-r--r--mkspecs/devices/integrity-armv8-SA8155P/qplatformdefs.h45
-rw-r--r--mkspecs/features/qt_common.prf3
-rw-r--r--mkspecs/features/resolve_target.prf12
-rw-r--r--qmake/doc/src/qmake-manual.qdoc188
-rw-r--r--src/3rdparty/sqlite/patches/0002-sqlite-Fix-CVE-2020-11655.patch30
-rw-r--r--src/3rdparty/sqlite/patches/0003-sqlite-Fix-CVE-2020-11656.patch63
-rw-r--r--src/3rdparty/sqlite/sqlite3.c19
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp24
-rw-r--r--src/corelib/global/qnamespace.qdoc2
-rw-r--r--src/corelib/global/qsystemdetection.h2
-rw-r--r--src/corelib/io/qfilesystemwatcher_inotify.cpp2
-rw-r--r--src/corelib/io/qfilesystemwatcher_kqueue.cpp2
-rw-r--r--src/corelib/io/qprocess_unix.cpp8
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.cpp2
-rw-r--r--src/corelib/kernel/qobject.cpp9
-rw-r--r--src/corelib/kernel/qsocketnotifier.cpp89
-rw-r--r--src/corelib/kernel/qsocketnotifier.h61
-rw-r--r--src/corelib/time/qtimezoneprivate_android.cpp42
-rw-r--r--src/corelib/tools/qline.cpp11
-rw-r--r--src/dbus/qdbusconnection_p.h6
-rw-r--r--src/dbus/qdbusintegrator.cpp4
-rw-r--r--src/gui/text/qtextmarkdownwriter.cpp19
-rw-r--r--src/network/socket/qlocalserver_unix.cpp4
-rw-r--r--src/network/socket/qlocalsocket_unix.cpp2
-rw-r--r--src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp2
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp35
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h3
-rw-r--r--src/plugins/platforms/openwfd/qopenwfddevice.cpp2
-rw-r--r--src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp2
-rw-r--r--src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp2
-rw-r--r--src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.cpp2
-rw-r--r--src/plugins/platforms/wasm/qwasmeventdispatcher.cpp2
-rw-r--r--src/plugins/platforms/xcb/qxcbsessionmanager.cpp6
-rw-r--r--src/plugins/sqldrivers/psql/qsql_psql.cpp10
-rw-r--r--src/plugins/sqldrivers/psql/qsql_psql_p.h2
-rw-r--r--src/tools/rcc/main.cpp9
-rw-r--r--tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp70
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md4
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/listsAndCodeBlocks.md24
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp3
-rw-r--r--tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp5
-rw-r--r--tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp7
-rw-r--r--tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp9
-rw-r--r--tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp17
-rw-r--r--tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp9
-rw-r--r--tests/benchmarks/opengl/main.cpp5
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp8
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp6
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h5
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h8
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp8
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp3
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h4
-rw-r--r--tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp36
-rw-r--r--tests/libfuzzer/corelib/serialization/qcborstreamreader/next/next.pro10
58 files changed, 900 insertions, 138 deletions
diff --git a/doc/global/externalsites/external-resources.qdoc b/doc/global/externalsites/external-resources.qdoc
index cbb4345bcd..187c73da62 100644
--- a/doc/global/externalsites/external-resources.qdoc
+++ b/doc/global/externalsites/external-resources.qdoc
@@ -25,6 +25,22 @@
**
****************************************************************************/
/*!
+ \externalpage https://source.android.com/setup/start/build-numbers
+ \title Android: Build Numbers
+*/
+/*!
+ \externalpage https://developer.android.com/guide/topics/manifest/uses-feature-element
+ \title Android: <uses-feature>
+*/
+/*!
+ \externalpage https://developer.android.com/guide/topics/manifest/uses-permission-element
+ \title Android: <uses-permission>
+*/
+/*!
+ \externalpage https://developer.android.com/studio/publish/versioning#appversioning
+ \title Android: App Versioning
+*/
+/*!
\externalpage http://www.freedesktop.org/
\title freedesktop.org
*/
diff --git a/mkspecs/common/ghs-integrity-armv8.conf b/mkspecs/common/ghs-integrity-armv8.conf
index e454cfd245..ac30b6c7af 100644
--- a/mkspecs/common/ghs-integrity-armv8.conf
+++ b/mkspecs/common/ghs-integrity-armv8.conf
@@ -17,8 +17,16 @@ os_directory = $$(INTEGRITY_DIR)
isEmpty(os_directory): \
error("This qmakespec requires $INTEGRITY_DIR to be set")
-QMAKE_CC = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared
-QMAKE_CXX = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared
+iy_build_target = $$(INTEGRITY_BUILD_TARGET)
+isEmpty(iy_build_target): \
+ message("This qmakespec requires $INTEGRITY_BUILD_TARGET to be set [dbg|rel|chk|cov] for Integrity versions 11.7.6 and higher")
+
+start_name = $$(INTEGRITY_DIR)/libs/$$(INTEGRITY_BSP)/$$(INTEGRITY_BUILD_TARGET)
+rtos_name= libs/$$(INTEGRITY_BSP)/$$(INTEGRITY_BUILD_TARGET)
+
+QMAKE_CC = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared -startfile_dir=$$start_name --rtos_library_directory=$$rtos_name --rtos_library_directory=libs/arm64/$$iy_build_target
+QMAKE_CXX = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared -startfile_dir=$$start_name --rtos_library_directory=$$rtos_name --rtos_library_directory=libs/arm64/$$iy_build_target
+
QMAKE_LINK = $$QMAKE_CXX
QMAKE_AR = $$QMAKE_CXX -archive -o
diff --git a/mkspecs/devices/integrity-armv8-SA8155P/qmake.conf b/mkspecs/devices/integrity-armv8-SA8155P/qmake.conf
new file mode 100644
index 0000000000..892619cb37
--- /dev/null
+++ b/mkspecs/devices/integrity-armv8-SA8155P/qmake.conf
@@ -0,0 +1,43 @@
+#
+# qmake configuration for INTEGRITY Qualcomm SA8155P ADP
+#
+
+load(device_config)
+
+include(../../common/ghs-integrity-armv8.conf)
+
+QT_QPA_DEFAULT_PLATFORM = eglfs
+EGLFS_DEVICE_INTEGRATION = eglfs_openwfd
+
+qc_multimedia_inc_directory = $$(QC_MULTIMEDIA_INC_DIR)
+isEmpty(qc_multimedia_inc_directory): \
+ error("This makespec requires the environment variable QC_MULTIMEDIA_INC_DIR to be set.")
+
+QMAKE_INCDIR += $$(QC_MULTIMEDIA_INC_DIR)
+
+QMAKE_LIBS_EGL += -lESXEGL_Adreno -lESXGLESv2_Adreno -ladreno_utils -lGSLUser -lOSUser -lpanel -livfs -lposix -lpmem -ltzbsp -lpaged_alloc -lglnext-llvm -lopenwfd -lplanedef -llogger -lnet -lsocket -lrfs_client -lshm_client -lmmosalrfs -lmmosalfile -lOSAbstraction
+
+QMAKE_LIBS_OPENGL_ES2 += $${QMAKE_LIBS_EGL}
+
+QMAKE_CFLAGS += -DINTEGRITY
+QMAKE_CXXFLAGS += -DINTEGRITY
+
+QMAKE_CFLAGS += -bigswitch
+QMAKE_CXXFLAGS += -bigswitch
+QMAKE_LFLAGS += -bigswitch
+
+dirs = $$(GL_INC_DIR)
+isEmpty(dirs): \
+ error("This makespec requires the environment variable GL_INC_DIR to be set.")
+
+QMAKE_INCDIR_EGL = $$split(dirs, $$QMAKE_DIRLIST_SEP)
+QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_EGL
+
+dirs = $$(GL_LIB_DIR)
+isEmpty(dirs): \
+ error("This makespec requires the environment variable GL_LIB_DIR to be set.")
+
+QMAKE_LIBDIR_EGL = $$split(dirs, $$QMAKE_DIRLIST_SEP)
+QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_EGL
+
+load(qt_config)
diff --git a/mkspecs/devices/integrity-armv8-SA8155P/qplatformdefs.h b/mkspecs/devices/integrity-armv8-SA8155P/qplatformdefs.h
new file mode 100644
index 0000000000..d9f2508152
--- /dev/null
+++ b/mkspecs/devices/integrity-armv8-SA8155P/qplatformdefs.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMDEFS_H
+#define QPLATFORMDEFS_H
+
+#include "../../common/integrity/qplatformdefs.h"
+
+#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
index ac24b03b6b..8df94aa4ee 100644
--- a/mkspecs/features/qt_common.prf
+++ b/mkspecs/features/qt_common.prf
@@ -25,7 +25,8 @@ qtConfig(stack-protector-strong): CONFIG += stack_protector_strong
contains(TEMPLATE, .*lib) {
# module and plugins
unix:qtConfig(reduce_relocations): CONFIG += bsymbolic_functions
-
+}
+contains(TEMPLATE, .*lib)|contains(TEMPLATE, aux) {
!isEmpty(_QMAKE_SUPER_CACHE_): \
rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
else: \
diff --git a/mkspecs/features/resolve_target.prf b/mkspecs/features/resolve_target.prf
index a9fe0d76d6..1ef1dcfd1c 100644
--- a/mkspecs/features/resolve_target.prf
+++ b/mkspecs/features/resolve_target.prf
@@ -36,7 +36,11 @@ win32 {
plugin_target = $$QMAKE_PLUGIN_BUNDLE_NAME
else: \
plugin_target = $$TARGET
- QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${plugin_target}.plugin
+ isEmpty(QMAKE_BUNDLE_EXTENSION): \
+ plugin_ext = .plugin
+ else: \
+ plugin_ext = $$QMAKE_BUNDLE_EXTENSION
+ QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${plugin_target}$${plugin_ext}
!shallow_bundle: \
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_BUNDLE}/Contents/MacOS/$${TARGET}
else: \
@@ -46,7 +50,11 @@ win32 {
framework_target = $$QMAKE_FRAMEWORK_BUNDLE_NAME
else: \
framework_target = $$TARGET
- QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${framework_target}.framework
+ isEmpty(QMAKE_BUNDLE_EXTENSION): \
+ framework_ext = .framework
+ else: \
+ framework_ext = $$QMAKE_BUNDLE_EXTENSION
+ QMAKE_RESOLVED_BUNDLE = $${QMAKE_RESOLVED_TARGET}$${framework_target}$${framework_ext}
!shallow_bundle {
TEMP_VERSION = $$section(VERSION, ., 0, 0)
isEmpty(TEMP_VERSION):TEMP_VERSION = A
diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc
index c90092059f..574722d08a 100644
--- a/qmake/doc/src/qmake-manual.qdoc
+++ b/qmake/doc/src/qmake-manual.qdoc
@@ -905,6 +905,187 @@
to specify a list of libraries that each project needs to link against,
and \c QMAKE_LIBS_X11 would be used to extend this list.
+ \target ANDROID_ABI
+ \section1 ANDROID_ABI
+
+ \note This variable applies only to Android targets.
+
+ Specifies the Android target ABI. Valid values are: armeabi-v7a, arm64-v8a,
+ x86, x86_64.
+
+ \target ANDROID_ABIS
+ \section1 ANDROID_ABIS
+
+ \note This variable applies only to Android targets.
+
+ Specifies a list of Android target ABIs. Valid values are: armeabi-v7a,
+ arm64-v8a, x86, x86_64.
+
+ \badcode
+ qmake ANDROID_ABIS="armeabi-v7a arm64-v8a"
+ \endcode
+
+ \target ANDROID_API_VERSION
+ \section1 ANDROID_API_VERSION
+
+ \note This variable applies only to Android targets.
+
+ Specifies the Android API level number. For more information, see
+ \l{Android: Build Numbers}{Android Build Numbers}.
+
+ \target ANDROID_BUNDLED_JAR_DEPENDENCIES
+ \section1 ANDROID_BUNDLED_JAR_DEPENDENCIES
+
+ \note This variable applies only to Android modules.
+
+ This is useful when writing a Qt module. It specifies a list of pre-bundled
+ dependencies used by the module in a \c .jar format, for example:
+
+ \badcode
+ ANDROID_BUNDLED_JAR_DEPENDENCIES += jar/QtAndroid.jar
+ \endcode
+
+ \target ANDROID_DEPLOYMENT_DEPENDENCIES
+ \section1 ANDROID_DEPLOYMENT_DEPENDENCIES
+
+ \note This variable applies only to Android targets.
+
+ By default, \l androiddeployqt will detect the dependencies of your
+ application. However, since run-time usage of plugins cannot be detected,
+ there could be false positives, as your application might depend on any
+ plugin that is a potential dependency. If you want to minimize the size of
+ your \c APK, it's possible to override the automatic detection using the
+ this variable. This should contain a list of all Qt files which need to be
+ included, with paths relative to the Qt install root.
+
+ \note Only the Qt files specified with this variable are included. Failing
+ to include all the correct files can result in crashes. It's also important
+ to make sure the files are listed in the correct loading order. This variable
+ provides a way to override the automatic detection entirely, so if a library
+ is listed before its dependencies, it will fail to load on some devices.
+
+ \target ANDROID_DEPLOYMENT_SETTINGS_FILE
+ \section1 ANDROID_DEPLOYMENT_SETTINGS_FILE
+
+ \note This variable applies only to Android targets.
+
+ Specifies the path to the \c {android-deployment-settings.json} file needed
+ by \l androiddeployqt and \c androidtestrunner. This overrides the path to
+ the settings file generated by qmake, thus you have to make sure to provide
+ a valid settings file.
+
+ \target ANDROID_EXTRA_LIBS
+ \section1 ANDROID_EXTRA_LIBS
+
+ \note This variable applies only to Android targets.
+
+ A list of external libraries that will be copied into your application's
+ \c libs folder and loaded on start-up. This can be used, for instance,
+ to enable OpenSSL in your application. For more information, see
+ \l{Adding OpenSSL Support for Android}.
+
+ \target ANDROID_EXTRA_PLUGINS
+ \section1 ANDROID_EXTRA_PLUGINS
+
+ \note This variable applies only to Android targets.
+
+ Specifies different resources that your application has to bundle but that
+ cannot be delivered through the assets system, such as QML plugins. With this
+ variable, \l androiddeployqt will make sure everything is packaged and
+ deployed properly.
+
+ \target ANDROID_FEATURES
+ \section1 ANDROID_FEATURES
+
+ \note This variable applies only to Android modules.
+
+ Specifies a module's features list:
+
+ \badcode
+ ANDROID_FEATURES += android.hardware.location.gps
+ \endcode
+
+ For more information, see \l{Android: <uses-feature>}{Android <uses-feature> Docs}.
+
+ \target ANDROID_LIB_DEPENDENCIES
+ \section1 ANDROID_LIB_DEPENDENCIES
+
+ \note This variable applies only to Android modules.
+
+ This is useful when writing a Qt module. It specifies a list of pre-built
+ dependencies used by the module, for example:
+
+ \badcode
+ ANDROID_LIB_DEPENDENCIES += \
+ plugins/libplugins_platforms_qtforandroid.so
+ \endcode
+
+ \target ANDROID_MIN_SDK_VERSION
+ \section1 ANDROID_MIN_SDK_VERSION
+
+ \note This variable applies only to Android targets.
+
+ Specifies the minimum Android API level for the project. By default, this
+ variable is set to API level 21.
+
+ \target ANDROID_PACKAGE_SOURCE_DIR
+ \section1 ANDROID_PACKAGE_SOURCE_DIR
+
+ \note This variable applies only to Android targets.
+
+ Specifies the path for a custom Android package template. The Android package
+ template contains:
+ \list
+ \li AndroidManifest.xml file
+ \li build.gradle file and other Gradle scripts
+ \li res/values/libs.xml file
+ \endlist
+
+ The path specified by this variable can contain custom Java classes under
+ \c src directory. By default, the \l androiddeployqt tool copies the
+ application template from the Qt for Android installation path into your
+ project's build directory, then it copies the contents of the path specified
+ by this variable on top of that, overwriting any existing files. For
+ instance, you can make a custom \c {AndroidManifest.xml} for your application,
+ then place this directly into the directory specified by this variable.
+
+ \target ANDROID_PERMISSIONS
+ \section1 ANDROID_PERMISSIONS
+
+ \note This variable applies only to Android modules.
+
+ Specifies a module's permissions list:
+
+ \badcode
+ ANDROID_PERMISSIONS += android.permission.ACCESS_FINE_LOCATION
+ \endcode
+
+ For more information, see \l{Android: <uses-permission>}{Android <uses-permission> Docs}.
+
+ \target ANDROID_TARGET_SDK_VERSION
+ \section1 ANDROID_TARGET_SDK_VERSION
+
+ \note This variable applies only to Android targets.
+
+ Specifies the target Android API level for the project. By default, this
+ variable is set to API level 28.
+
+ \target ANDROID_VERSION_CODE
+ \section1 ANDROID_VERSION_CODE
+
+ \note This variable applies only to Android targets.
+
+ Specifies the application's version number. For more information, see
+ \l{Android: App Versioning}{Android App Versioning}.
+
+ \target ANDROID_VERSION_NAME
+ \section1 ANDROID_VERSION_NAME
+
+ \note This variable applies only to Android targets.
+
+ Specifies the application's version in as a human readable string. For more
+ information, see \l{Android: App Versioning}{Android App Versioning}.
+
\target CONFIG
\section1 CONFIG
@@ -1376,6 +1557,13 @@
This variable is also used to specify which additional files will be
deployed to embedded devices.
+ \target JAVA_HOME
+ \section1 JAVA_HOME
+
+ \note This variable is useful only to Android targets.
+
+ Specifies the JDK/OpenJDK installation path used for building the project.
+
\target LEXIMPLS
\section1 LEXIMPLS
diff --git a/src/3rdparty/sqlite/patches/0002-sqlite-Fix-CVE-2020-11655.patch b/src/3rdparty/sqlite/patches/0002-sqlite-Fix-CVE-2020-11655.patch
new file mode 100644
index 0000000000..c47e68c4a9
--- /dev/null
+++ b/src/3rdparty/sqlite/patches/0002-sqlite-Fix-CVE-2020-11655.patch
@@ -0,0 +1,30 @@
+From fa3ea2350c0367aa7cfd796b31214e2dcf574360 Mon Sep 17 00:00:00 2001
+From: Andy Shaw <andy.shaw@qt.io>
+Date: Mon, 20 Apr 2020 10:43:29 +0200
+Subject: [PATCH] sqlite: Fix CVE-2020-11655
+
+This was taken from 4a302b42c7bf5e11 in SQLite, ref:
+https://www3.sqlite.org/cgi/src/info/4a302b42c7bf5e11
+
+[ChangeLog][QtSQL][sqlite] Fixed CVE-2020-11655
+
+Change-Id: I5ead78d9ee63aa0f12f1c1014c79373728569f30
+---
+ src/3rdparty/sqlite/sqlite3.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
+index dfe5323a59..054be43d95 100644
+--- a/src/3rdparty/sqlite/sqlite3.c
++++ b/src/3rdparty/sqlite/sqlite3.c
+@@ -133226,6 +133226,7 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
+ struct AggInfo_func *pFunc;
+ int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
+ if( nReg==0 ) return;
++ if( pParse->nErr ) return;
+ #ifdef SQLITE_DEBUG
+ /* Verify that all AggInfo registers are within the range specified by
+ ** AggInfo.mnReg..AggInfo.mxReg */
+--
+2.24.2 (Apple Git-127)
+
diff --git a/src/3rdparty/sqlite/patches/0003-sqlite-Fix-CVE-2020-11656.patch b/src/3rdparty/sqlite/patches/0003-sqlite-Fix-CVE-2020-11656.patch
new file mode 100644
index 0000000000..c5ceb0a00c
--- /dev/null
+++ b/src/3rdparty/sqlite/patches/0003-sqlite-Fix-CVE-2020-11656.patch
@@ -0,0 +1,63 @@
+From 99cdbed3bb5368ae2ec80d15635a2dd57961310c Mon Sep 17 00:00:00 2001
+From: Andy Shaw <andy.shaw@qt.io>
+Date: Mon, 20 Apr 2020 10:49:57 +0200
+Subject: [PATCH] sqlite: Fix CVE-2020-11656
+
+This was taken from d09f8c3621d5f7f8 and b64674919f673602 in SQLite,
+ref: https://www3.sqlite.org/cgi/src/info/d09f8c3621d5f7f8
+https://www.sqlite.org/cgi/src/info/b64674919f673602
+
+[ChangeLog][QtSQL][sqlite] Fixed CVE-2020-11656
+
+Fixes: QTBUG-83652
+Change-Id: I99bd59dc10b753ff19822c902dff1fc339d330a8
+---
+ src/3rdparty/sqlite/sqlite3.c | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
+index 054be43d95..6ff9ba42aa 100644
+--- a/src/3rdparty/sqlite/sqlite3.c
++++ b/src/3rdparty/sqlite/sqlite3.c
+@@ -97945,7 +97945,7 @@ static int resolveOrderByTermToExprList(
+ nc.nErr = 0;
+ db = pParse->db;
+ savedSuppErr = db->suppressErr;
+- db->suppressErr = 1;
++ if( IN_RENAME_OBJECT==0 ) db->suppressErr = 1;
+ rc = sqlite3ResolveExprNames(&nc, pE);
+ db->suppressErr = savedSuppErr;
+ if( rc ) return 0;
+@@ -105383,6 +105383,21 @@ static void renameWalkWith(Walker *pWalker, Select *pSelect){
+ }
+ }
+
++/*
++** Unmap all tokens in the IdList object passed as the second argument.
++*/
++static void unmapColumnIdlistNames(
++ Parse *pParse,
++ IdList *pIdList
++){
++ if( pIdList ){
++ int ii;
++ for(ii=0; ii<pIdList->nId; ii++){
++ sqlite3RenameTokenRemap(pParse, 0, (void*)pIdList->a[ii].zName);
++ }
++ }
++}
++
+ /*
+ ** Walker callback used by sqlite3RenameExprUnmap().
+ */
+@@ -105404,6 +105419,7 @@ static int renameUnmapSelectCb(Walker *pWalker, Select *p){
+ for(i=0; i<pSrc->nSrc; i++){
+ sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName);
+ if( sqlite3WalkExpr(pWalker, pSrc->a[i].pOn) ) return WRC_Abort;
++ unmapColumnIdlistNames(pParse, pSrc->a[i].pUsing);
+ }
+ }
+
+--
+2.24.2 (Apple Git-127)
+
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
index dfe5323a59..6ff9ba42aa 100644
--- a/src/3rdparty/sqlite/sqlite3.c
+++ b/src/3rdparty/sqlite/sqlite3.c
@@ -97945,7 +97945,7 @@ static int resolveOrderByTermToExprList(
nc.nErr = 0;
db = pParse->db;
savedSuppErr = db->suppressErr;
- db->suppressErr = 1;
+ if( IN_RENAME_OBJECT==0 ) db->suppressErr = 1;
rc = sqlite3ResolveExprNames(&nc, pE);
db->suppressErr = savedSuppErr;
if( rc ) return 0;
@@ -105384,6 +105384,21 @@ static void renameWalkWith(Walker *pWalker, Select *pSelect){
}
/*
+** Unmap all tokens in the IdList object passed as the second argument.
+*/
+static void unmapColumnIdlistNames(
+ Parse *pParse,
+ IdList *pIdList
+){
+ if( pIdList ){
+ int ii;
+ for(ii=0; ii<pIdList->nId; ii++){
+ sqlite3RenameTokenRemap(pParse, 0, (void*)pIdList->a[ii].zName);
+ }
+ }
+}
+
+/*
** Walker callback used by sqlite3RenameExprUnmap().
*/
static int renameUnmapSelectCb(Walker *pWalker, Select *p){
@@ -105404,6 +105419,7 @@ static int renameUnmapSelectCb(Walker *pWalker, Select *p){
for(i=0; i<pSrc->nSrc; i++){
sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName);
if( sqlite3WalkExpr(pWalker, pSrc->a[i].pOn) ) return WRC_Abort;
+ unmapColumnIdlistNames(pParse, pSrc->a[i].pUsing);
}
}
@@ -133226,6 +133242,7 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
struct AggInfo_func *pFunc;
int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
if( nReg==0 ) return;
+ if( pParse->nErr ) return;
#ifdef SQLITE_DEBUG
/* Verify that all AggInfo registers are within the range specified by
** AggInfo.mnReg..AggInfo.mxReg */
diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp
index 43bcc22720..fddda64b19 100644
--- a/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp
@@ -403,20 +403,28 @@ public:
//! [39]
-class QLibrary : public QObject
+class QItemSelectionModel : public QObject
{
Q_OBJECT
public:
...
-
- enum LoadHint {
- ResolveAllSymbolsHint = 0x01,
- ExportExternalSymbolsHint = 0x02,
- LoadArchiveMemberHint = 0x04
+ enum SelectionFlag {
+ NoUpdate = 0x0000,
+ Clear = 0x0001,
+ Select = 0x0002,
+ Deselect = 0x0004,
+ Toggle = 0x0008,
+ Current = 0x0010,
+ Rows = 0x0020,
+ Columns = 0x0040,
+ SelectCurrent = Select | Current,
+ ToggleCurrent = Toggle | Current,
+ ClearAndSelect = Clear | Select
};
- Q_DECLARE_FLAGS(LoadHints, LoadHint)
- Q_FLAG(LoadHint)
+
+ Q_DECLARE_FLAGS(SelectionFlags, SelectionFlag)
+ Q_FLAG(SelectionFlags)
...
}
//! [39]
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 3e22c9e661..2fe019f372 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -291,7 +291,7 @@
application on supported platforms, use of a session manager may be
redundant for system services.
This attribute must be set before QGuiApplication is constructed.
- This value was added in 5.13
+ This value was added in 5.14
\value AA_DisableNativeVirtualKeyboard When this attribute is set, the native
on-screen virtual keyboard will not be shown automatically when a
diff --git a/src/corelib/global/qsystemdetection.h b/src/corelib/global/qsystemdetection.h
index a020788b11..fe7d7d880b 100644
--- a/src/corelib/global/qsystemdetection.h
+++ b/src/corelib/global/qsystemdetection.h
@@ -76,6 +76,8 @@
The following operating systems have variants:
LINUX - both Q_OS_LINUX and Q_OS_ANDROID are defined when building for Android
- only Q_OS_LINUX is defined if building for other Linux systems
+ MACOS - both Q_OS_BSD4 and Q_OS_IOS are defined when building for iOS
+ - both Q_OS_BSD4 and Q_OS_MACOS are defined when building for macOS
FREEBSD - Q_OS_FREEBSD is defined only when building for FreeBSD with a BSD userland
- Q_OS_FREEBSD_KERNEL is always defined on FreeBSD, even if the userland is from GNU
*/
diff --git a/src/corelib/io/qfilesystemwatcher_inotify.cpp b/src/corelib/io/qfilesystemwatcher_inotify.cpp
index 888af998a5..94d9d06bcb 100644
--- a/src/corelib/io/qfilesystemwatcher_inotify.cpp
+++ b/src/corelib/io/qfilesystemwatcher_inotify.cpp
@@ -253,7 +253,7 @@ QInotifyFileSystemWatcherEngine::QInotifyFileSystemWatcherEngine(int fd, QObject
notifier(fd, QSocketNotifier::Read, this)
{
fcntl(inotifyFd, F_SETFD, FD_CLOEXEC);
- connect(&notifier, SIGNAL(activated(int)), SLOT(readFromInotify()));
+ connect(&notifier, SIGNAL(activated(QSocketDescriptor)), SLOT(readFromInotify()));
}
QInotifyFileSystemWatcherEngine::~QInotifyFileSystemWatcherEngine()
diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp
index c2028e3641..06383a103a 100644
--- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp
+++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp
@@ -77,7 +77,7 @@ QKqueueFileSystemWatcherEngine::QKqueueFileSystemWatcherEngine(int kqfd, QObject
kqfd(kqfd),
notifier(kqfd, QSocketNotifier::Read, this)
{
- connect(&notifier, SIGNAL(activated(int)), SLOT(readFromKqueue()));
+ connect(&notifier, SIGNAL(activated(QSocketDescriptor)), SLOT(readFromKqueue()));
fcntl(kqfd, F_SETFD, FD_CLOEXEC);
}
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 930007ff04..e8efe6481f 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -251,7 +251,7 @@ bool QProcessPrivate::openChannel(Channel &channel)
channel.notifier = new QSocketNotifier(channel.pipe[1],
QSocketNotifier::Write, q);
channel.notifier->setEnabled(false);
- QObject::connect(channel.notifier, SIGNAL(activated(int)),
+ QObject::connect(channel.notifier, SIGNAL(activated(QSocketDescriptor)),
q, SLOT(_q_canWrite()));
} else {
channel.notifier = new QSocketNotifier(channel.pipe[0],
@@ -261,7 +261,7 @@ bool QProcessPrivate::openChannel(Channel &channel)
receiver = SLOT(_q_canReadStandardOutput());
else
receiver = SLOT(_q_canReadStandardError());
- QObject::connect(channel.notifier, SIGNAL(activated(int)),
+ QObject::connect(channel.notifier, SIGNAL(activated(QSocketDescriptor)),
q, receiver);
}
}
@@ -380,7 +380,7 @@ void QProcessPrivate::startProcess()
if (threadData.loadRelaxed()->hasEventDispatcher()) {
startupSocketNotifier = new QSocketNotifier(childStartedPipe[0],
QSocketNotifier::Read, q);
- QObject::connect(startupSocketNotifier, SIGNAL(activated(int)),
+ QObject::connect(startupSocketNotifier, SIGNAL(activated(QSocketDescriptor)),
q, SLOT(_q_startupNotification()));
}
@@ -531,7 +531,7 @@ void QProcessPrivate::startProcess()
if (threadData.loadRelaxed()->eventDispatcher.loadAcquire()) {
deathNotifier = new QSocketNotifier(forkfd, QSocketNotifier::Read, q);
- QObject::connect(deathNotifier, SIGNAL(activated(int)),
+ QObject::connect(deathNotifier, SIGNAL(activated(QSocketDescriptor)),
q, SLOT(_q_processDied()));
}
}
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
index 35c97da532..4f5593e0a0 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -2937,7 +2937,7 @@ void QSortFilterProxyModel::setFilterRole(int role)
/*!
\since 5.15
- \fn void QSortFilterProxyModel::recursiveFilteringEnabledChanged(int recursiveFilteringEnabled)
+ \fn void QSortFilterProxyModel::recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled)
\brief This signal is emitted when the recursive filter setting is changed
to \a recursiveFilteringEnabled.
*/
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 8be10ed601..23e4e1163c 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -4493,16 +4493,15 @@ QDebug operator<<(QDebug dbg, const QObject *o)
that values of a given enum can be used as flags and combined using the
bitwise OR operator. For namespaces use \l Q_FLAG_NS() instead.
- The macro must be placed after the enum declaration.
+ The macro must be placed after the enum declaration. The declaration of
+ the flags type is done using the \l Q_DECLARE_FLAGS() macro.
- For example, in QLibrary, the \l{QLibrary::LoadHints}{LoadHints} flag is
+ For example, in QItemSelectionModel, the
+ \l{QItemSelectionModel::SelectionFlags}{SelectionFlags} flag is
declared in the following way:
\snippet code/src_corelib_kernel_qobject.cpp 39
- The declaration of the flags themselves is performed in the public section
- of the QLibrary class itself, using the \l Q_DECLARE_FLAGS() macro.
-
\note The Q_FLAG macro takes care of registering individual flag values
with the meta-object system, so it is unnecessary to use Q_ENUM()
in addition to this macro.
diff --git a/src/corelib/kernel/qsocketnotifier.cpp b/src/corelib/kernel/qsocketnotifier.cpp
index 78269ee605..6e1d2103bd 100644
--- a/src/corelib/kernel/qsocketnotifier.cpp
+++ b/src/corelib/kernel/qsocketnotifier.cpp
@@ -37,23 +37,32 @@
**
****************************************************************************/
+#define BUILDING_QSOCKETNOTIFIER
#include "qsocketnotifier.h"
+#undef BUILDING_QSOCKETNOTIFIER
#include "qplatformdefs.h"
#include "qabstracteventdispatcher.h"
#include "qcoreapplication.h"
+#include "qmetatype.h"
+
#include "qobject_p.h"
#include <private/qthread_p.h>
+#include <QtCore/QLoggingCategory>
+
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(lcSocketNotifierDeprecation)
+Q_LOGGING_CATEGORY(lcSocketNotifierDeprecation, "qt.core.socketnotifier_deprecation");
+
class QSocketNotifierPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QSocketNotifier)
public:
- qintptr sockfd;
+ QSocketDescriptor sockfd;
QSocketNotifier::Type sntype;
bool snenabled;
};
@@ -143,13 +152,17 @@ QSocketNotifier::QSocketNotifier(qintptr socket, Type type, QObject *parent)
: QObject(*new QSocketNotifierPrivate, parent)
{
Q_D(QSocketNotifier);
+
+ qRegisterMetaType<QSocketDescriptor>();
+ qRegisterMetaType<QSocketNotifier::Type>();
+
d->sockfd = socket;
d->sntype = type;
d->snenabled = true;
auto thisThreadData = d->threadData.loadRelaxed();
- if (socket < 0)
+ if (!d->sockfd.isValid())
qWarning("QSocketNotifier: Invalid socket specified");
else if (!thisThreadData->hasEventDispatcher())
qWarning("QSocketNotifier: Can only be used with threads started with QThread");
@@ -169,6 +182,11 @@ QSocketNotifier::~QSocketNotifier()
/*!
\fn void QSocketNotifier::activated(int socket)
+ \obsolete To avoid unintended truncation of the descriptor, use
+ the QSocketDescriptor overload of this function. If you need
+ compatibility with versions older than 5.15 you need to change
+ the slot to accept qintptr if it currently accepts an int, and
+ then connect using Functor-Based Connection.
This signal is emitted whenever the socket notifier is enabled and
a socket event corresponding to its \l {Type}{type} occurs.
@@ -178,6 +196,18 @@ QSocketNotifier::~QSocketNotifier()
\sa type(), socket()
*/
+/*!
+ \fn void QSocketNotifier::activated(QSocketDescriptor socket, QSocketNotifier::Type type)
+ \since 5.15
+
+ This signal is emitted whenever the socket notifier is enabled and
+ a socket event corresponding to its \a type occurs.
+
+ The socket identifier is passed in the \a socket parameter.
+
+ \sa type(), socket()
+*/
+
/*!
Returns the socket identifier specified to the constructor.
@@ -187,7 +217,7 @@ QSocketNotifier::~QSocketNotifier()
qintptr QSocketNotifier::socket() const
{
Q_D(const QSocketNotifier);
- return d->sockfd;
+ return qintptr(d->sockfd);
}
/*!
@@ -230,7 +260,7 @@ bool QSocketNotifier::isEnabled() const
void QSocketNotifier::setEnabled(bool enable)
{
Q_D(QSocketNotifier);
- if (d->sockfd < 0)
+ if (!d->sockfd.isValid())
return;
if (d->snenabled == enable) // no change
return;
@@ -268,12 +298,61 @@ bool QSocketNotifier::event(QEvent *e)
}
QObject::event(e); // will activate filters
if ((e->type() == QEvent::SockAct) || (e->type() == QEvent::SockClose)) {
- emit activated(d->sockfd, QPrivateSignal());
+ QPointer<QSocketNotifier> alive(this);
+ emit activated(d->sockfd, d->sntype, QPrivateSignal());
+ // ### Qt7: Remove emission if the activated(int) signal is removed
+ if (alive)
+ emit activated(int(qintptr(d->sockfd)), QPrivateSignal());
+
return true;
}
return false;
}
+/*!
+ \class QSocketDescriptor
+ \inmodule QtCore
+ \brief A class which holds a native socket descriptor.
+ \internal
+
+ \ingroup network
+ \ingroup io
+
+ \since 5.15
+
+ QSocketDescriptor makes it easier to handle native socket
+ descriptors in cross-platform code.
+
+ On Windows it holds a \c {Qt::HANDLE} and on Unix it holds an \c int.
+ The class will implicitly convert between the class and the
+ native descriptor type.
+*/
+
+/*!
+ \fn QSocketDescriptor::QSocketDescriptor(DescriptorType descriptor)
+ \internal
+
+ Construct a QSocketDescriptor from a native socket \a descriptor.
+*/
+
+/*!
+ \fn QSocketDescriptor::QSocketDescriptor(qintptr descriptor)
+ \internal
+
+ Construct a QSocketDescriptor from a native socket \a descriptor.
+
+ \note This constructor is only available on Windows.
+*/
+
+/*!
+ \fn Qt::HANDLE QSocketDescriptor::winHandle() const noexcept
+ \internal
+
+ Returns the internal handle.
+
+ \note This function is only available on Windows.
+*/
+
QT_END_NAMESPACE
#include "moc_qsocketnotifier.cpp"
diff --git a/src/corelib/kernel/qsocketnotifier.h b/src/corelib/kernel/qsocketnotifier.h
index 38e5f27247..528f58a1e1 100644
--- a/src/corelib/kernel/qsocketnotifier.h
+++ b/src/corelib/kernel/qsocketnotifier.h
@@ -44,6 +44,7 @@
QT_BEGIN_NAMESPACE
+class QSocketDescriptor;
class QSocketNotifierPrivate;
class Q_CORE_EXPORT QSocketNotifier : public QObject
{
@@ -65,7 +66,23 @@ public Q_SLOTS:
void setEnabled(bool);
Q_SIGNALS:
+#if defined(Q_MOC_RUN)
+ // Add default arguments during Q_MOC_RUN which makes moc generate "signals" which takes less
+ // parameters, but we won't actually allow emitting without all 3. This lets users use the
+ // string-based connect without specifying QSocketNotifier::Type as one of the parameters.
+ void activated(QSocketDescriptor socket, QSocketNotifier::Type activationEvent = Read,
+ QPrivateSignal = {});
+#else
+ void activated(QSocketDescriptor socket, QSocketNotifier::Type activationEvent, QPrivateSignal);
+#endif
+
+ // ### Qt7: consider removing it.
+ // The old signal is compiled internally, but hidden outside of this class.
+ // This means the PMF-based connect(..) will automatically, on recompile, pick up the new
+ // version while the old-style connect(..) can query the metaobject system for this version.
+#if defined(Q_MOC_RUN) || defined(BUILDING_QSOCKETNOTIFIER) || defined(Q_QDOC)
void activated(int socket, QPrivateSignal);
+#endif
protected:
bool event(QEvent *) override;
@@ -74,6 +91,50 @@ private:
Q_DISABLE_COPY(QSocketNotifier)
};
+class QSocketDescriptor
+{
+public:
+#if defined(Q_OS_WIN) || defined(Q_QDOC)
+ using DescriptorType = Qt::HANDLE;
+#define Q_DECL_CONSTEXPR_NOT_WIN
+#else
+ using DescriptorType = int;
+#define Q_DECL_CONSTEXPR_NOT_WIN Q_DECL_CONSTEXPR
+#endif
+
+ /* implicit */ Q_DECL_CONSTEXPR_NOT_WIN
+ QSocketDescriptor(DescriptorType descriptor = DescriptorType(-1)) noexcept : sockfd(descriptor)
+ {
+ }
+
+#if defined(Q_OS_WIN) || defined(Q_QDOC)
+ /* implicit */ QSocketDescriptor(qintptr desc) noexcept : sockfd(DescriptorType(desc)) {}
+ operator qintptr() const noexcept { return qintptr(sockfd); }
+ Q_DECL_CONSTEXPR Qt::HANDLE winHandle() const noexcept { return sockfd; }
+#endif
+ Q_DECL_CONSTEXPR operator DescriptorType() const noexcept { return sockfd; }
+
+ Q_DECL_CONSTEXPR_NOT_WIN bool isValid() const noexcept { return *this != QSocketDescriptor(); }
+
+ friend Q_DECL_CONSTEXPR_NOT_WIN bool operator==(QSocketDescriptor lhs,
+ QSocketDescriptor rhs) noexcept
+ {
+ return lhs.sockfd == rhs.sockfd;
+ }
+ friend Q_DECL_CONSTEXPR_NOT_WIN bool operator!=(QSocketDescriptor lhs,
+ QSocketDescriptor rhs) noexcept
+ {
+ return lhs.sockfd != rhs.sockfd;
+ }
+
+#undef Q_DECL_CONSTEXPR_NOT_WIN
+
+private:
+ DescriptorType sockfd;
+};
+
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QSocketNotifier::Type)
+Q_DECLARE_METATYPE(QSocketDescriptor)
#endif // QSOCKETNOTIFIER_H
diff --git a/src/corelib/time/qtimezoneprivate_android.cpp b/src/corelib/time/qtimezoneprivate_android.cpp
index fc3653752a..ba87cf79fe 100644
--- a/src/corelib/time/qtimezoneprivate_android.cpp
+++ b/src/corelib/time/qtimezoneprivate_android.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2019 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Copyright (C) 2014 Drew Parsons <dparsons@emerall.com>
** Contact: https://www.qt.io/licensing/
**
@@ -78,6 +78,26 @@ QAndroidTimeZonePrivate::~QAndroidTimeZonePrivate()
{
}
+static QJNIObjectPrivate getDisplayName(QJNIObjectPrivate zone, jint style, jboolean dst,
+ const QLocale &locale)
+{
+ QJNIObjectPrivate jlanguage
+ = QJNIObjectPrivate::fromString(QLocale::languageToString(locale.language()));
+ QJNIObjectPrivate jcountry
+ = QJNIObjectPrivate::fromString(QLocale::countryToString(locale.country()));
+ QJNIObjectPrivate
+ jvariant = QJNIObjectPrivate::fromString(QLocale::scriptToString(locale.script()));
+ QJNIObjectPrivate jlocale("java.util.Locale",
+ "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
+ static_cast<jstring>(jlanguage.object()),
+ static_cast<jstring>(jcountry.object()),
+ static_cast<jstring>(jvariant.object()));
+
+ return zone.callObjectMethod("getDisplayName",
+ "(ZILjava/util/Locale;)Ljava/lang/String;",
+ dst, style, jlocale.object());
+}
+
void QAndroidTimeZonePrivate::init(const QByteArray &ianaId)
{
const QString iana = QString::fromUtf8(ianaId);
@@ -99,10 +119,13 @@ void QAndroidTimeZonePrivate::init(const QByteArray &ianaId)
// the zone object we got and ignore the zone if not.
// Try checking ianaId against getID(), getDisplayName():
m_id = match(androidTimeZone.callObjectMethod("getID", "()Ljava/lang/String;"));
- for (int style = 1; m_id.isEmpty() && style-- > 0;) {
- for (int dst = 1; m_id.isEmpty() && dst-- > 0;) {
- m_id = match(androidTimeZone.callObjectMethod(
- "getDisplayName", "(ZI)Ljava/lang/String;", bool(dst), style));
+ for (int style = 1; m_id.isEmpty() && style >= 0; --style) {
+ for (int dst = 1; m_id.isEmpty() && dst >= 0; --dst) {
+ for (int pick = 2; m_id.isEmpty() && pick >= 0; --pick) {
+ QLocale locale = (pick == 0 ? QLocale::system()
+ : pick == 1 ? QLocale() : QLocale::c());
+ m_id = match(getDisplayName(androidTimeZone, style, jboolean(dst), locale));
+ }
}
}
}
@@ -124,14 +147,7 @@ QString QAndroidTimeZonePrivate::displayName(QTimeZone::TimeType timeType, QTime
// treat all NameTypes as java TimeZone style LONG (value 1), except of course QTimeZone::ShortName which is style SHORT (value 0);
jint style = (nameType == QTimeZone::ShortName ? 0 : 1);
- QJNIObjectPrivate jlanguage = QJNIObjectPrivate::fromString(QLocale::languageToString(locale.language()));
- QJNIObjectPrivate jcountry = QJNIObjectPrivate::fromString(QLocale::countryToString(locale.country()));
- QJNIObjectPrivate jvariant = QJNIObjectPrivate::fromString(QLocale::scriptToString(locale.script()));
- QJNIObjectPrivate jlocale("java.util.Locale", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", static_cast<jstring>(jlanguage.object()), static_cast<jstring>(jcountry.object()), static_cast<jstring>(jvariant.object()));
-
- QJNIObjectPrivate jname = androidTimeZone.callObjectMethod("getDisplayName", "(ZILjava/util/Locale;)Ljava/lang/String;", daylightTime, style, jlocale.object());
-
- name = jname.toString();
+ name = getDisplayName(androidTimeZone, style, daylightTime, locale).toString();
}
return name;
diff --git a/src/corelib/tools/qline.cpp b/src/corelib/tools/qline.cpp
index 3afd23d76b..40a69173c4 100644
--- a/src/corelib/tools/qline.cpp
+++ b/src/corelib/tools/qline.cpp
@@ -370,11 +370,18 @@ QDataStream &operator>>(QDataStream &stream, QLine &line)
/*!
\enum QLineF::IntersectType
- \obsolete Use QLineF::IntersectionType instead
+ \obsolete Use QLineF::IntersectionType instead.
+
+ \value NoIntersection
+ Lines do not intersect.
+ \value UnboundedIntersection
+ Lines intersect, but not within the range defined by their lengths.
+ \value BoundedIntersection
+ Lnes intersect within the range defined by their lengths.
*/
/*!
- \enum QLineF::IntersectionType
+ \typealias QLineF::IntersectionType
Describes the intersection between two lines.
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
index da67a6c5d4..9bedbcc3a5 100644
--- a/src/dbus/qdbusconnection_p.h
+++ b/src/dbus/qdbusconnection_p.h
@@ -173,7 +173,7 @@ public:
public:
// typedefs
- typedef QMultiHash<int, Watcher> WatcherHash;
+ typedef QMultiHash<qintptr, Watcher> WatcherHash;
typedef QHash<int, DBusTimeout *> TimeoutHash;
typedef QVector<QDBusMessage> PendingMessageList;
@@ -283,8 +283,8 @@ public slots:
// public slots
void setDispatchEnabled(bool enable);
void doDispatch();
- void socketRead(int);
- void socketWrite(int);
+ void socketRead(qintptr);
+ void socketWrite(qintptr);
void objectDestroyed(QObject *o);
void relaySignal(QObject *obj, const QMetaObject *, int signalId, const QVariantList &args);
bool addSignalHook(const QString &key, const SignalHook &hook);
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 669b330f1d..b0a9342515 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -1205,7 +1205,7 @@ void QDBusConnectionPrivate::doDispatch()
}
}
-void QDBusConnectionPrivate::socketRead(int fd)
+void QDBusConnectionPrivate::socketRead(qintptr fd)
{
WatcherHash::ConstIterator it = watchers.constFind(fd);
while (it != watchers.constEnd() && it.key() == fd) {
@@ -1219,7 +1219,7 @@ void QDBusConnectionPrivate::socketRead(int fd)
doDispatch();
}
-void QDBusConnectionPrivate::socketWrite(int fd)
+void QDBusConnectionPrivate::socketWrite(qintptr fd)
{
WatcherHash::ConstIterator it = watchers.constFind(fd);
while (it != watchers.constEnd() && it.key() == fd) {
diff --git a/src/gui/text/qtextmarkdownwriter.cpp b/src/gui/text/qtextmarkdownwriter.cpp
index 7bd321becc..ae63fcb4dd 100644
--- a/src/gui/text/qtextmarkdownwriter.cpp
+++ b/src/gui/text/qtextmarkdownwriter.cpp
@@ -367,6 +367,14 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
const int ColumnLimit = 80;
QTextBlockFormat blockFmt = block.blockFormat();
bool missedBlankCodeBlockLine = false;
+ const bool codeBlock = blockFmt.hasProperty(QTextFormat::BlockCodeFence) ||
+ blockFmt.stringProperty(QTextFormat::BlockCodeLanguage).length() > 0;
+ if (m_fencedCodeBlock && !codeBlock) {
+ m_stream << m_linePrefix << QString(m_wrappedLineIndent, Space)
+ << m_codeBlockFence << Newline;
+ m_fencedCodeBlock = false;
+ m_codeBlockFence.clear();
+ }
if (block.textList()) { // it's a list-item
auto fmt = block.textList()->format();
const int listLevel = fmt.indent();
@@ -427,7 +435,7 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
} else if (blockFmt.hasProperty(QTextFormat::BlockTrailingHorizontalRulerWidth)) {
m_stream << "- - -\n"; // unambiguous horizontal rule, not an underline under a heading
return 0;
- } else if (blockFmt.hasProperty(QTextFormat::BlockCodeFence) || blockFmt.stringProperty(QTextFormat::BlockCodeLanguage).length() > 0) {
+ } else if (codeBlock) {
// It's important to preserve blank lines in code blocks. But blank lines in code blocks
// inside block quotes are getting preserved anyway (along with the "> " prefix).
if (!blockFmt.hasProperty(QTextFormat::BlockQuoteLevel))
@@ -439,16 +447,11 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
m_codeBlockFence = QString(3, fenceChar.at(0));
// A block quote can contain an indented code block, but not vice-versa.
m_stream << m_linePrefix << QString(m_wrappedLineIndent, Space) << m_codeBlockFence
- << Space << blockFmt.stringProperty(QTextFormat::BlockCodeLanguage) << Newline;
+ << blockFmt.stringProperty(QTextFormat::BlockCodeLanguage) << Newline;
m_fencedCodeBlock = true;
}
+ wrap = false;
} else if (!blockFmt.indent()) {
- if (m_fencedCodeBlock) {
- m_stream << m_linePrefix << QString(m_wrappedLineIndent, Space)
- << m_codeBlockFence << Newline;
- m_fencedCodeBlock = false;
- m_codeBlockFence.clear();
- }
m_wrappedLineIndent = 0;
m_linePrefix.clear();
if (blockFmt.hasProperty(QTextFormat::BlockQuoteLevel)) {
diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp
index 88367d680d..c4085b440e 100644
--- a/src/network/socket/qlocalserver_unix.cpp
+++ b/src/network/socket/qlocalserver_unix.cpp
@@ -185,7 +185,7 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName)
Q_ASSERT(!socketNotifier);
socketNotifier = new QSocketNotifier(listenSocket,
QSocketNotifier::Read, q);
- q->connect(socketNotifier, SIGNAL(activated(int)),
+ q->connect(socketNotifier, SIGNAL(activated(QSocketDescriptor)),
q, SLOT(_q_onNewConnection()));
socketNotifier->setEnabled(maxPendingConnections > 0);
return true;
@@ -227,7 +227,7 @@ bool QLocalServerPrivate::listen(qintptr socketDescriptor)
Q_ASSERT(!socketNotifier);
socketNotifier = new QSocketNotifier(listenSocket,
QSocketNotifier::Read, q);
- q->connect(socketNotifier, SIGNAL(activated(int)),
+ q->connect(socketNotifier, SIGNAL(activated(QSocketDescriptor)),
q, SLOT(_q_onNewConnection()));
socketNotifier->setEnabled(maxPendingConnections > 0);
return true;
diff --git a/src/network/socket/qlocalsocket_unix.cpp b/src/network/socket/qlocalsocket_unix.cpp
index d9b39a7752..52067a265c 100644
--- a/src/network/socket/qlocalsocket_unix.cpp
+++ b/src/network/socket/qlocalsocket_unix.cpp
@@ -308,7 +308,7 @@ void QLocalSocketPrivate::_q_connectToSocket()
// Try again later, all of the sockets listening are full
if (!delayConnect) {
delayConnect = new QSocketNotifier(connectingSocket, QSocketNotifier::Write, q);
- q->connect(delayConnect, SIGNAL(activated(int)), q, SLOT(_q_connectToSocket()));
+ q->connect(delayConnect, SIGNAL(activated(QSocketDescriptor)), q, SLOT(_q_connectToSocket()));
}
if (!connectTimer) {
connectTimer = new QTimer(q);
diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp b/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp
index 9cf5c9096e..118940c634 100644
--- a/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp
+++ b/src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp
@@ -92,7 +92,7 @@ QDeviceDiscoveryUDev::QDeviceDiscoveryUDev(QDeviceTypes types, struct udev *udev
m_udevMonitorFileDescriptor = udev_monitor_get_fd(m_udevMonitor);
m_udevSocketNotifier = new QSocketNotifier(m_udevMonitorFileDescriptor, QSocketNotifier::Read, this);
- connect(m_udevSocketNotifier, SIGNAL(activated(int)), this, SLOT(handleUDevNotification()));
+ connect(m_udevSocketNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(handleUDevNotification()));
}
QDeviceDiscoveryUDev::~QDeviceDiscoveryUDev()
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
index a729eeb851..0b1c5548c7 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
+++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
@@ -113,6 +113,8 @@ QEvdevMouseHandler::QEvdevMouseHandler(const QString &device, int fd, bool abs,
if (m_abs)
m_abs = getHardwareMaximum();
+ detectHiResWheelSupport();
+
// socket notifier for events on the mouse device
m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
connect(m_notify, &QSocketNotifier::activated,
@@ -125,6 +127,25 @@ QEvdevMouseHandler::~QEvdevMouseHandler()
qt_safe_close(m_fd);
}
+void QEvdevMouseHandler::detectHiResWheelSupport()
+{
+#if defined(REL_WHEEL_HI_RES) || defined(REL_HWHEEL_HI_RES)
+ // Check if we can expect hires events as we will get both
+ // legacy and hires event and needs to know if we should
+ // ignore the legacy events.
+ unsigned char relFeatures[(REL_MAX / 8) + 1]{};
+ if (ioctl(m_fd, EVIOCGBIT(EV_REL, sizeof (relFeatures)), relFeatures) == -1)
+ return;
+
+#if defined(REL_WHEEL_HI_RES)
+ m_hiResWheel = TEST_BIT(relFeatures, REL_WHEEL_HI_RES);
+#endif
+#if defined(REL_HWHEEL_HI_RES)
+ m_hiResHWheel = TEST_BIT(relFeatures, REL_HWHEEL_HI_RES);
+#endif
+#endif
+}
+
// Ask touch screen hardware for information on coordinate maximums
// If any ioctls fail, revert to non abs mode
bool QEvdevMouseHandler::getHardwareMaximum()
@@ -243,14 +264,24 @@ void QEvdevMouseHandler::readMouseData()
} else if (data->code == REL_Y) {
m_y += data->value;
posChanged = true;
- } else if (data->code == ABS_WHEEL) { // vertical scroll
+ } else if (!m_hiResWheel && data->code == REL_WHEEL) {
// data->value: positive == up, negative == down
delta.setY(120 * data->value);
emit handleWheelEvent(delta);
- } else if (data->code == ABS_THROTTLE) { // horizontal scroll
+#ifdef REL_WHEEL_HI_RES
+ } else if (data->code == REL_WHEEL_HI_RES) {
+ delta.setY(data->value);
+ emit handleWheelEvent(delta);
+#endif
+ } else if (!m_hiResHWheel && data->code == REL_HWHEEL) {
// data->value: positive == right, negative == left
delta.setX(-120 * data->value);
emit handleWheelEvent(delta);
+#ifdef REL_HWHEEL_HI_RES
+ } else if (data->code == REL_HWHEEL_HI_RES) {
+ delta.setX(-data->value);
+ emit handleWheelEvent(delta);
+#endif
}
} else if (data->type == EV_KEY && data->code == BTN_TOUCH) {
// We care about touchpads only, not touchscreens -> don't map to button press.
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h b/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h
index 93314e885f..8fcf49200b 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h
+++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h
@@ -81,6 +81,7 @@ private:
void sendMouseEvent();
bool getHardwareMaximum();
+ void detectHiResWheelSupport();
QString m_device;
int m_fd;
@@ -89,6 +90,8 @@ private:
int m_prevx = 0, m_prevy = 0;
bool m_abs;
bool m_compression;
+ bool m_hiResWheel = false;
+ bool m_hiResHWheel = false;
Qt::MouseButtons m_buttons;
Qt::MouseButton m_button;
QEvent::Type m_eventType;
diff --git a/src/plugins/platforms/openwfd/qopenwfddevice.cpp b/src/plugins/platforms/openwfd/qopenwfddevice.cpp
index 7a9d22e74d..99896151b2 100644
--- a/src/plugins/platforms/openwfd/qopenwfddevice.cpp
+++ b/src/plugins/platforms/openwfd/qopenwfddevice.cpp
@@ -83,7 +83,7 @@ QOpenWFDDevice::QOpenWFDDevice(QOpenWFDIntegration *integration, WFDint device_e
int fd = wfdDeviceEventGetFD(mDevice,mEvent);
mEventSocketNotifier = new QSocketNotifier(fd,QSocketNotifier::Read,this);
- connect(mEventSocketNotifier,SIGNAL(activated(int)),SLOT(readEvents()));
+ connect(mEventSocketNotifier,SIGNAL(activated(QSocketDescriptor)),SLOT(readEvents()));
mCommitedDevice = true;
commit(WFD_COMMIT_ENTIRE_DEVICE, handle());
diff --git a/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp b/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp
index a6236f2376..f0c4c385ef 100644
--- a/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp
+++ b/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp
@@ -96,7 +96,7 @@ void QQnxButtonEventNotifier::start()
}
m_readNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Read);
- QObject::connect(m_readNotifier, SIGNAL(activated(int)), this, SLOT(updateButtonStates()));
+ QObject::connect(m_readNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(updateButtonStates()));
qButtonDebug("successfully connected to Navigator. fd = %d", m_fd);
}
diff --git a/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp b/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp
index 1f630863b7..f7e8e7966c 100644
--- a/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp
+++ b/src/plugins/platforms/qnx/qqnxnavigatoreventnotifier.cpp
@@ -96,7 +96,7 @@ void QQnxNavigatorEventNotifier::start()
}
m_readNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Read);
- connect(m_readNotifier, SIGNAL(activated(int)), this, SLOT(readData()));
+ connect(m_readNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(readData()));
}
void QQnxNavigatorEventNotifier::parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id)
diff --git a/src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.cpp b/src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.cpp
index 025c03c058..6f496571fa 100644
--- a/src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.cpp
+++ b/src/plugins/platforms/qnx/qqnxvirtualkeyboardpps.cpp
@@ -143,7 +143,7 @@ bool QQnxVirtualKeyboardPps::connect()
return false;
m_readNotifier = new QSocketNotifier(m_fd, QSocketNotifier::Read);
- QObject::connect(m_readNotifier, SIGNAL(activated(int)), this, SLOT(ppsDataReady()));
+ QObject::connect(m_readNotifier, SIGNAL(activated(QSocketDescriptor)), this, SLOT(ppsDataReady()));
return true;
}
diff --git a/src/plugins/platforms/wasm/qwasmeventdispatcher.cpp b/src/plugins/platforms/wasm/qwasmeventdispatcher.cpp
index 09acd37abc..2e1b083557 100644
--- a/src/plugins/platforms/wasm/qwasmeventdispatcher.cpp
+++ b/src/plugins/platforms/wasm/qwasmeventdispatcher.cpp
@@ -195,7 +195,7 @@ void QWasmEventDispatcher::wakeUp()
#ifdef EMSCRIPTEN_HAS_ASYNC_RUN_IN_MAIN_RUNTIME_THREAD
if (!emscripten_is_main_runtime_thread())
if (m_hasMainLoop)
- emscripten_async_run_in_main_runtime_thread_(EM_FUNC_SIG_VI, (void*)(&QWasmEventDispatcher::mainThreadWakeUp), this);
+ emscripten_async_run_in_main_runtime_thread_(EM_FUNC_SIG_VI, (void*)(&QWasmEventDispatcher::mainThreadWakeUp), this);
#endif
QEventDispatcherUNIX::wakeUp();
}
diff --git a/src/plugins/platforms/xcb/qxcbsessionmanager.cpp b/src/plugins/platforms/xcb/qxcbsessionmanager.cpp
index 2eb32c069e..e9697f505b 100644
--- a/src/plugins/platforms/xcb/qxcbsessionmanager.cpp
+++ b/src/plugins/platforms/xcb/qxcbsessionmanager.cpp
@@ -61,11 +61,11 @@ public:
QSmSocketReceiver(int socket)
{
QSocketNotifier* sn = new QSocketNotifier(socket, QSocketNotifier::Read, this);
- connect(sn, SIGNAL(activated(int)), this, SLOT(socketActivated(int)));
+ connect(sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(socketActivated()));
}
public Q_SLOTS:
- void socketActivated(int);
+ void socketActivated();
};
@@ -327,7 +327,7 @@ static void sm_saveYourselfPhase2Callback(SmcConn smcConn, SmPointer clientData)
}
-void QSmSocketReceiver::socketActivated(int)
+void QSmSocketReceiver::socketActivated()
{
IceProcessMessages(SmcGetIceConnection(smcConnection), nullptr, nullptr);
}
diff --git a/src/plugins/sqldrivers/psql/qsql_psql.cpp b/src/plugins/sqldrivers/psql/qsql_psql.cpp
index 38bf355856..c5895f281d 100644
--- a/src/plugins/sqldrivers/psql/qsql_psql.cpp
+++ b/src/plugins/sqldrivers/psql/qsql_psql.cpp
@@ -279,7 +279,7 @@ void QPSQLDriverPrivate::checkPendingNotifications() const
Q_Q(const QPSQLDriver);
if (seid.size() && !pendingNotifyCheck) {
pendingNotifyCheck = true;
- QMetaObject::invokeMethod(const_cast<QPSQLDriver*>(q), "_q_handleNotification", Qt::QueuedConnection, Q_ARG(int,0));
+ QMetaObject::invokeMethod(const_cast<QPSQLDriver*>(q), "_q_handleNotification", Qt::QueuedConnection);
}
}
@@ -1246,7 +1246,7 @@ void QPSQLDriver::close()
d->seid.clear();
if (d->sn) {
- disconnect(d->sn, SIGNAL(activated(int)), this, SLOT(_q_handleNotification(int)));
+ disconnect(d->sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_handleNotification()));
delete d->sn;
d->sn = nullptr;
}
@@ -1603,7 +1603,7 @@ bool QPSQLDriver::subscribeToNotification(const QString &name)
if (!d->sn) {
d->sn = new QSocketNotifier(socket, QSocketNotifier::Read);
- connect(d->sn, SIGNAL(activated(int)), this, SLOT(_q_handleNotification(int)));
+ connect(d->sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_handleNotification()));
}
} else {
qWarning("QPSQLDriver::subscribeToNotificationImplementation: PQsocket didn't return a valid socket to listen on");
@@ -1639,7 +1639,7 @@ bool QPSQLDriver::unsubscribeFromNotification(const QString &name)
d->seid.removeAll(name);
if (d->seid.isEmpty()) {
- disconnect(d->sn, SIGNAL(activated(int)), this, SLOT(_q_handleNotification(int)));
+ disconnect(d->sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_handleNotification()));
delete d->sn;
d->sn = nullptr;
}
@@ -1653,7 +1653,7 @@ QStringList QPSQLDriver::subscribedToNotifications() const
return d->seid;
}
-void QPSQLDriver::_q_handleNotification(int)
+void QPSQLDriver::_q_handleNotification()
{
Q_D(QPSQLDriver);
d->pendingNotifyCheck = false;
diff --git a/src/plugins/sqldrivers/psql/qsql_psql_p.h b/src/plugins/sqldrivers/psql/qsql_psql_p.h
index 9ac1fb50d7..22c0761667 100644
--- a/src/plugins/sqldrivers/psql/qsql_psql_p.h
+++ b/src/plugins/sqldrivers/psql/qsql_psql_p.h
@@ -130,7 +130,7 @@ protected:
bool rollbackTransaction() override;
private Q_SLOTS:
- void _q_handleNotification(int);
+ void _q_handleNotification();
};
QT_END_NAMESPACE
diff --git a/src/tools/rcc/main.cpp b/src/tools/rcc/main.cpp
index ac87e48e39..d8e243daea 100644
--- a/src/tools/rcc/main.cpp
+++ b/src/tools/rcc/main.cpp
@@ -435,11 +435,10 @@ int main(int argc, char *argv[])
{
// rcc uses a QHash to store files in the resource system.
// we must force a certain hash order when testing or tst_rcc will fail, see QTBUG-25078
- if (Q_UNLIKELY(!qEnvironmentVariableIsEmpty("QT_RCC_TEST"))) {
- qSetGlobalQHashSeed(0);
- if (qGlobalQHashSeed() != 0)
- qFatal("Cannot force QHash seed for testing as requested");
- }
+ // similar requirements exist for reproducibly builds.
+ qSetGlobalQHashSeed(0);
+ if (qGlobalQHashSeed() != 0)
+ qWarning("Cannot force QHash seed");
return QT_PREPEND_NAMESPACE(runRcc)(argc, argv);
}
diff --git a/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp b/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp
index e3f45df27d..8ba3505d8b 100644
--- a/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp
+++ b/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp
@@ -53,6 +53,7 @@
# undef min
#endif // Q_CC_MSVC
+
class tst_QSocketNotifier : public QObject
{
Q_OBJECT
@@ -63,6 +64,9 @@ private slots:
void posixSockets();
#endif
void asyncMultipleDatagram();
+ void activationReason_data();
+ void activationReason();
+ void legacyConnect();
protected slots:
void async_readDatagramSlot();
@@ -97,10 +101,10 @@ public:
{
QSocketNotifier *notifier1 =
new QSocketNotifier(readEnd1->socketDescriptor(), QSocketNotifier::Read, this);
- connect(notifier1, SIGNAL(activated(int)), SLOT(handleActivated()));
+ connect(notifier1, SIGNAL(activated(QSocketDescriptor)), SLOT(handleActivated()));
QSocketNotifier *notifier2 =
new QSocketNotifier(readEnd2->socketDescriptor(), QSocketNotifier::Read, this);
- connect(notifier2, SIGNAL(activated(int)), SLOT(handleActivated()));
+ connect(notifier2, SIGNAL(activated(QSocketDescriptor)), SLOT(handleActivated()));
}
public slots:
@@ -284,12 +288,12 @@ void tst_QSocketNotifier::posixSockets()
{
QSocketNotifier rn(posixSocket, QSocketNotifier::Read);
- connect(&rn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ connect(&rn, SIGNAL(activated(QSocketDescriptor)), &QTestEventLoop::instance(), SLOT(exitLoop()));
QSignalSpy readSpy(&rn, &QSocketNotifier::activated);
QVERIFY(readSpy.isValid());
// No write notifier, some systems trigger write notification on socket creation, but not all
QSocketNotifier en(posixSocket, QSocketNotifier::Exception);
- connect(&en, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ connect(&en, SIGNAL(activated(QSocketDescriptor)), &QTestEventLoop::instance(), SLOT(exitLoop()));
QSignalSpy errorSpy(&en, &QSocketNotifier::activated);
QVERIFY(errorSpy.isValid());
@@ -306,7 +310,7 @@ void tst_QSocketNotifier::posixSockets()
QCOMPARE(buffer, "hello");
QSocketNotifier wn(posixSocket, QSocketNotifier::Write);
- connect(&wn, SIGNAL(activated(int)), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ connect(&wn, SIGNAL(activated(QSocketDescriptor)), &QTestEventLoop::instance(), SLOT(exitLoop()));
QSignalSpy writeSpy(&wn, &QSocketNotifier::activated);
QVERIFY(writeSpy.isValid());
qt_safe_write(posixSocket, "goodbye", 8);
@@ -385,5 +389,61 @@ void tst_QSocketNotifier::asyncMultipleDatagram()
#endif // !Q_OS_WINRT
}
+void tst_QSocketNotifier::activationReason_data()
+{
+ QTest::addColumn<QSocketNotifier::Type>("type");
+ QTest::addRow("read") << QSocketNotifier::Read;
+ QTest::addRow("write") << QSocketNotifier::Write;
+ QTest::addRow("exception") << QSocketNotifier::Exception;
+}
+void tst_QSocketNotifier::activationReason()
+{
+ QSocketDescriptor fd = 15;
+
+ QFETCH(QSocketNotifier::Type, type);
+
+ QSocketNotifier notifier(fd, type);
+ auto activation = new QEvent(QEvent::SockAct);
+ QCoreApplication::postEvent(&notifier, activation);
+
+ QSocketNotifier::Type notifierType;
+ connect(&notifier, &QSocketNotifier::activated, this,
+ [&notifierType, fd](QSocketDescriptor sockfd, QSocketNotifier::Type sntype) {
+ if (sockfd == fd)
+ notifierType = sntype;
+ else
+ qWarning() << "Got an unexpected socket file descriptor:" << qintptr(sockfd);
+ });
+
+ QCoreApplication::processEvents();
+ QCOMPARE(notifierType, type);
+}
+
+// This test ensures that we can connect QSocketNotifier::activated to a slot taking an integer
+// or qintptr.
+void tst_QSocketNotifier::legacyConnect()
+{
+ qintptr fd = 15;
+ QSocketNotifier notifier(fd, QSocketNotifier::Read);
+ auto activation = new QEvent(QEvent::SockAct);
+ QCoreApplication::postEvent(&notifier, activation);
+
+ bool receivedQIntPtr = false;
+ connect(&notifier, &QSocketNotifier::activated, this, [&receivedQIntPtr, fd](qintptr q){
+ if (q == fd)
+ receivedQIntPtr = true;
+ });
+ bool receivedInt = false;
+ connect(&notifier, &QSocketNotifier::activated, this, [&receivedInt, fd](int q){
+ if (q == fd)
+ receivedInt = true;
+ });
+
+ QCoreApplication::processEvents();
+ QVERIFY(receivedQIntPtr);
+ QVERIFY(receivedInt);
+}
+
+
QTEST_MAIN(tst_QSocketNotifier)
#include <tst_qsocketnotifier.moc>
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md b/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md
index 6336d0219f..702ccef134 100644
--- a/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md
@@ -20,7 +20,7 @@ MacFarlane writes:
> equivalent sample of Markdown. Here is a sample of AsciiDoc from the AsciiDoc
> manual:
-> ``` AsciiDoc
+> ```AsciiDoc
> 1. List item one.
> +
> List item one continued with a second paragraph followed by an
@@ -50,7 +50,7 @@ Now let's have an indented code block:
}
and end with a fenced code block:
-~~~ pseudocode
+~~~pseudocode
#include <something.h>
#include <else.h>
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/listsAndCodeBlocks.md b/tests/auto/gui/text/qtextmarkdownwriter/data/listsAndCodeBlocks.md
new file mode 100644
index 0000000000..54e3f25afa
--- /dev/null
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/listsAndCodeBlocks.md
@@ -0,0 +1,24 @@
+- something happens in the debugger like this:
+
+ ```
+ 1 QQuickEventPoint::setGrabberItem qquickevents.cpp 869 0x7ffff7a963f2
+ 2 QQuickItem::grabMouse qquickitem.cpp 7599 0x7ffff7abea29
+ 3 QQuickWindowPrivate::deliverMatchingPointsToItem qquickwindow.cpp 2738 0x7ffff7aea34c
+ 4 QQuickWindowPrivate::deliverPressOrReleaseEvent qquickwindow.cpp 2692 0x7ffff7ae9e57
+ 5 QQuickWindowPrivate::deliverMouseEvent qquickwindow.cpp 1911 0x7ffff7ae561b
+ 6 QQuickWindowPrivate::deliverPointerEvent qquickwindow.cpp 2454 0x7ffff7ae888c
+ 7 QQuickWindowPrivate::handleMouseEvent qquickwindow.cpp 2282 0x7ffff7ae7f1a
+ 8 QQuickWindow::mousePressEvent qquickwindow.cpp 2249 0x7ffff7ae7bf5
+ 9 QQuickView::mousePressEvent qquickview.cpp 626 0x7ffff7bd6bad
+ 10 QWindow::event qwindow.cpp 2258 0x7ffff70b2c54
+ ```
+ and then I want to explain something about it.
+
+- something I tried to fix it:
+
+ ```c++
+ item->ungrab();
+ ```
+- still didn't fix it, expecting a breakthrough any day now
+- some sort of miracle
+- profit!
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp b/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp
index 31592c7f0f..13449299cb 100644
--- a/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp
+++ b/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp
@@ -369,6 +369,7 @@ void tst_QTextMarkdownWriter::rewriteDocument_data()
QTest::newRow("list items after headings") << "headingsAndLists.md";
QTest::newRow("word wrap") << "wordWrap.md";
QTest::newRow("links") << "links.md";
+ QTest::newRow("lists and code blocks") << "listsAndCodeBlocks.md";
}
void tst_QTextMarkdownWriter::rewriteDocument()
@@ -431,7 +432,7 @@ void tst_QTextMarkdownWriter::fromHtml_data()
"![foo](/url \"title\")\n\n";
QTest::newRow("code") <<
"<pre class=\"language-pseudocode\">\n#include \"foo.h\"\n\nblock {\n statement();\n}\n\n</pre>" <<
- "``` pseudocode\n#include \"foo.h\"\n\nblock {\n statement();\n}\n```\n\n";
+ "```pseudocode\n#include \"foo.h\"\n\nblock {\n statement();\n}\n```\n\n";
// TODO
// QTest::newRow("escaped number and paren after double newline") <<
// "<p>(The first sentence of this paragraph is a line, the next paragraph has a number</p>13) but that's not part of an ordered list" <<
diff --git a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
index 5bd4bc5520..1fd3b9d5da 100644
--- a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
+++ b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -28,6 +28,7 @@
#include <QtTest/QtTest>
#include <QtCore/QProcess>
+#include <QtCore/QElapsedTimer>
class tst_QProcess : public QObject
{
@@ -50,7 +51,7 @@ void tst_QProcess::echoTest_performance()
QVERIFY(process.waitForStarted());
- QTime stopWatch;
+ QElapsedTimer stopWatch;
stopWatch.start();
qint64 totalBytes = 0;
diff --git a/tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp b/tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp
index c2ce15f720..fb5b2cdc91 100644
--- a/tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp
+++ b/tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -29,6 +29,7 @@
#include <qtest.h>
#include <QtCore/qmath.h>
+#include <QtCore/QElapsedTimer>
#include <QtWidgets/QWidget>
#include "benchmarktests.h"
@@ -44,7 +45,7 @@ public:
qreal result() const { return m_result; }
public:
- QTime timer;
+ QElapsedTimer timer;
Benchmark *m_benchmark;
@@ -77,7 +78,7 @@ void BenchWidget::paintEvent(QPaintEvent *)
++m_iteration;
- uint currentElapsed = timer.isNull() ? 0 : timer.elapsed();
+ uint currentElapsed = timer.isValid() ? timer.elapsed() : 0;
timer.restart();
m_total += currentElapsed;
diff --git a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp
index 46bb1791b4..b6a83546a8 100644
--- a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp
+++ b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -32,6 +32,7 @@
#include <QtNetwork/qnetworkrequest.h>
#include <QtNetwork/qnetworkaccessmanager.h>
#include <QtCore/QTemporaryFile>
+#include <QtCore/QElapsedTimer>
#include <QtCore/QFile>
class qfile_vs_qnetworkaccessmanager : public QObject
@@ -88,7 +89,7 @@ void qfile_vs_qnetworkaccessmanager::qnamFileRead_iteration(QNetworkAccessManage
void qfile_vs_qnetworkaccessmanager::qnamFileRead()
{
QNetworkAccessManager manager;
- QTime t;
+ QElapsedTimer t;
QNetworkRequest request(QUrl::fromLocalFile(testFile.fileName()));
// do 3 dry runs for cache warmup
@@ -121,7 +122,7 @@ void qfile_vs_qnetworkaccessmanager::qnamImmediateFileRead_iteration(QNetworkAcc
void qfile_vs_qnetworkaccessmanager::qnamImmediateFileRead()
{
QNetworkAccessManager manager;
- QTime t;
+ QElapsedTimer t;
QNetworkRequest request(QUrl::fromLocalFile(testFile.fileName()));
// do 3 dry runs for cache warmup
@@ -151,7 +152,7 @@ void qfile_vs_qnetworkaccessmanager::qfileFileRead_iteration()
void qfile_vs_qnetworkaccessmanager::qfileFileRead()
{
- QTime t;
+ QElapsedTimer t;
// do 3 dry runs for cache warmup
qfileFileRead_iteration();
diff --git a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
index bcd354ebee..9b1f801044 100644
--- a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -31,6 +31,7 @@
#include <qtest.h>
#include <QtTest/QtTest>
#include <QtCore/qrandom.h>
+#include <QtCore/QElapsedTimer>
#include <QtNetwork/qnetworkreply.h>
#include <QtNetwork/qnetworkrequest.h>
#include <QtNetwork/qnetworkaccessmanager.h>
@@ -93,7 +94,7 @@ protected:
QEventLoop eventLoop;
QTimer::singleShot(timeout, &eventLoop, SLOT(quit()));
- QTime timer;
+ QElapsedTimer timer;
timer.start();
eventLoop.exec();
disconnect(client, SIGNAL(bytesWritten(qint64)), this, 0);
@@ -187,7 +188,7 @@ protected:
DataReader reader(client, false);
QObject::connect(client, SIGNAL(disconnected()), &eventLoop, SLOT(quit()));
- QTime timer;
+ QElapsedTimer timer;
timer.start();
eventLoop.exec();
qint64 elapsed = timer.elapsed();
@@ -280,7 +281,7 @@ protected:
DataReader reader(client, false);
QObject::connect(client, SIGNAL(disconnected()), &eventLoop, SLOT(quit()));
- QTime timer;
+ QElapsedTimer timer;
timer.start();
eventLoop.exec();
qint64 elapsed = timer.elapsed();
@@ -639,7 +640,7 @@ void tst_qnetworkreply::downloadPerformance()
QNetworkReplyPtr reply(manager.get(request));
DataReader reader(reply, false);
- QTime loopTime;
+ QElapsedTimer loopTime;
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
loopTime.start();
QTestEventLoop::instance().enterLoop(40);
@@ -682,7 +683,7 @@ void tst_qnetworkreply::httpUploadPerformance()
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
- QTime time;
+ QElapsedTimer time;
generator.start();
time.start();
QTestEventLoop::instance().enterLoop(40);
@@ -710,7 +711,7 @@ void tst_qnetworkreply::performanceControlRate()
sink.connectToHost("127.0.0.1", sender.serverPort());
DataReader reader(&sink, false);
- QTime loopTime;
+ QElapsedTimer loopTime;
connect(&sink, SIGNAL(disconnected()), &QTestEventLoop::instance(), SLOT(exitLoop()));
loopTime.start();
QTestEventLoop::instance().enterLoop(40);
@@ -748,7 +749,7 @@ void tst_qnetworkreply::httpDownloadPerformance()
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
HttpDownloadPerformanceClient client(reply.data());
- QTime time;
+ QElapsedTimer time;
time.start();
QTestEventLoop::instance().enterLoop(40);
QCOMPARE(reply->error(), QNetworkReply::NoError);
diff --git a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
index a9f8634129..f35e5cd3db 100644
--- a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -27,6 +27,7 @@
****************************************************************************/
#include <QtTest/QtTest>
+#include <QtCore/QElapsedTimer>
#include <qglobal.h>
#include <qcoreapplication.h>
#include <qtcpsocket.h>
@@ -129,7 +130,7 @@ void tst_QTcpServer::ipv4LoopbackPerformanceTest()
QVERIFY(clientB);
QByteArray buffer(16384, '@');
- QTime stopWatch;
+ QElapsedTimer stopWatch;
stopWatch.start();
qlonglong totalWritten = 0;
while (stopWatch.elapsed() < 5000) {
@@ -180,7 +181,7 @@ void tst_QTcpServer::ipv6LoopbackPerformanceTest()
QVERIFY(clientB);
QByteArray buffer(16384, '@');
- QTime stopWatch;
+ QElapsedTimer stopWatch;
stopWatch.start();
qlonglong totalWritten = 0;
while (stopWatch.elapsed() < 5000) {
@@ -230,7 +231,7 @@ void tst_QTcpServer::ipv4PerformanceTest()
QVERIFY(clientB);
QByteArray buffer(16384, '@');
- QTime stopWatch;
+ QElapsedTimer stopWatch;
stopWatch.start();
qlonglong totalWritten = 0;
while (stopWatch.elapsed() < 5000) {
diff --git a/tests/benchmarks/opengl/main.cpp b/tests/benchmarks/opengl/main.cpp
index 0886c0e55b..9462f35c38 100644
--- a/tests/benchmarks/opengl/main.cpp
+++ b/tests/benchmarks/opengl/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -27,6 +27,7 @@
****************************************************************************/
#include <QtGui>
#include <QtOpenGL>
+#include <QtCore/QElapsedTimer>
#include <qtest.h>
@@ -400,7 +401,7 @@ void OpenGLBench::textureUpload()
pb->makeCurrent();
QGLContext *context = const_cast<QGLContext *>(QGLContext::currentContext());
- QTime time;
+ QElapsedTimer time;
time.start();
context->bindTexture(pixmap, GL_TEXTURE_2D, format, (QGLContext::BindOptions) flags);
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp
index eabe3671e5..0aa73b9e26 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -27,7 +27,7 @@
****************************************************************************/
#include <QDebug>
-#include <QTime>
+#include <QElapsedTimer>
#include "itemrecyclinglist.h"
#include "listitemcontainer.h"
@@ -160,10 +160,10 @@ void ItemRecyclingList::themeChange()
void ItemRecyclingList::keyPressEvent(QKeyEvent *event)
{
- static QTime keyPressInterval = QTime::currentTime();
+ static QElapsedTimer keyPressInterval;
static qreal step = 0.0;
static bool repeat = false;
- int interval = keyPressInterval.elapsed();
+ int interval = keyPressInterval.isValid() ? keyPressInterval.elapsed() : 0;
ScrollBar* sb = verticalScrollBar();
qreal currentValue = sb->sliderPosition();
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp
index 8f7736010d..93b8d86019 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -132,7 +132,7 @@ qreal MainView::fps()
void MainView::fpsReset()
{
m_frameCount = 0;
- m_fpsFirstTs.start();
+ m_fpsFirstTs = QTime::currentTime();
m_fpsLatestTs = m_fpsFirstTs;
m_fpsUpdated.start();
}
@@ -201,7 +201,7 @@ void MainView::paintEvent (QPaintEvent *event)
emit repainted();
m_frameCount++;
- m_fpsLatestTs.start();
+ m_fpsLatestTs = QTime::currentTime();
if(m_fpsUpdated.elapsed() > 2000) {
updateFps();
m_fpsUpdated.start();
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h
index d7fe404023..8237ff7469 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -31,6 +31,7 @@
#include <QGraphicsView>
#include <QTime>
+#include <QElapsedTimer>
#include <QTimer>
#include "settings.h"
@@ -100,7 +101,7 @@ private:
QTime m_fpsFirstTs;
QTime m_fpsLatestTs;
bool m_OutputFps;
- QTime m_fpsUpdated;
+ QElapsedTimer m_fpsUpdated;
QList<qreal> m_Fpss;
int m_angle;
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h
index cf11c7fa02..c8769f59b2 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -42,7 +42,7 @@
#include <QPoint>
#include <QTimer>
-#include <QTime>
+#include <QElapsedTimer>
#include "scroller.h"
@@ -70,8 +70,8 @@ public:
QPoint m_cursorPos;
QPointF m_speed;
State m_state;
- QTime m_lastCursorTime;
- QTime m_lastFrameTime;
+ QElapsedTimer m_lastCursorTime;
+ QElapsedTimer m_lastFrameTime;
QTimer m_scrollTimer;
int m_scrollSlowAccum;
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp
index 941cab8c21..d64f3ac38d 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
@@ -29,7 +29,7 @@
#include <QDebug>
#include <QGraphicsLinearLayout>
#include <QFont>
-#include <QTime>
+#include <QElapsedTimer>
#include "simplelist.h"
static const int MinItemWidth = 276;
@@ -99,10 +99,10 @@ void SimpleList::setListItemCaching(bool enable)
void SimpleList::keyPressEvent(QKeyEvent *event)
{
- static QTime keyPressInterval = QTime::currentTime();
+ static QElapsedTimer keyPressInterval;
static qreal step = 0.0;
static bool repeat = false;
- int interval = keyPressInterval.elapsed();
+ int interval = keyPressInterval.isValid() ? keyPressInterval.elapsed() : 0;
ScrollBar* sb = verticalScrollBar();
qreal currentValue = sb->sliderPosition();
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp
index dfa08b6869..93bdc409dc 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -72,7 +72,6 @@ void ChipTester::runBenchmark()
{
npaints = 0;
timerId = startTimer(0);
- stopWatch.start();
eventLoop.exec();
killTimer(timerId);
}
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h
index d85686c94e..cc4a5cd2be 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -31,7 +31,6 @@
#include <QtWidgets/QGraphicsView>
#include <QtCore/QEventLoop>
-#include <QtCore/QTime>
QT_FORWARD_DECLARE_CLASS(QGraphicsScene)
QT_FORWARD_DECLARE_CLASS(QGraphicsView)
@@ -67,7 +66,6 @@ private:
int npaints;
int timerId;
QEventLoop eventLoop;
- QTime stopWatch;
Operation operation;
};
diff --git a/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp b/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp
new file mode 100644
index 0000000000..118f402a15
--- /dev/null
+++ b/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp
@@ -0,0 +1,36 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCborStreamReader>
+
+extern "C" int LLVMFuzzerTestOneInput(const char *Data, size_t Size) {
+ QCborStreamReader reader(QByteArray::fromRawData(Data, Size));
+ while (reader.isValid())
+ reader.next(1024);
+ return 0;
+}
diff --git a/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/next.pro b/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/next.pro
new file mode 100644
index 0000000000..6c988c2434
--- /dev/null
+++ b/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/next.pro
@@ -0,0 +1,10 @@
+QT -= gui
+CONFIG += console
+CONFIG -= app_bundle
+SOURCES += main.cpp
+FUZZ_ENGINE = $$(LIB_FUZZING_ENGINE)
+isEmpty(FUZZ_ENGINE) {
+ QMAKE_LFLAGS += -fsanitize=fuzzer
+} else {
+ LIBS += $$FUZZ_ENGINE
+}