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)"
|
"QMAKE_DEFINES_$${ucmodule} = $$val_escape(MODULE_DEFINES)"
|
||||||
android {
|
android {
|
||||||
MODULE_PRI_CONT += "QMAKE_LIBS_$${ucmodule} ="
|
MODULE_PRI_CONT += "QMAKE_LIBS_$${ucmodule} ="
|
||||||
} else: qtConfig(debug_and_release): {
|
} else: if(msvc|qtConfig(debug_and_release)): {
|
||||||
win32: \
|
win32: \
|
||||||
MODULE_DEBUG_LIBS = $$DESTDIR/$$prefix$${TARGET}d.$$suffix
|
MODULE_DEBUG_LIBS = $$DESTDIR/$$prefix$${TARGET}d.$$suffix
|
||||||
else: darwin: \
|
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)
|
||||||
|
|
29
src/3rdparty/sqlite/sqlite3.c
vendored
29
src/3rdparty/sqlite/sqlite3.c
vendored
@ -17428,8 +17428,11 @@ struct Table {
|
|||||||
*/
|
*/
|
||||||
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
||||||
# define IsVirtual(X) ((X)->nModuleArg)
|
# define IsVirtual(X) ((X)->nModuleArg)
|
||||||
|
# define ExprIsVtab(X) \
|
||||||
|
((X)->op==TK_COLUMN && (X)->y.pTab!=0 && (X)->y.pTab->nModuleArg)
|
||||||
#else
|
#else
|
||||||
# define IsVirtual(X) 0
|
# define IsVirtual(X) 0
|
||||||
|
# define ExprIsVtab(X) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -104133,19 +104136,25 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){
|
|||||||
case TK_LT:
|
case TK_LT:
|
||||||
case TK_LE:
|
case TK_LE:
|
||||||
case TK_GT:
|
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_EQ );
|
||||||
testcase( pExpr->op==TK_NE );
|
testcase( pExpr->op==TK_NE );
|
||||||
testcase( pExpr->op==TK_LT );
|
testcase( pExpr->op==TK_LT );
|
||||||
testcase( pExpr->op==TK_LE );
|
testcase( pExpr->op==TK_LE );
|
||||||
testcase( pExpr->op==TK_GT );
|
testcase( pExpr->op==TK_GT );
|
||||||
testcase( pExpr->op==TK_GE );
|
testcase( pExpr->op==TK_GE );
|
||||||
if( (pExpr->pLeft->op==TK_COLUMN && IsVirtual(pExpr->pLeft->y.pTab))
|
/* The y.pTab=0 assignment in wherecode.c always happens after the
|
||||||
|| (pExpr->pRight->op==TK_COLUMN && IsVirtual(pExpr->pRight->y.pTab))
|
** 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:
|
default:
|
||||||
return WRC_Continue;
|
return WRC_Continue;
|
||||||
}
|
}
|
||||||
@ -142591,7 +142600,8 @@ static int isAuxiliaryVtabOperator(
|
|||||||
** MATCH(expression,vtab_column)
|
** MATCH(expression,vtab_column)
|
||||||
*/
|
*/
|
||||||
pCol = pList->a[1].pExpr;
|
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++){
|
for(i=0; i<ArraySize(aOp); i++){
|
||||||
if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
|
if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
|
||||||
*peOp2 = aOp[i].eOp2;
|
*peOp2 = aOp[i].eOp2;
|
||||||
@ -142613,7 +142623,8 @@ static int isAuxiliaryVtabOperator(
|
|||||||
** with function names in an arbitrary case.
|
** with function names in an arbitrary case.
|
||||||
*/
|
*/
|
||||||
pCol = pList->a[0].pExpr;
|
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_vtab *pVtab;
|
||||||
sqlite3_module *pMod;
|
sqlite3_module *pMod;
|
||||||
void (*xNotUsed)(sqlite3_context*,int,sqlite3_value**);
|
void (*xNotUsed)(sqlite3_context*,int,sqlite3_value**);
|
||||||
@ -142636,10 +142647,12 @@ static int isAuxiliaryVtabOperator(
|
|||||||
int res = 0;
|
int res = 0;
|
||||||
Expr *pLeft = pExpr->pLeft;
|
Expr *pLeft = pExpr->pLeft;
|
||||||
Expr *pRight = pExpr->pRight;
|
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++;
|
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++;
|
res++;
|
||||||
SWAP(Expr*, pLeft, pRight);
|
SWAP(Expr*, pLeft, pRight);
|
||||||
}
|
}
|
||||||
|
@ -661,7 +661,7 @@ static QString getHostPrefixFromHostBinDir()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef QT_BUILD_QMAKE_BOOTSTRAP
|
#ifndef QT_BUILD_QMAKE_BOOTSTRAP
|
||||||
static const char *getPrefix(
|
static QString getPrefix(
|
||||||
#ifdef QT_BUILD_QMAKE
|
#ifdef QT_BUILD_QMAKE
|
||||||
QLibraryInfo::PathGroup group
|
QLibraryInfo::PathGroup group
|
||||||
#endif
|
#endif
|
||||||
@ -670,15 +670,13 @@ static const char *getPrefix(
|
|||||||
#if defined(QT_BUILD_QMAKE)
|
#if defined(QT_BUILD_QMAKE)
|
||||||
# if QT_CONFIGURE_CROSSBUILD
|
# if QT_CONFIGURE_CROSSBUILD
|
||||||
if (group == QLibraryInfo::DevicePaths)
|
if (group == QLibraryInfo::DevicePaths)
|
||||||
return QT_CONFIGURE_PREFIX_PATH;
|
return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH);
|
||||||
# endif
|
# endif
|
||||||
static QByteArray extPrefixPath = getExtPrefixFromHostBinDir().toLatin1();
|
return getExtPrefixFromHostBinDir();
|
||||||
return extPrefixPath.constData();
|
|
||||||
#elif QT_CONFIG(relocatable)
|
#elif QT_CONFIG(relocatable)
|
||||||
static QByteArray prefixPath = getRelocatablePrefix().toLatin1();
|
return getRelocatablePrefix();
|
||||||
return prefixPath.constData();
|
|
||||||
#else
|
#else
|
||||||
return QT_CONFIGURE_PREFIX_PATH;
|
return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif // QT_BUILD_QMAKE_BOOTSTRAP
|
#endif // QT_BUILD_QMAKE_BOOTSTRAP
|
||||||
@ -799,7 +797,7 @@ QLibraryInfo::rawLocation(LibraryLocation loc, PathGroup group)
|
|||||||
// strlen is meaningless.
|
// strlen is meaningless.
|
||||||
const char * volatile path = nullptr;
|
const char * volatile path = nullptr;
|
||||||
if (loc == PrefixPath) {
|
if (loc == PrefixPath) {
|
||||||
path = getPrefix(
|
ret = getPrefix(
|
||||||
#ifdef QT_BUILD_QMAKE
|
#ifdef QT_BUILD_QMAKE
|
||||||
group
|
group
|
||||||
#endif
|
#endif
|
||||||
|
@ -1187,6 +1187,9 @@ QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime)
|
|||||||
{
|
{
|
||||||
size_t lTimeLength = aTime->length;
|
size_t lTimeLength = aTime->length;
|
||||||
char *pString = (char *) aTime->data;
|
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) {
|
if (aTime->type == V_ASN1_UTCTIME) {
|
||||||
|
|
||||||
@ -1205,12 +1208,21 @@ QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime)
|
|||||||
*pBuffer++ = '0';
|
*pBuffer++ = '0';
|
||||||
} else {
|
} else {
|
||||||
*pBuffer++ = *pString++;
|
*pBuffer++ = *pString++;
|
||||||
|
if (!isValidPointer(pString)) // Nah.
|
||||||
|
return {};
|
||||||
*pBuffer++ = *pString++;
|
*pBuffer++ = *pString++;
|
||||||
|
if (!isValidPointer(pString)) // Nah.
|
||||||
|
return {};
|
||||||
// Skip any fractional seconds...
|
// Skip any fractional seconds...
|
||||||
if (*pString == '.') {
|
if (*pString == '.') {
|
||||||
pString++;
|
pString++;
|
||||||
while ((*pString >= '0') && (*pString <= '9'))
|
if (!isValidPointer(pString)) // Oh no, cannot dereference (see below).
|
||||||
|
return {};
|
||||||
|
while ((*pString >= '0') && (*pString <= '9')) {
|
||||||
pString++;
|
pString++;
|
||||||
|
if (!isValidPointer(pString)) // No and no.
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1224,6 +1236,10 @@ QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime)
|
|||||||
if ((*pString != '+') && (*pString != '-'))
|
if ((*pString != '+') && (*pString != '-'))
|
||||||
return QDateTime();
|
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[1] - '0') * 10 + (pString[2] - '0')) * 60;
|
||||||
lSecondsFromUCT += (pString[3] - '0') * 10 + (pString[4] - '0');
|
lSecondsFromUCT += (pString[3] - '0') * 10 + (pString[4] - '0');
|
||||||
lSecondsFromUCT *= 60;
|
lSecondsFromUCT *= 60;
|
||||||
|
@ -224,6 +224,8 @@ GLXFBConfig qglx_findConfig(Display *display, int screen , QSurfaceFormat format
|
|||||||
}
|
}
|
||||||
|
|
||||||
QXlibPointer<XVisualInfo> visual(glXGetVisualFromFBConfig(display, candidate));
|
QXlibPointer<XVisualInfo> visual(glXGetVisualFromFBConfig(display, candidate));
|
||||||
|
if (!visual)
|
||||||
|
continue;
|
||||||
int actualRed;
|
int actualRed;
|
||||||
int actualGreen;
|
int actualGreen;
|
||||||
int actualBlue;
|
int actualBlue;
|
||||||
|
@ -105,6 +105,7 @@ static QString alertSound(const QObject *object)
|
|||||||
case Critical:
|
case Critical:
|
||||||
return QStringLiteral("SystemHand");
|
return QStringLiteral("SystemHand");
|
||||||
}
|
}
|
||||||
|
return QString();
|
||||||
}
|
}
|
||||||
return QStringLiteral("SystemAsterisk");
|
return QStringLiteral("SystemAsterisk");
|
||||||
}
|
}
|
||||||
|
@ -2301,14 +2301,15 @@ static bool mergeGradleProperties(const QString &path, GradleProperties properti
|
|||||||
bool buildAndroidProject(const Options &options)
|
bool buildAndroidProject(const Options &options)
|
||||||
{
|
{
|
||||||
GradleProperties localProperties;
|
GradleProperties localProperties;
|
||||||
localProperties["sdk.dir"] = options.sdkPath.toUtf8();
|
localProperties["sdk.dir"] = QDir::fromNativeSeparators(options.sdkPath).toUtf8();
|
||||||
localProperties["ndk.dir"] = options.ndkPath.toUtf8();
|
localProperties["ndk.dir"] = QDir::fromNativeSeparators(options.ndkPath).toUtf8();
|
||||||
|
|
||||||
if (!mergeGradleProperties(options.outputDirectory + QLatin1String("local.properties"), localProperties))
|
if (!mergeGradleProperties(options.outputDirectory + QLatin1String("local.properties"), localProperties))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QString gradlePropertiesPath = options.outputDirectory + QLatin1String("gradle.properties");
|
QString gradlePropertiesPath = options.outputDirectory + QLatin1String("gradle.properties");
|
||||||
GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath);
|
GradleProperties gradleProperties = readGradleProperties(gradlePropertiesPath);
|
||||||
|
gradleProperties["android.bundle.enableUncompressedNativeLibs"] = "false";
|
||||||
gradleProperties["buildDir"] = "build";
|
gradleProperties["buildDir"] = "build";
|
||||||
gradleProperties["qt5AndroidDir"] = (options.qtInstallDirectory + QLatin1String("/src/android/java")).toUtf8();
|
gradleProperties["qt5AndroidDir"] = (options.qtInstallDirectory + QLatin1String("/src/android/java")).toUtf8();
|
||||||
gradleProperties["androidCompileSdkVersion"] = options.androidPlatform.split(QLatin1Char('-')).last().toLocal8Bit();
|
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
|
#endif //QT_NO_STYLE_STYLESHEET
|
||||||
|
|
||||||
QPoint p = pos;
|
QPoint p = pos;
|
||||||
int screenNumber = getTipScreen(pos, w);
|
const QScreen *screen = QGuiApplication::screens().value(getTipScreen(pos, w),
|
||||||
QScreen *screen = QGuiApplication::screens().at(screenNumber);
|
QGuiApplication::primaryScreen());
|
||||||
if (screen) {
|
// a QScreen's handle *should* never be null, so this is a bit paranoid
|
||||||
const QPlatformScreen *platformScreen = screen->handle();
|
if (const QPlatformScreen *platformScreen = screen ? screen->handle() : nullptr) {
|
||||||
const QSize cursorSize = QHighDpi::fromNativePixels(platformScreen->cursor()->size(),
|
const QSize cursorSize = QHighDpi::fromNativePixels(platformScreen->cursor()->size(),
|
||||||
platformScreen);
|
platformScreen);
|
||||||
QPoint offset(2, cursorSize.height());
|
QPoint offset(2, cursorSize.height());
|
||||||
|
@ -1267,7 +1267,7 @@ void tst_QMenu::QTBUG47515_widgetActionEnterLeave()
|
|||||||
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
|
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
|
||||||
QSKIP("Window activation is not supported");
|
QSKIP("Window activation is not supported");
|
||||||
if (QGuiApplication::platformName() == QLatin1String("cocoa"))
|
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();
|
const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
|
||||||
QRect geometry(QPoint(), availableGeometry.size() / 3);
|
QRect geometry(QPoint(), availableGeometry.size() / 3);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user