Merge remote-tracking branch 'origin/5.14' into 5.15
Change-Id: Ib2a2e3a292af43be3a980c2ccc943c08f4bbf72f
This commit is contained in:
commit
69a5be7ef0
117
dist/changes-5.14.2
vendored
Normal file
117
dist/changes-5.14.2
vendored
Normal file
@ -0,0 +1,117 @@
|
||||
Qt 5.14.2 is a bug-fix release. It maintains both forward and backward
|
||||
compatibility (source and binary) with Qt 5.14.0 through 5.14.1.
|
||||
|
||||
For more details, refer to the online documentation included in this
|
||||
distribution. The documentation is also available online:
|
||||
|
||||
https://doc.qt.io/qt-5/index.html
|
||||
|
||||
The Qt version 5.14 series is binary compatible with the 5.13.x series.
|
||||
Applications compiled for 5.13 will continue to run with 5.14.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
https://bugreports.qt.io/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
****************************************************************************
|
||||
* QtCore *
|
||||
****************************************************************************
|
||||
|
||||
- QCollator:
|
||||
* QTBUG-81673: Fixed a regression introduced in 5.14.0 that caused
|
||||
QCollator not to operate with default-constructed QStrings and print a
|
||||
warning on Windows.
|
||||
|
||||
- QString, codecs:
|
||||
* QTBUG-62011: ZWNBS is no longer discarded (mistaken for a BOM despite
|
||||
not being at the start) when converting UCS4 to QString's UCS2.
|
||||
|
||||
- QLocale:
|
||||
* QTBUG-80459: Skip digit-grouping if the system locale is configured to
|
||||
use an empty group separator.
|
||||
* QTBUG-81530: Use "+" if MS reports empty for the system locale's plus
|
||||
sign, as documented in MS's API for the relevant query.
|
||||
|
||||
- QLockFile:
|
||||
* Suppressed the warning on QNX that said 'setNativeLocks failed:
|
||||
"Function not implemented"'. There is no difference in behavior: Qt
|
||||
will continue not to be able to apply an OS- level file lock, which
|
||||
means the lock could be accidentally stolen by buggy software. Correct
|
||||
software using QLockFile should not be affected.
|
||||
|
||||
- QObject:
|
||||
* For the purposes of QT_NO_NARROWING_CONVERSIONS_IN_CONNECT, pointer
|
||||
(incl. pointer-to-member) to bool conversions are now considered
|
||||
narrowing. This matches the resolution of a defect report in C++
|
||||
itself.
|
||||
|
||||
- QStorageInfo:
|
||||
* Improved discovery of device nodes on Linux if the /dev entry was
|
||||
renamed after the filesystem was mounted and udev is in use.
|
||||
|
||||
****************************************************************************
|
||||
* QtGui *
|
||||
****************************************************************************
|
||||
|
||||
- QTextMarkdownImporter:
|
||||
* Text in Markdown format is assumed to be UTF-8.
|
||||
* The "title" in a Markdown hyperlink is now used as the tooltip,
|
||||
not the anchor name.
|
||||
* Fixed vulnerability oss-fuzz-20450 (invalid input resulted in an
|
||||
attempt to insert items into a list that no longer exists).
|
||||
|
||||
****************************************************************************
|
||||
* QtWidgets *
|
||||
****************************************************************************
|
||||
|
||||
- QLineEdit:
|
||||
* the inputMask property has allowed any Letter or Number category
|
||||
character for the respective mask characters, not just ASCII. The
|
||||
documentation has been updated accordingly.
|
||||
|
||||
****************************************************************************
|
||||
* qmake *
|
||||
****************************************************************************
|
||||
|
||||
- To remove the NDEBUG define that is added by default in MSVC mkspecs,
|
||||
write DEFINES_RELEASE -= NDEBUG in your .pro file.
|
||||
- Install/uninstall rules are now generated for target.targets on Windows.
|
||||
This mirrors the behavior on Unix.
|
||||
|
||||
****************************************************************************
|
||||
* Third-Party Code *
|
||||
****************************************************************************
|
||||
|
||||
- md4c was updated to 0.4.3. This fixes vulnerability oss-fuzz-20580.
|
||||
|
||||
- QtSQL, sqlite:
|
||||
* Updated to v3.31.1
|
||||
* [QTBUG-82533] Fixed CVE-2020-9327
|
||||
|
||||
****************************************************************************
|
||||
* CMake *
|
||||
****************************************************************************
|
||||
|
||||
- Windows:
|
||||
* Fixed linking with Qt static build
|
||||
|
||||
****************************************************************************
|
||||
* MSVC *
|
||||
****************************************************************************
|
||||
|
||||
- Fixed a compatibility issue found when linking code compiled with
|
||||
version 16.6 to a Qt compiled with 16.5.
|
||||
|
||||
****************************************************************************
|
||||
* MinGW *
|
||||
****************************************************************************
|
||||
|
||||
- Fixed build regressions.
|
||||
- The -debug-and-release configuration has been fixed. In this
|
||||
configuration, Qt libraries again have a 'd' suffix.
|
||||
- In the -debug configuration, libraries do not have a 'd' suffix, similar
|
||||
to Unix platforms.
|
@ -60,7 +60,7 @@ win32|CONFIG(static, static|shared) {
|
||||
"QMAKE_DEFINES_$${ucmodule} = $$val_escape(MODULE_DEFINES)"
|
||||
android {
|
||||
MODULE_PRI_CONT += "QMAKE_LIBS_$${ucmodule} ="
|
||||
} else: qtConfig(debug_and_release): {
|
||||
} else: if(msvc|qtConfig(debug_and_release)): {
|
||||
win32: \
|
||||
MODULE_DEBUG_LIBS = $$DESTDIR/$$prefix$${TARGET}d.$$suffix
|
||||
else: darwin: \
|
||||
|
203
src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch
vendored
Normal file
203
src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch
vendored
Normal file
@ -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)
|
||||
|
31
src/3rdparty/sqlite/sqlite3.c
vendored
31
src/3rdparty/sqlite/sqlite3.c
vendored
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
@ -799,7 +797,7 @@ QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup group)
|
||||
// strlen is meaningless.
|
||||
const char * volatile path = nullptr;
|
||||
if (loc == PrefixPath) {
|
||||
path = getPrefix(
|
||||
ret = getPrefix(
|
||||
#ifdef QT_BUILD_QMAKE
|
||||
group
|
||||
#endif
|
||||
|
@ -1187,6 +1187,9 @@ QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime)
|
||||
{
|
||||
size_t lTimeLength = aTime->length;
|
||||
char *pString = (char *) aTime->data;
|
||||
auto isValidPointer = [pString, lTimeLength](const char *const probe){
|
||||
return size_t(probe - pString) < lTimeLength;
|
||||
};
|
||||
|
||||
if (aTime->type == V_ASN1_UTCTIME) {
|
||||
|
||||
@ -1205,12 +1208,21 @@ QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime)
|
||||
*pBuffer++ = '0';
|
||||
} else {
|
||||
*pBuffer++ = *pString++;
|
||||
if (!isValidPointer(pString)) // Nah.
|
||||
return {};
|
||||
*pBuffer++ = *pString++;
|
||||
if (!isValidPointer(pString)) // Nah.
|
||||
return {};
|
||||
// Skip any fractional seconds...
|
||||
if (*pString == '.') {
|
||||
pString++;
|
||||
while ((*pString >= '0') && (*pString <= '9'))
|
||||
if (!isValidPointer(pString)) // Oh no, cannot dereference (see below).
|
||||
return {};
|
||||
while ((*pString >= '0') && (*pString <= '9')) {
|
||||
pString++;
|
||||
if (!isValidPointer(pString)) // No and no.
|
||||
return {};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1224,6 +1236,10 @@ QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime)
|
||||
if ((*pString != '+') && (*pString != '-'))
|
||||
return QDateTime();
|
||||
|
||||
if (!isValidPointer(pString + 4)) {
|
||||
// What kind of input parameters we were provided with? To hell with them!
|
||||
return {};
|
||||
}
|
||||
lSecondsFromUCT = ((pString[1] - '0') * 10 + (pString[2] - '0')) * 60;
|
||||
lSecondsFromUCT += (pString[3] - '0') * 10 + (pString[4] - '0');
|
||||
lSecondsFromUCT *= 60;
|
||||
|
@ -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;
|
||||
|
@ -105,6 +105,7 @@ static QString alertSound(const QObject *object)
|
||||
case Critical:
|
||||
return QStringLiteral("SystemHand");
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
return QStringLiteral("SystemAsterisk");
|
||||
}
|
||||
|
@ -2301,14 +2301,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();
|
||||
|
@ -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());
|
||||
|
@ -1267,7 +1267,7 @@ void tst_QMenu::QTBUG47515_widgetActionEnterLeave()
|
||||
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
|
||||
QSKIP("Window activation is not supported");
|
||||
if (QGuiApplication::platformName() == QLatin1String("cocoa"))
|
||||
QSKIP("See QTBUG-63031");
|
||||
QSKIP("This test is meaningless on macOS, for additional info see QTBUG-63031");
|
||||
|
||||
const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
|
||||
QRect geometry(QPoint(), availableGeometry.size() / 3);
|
||||
|
Loading…
Reference in New Issue
Block a user