summaryrefslogtreecommitdiffstats
path: root/src/3rdparty
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2020-03-19 16:10:31 +0100
committerMitch Curtis <mitch.curtis@qt.io>2020-03-19 16:10:31 +0100
commit1480922511853b20a5484d941f2d3c629768b7fe (patch)
tree4daff52de8bff80dfe5dea3ebc3fa82b97cf0047 /src/3rdparty
parent05dd80871c870a564a46e388d7fd124a58fc970d (diff)
parent1a18e138f4d17c219c6ffd6e4396c30b960818b4 (diff)
Merge remote-tracking branch 'origin/5.14.2' into 5.14
Diffstat (limited to 'src/3rdparty')
-rw-r--r--src/3rdparty/sqlite/patches/0001-Fix-CVE-2020-9327-in-SQLite.patch203
-rw-r--r--src/3rdparty/sqlite/sqlite3.c31
2 files changed, 225 insertions, 9 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);
}