summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch203
-rw-r--r--src/3rdparty/sqlite/sqlite3.c31
-rw-r--r--src/android/templates/build.gradle4
-rw-r--r--src/corelib/global/qlibraryinfo.cpp14
-rw-r--r--src/platformsupport/glxconvenience/qglxconvenience.cpp2
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp1
-rw-r--r--src/tools/androiddeployqt/main.cpp5
-rw-r--r--src/widgets/kernel/qtooltip.cpp8
8 files changed, 245 insertions, 23 deletions
diff --git a/src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch b/src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch
new file mode 100644
index 0000000000..4fbb2ee339
--- /dev/null
+++ b/src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch
@@ -0,0 +1,203 @@
+From 63566d1fff2665b777650594eec6eefd3587e177 Mon Sep 17 00:00:00 2001
+From: Andy Shaw <andy.shaw@qt.io>
+Date: Wed, 4 Mar 2020 07:44:22 +0100
+Subject: [PATCH] Fix CVE-2020-9327 in SQLite
+
+This was taken from abc473fb8fb99900 in SQLite, ref:
+https://www.sqlite.org/cgi/src/info/abc473fb8fb99900
+
+Fixes: QTBUG-82533
+Change-Id: I9840e29f19a0b861229987f5b59d8585ba2e55dc
+---
+ .../0001-Fix-CVE-2020-9327-in-SQLite.patch | 96 +++++++++++++++++++
+ src/3rdparty/sqlite/sqlite3.c | 31 ++++--
+ 2 files changed, 118 insertions(+), 9 deletions(-)
+ create mode 100644 src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch
+
+diff --git a/src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch b/src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch
+new file mode 100644
+index 0000000000..e0e8206db5
+--- /dev/null
++++ b/src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch
+@@ -0,0 +1,96 @@
++From f79860e0fe251e3267a3cd5558dce98f918e0caa Mon Sep 17 00:00:00 2001
++From: Andy Shaw <andy.shaw@qt.io>
++Date: Wed, 4 Mar 2020 07:44:22 +0100
++Subject: [PATCH] Fix CVE-2020-9327 in SQLite
++
++Fixes: QTBUG-82533
++Change-Id: I9840e29f19a0b861229987f5b59d8585ba2e55dc
++---
++ src/3rdparty/sqlite/sqlite3.c | 31 ++++++++++++++++++++++---------
++ 1 file changed, 22 insertions(+), 9 deletions(-)
++
++diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
++index 55dc686ee0..dfe5323a59 100644
++--- a/src/3rdparty/sqlite/sqlite3.c
+++++ b/src/3rdparty/sqlite/sqlite3.c
++@@ -17428,8 +17428,11 @@ struct Table {
++ */
++ #ifndef SQLITE_OMIT_VIRTUALTABLE
++ # define IsVirtual(X) ((X)->nModuleArg)
+++# define ExprIsVtab(X) \
+++ ((X)->op==TK_COLUMN && (X)->y.pTab!=0 && (X)->y.pTab->nModuleArg)
++ #else
++ # define IsVirtual(X) 0
+++# define ExprIsVtab(X) 0
++ #endif
++
++ /*
++@@ -104133,19 +104136,25 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){
++ case TK_LT:
++ case TK_LE:
++ case TK_GT:
++- case TK_GE:
+++ case TK_GE: {
+++ Expr *pLeft = pExpr->pLeft;
+++ Expr *pRight = pExpr->pRight;
++ testcase( pExpr->op==TK_EQ );
++ testcase( pExpr->op==TK_NE );
++ testcase( pExpr->op==TK_LT );
++ testcase( pExpr->op==TK_LE );
++ testcase( pExpr->op==TK_GT );
++ testcase( pExpr->op==TK_GE );
++- if( (pExpr->pLeft->op==TK_COLUMN && IsVirtual(pExpr->pLeft->y.pTab))
++- || (pExpr->pRight->op==TK_COLUMN && IsVirtual(pExpr->pRight->y.pTab))
+++ /* The y.pTab=0 assignment in wherecode.c always happens after the
+++ ** impliesNotNullRow() test */
+++ if( (pLeft->op==TK_COLUMN && ALWAYS(pLeft->y.pTab!=0)
+++ && IsVirtual(pLeft->y.pTab))
+++ || (pRight->op==TK_COLUMN && ALWAYS(pRight->y.pTab!=0)
+++ && IsVirtual(pRight->y.pTab))
++ ){
++- return WRC_Prune;
+++ return WRC_Prune;
++ }
++-
+++ }
++ default:
++ return WRC_Continue;
++ }
++@@ -142591,7 +142600,8 @@ static int isAuxiliaryVtabOperator(
++ ** MATCH(expression,vtab_column)
++ */
++ pCol = pList->a[1].pExpr;
++- if( pCol->op==TK_COLUMN && IsVirtual(pCol->y.pTab) ){
+++ testcase( pCol->op==TK_COLUMN && pCol->y.pTab==0 );
+++ if( ExprIsVtab(pCol) ){
++ for(i=0; i<ArraySize(aOp); i++){
++ if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
++ *peOp2 = aOp[i].eOp2;
++@@ -142613,7 +142623,8 @@ static int isAuxiliaryVtabOperator(
++ ** with function names in an arbitrary case.
++ */
++ pCol = pList->a[0].pExpr;
++- if( pCol->op==TK_COLUMN && IsVirtual(pCol->y.pTab) ){
+++ testcase( pCol->op==TK_COLUMN && pCol->y.pTab==0 );
+++ if( ExprIsVtab(pCol) ){
++ sqlite3_vtab *pVtab;
++ sqlite3_module *pMod;
++ void (*xNotUsed)(sqlite3_context*,int,sqlite3_value**);
++@@ -142636,10 +142647,12 @@ static int isAuxiliaryVtabOperator(
++ int res = 0;
++ Expr *pLeft = pExpr->pLeft;
++ Expr *pRight = pExpr->pRight;
++- if( pLeft->op==TK_COLUMN && IsVirtual(pLeft->y.pTab) ){
+++ testcase( pLeft->op==TK_COLUMN && pLeft->y.pTab==0 );
+++ if( ExprIsVtab(pLeft) ){
++ res++;
++ }
++- if( pRight && pRight->op==TK_COLUMN && IsVirtual(pRight->y.pTab) ){
+++ testcase( pRight && pRight->op==TK_COLUMN && pRight->y.pTab==0 );
+++ if( pRight && ExprIsVtab(pRight) ){
++ res++;
++ SWAP(Expr*, pLeft, pRight);
++ }
++--
++2.21.0 (Apple Git-122.2)
++
+diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
+index 55dc686ee0..dfe5323a59 100644
+--- a/src/3rdparty/sqlite/sqlite3.c
++++ b/src/3rdparty/sqlite/sqlite3.c
+@@ -17428,8 +17428,11 @@ struct Table {
+ */
+ #ifndef SQLITE_OMIT_VIRTUALTABLE
+ # define IsVirtual(X) ((X)->nModuleArg)
++# define ExprIsVtab(X) \
++ ((X)->op==TK_COLUMN && (X)->y.pTab!=0 && (X)->y.pTab->nModuleArg)
+ #else
+ # define IsVirtual(X) 0
++# define ExprIsVtab(X) 0
+ #endif
+
+ /*
+@@ -104133,19 +104136,25 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){
+ case TK_LT:
+ case TK_LE:
+ case TK_GT:
+- case TK_GE:
++ case TK_GE: {
++ Expr *pLeft = pExpr->pLeft;
++ Expr *pRight = pExpr->pRight;
+ testcase( pExpr->op==TK_EQ );
+ testcase( pExpr->op==TK_NE );
+ testcase( pExpr->op==TK_LT );
+ testcase( pExpr->op==TK_LE );
+ testcase( pExpr->op==TK_GT );
+ testcase( pExpr->op==TK_GE );
+- if( (pExpr->pLeft->op==TK_COLUMN && IsVirtual(pExpr->pLeft->y.pTab))
+- || (pExpr->pRight->op==TK_COLUMN && IsVirtual(pExpr->pRight->y.pTab))
++ /* The y.pTab=0 assignment in wherecode.c always happens after the
++ ** impliesNotNullRow() test */
++ if( (pLeft->op==TK_COLUMN && ALWAYS(pLeft->y.pTab!=0)
++ && IsVirtual(pLeft->y.pTab))
++ || (pRight->op==TK_COLUMN && ALWAYS(pRight->y.pTab!=0)
++ && IsVirtual(pRight->y.pTab))
+ ){
+- return WRC_Prune;
++ return WRC_Prune;
+ }
+-
++ }
+ default:
+ return WRC_Continue;
+ }
+@@ -142591,7 +142600,8 @@ static int isAuxiliaryVtabOperator(
+ ** MATCH(expression,vtab_column)
+ */
+ pCol = pList->a[1].pExpr;
+- if( pCol->op==TK_COLUMN && IsVirtual(pCol->y.pTab) ){
++ testcase( pCol->op==TK_COLUMN && pCol->y.pTab==0 );
++ if( ExprIsVtab(pCol) ){
+ for(i=0; i<ArraySize(aOp); i++){
+ if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
+ *peOp2 = aOp[i].eOp2;
+@@ -142613,7 +142623,8 @@ static int isAuxiliaryVtabOperator(
+ ** with function names in an arbitrary case.
+ */
+ pCol = pList->a[0].pExpr;
+- if( pCol->op==TK_COLUMN && IsVirtual(pCol->y.pTab) ){
++ testcase( pCol->op==TK_COLUMN && pCol->y.pTab==0 );
++ if( ExprIsVtab(pCol) ){
+ sqlite3_vtab *pVtab;
+ sqlite3_module *pMod;
+ void (*xNotUsed)(sqlite3_context*,int,sqlite3_value**);
+@@ -142636,10 +142647,12 @@ static int isAuxiliaryVtabOperator(
+ int res = 0;
+ Expr *pLeft = pExpr->pLeft;
+ Expr *pRight = pExpr->pRight;
+- if( pLeft->op==TK_COLUMN && IsVirtual(pLeft->y.pTab) ){
++ testcase( pLeft->op==TK_COLUMN && pLeft->y.pTab==0 );
++ if( ExprIsVtab(pLeft) ){
+ res++;
+ }
+- if( pRight && pRight->op==TK_COLUMN && IsVirtual(pRight->y.pTab) ){
++ testcase( pRight && pRight->op==TK_COLUMN && pRight->y.pTab==0 );
++ if( pRight && ExprIsVtab(pRight) ){
+ res++;
+ SWAP(Expr*, pLeft, pRight);
+ }
+--
+2.21.0 (Apple Git-122.2)
+
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
index 55dc686ee0..dfe5323a59 100644
--- a/src/3rdparty/sqlite/sqlite3.c
+++ b/src/3rdparty/sqlite/sqlite3.c
@@ -17428,8 +17428,11 @@ struct Table {
*/
#ifndef SQLITE_OMIT_VIRTUALTABLE
# define IsVirtual(X) ((X)->nModuleArg)
+# define ExprIsVtab(X) \
+ ((X)->op==TK_COLUMN && (X)->y.pTab!=0 && (X)->y.pTab->nModuleArg)
#else
# define IsVirtual(X) 0
+# define ExprIsVtab(X) 0
#endif
/*
@@ -104133,19 +104136,25 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){
case TK_LT:
case TK_LE:
case TK_GT:
- case TK_GE:
+ case TK_GE: {
+ Expr *pLeft = pExpr->pLeft;
+ Expr *pRight = pExpr->pRight;
testcase( pExpr->op==TK_EQ );
testcase( pExpr->op==TK_NE );
testcase( pExpr->op==TK_LT );
testcase( pExpr->op==TK_LE );
testcase( pExpr->op==TK_GT );
testcase( pExpr->op==TK_GE );
- if( (pExpr->pLeft->op==TK_COLUMN && IsVirtual(pExpr->pLeft->y.pTab))
- || (pExpr->pRight->op==TK_COLUMN && IsVirtual(pExpr->pRight->y.pTab))
+ /* The y.pTab=0 assignment in wherecode.c always happens after the
+ ** impliesNotNullRow() test */
+ if( (pLeft->op==TK_COLUMN && ALWAYS(pLeft->y.pTab!=0)
+ && IsVirtual(pLeft->y.pTab))
+ || (pRight->op==TK_COLUMN && ALWAYS(pRight->y.pTab!=0)
+ && IsVirtual(pRight->y.pTab))
){
- return WRC_Prune;
+ return WRC_Prune;
}
-
+ }
default:
return WRC_Continue;
}
@@ -142591,7 +142600,8 @@ static int isAuxiliaryVtabOperator(
** MATCH(expression,vtab_column)
*/
pCol = pList->a[1].pExpr;
- if( pCol->op==TK_COLUMN && IsVirtual(pCol->y.pTab) ){
+ testcase( pCol->op==TK_COLUMN && pCol->y.pTab==0 );
+ if( ExprIsVtab(pCol) ){
for(i=0; i<ArraySize(aOp); i++){
if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
*peOp2 = aOp[i].eOp2;
@@ -142613,7 +142623,8 @@ static int isAuxiliaryVtabOperator(
** with function names in an arbitrary case.
*/
pCol = pList->a[0].pExpr;
- if( pCol->op==TK_COLUMN && IsVirtual(pCol->y.pTab) ){
+ testcase( pCol->op==TK_COLUMN && pCol->y.pTab==0 );
+ if( ExprIsVtab(pCol) ){
sqlite3_vtab *pVtab;
sqlite3_module *pMod;
void (*xNotUsed)(sqlite3_context*,int,sqlite3_value**);
@@ -142636,10 +142647,12 @@ static int isAuxiliaryVtabOperator(
int res = 0;
Expr *pLeft = pExpr->pLeft;
Expr *pRight = pExpr->pRight;
- if( pLeft->op==TK_COLUMN && IsVirtual(pLeft->y.pTab) ){
+ testcase( pLeft->op==TK_COLUMN && pLeft->y.pTab==0 );
+ if( ExprIsVtab(pLeft) ){
res++;
}
- if( pRight && pRight->op==TK_COLUMN && IsVirtual(pRight->y.pTab) ){
+ testcase( pRight && pRight->op==TK_COLUMN && pRight->y.pTab==0 );
+ if( pRight && ExprIsVtab(pRight) ){
res++;
SWAP(Expr*, pLeft, pRight);
}
diff --git a/src/android/templates/build.gradle b/src/android/templates/build.gradle
index 3087d08c83..171fe0b996 100644
--- a/src/android/templates/build.gradle
+++ b/src/android/templates/build.gradle
@@ -59,4 +59,8 @@ android {
aaptOptions {
noCompress 'rcc'
}
+
+ defaultConfig {
+ resConfigs "en"
+ }
}
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 7d6beaf9c2..acc73389ed 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -661,7 +661,7 @@ static QString getHostPrefixFromHostBinDir()
#endif
#ifndef QT_BUILD_QMAKE_BOOTSTRAP
-static const char *getPrefix(
+static QString getPrefix(
#ifdef QT_BUILD_QMAKE
QLibraryInfo::PathGroup group
#endif
@@ -670,15 +670,13 @@ static const char *getPrefix(
#if defined(QT_BUILD_QMAKE)
# if QT_CONFIGURE_CROSSBUILD
if (group == QLibraryInfo::DevicePaths)
- return QT_CONFIGURE_PREFIX_PATH;
+ return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH);
# endif
- static QByteArray extPrefixPath = getExtPrefixFromHostBinDir().toLatin1();
- return extPrefixPath.constData();
+ return getExtPrefixFromHostBinDir();
#elif QT_CONFIG(relocatable)
- static QByteArray prefixPath = getRelocatablePrefix().toLatin1();
- return prefixPath.constData();
+ return getRelocatablePrefix();
#else
- return QT_CONFIGURE_PREFIX_PATH;
+ return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH);
#endif
}
#endif // QT_BUILD_QMAKE_BOOTSTRAP
@@ -794,7 +792,7 @@ QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup group)
if (!fromConf) {
const char * volatile path = 0;
if (loc == PrefixPath) {
- path = getPrefix(
+ ret = getPrefix(
#ifdef QT_BUILD_QMAKE
group
#endif
diff --git a/src/platformsupport/glxconvenience/qglxconvenience.cpp b/src/platformsupport/glxconvenience/qglxconvenience.cpp
index 81bccb1c25..e2f4922c8a 100644
--- a/src/platformsupport/glxconvenience/qglxconvenience.cpp
+++ b/src/platformsupport/glxconvenience/qglxconvenience.cpp
@@ -224,6 +224,8 @@ GLXFBConfig qglx_findConfig(Display *display, int screen , QSurfaceFormat format
}
QXlibPointer<XVisualInfo> visual(glXGetVisualFromFBConfig(display, candidate));
+ if (!visual)
+ continue;
int actualRed;
int actualGreen;
int actualBlue;
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp
index 32a57473ad..fef5346eaf 100644
--- a/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp
@@ -105,6 +105,7 @@ static QString alertSound(const QObject *object)
case Critical:
return QStringLiteral("SystemHand");
}
+ return QString();
}
return QStringLiteral("SystemAsterisk");
}
diff --git a/src/tools/androiddeployqt/main.cpp b/src/tools/androiddeployqt/main.cpp
index 3d378024c9..c2710c5619 100644
--- a/src/tools/androiddeployqt/main.cpp
+++ b/src/tools/androiddeployqt/main.cpp
@@ -2287,14 +2287,15 @@ static bool mergeGradleProperties(const QString &path, GradleProperties properti
bool buildAndroidProject(const Options &options)
{
GradleProperties localProperties;
- localProperties["sdk.dir"] = options.sdkPath.toUtf8();
- localProperties["ndk.dir"] = options.ndkPath.toUtf8();
+ localProperties["sdk.dir"] = QDir::fromNativeSeparators(options.sdkPath).toUtf8();
+ localProperties["ndk.dir"] = QDir::fromNativeSeparators(options.ndkPath).toUtf8();
if (!mergeGradleProperties(options.outputDirectory + QLatin1String("local.properties"), localProperties))
return false;
QString gradlePropertiesPath = options.outputDirectory + QLatin1String("gradle.properties");
GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath);
+ gradleProperties["android.bundle.enableUncompressedNativeLibs"] = "false";
gradleProperties["buildDir"] = "build";
gradleProperties["qt5AndroidDir"] = (options.qtInstallDirectory + QLatin1String("/src/android/java")).toUtf8();
gradleProperties["androidCompileSdkVersion"] = options.androidPlatform.split(QLatin1Char('-')).last().toLocal8Bit();
diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp
index 1ec3612457..45835a2043 100644
--- a/src/widgets/kernel/qtooltip.cpp
+++ b/src/widgets/kernel/qtooltip.cpp
@@ -402,10 +402,10 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w)
#endif //QT_NO_STYLE_STYLESHEET
QPoint p = pos;
- int screenNumber = getTipScreen(pos, w);
- QScreen *screen = QGuiApplication::screens().at(screenNumber);
- if (screen) {
- const QPlatformScreen *platformScreen = screen->handle();
+ const QScreen *screen = QGuiApplication::screens().value(getTipScreen(pos, w),
+ QGuiApplication::primaryScreen());
+ // a QScreen's handle *should* never be null, so this is a bit paranoid
+ if (const QPlatformScreen *platformScreen = screen ? screen->handle() : nullptr) {
const QSize cursorSize = QHighDpi::fromNativePixels(platformScreen->cursor()->size(),
platformScreen);
QPoint offset(2, cursorSize.height());