diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2020-08-25 10:45:55 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2020-08-25 10:45:55 +0100 |
commit | 3cf7c3ef441822c889356fd1812ebf2944a59851 (patch) | |
tree | c513fe68548b40365c1c2ebfe35c58ad431cdd77 /dev-db/sqlite | |
parent | 05b8b0e0af1d72e51a3ee61522941bf7605cd01c (diff) |
gentoo resync : 25.08.2020
Diffstat (limited to 'dev-db/sqlite')
14 files changed, 2333 insertions, 554 deletions
diff --git a/dev-db/sqlite/Manifest b/dev-db/sqlite/Manifest index 858eea63994e..c3cac931bf93 100644 --- a/dev-db/sqlite/Manifest +++ b/dev-db/sqlite/Manifest @@ -1,11 +1,11 @@ -AUX sqlite-3.25.0-nonfull_archive-build.patch 416 BLAKE2B 37faa30235c1b668d3cf510c353730a932a807f650c638ac0d07d3a1c0534dedef233c06cef52b6569eb1d58b5bcd910dd59c8d2e792726945f49f882d4181be SHA512 44db89a32b51713cf59fb3f071cca08648deebf6e2830dd61b033a5160ce6ddcbf54a191be42b3b252ea4bc16614fbcfa569207f34f268f1da5acd5fadcda668 -AUX sqlite-3.31.0-full_archive-build.patch 15642 BLAKE2B c07992c52f1e67d5d5eae1b0cfc0fe20b26e4405ccd8f6c7ece75ea3908f9699e67520c3d27b614b01d20b5758b2b85a8f3b66aa1675cc8fd248d7742fc55ec9 SHA512 14727ab43911f810a22b3aa2a48ce8074422ad38898d0064b7ec4b9a226b27a781ac342a60f32ae1edbaae155bdf142456f66faf8d5adcd33b902b77c3607f72 -AUX sqlite-3.31.1-full_archive-architectures.patch 2993 BLAKE2B 252d92ec087482b062e0dae0b223e0c0dee6f5857765c6babb857922eb97183a1c72b4ba196685e6b1e1631990123bc8cd71a4e26eabe317741cdc19ac54c201 SHA512 d65475759e2ae663094803d7c74e62fe233630afcf7bd287e77a613144889efb09d57e9f9fa8dce634872e37f1ae53134793fbcfd3d7bd260fc6d774bf5e8aad -AUX sqlite-3.31.1-full_archive-security_fixes.patch 5388 BLAKE2B c2740e47d2aab8b99c9d8ae9f346f51f0dca8cdff7d3b991346aff5e94553af1c523b48d33490abb83ecc77be9ae075580dc095b827b348c657b9d5082ec5fe3 SHA512 53894b3bdf5e4a61c58b23758867a63db73b49b856f696a32c6c6d0224d54359927db635abec770e84b111dbf0fbb48b9742809be05504e12854385c58024819 -AUX sqlite-3.31.1-nonfull_archive-architectures.patch 826 BLAKE2B a506bc0a44477c7b5ad85ad2144871a4d1311d84e8da7b8958a73762662caf11734a3152984430b2c48120d1bfa1099b8a740f9a5c23ee8de1292d7ac1ffcea6 SHA512 041f0d4e07315c48ddce9d1576329647daa787fdcc76d2590fa2bbfb33a13f1b86707379a73b7db35619731c2df0e094b26879648e4b6a9b40696dbd39c7bffa -AUX sqlite-3.31.1-nonfull_archive-security_fixes.patch 4099 BLAKE2B bc07ee47164abeefc8d802741e68d77ce339209bc2d143246287e7d2743a57f13a84c08d048c1e72cee84a3ecc2e323a316f7b231352558f28cbd4259c5f8f8b SHA512 b8f18b4895168036cb5958dade34060b2cfee7aeaf61f20fa741f6d9e61856f643597324313e7e0cd1732346099da78111cf44171e355aa7f13ef8a6350845d6 -DIST sqlite-autoconf-3310100.tar.gz 2887243 BLAKE2B ef5d40b6e6c59a51ae95368eb9f6a938188813f89d5328ea1c1180ef35f124c14b3e83b0832ae5c2fa24cc2df352f1b0ea5f20b64d0762d50a700d9895f9a12e SHA512 d85250ba5f78f0c918880f663741709aba662192f04888b2324a0df17affdf5b8540e8428c6c7315119806e7adad758ea281c9b403c0ad94ac6a9bd1b93fd617 -DIST sqlite-doc-3310100.zip 9600405 BLAKE2B 324fb7a0a38bc56476e41504c14996e9d5d83ac659403991515413d49f5ee3aad064ccece25f52b6041ef26bf23f320a9be1b6b02c5fbe96c36372107f54fc2e SHA512 5572e2c2dac30c014ef9cd60a620b7a7bb610f91a47e2890c0641540d39b9d5ce0e914ee697583130317633918b7827e2612a7cbc024f5bd6aa22ad28a78b56b -DIST sqlite-src-3310100.zip 12510166 BLAKE2B a856695e8552b8b4dcb28452fdbd48305fdb9072f9d6587f4b1f4445daf386e920eb936dcb50fdfe41a49f84b26a7c5fedcffea5acf3ba3fa935c36695d4b8ee SHA512 af92a00877bcd90372d6f83a27fea12b4fe8d1155b223a6bccbccc31bb8e3d2269cd9e68f329bc55f70d1068ccbf220ff5abccea6f593fd7a3a4bdd732d1cdbe -EBUILD sqlite-3.31.1.ebuild 11936 BLAKE2B ffb1297a2df474acaaf030e2a29ee297e19133db11276a09cc0507b913ace9502bc3a22efdb55e4e935727ed3a6a785c4132b8b54663015475d3801ab16adf0c SHA512 2e91be4abb03493654561005a1edf8d5cbbce5740adc15205331b881271e8e605c570948b7576f98cdb0bccf1aae1f3d37f2c4b6bb188b5c46e06aed5a107788 +AUX sqlite-3.32.1-full_archive-build_1.patch 18726 BLAKE2B 91906aa09514d6f31a87648d7a12fd7a187cbc328bc1d2e41dcd0d041c1ad1959953823af5b84994d742dfcba46727af5797fe83c576ae483133156abbb00f1c SHA512 b206d2767ac9312165085b623f06cf19d36e4fa85c33bce67db56ae41880374ae4115294f417de67f32f6ea9200b028160cdde3ad3420c5ad342b7ec0928fa87 +AUX sqlite-3.32.1-full_archive-build_2.patch 20259 BLAKE2B 851918379951943ac02fc5bd5b4807f05e9faf2a7e3d01d945761801beeb25c4083bdb5b48ddb79f9e54b859932fffbb393eadfa3ae16ea400e7490fb730170a SHA512 cf4a74ebb0e7b81b3225bd6d38fde663b981d6e5217996a0c80a4880a3818d7b84c39ed6527573426b2d0deebff74b46775c2ca91b8b6503e2f26758d9eb2ad3 +AUX sqlite-3.32.3-backports_1.patch 17914 BLAKE2B cca0c1d7e1bcccbf9042725f7df32359c954725e4a13e6956dc642aa082abe85953df98f4d3ba59c11599c3a9595126da78600ad0d4a66dce987be45f17c582e SHA512 44f91b92d6c8086b10cd96a382ea391108bde5a2e48f2b9ae43e97fe9fa9d5f4c64ee500bb8ed4414dd519f85823121265c450e92898d13468297d7bf9d28ddc +AUX sqlite-3.32.3-backports_2.patch 18056 BLAKE2B 60be3513c3cc687e8fac5689f096a8e543904dfd8f5e3f01f92245de963cc01b7f02774b0a60b2ca3fe3415d0eb3615f65e8756e174efccc98dc5438dbf2189c SHA512 4bb01074417f3e3af6bdf619c0ccc61fe54f4e926a1dd31a57e1a595cc713e58ee52cac7baa11ffa271ed434a8bb645be7fd25a9fa93cc596707f2e503fe87a1 +AUX sqlite-3.32.3-backports_3.patch 9059 BLAKE2B 4c36eafca13eab04bfb0ce871458d12925b225f05edce785f7f86650de31808179d8bebeffcc23ca8f68069fa2854b7a042ef91e85705b27e85af1b3c424ced8 SHA512 c897d7ebc9b8b5f29c8ed27e76bdeeb3a0bde62fcd4f5398deca2f97c99cc2ef5556389b0c79dced64982fbde2a6322abd91e134255156b572bca476e2a7c050 +AUX sqlite-3.32.3-security_fixes.patch 4850 BLAKE2B 0dad99a14909c85f5f8b31d74dd1d63a5be7d3c6499bba788a2ff09dd1d6bb9badce57499c99c9c6fdc5b7177204452a2e14214748931ccf502154c44e3c29a8 SHA512 5845368e63676fb050618ca923b5c8348d17e003e4735f36bef17b185f434348708ce3e05be76e7c661eb5321a199364c9ba06492f71a9921b30c00255b55766 +DIST sqlite-doc-3320300.zip 9772933 BLAKE2B efd72c18d0398c103e3f9c4cfeb03e7794fd69691b1bcea95b74a0c5d8af22aa13abc84ce8dc5864b5f4cb79be239433933b4daca34d1adfcc6f31ce2cde66bf SHA512 af9dca970b4c03c058d7d1cd55a3d11fa4b112dccac942b8660d82a7e9ba2956963fcb429eedfdc85915637c102e1f904ace98c8e0455c4120422bbd9f2f3cd0 +DIST sqlite-src-3320300.zip 12461750 BLAKE2B 59cce74d284191cfc69ac09b6014701ddd2b7b3d7ebaad5da4ad71cc200e70285b3b201ff174819aa8dde5f610589d7947f547450334f0f17149014078316185 SHA512 7e027c7163a760fb9b6dbfd2e4ccffb39d4972280583fb0d7f8390017101dfed3b12a36653b3130a548ae4d04c6abb11c0a1921b6f09c54c6ae1e72fbdcb2fd4 +EBUILD sqlite-3.32.3-r1.ebuild 10369 BLAKE2B c997121e13e1f2b86128e18a86d7260f340f4a1be42b8ff2c02a34b13689f883572352e4e3c9ada1dbfccd2e215d8d1e6b18e912a6d966bb76112aaba241bb53 SHA512 39c97994f1f8d505055701173ebdf41732dbce2b4071c5a4b2e17a8d29f09ae92a2b731521fcf2a33ad5821cb18e9bd790dd1789d4fe9e3e9002786e34caf8ca +EBUILD sqlite-3.32.3.ebuild 10424 BLAKE2B abfa3de0889bd3931678ffd3a0c8c8d5814a7a673f922965484a2d3c85c3a7203f17ff53dcb2cf2dd4866b1936920b084c856909803fd7f828efab6c52b1446f SHA512 2f74dbdb11ca5d9ed8989ef86cac2d087b7f5e420031b69dac5bdafdd6887e739adbb88f9159082cd2a787cce9923b33bb1bd497e0f7900eca6af18b1a3b79d1 MISC metadata.xml 748 BLAKE2B c58da3e33e12b7747bbadacfd1a6137cf847fd5bd0525fc02ef854eb5bcad7bad0b29739257b632e19190995659768fdea418ffa7e485e55ef15f40f58b8382c SHA512 66f3f134065f76229b74a7ab7b469066a93da737a9037435e6fe78e85f45c980ec561537f2bb9b95db9de026bad025d8b06682187c97dedd2741717e893d43da diff --git a/dev-db/sqlite/files/sqlite-3.25.0-nonfull_archive-build.patch b/dev-db/sqlite/files/sqlite-3.25.0-nonfull_archive-build.patch deleted file mode 100644 index be0a7e30dde3..000000000000 --- a/dev-db/sqlite/files/sqlite-3.25.0-nonfull_archive-build.patch +++ /dev/null @@ -1,14 +0,0 @@ -Fix building with dlopen() not available. - ---- /configure.ac -+++ /configure.ac -@@ -102,6 +102,9 @@ - [], [enable_dynamic_extensions=yes]) - if test x"$enable_dynamic_extensions" != "xno"; then - AC_SEARCH_LIBS(dlopen, dl) -+ if test "${ac_cv_search_dlopen}" = "no"; then -+ BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_OMIT_LOAD_EXTENSION=1" -+ fi - else - BUILD_CFLAGS="$BUILD_CFLAGS -DSQLITE_OMIT_LOAD_EXTENSION=1" - fi diff --git a/dev-db/sqlite/files/sqlite-3.31.1-full_archive-architectures.patch b/dev-db/sqlite/files/sqlite-3.31.1-full_archive-architectures.patch deleted file mode 100644 index a0cf7514d0f7..000000000000 --- a/dev-db/sqlite/files/sqlite-3.31.1-full_archive-architectures.patch +++ /dev/null @@ -1,72 +0,0 @@ -https://sqlite.org/cgi/src/info/04885763c4cd00cb -https://sqlite.org/cgi/src/info/b20503aaf5b6595a - ---- /ext/fts5/test/fts5matchinfo.test -+++ /ext/fts5/test/fts5matchinfo.test -@@ -500,14 +500,18 @@ - INSERT INTO t1 VALUES('c', 'd'); - } - -+if {$tcl_platform(byteOrder)=="littleEndian"} { -+ set res {X'02000000'} -+} else { -+ set res {X'00000002'} -+} - do_execsql_test 15.1 { - SELECT quote(matchinfo(t1, 'n')) FROM t1 LIMIT 1; --} {X'02000000'} -- -+} $res - do_execsql_test 15.2 { - DELETE FROM t1_content WHERE rowid=1; - SELECT quote(matchinfo(t1, 'n')) FROM t1 LIMIT 1; --} {X'02000000'} -+} $res - - fts5_aux_test_functions db - do_execsql_test 15.3 { -@@ -517,4 +521,3 @@ - } - - finish_test -- ---- /src/insert.c -+++ /src/insert.c -@@ -2170,12 +2170,14 @@ - x = *sqlite3VdbeGetOp(v, addrConflictCk); - if( x.opcode!=OP_IdxRowid ){ - int p2; /* New P2 value for copied conflict check opcode */ -+ const char *zP4; - if( sqlite3OpcodeProperty[x.opcode]&OPFLG_JUMP ){ - p2 = lblRecheckOk; - }else{ - p2 = x.p2; - } -- sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, x.p4.z, x.p4type); -+ zP4 = x.p4type==P4_INT32 ? SQLITE_INT_TO_PTR(x.p4.i) : x.p4.z; -+ sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, zP4, x.p4type); - sqlite3VdbeChangeP5(v, x.p5); - VdbeCoverageIf(v, p2!=x.p2); - } ---- /test/fts4aa.test -+++ /test/fts4aa.test -@@ -229,13 +229,18 @@ - # 2019-11-18 https://bugs.chromium.org/p/chromium/issues/detail?id=1025467 - db close - sqlite3 db :memory: -+if {$tcl_platform(byteOrder)=="littleEndian"} { -+ set res {X'0200000000000000000000000E0000000E00000001000000010000000100000001000000'} -+} else { -+ set res {X'0000000200000000000000000000000E0000000E00000001000000010000000100000001'} -+} - do_execsql_test fts4aa-6.10 { - CREATE VIRTUAL TABLE f USING fts4(); - INSERT INTO f_segdir VALUES (77,91,0,0,'255 77',x'0001308000004d5c4ddddddd4d4d7b4d4d4d614d8019ff4d05000001204d4d2e4d6e4d4d4d4b4d6c4d004d4d4d4d4d4d3d000000004d5d4d4d645d4d004d4d4d4d4d4d4d4d4d454d6910004d05ffff054d646c4d004d5d4d4d4d4d3d000000004d4d4d4d4d4d4d4d4d4d4d69624d4d4d04004d4d4d4d4d604d4ce1404d554d45'); - INSERT INTO f_segdir VALUES (77,108,0,0,'255 77',x'0001310000fa64004d4d4d3c5d4d654d4d4d614d8000ff4d05000001204d4d2e4d6e4d4d4dff4d4d4d4d4d4d00104d4d4d4d000000004d4d4d0400311d4d4d4d4d4d4d4d4d4d684d6910004d05ffff054d4d6c4d004d4d4d4d4d4d3d000000004d4d4d4d644d4d4d4d4d4d69624d4d4d03ed4d4d4d4d4d604d4ce1404d550080'); - INSERT INTO f_stat VALUES (0,x'80808080100000000064004d4d4d3c4d4d654d4d4d614d8000ff4df6ff1a00204d4d2e4d6e4d4d4d104d4d4d4d4d4d00104d4d4d4d4d4d69574d4d4d000031044d4d4d3e4d4d4c4d05004d6910'); - SELECT quote(matchinfo(f,'pnax')) from f where f match '0 1'; --} {X'0200000000000000000000000E0000000E00000001000000010000000100000001000000'} -+} $res - - # 2019-11-18 Detect infinite loop in fts3SelectLeaf() - db close diff --git a/dev-db/sqlite/files/sqlite-3.31.1-full_archive-security_fixes.patch b/dev-db/sqlite/files/sqlite-3.31.1-full_archive-security_fixes.patch deleted file mode 100644 index c0bb7144a67b..000000000000 --- a/dev-db/sqlite/files/sqlite-3.31.1-full_archive-security_fixes.patch +++ /dev/null @@ -1,163 +0,0 @@ -https://sqlite.org/cgi/src/info/9d0d4ab95dc0c56e -https://sqlite.org/cgi/src/info/abc473fb8fb99900 -https://sqlite.org/cgi/src/info/5aeb5a2d295e10d5 -https://sqlite.org/cgi/src/info/a67cf5b7d37d5b14 -https://sqlite.org/cgi/src/info/14d14eb537075c6a -https://sqlite.org/cgi/src/info/c431b3fd8fd0f6a6 - ---- /src/expr.c -+++ /src/expr.c -@@ -5463,19 +5463,25 @@ - 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; - } ---- /src/resolve.c -+++ /src/resolve.c -@@ -1051,7 +1051,7 @@ - assert( !ExprHasProperty(pExpr, EP_Reduced) ); - /* Handle special cases of "x IS TRUE", "x IS FALSE", "x IS NOT TRUE", - ** and "x IS NOT FALSE". */ -- if( pRight->op==TK_ID ){ -+ if( pRight && pRight->op==TK_ID ){ - int rc = resolveExprStep(pWalker, pRight); - if( rc==WRC_Abort ) return WRC_Abort; - if( pRight->op==TK_TRUEFALSE ){ ---- /src/select.c -+++ /src/select.c -@@ -2806,6 +2806,7 @@ - /* Generate code to take the intersection of the two temporary - ** tables. - */ -+ if( rc ) break; - assert( p->pEList ); - iBreak = sqlite3VdbeMakeLabel(pParse); - iCont = sqlite3VdbeMakeLabel(pParse); -@@ -5148,7 +5149,7 @@ - pNew = sqlite3ExprListAppend(pParse, pNew, pExpr); - sqlite3TokenInit(&sColname, zColname); - sqlite3ExprListSetName(pParse, pNew, &sColname, 0); -- if( pNew && (p->selFlags & SF_NestedFrom)!=0 ){ -+ if( pNew && (p->selFlags & SF_NestedFrom)!=0 && !IN_RENAME_OBJECT ){ - struct ExprList_item *pX = &pNew->a[pNew->nExpr-1]; - sqlite3DbFree(db, pX->zEName); - if( pSub ){ ---- /src/sqliteInt.h -+++ /src/sqliteInt.h -@@ -2153,8 +2153,11 @@ - */ - #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 - - /* ---- /src/whereexpr.c -+++ /src/whereexpr.c -@@ -377,7 +377,8 @@ - ** 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; -@@ -399,7 +400,8 @@ - ** 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**); -@@ -422,10 +424,12 @@ - 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); - } ---- /test/altertab.test -+++ /test/altertab.test -@@ -613,4 +613,21 @@ - SELECT sql FROM sqlite_master; - } {{CREATE TABLE t0 (c1 INTEGER, PRIMARY KEY(c1))}} - -+# 2020-02-23 ticket f50af3e8a565776b -+reset_db -+do_execsql_test 19.100 { -+ CREATE TABLE t1(x); -+ CREATE VIEW t2 AS SELECT 1 FROM t1, (t1 AS a0, t1); -+ ALTER TABLE t1 RENAME TO t3; -+ SELECT sql FROM sqlite_master; -+} {{CREATE TABLE "t3"(x)} {CREATE VIEW t2 AS SELECT 1 FROM "t3", ("t3" AS a0, "t3")}} -+do_execsql_test 19.110 { -+ INSERT INTO t3(x) VALUES(123); -+ SELECT * FROM t2; -+} {1} -+do_execsql_test 19.120 { -+ INSERT INTO t3(x) VALUES('xyz'); -+ SELECT * FROM t2; -+} {1 1 1 1 1 1 1 1} -+ - finish_test ---- /test/windowfault.test -+++ /test/windowfault.test -@@ -263,4 +263,15 @@ - faultsim_test_result {0 {}} - } - -+do_faultsim_test 11 -faults oom* -prep { -+} -body { -+ execsql { -+ VALUES(false),(current_date collate binary) -+ intersect -+ values(count() not like group_concat(cast(cast(0e00 as text) as integer) <= NULL || 0.4e-0 || 0x8 & true ) over () collate rtrim); -+ } -+} -test { -+ faultsim_test_result {0 {}} -+} -+ - finish_test diff --git a/dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-architectures.patch b/dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-architectures.patch deleted file mode 100644 index 79f6f07e0ef7..000000000000 --- a/dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-architectures.patch +++ /dev/null @@ -1,20 +0,0 @@ -https://sqlite.org/cgi/src/info/04885763c4cd00cb - ---- /sqlite3.c -+++ /sqlite3.c -@@ -121302,12 +121302,14 @@ - x = *sqlite3VdbeGetOp(v, addrConflictCk); - if( x.opcode!=OP_IdxRowid ){ - int p2; /* New P2 value for copied conflict check opcode */ -+ const char *zP4; - if( sqlite3OpcodeProperty[x.opcode]&OPFLG_JUMP ){ - p2 = lblRecheckOk; - }else{ - p2 = x.p2; - } -- sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, x.p4.z, x.p4type); -+ zP4 = x.p4type==P4_INT32 ? SQLITE_INT_TO_PTR(x.p4.i) : x.p4.z; -+ sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, zP4, x.p4type); - sqlite3VdbeChangeP5(v, x.p5); - VdbeCoverageIf(v, p2!=x.p2); - } diff --git a/dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-security_fixes.patch b/dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-security_fixes.patch deleted file mode 100644 index 3bbbbf7c8dde..000000000000 --- a/dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-security_fixes.patch +++ /dev/null @@ -1,112 +0,0 @@ -https://sqlite.org/cgi/src/info/9d0d4ab95dc0c56e -https://sqlite.org/cgi/src/info/abc473fb8fb99900 -https://sqlite.org/cgi/src/info/5aeb5a2d295e10d5 -https://sqlite.org/cgi/src/info/a67cf5b7d37d5b14 -https://sqlite.org/cgi/src/info/c431b3fd8fd0f6a6 - ---- /sqlite3.c -+++ /sqlite3.c -@@ -17428,8 +17428,11 @@ - */ - #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 - - /* -@@ -97816,7 +97819,7 @@ - assert( !ExprHasProperty(pExpr, EP_Reduced) ); - /* Handle special cases of "x IS TRUE", "x IS FALSE", "x IS NOT TRUE", - ** and "x IS NOT FALSE". */ -- if( pRight->op==TK_ID ){ -+ if( pRight && pRight->op==TK_ID ){ - int rc = resolveExprStep(pWalker, pRight); - if( rc==WRC_Abort ) return WRC_Abort; - if( pRight->op==TK_TRUEFALSE ){ -@@ -104133,19 +104136,25 @@ - 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; - } -@@ -130673,6 +130682,7 @@ - /* Generate code to take the intersection of the two temporary - ** tables. - */ -+ if( rc ) break; - assert( p->pEList ); - iBreak = sqlite3VdbeMakeLabel(pParse); - iCont = sqlite3VdbeMakeLabel(pParse); -@@ -133015,7 +133025,7 @@ - pNew = sqlite3ExprListAppend(pParse, pNew, pExpr); - sqlite3TokenInit(&sColname, zColname); - sqlite3ExprListSetName(pParse, pNew, &sColname, 0); -- if( pNew && (p->selFlags & SF_NestedFrom)!=0 ){ -+ if( pNew && (p->selFlags & SF_NestedFrom)!=0 && !IN_RENAME_OBJECT ){ - struct ExprList_item *pX = &pNew->a[pNew->nExpr-1]; - sqlite3DbFree(db, pX->zEName); - if( pSub ){ -@@ -142593,7 +142603,8 @@ - ** 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; -@@ -142615,7 +142626,8 @@ - ** 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**); -@@ -142638,10 +142650,12 @@ - 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/dev-db/sqlite/files/sqlite-3.32.1-full_archive-build_1.patch b/dev-db/sqlite/files/sqlite-3.32.1-full_archive-build_1.patch new file mode 100644 index 000000000000..aec90e4c07ad --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.32.1-full_archive-build_1.patch @@ -0,0 +1,670 @@ +Add initialization functions for internal usage in libsqlite3.so. + +--- /ext/misc/carray.c ++++ /ext/misc/carray.c +@@ -383,16 +383,8 @@ + + #endif /* SQLITE_OMIT_VIRTUALTABLE */ + +-#ifdef _WIN32 +-__declspec(dllexport) +-#endif +-int sqlite3_carray_init( +- sqlite3 *db, +- char **pzErrMsg, +- const sqlite3_api_routines *pApi +-){ ++int sqlite3CarrayInit(sqlite3 *db){ + int rc = SQLITE_OK; +- SQLITE_EXTENSION_INIT2(pApi); + #ifndef SQLITE_OMIT_VIRTUALTABLE + rc = sqlite3_create_module(db, "carray", &carrayModule, 0); + #ifdef SQLITE_TEST +@@ -404,3 +396,18 @@ + #endif /* SQLITE_OMIT_VIRTUALTABLE */ + return rc; + } ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) ++#ifdef _WIN32 ++__declspec(dllexport) ++#endif ++int sqlite3_carray_init( ++ sqlite3 *db, ++ char **pzErrMsg, ++ const sqlite3_api_routines *pApi ++){ ++ SQLITE_EXTENSION_INIT2(pApi); ++ (void)pzErrMsg; /* Unused parameter */ ++ return sqlite3CarrayInit(db); ++} ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/completion.c ++++ /ext/misc/completion.c +@@ -483,12 +483,13 @@ + return rc; + } + ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif + int sqlite3_completion_init( +- sqlite3 *db, +- char **pzErrMsg, ++ sqlite3 *db, ++ char **pzErrMsg, + const sqlite3_api_routines *pApi + ){ + int rc = SQLITE_OK; +@@ -499,3 +500,4 @@ + #endif + return rc; + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/csv.c ++++ /ext/misc/csv.c +@@ -928,6 +928,22 @@ + #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */ + + ++int sqlite3CsvInit(sqlite3 *db){ ++#ifndef SQLITE_OMIT_VIRTUALTABLE ++ int rc; ++ rc = sqlite3_create_module(db, "csv", &CsvModule, 0); ++#ifdef SQLITE_TEST ++ if( rc==SQLITE_OK ){ ++ rc = sqlite3_create_module(db, "csv_wr", &CsvModuleFauxWrite, 0); ++ } ++#endif ++ return rc; ++#else ++ return SQLITE_OK; ++#endif ++} ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -941,17 +957,8 @@ + char **pzErrMsg, + const sqlite3_api_routines *pApi + ){ +-#ifndef SQLITE_OMIT_VIRTUALTABLE +- int rc; + SQLITE_EXTENSION_INIT2(pApi); +- rc = sqlite3_create_module(db, "csv", &CsvModule, 0); +-#ifdef SQLITE_TEST +- if( rc==SQLITE_OK ){ +- rc = sqlite3_create_module(db, "csv_wr", &CsvModuleFauxWrite, 0); +- } +-#endif +- return rc; +-#else +- return SQLITE_OK; +-#endif ++ (void)pzErrMsg; /* Unused parameter */ ++ return sqlite3CsvInit(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/dbdata.c ++++ /ext/misc/dbdata.c +@@ -803,7 +803,7 @@ + /* + ** Invoke this routine to register the "sqlite_dbdata" virtual table module + */ +-static int sqlite3DbdataRegister(sqlite3 *db){ ++int sqlite3DbdataRegister(sqlite3 *db){ + static sqlite3_module dbdata_module = { + 0, /* iVersion */ + 0, /* xCreate */ +@@ -838,6 +838,7 @@ + return rc; + } + ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -849,3 +850,4 @@ + SQLITE_EXTENSION_INIT2(pApi); + return sqlite3DbdataRegister(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/eval.c ++++ /ext/misc/eval.c +@@ -102,6 +102,20 @@ + } + + ++int sqlite3EvalInit(sqlite3 *db){ ++ int rc = SQLITE_OK; ++ rc = sqlite3_create_function(db, "eval", 1, ++ SQLITE_UTF8|SQLITE_DIRECTONLY, 0, ++ sqlEvalFunc, 0, 0); ++ if( rc==SQLITE_OK ){ ++ rc = sqlite3_create_function(db, "eval", 2, ++ SQLITE_UTF8|SQLITE_DIRECTONLY, 0, ++ sqlEvalFunc, 0, 0); ++ } ++ return rc; ++} ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -110,16 +124,8 @@ + char **pzErrMsg, + const sqlite3_api_routines *pApi + ){ +- int rc = SQLITE_OK; + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErrMsg; /* Unused parameter */ +- rc = sqlite3_create_function(db, "eval", 1, +- SQLITE_UTF8|SQLITE_DIRECTONLY, 0, +- sqlEvalFunc, 0, 0); +- if( rc==SQLITE_OK ){ +- rc = sqlite3_create_function(db, "eval", 2, +- SQLITE_UTF8|SQLITE_DIRECTONLY, 0, +- sqlEvalFunc, 0, 0); +- } +- return rc; ++ return sqlite3EvalInit(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/fileio.c ++++ /ext/misc/fileio.c +@@ -340,7 +340,7 @@ + ** This function does the work for the writefile() UDF. Refer to + ** header comments at the top of this file for details. + */ +-static int writeFile( ++static int writeFileContents( + sqlite3_context *pCtx, /* Context to return bytes written in */ + const char *zFile, /* File to write */ + sqlite3_value *pData, /* Data to write */ +@@ -480,10 +480,10 @@ + mtime = sqlite3_value_int64(argv[3]); + } + +- res = writeFile(context, zFile, argv[1], mode, mtime); ++ res = writeFileContents(context, zFile, argv[1], mode, mtime); + if( res==1 && errno==ENOENT ){ + if( makeDirectory(zFile)==SQLITE_OK ){ +- res = writeFile(context, zFile, argv[1], mode, mtime); ++ res = writeFileContents(context, zFile, argv[1], mode, mtime); + } + } + +@@ -970,18 +970,9 @@ + # define fsdirRegister(x) SQLITE_OK + #endif + +-#ifdef _WIN32 +-__declspec(dllexport) +-#endif +-int sqlite3_fileio_init( +- sqlite3 *db, +- char **pzErrMsg, +- const sqlite3_api_routines *pApi +-){ ++int sqlite3FileioInit(sqlite3 *db){ + int rc = SQLITE_OK; +- SQLITE_EXTENSION_INIT2(pApi); +- (void)pzErrMsg; /* Unused parameter */ +- rc = sqlite3_create_function(db, "readfile", 1, ++ rc = sqlite3_create_function(db, "readfile", 1, + SQLITE_UTF8|SQLITE_DIRECTONLY, 0, + readfileFunc, 0, 0); + if( rc==SQLITE_OK ){ +@@ -998,3 +989,18 @@ + } + return rc; + } ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) ++#ifdef _WIN32 ++__declspec(dllexport) ++#endif ++int sqlite3_fileio_init( ++ sqlite3 *db, ++ char **pzErrMsg, ++ const sqlite3_api_routines *pApi ++){ ++ SQLITE_EXTENSION_INIT2(pApi); ++ (void)pzErrMsg; /* Unused parameter */ ++ return sqlite3FileioInit(db); ++} ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/ieee754.c ++++ /ext/misc/ieee754.c +@@ -110,6 +110,20 @@ + } + + ++int sqlite3IeeeInit(sqlite3 *db){ ++ int rc = SQLITE_OK; ++ rc = sqlite3_create_function(db, "ieee754", 1, ++ SQLITE_UTF8|SQLITE_INNOCUOUS, 0, ++ ieee754func, 0, 0); ++ if( rc==SQLITE_OK ){ ++ rc = sqlite3_create_function(db, "ieee754", 2, ++ SQLITE_UTF8|SQLITE_INNOCUOUS, 0, ++ ieee754func, 0, 0); ++ } ++ return rc; ++} ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -118,16 +132,8 @@ + char **pzErrMsg, + const sqlite3_api_routines *pApi + ){ +- int rc = SQLITE_OK; + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErrMsg; /* Unused parameter */ +- rc = sqlite3_create_function(db, "ieee754", 1, +- SQLITE_UTF8|SQLITE_INNOCUOUS, 0, +- ieee754func, 0, 0); +- if( rc==SQLITE_OK ){ +- rc = sqlite3_create_function(db, "ieee754", 2, +- SQLITE_UTF8|SQLITE_INNOCUOUS, 0, +- ieee754func, 0, 0); +- } +- return rc; ++ return sqlite3IeeeInit(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/regexp.c ++++ /ext/misc/regexp.c +@@ -740,10 +740,18 @@ + } + } + ++int sqlite3RegexpInit(sqlite3 *db){ ++ int rc = SQLITE_OK; ++ rc = sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8|SQLITE_INNOCUOUS, ++ 0, re_sql_func, 0, 0); ++ return rc; ++} ++ + /* + ** Invoke this routine to register the regexp() function with the + ** SQLite database connection. + */ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -752,9 +760,8 @@ + char **pzErrMsg, + const sqlite3_api_routines *pApi + ){ +- int rc = SQLITE_OK; + SQLITE_EXTENSION_INIT2(pApi); +- rc = sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8|SQLITE_INNOCUOUS, +- 0, re_sql_func, 0, 0); +- return rc; ++ (void)pzErrMsg; /* Unused parameter */ ++ return sqlite3RegexpInit(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/sha1.c ++++ /ext/misc/sha1.c +@@ -175,7 +175,7 @@ + } + + /* Compute a string using sqlite3_vsnprintf() and hash it */ +-static void hash_step_vformat( ++static void sha1_hash_step_vformat( + SHA1Context *p, /* Add content to this context */ + const char *zFormat, + ... +@@ -306,7 +306,7 @@ + nCol = sqlite3_column_count(pStmt); + z = sqlite3_sql(pStmt); + n = (int)strlen(z); +- hash_step_vformat(&cx,"S%d:",n); ++ sha1_hash_step_vformat(&cx,"S%d:",n); + hash_step(&cx,(unsigned char*)z,n); + + /* Compute a hash over the result of the query */ +@@ -349,14 +349,14 @@ + case SQLITE_TEXT: { + int n2 = sqlite3_column_bytes(pStmt, i); + const unsigned char *z2 = sqlite3_column_text(pStmt, i); +- hash_step_vformat(&cx,"T%d:",n2); ++ sha1_hash_step_vformat(&cx,"T%d:",n2); + hash_step(&cx, z2, n2); + break; + } + case SQLITE_BLOB: { + int n2 = sqlite3_column_bytes(pStmt, i); + const unsigned char *z2 = sqlite3_column_blob(pStmt, i); +- hash_step_vformat(&cx,"B%d:",n2); ++ sha1_hash_step_vformat(&cx,"B%d:",n2); + hash_step(&cx, z2, n2); + break; + } +@@ -370,6 +370,20 @@ + } + + ++int sqlite3ShaInit(sqlite3 *db){ ++ int rc = SQLITE_OK; ++ rc = sqlite3_create_function(db, "sha1", 1, ++ SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC, ++ 0, sha1Func, 0, 0); ++ if( rc==SQLITE_OK ){ ++ rc = sqlite3_create_function(db, "sha1_query", 1, ++ SQLITE_UTF8|SQLITE_DIRECTONLY, 0, ++ sha1QueryFunc, 0, 0); ++ } ++ return rc; ++} ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -378,16 +392,8 @@ + char **pzErrMsg, + const sqlite3_api_routines *pApi + ){ +- int rc = SQLITE_OK; + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErrMsg; /* Unused parameter */ +- rc = sqlite3_create_function(db, "sha1", 1, +- SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC, +- 0, sha1Func, 0, 0); +- if( rc==SQLITE_OK ){ +- rc = sqlite3_create_function(db, "sha1_query", 1, +- SQLITE_UTF8|SQLITE_DIRECTONLY, 0, +- sha1QueryFunc, 0, 0); +- } +- return rc; ++ return sqlite3ShaInit(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/shathree.c ++++ /ext/misc/shathree.c +@@ -527,7 +527,7 @@ + /* Compute a string using sqlite3_vsnprintf() with a maximum length + ** of 50 bytes and add it to the hash. + */ +-static void hash_step_vformat( ++static void sha3_hash_step_vformat( + SHA3Context *p, /* Add content to this context */ + const char *zFormat, + ... +@@ -622,7 +622,7 @@ + nCol = sqlite3_column_count(pStmt); + z = sqlite3_sql(pStmt); + n = (int)strlen(z); +- hash_step_vformat(&cx,"S%d:",n); ++ sha3_hash_step_vformat(&cx,"S%d:",n); + SHA3Update(&cx,(unsigned char*)z,n); + + /* Compute a hash over the result of the query */ +@@ -665,14 +665,14 @@ + case SQLITE_TEXT: { + int n2 = sqlite3_column_bytes(pStmt, i); + const unsigned char *z2 = sqlite3_column_text(pStmt, i); +- hash_step_vformat(&cx,"T%d:",n2); ++ sha3_hash_step_vformat(&cx,"T%d:",n2); + SHA3Update(&cx, z2, n2); + break; + } + case SQLITE_BLOB: { + int n2 = sqlite3_column_bytes(pStmt, i); + const unsigned char *z2 = sqlite3_column_blob(pStmt, i); +- hash_step_vformat(&cx,"B%d:",n2); ++ sha3_hash_step_vformat(&cx,"B%d:",n2); + SHA3Update(&cx, z2, n2); + break; + } +@@ -685,17 +685,8 @@ + } + + +-#ifdef _WIN32 +-__declspec(dllexport) +-#endif +-int sqlite3_shathree_init( +- sqlite3 *db, +- char **pzErrMsg, +- const sqlite3_api_routines *pApi +-){ ++int sqlite3ShathreeInit(sqlite3 *db){ + int rc = SQLITE_OK; +- SQLITE_EXTENSION_INIT2(pApi); +- (void)pzErrMsg; /* Unused parameter */ + rc = sqlite3_create_function(db, "sha3", 1, + SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC, + 0, sha3Func, 0, 0); +@@ -716,3 +707,18 @@ + } + return rc; + } ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) ++#ifdef _WIN32 ++__declspec(dllexport) ++#endif ++int sqlite3_shathree_init( ++ sqlite3 *db, ++ char **pzErrMsg, ++ const sqlite3_api_routines *pApi ++){ ++ SQLITE_EXTENSION_INIT2(pApi); ++ (void)pzErrMsg; /* Unused parameter */ ++ return sqlite3ShathreeInit(db); ++} ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/sqlar.c ++++ /ext/misc/sqlar.c +@@ -14,6 +14,8 @@ + ** for working with sqlar archives and used by the shell tool's built-in + ** sqlar support. + */ ++#ifdef SQLITE_HAVE_ZLIB ++ + #include "sqlite3ext.h" + SQLITE_EXTENSION_INIT1 + #include <zlib.h> +@@ -101,6 +103,20 @@ + } + + ++int sqlite3SqlarInit(sqlite3 *db){ ++ int rc = SQLITE_OK; ++ rc = sqlite3_create_function(db, "sqlar_compress", 1, ++ SQLITE_UTF8|SQLITE_INNOCUOUS, 0, ++ sqlarCompressFunc, 0, 0); ++ if( rc==SQLITE_OK ){ ++ rc = sqlite3_create_function(db, "sqlar_uncompress", 2, ++ SQLITE_UTF8|SQLITE_INNOCUOUS, 0, ++ sqlarUncompressFunc, 0, 0); ++ } ++ return rc; ++} ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -109,16 +125,10 @@ + char **pzErrMsg, + const sqlite3_api_routines *pApi + ){ +- int rc = SQLITE_OK; + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErrMsg; /* Unused parameter */ +- rc = sqlite3_create_function(db, "sqlar_compress", 1, +- SQLITE_UTF8|SQLITE_INNOCUOUS, 0, +- sqlarCompressFunc, 0, 0); +- if( rc==SQLITE_OK ){ +- rc = sqlite3_create_function(db, "sqlar_uncompress", 2, +- SQLITE_UTF8|SQLITE_INNOCUOUS, 0, +- sqlarUncompressFunc, 0, 0); +- } +- return rc; ++ return sqlite3SqlarInit(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ ++ ++#endif /* SQLITE_HAVE_ZLIB */ +--- /ext/misc/totype.c ++++ /ext/misc/totype.c +@@ -491,17 +491,8 @@ + #pragma warning(default: 4748) + #endif + +-#ifdef _WIN32 +-__declspec(dllexport) +-#endif +-int sqlite3_totype_init( +- sqlite3 *db, +- char **pzErrMsg, +- const sqlite3_api_routines *pApi +-){ ++int sqlite3TotypeInit(sqlite3 *db){ + int rc = SQLITE_OK; +- SQLITE_EXTENSION_INIT2(pApi); +- (void)pzErrMsg; /* Unused parameter */ + rc = sqlite3_create_function(db, "tointeger", 1, + SQLITE_UTF8 | SQLITE_DETERMINISTIC | SQLITE_INNOCUOUS, 0, + tointegerFunc, 0, 0); +@@ -512,3 +503,18 @@ + } + return rc; + } ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) ++#ifdef _WIN32 ++__declspec(dllexport) ++#endif ++int sqlite3_totype_init( ++ sqlite3 *db, ++ char **pzErrMsg, ++ const sqlite3_api_routines *pApi ++){ ++ SQLITE_EXTENSION_INIT2(pApi); ++ (void)pzErrMsg; /* Unused parameter */ ++ return sqlite3TotypeInit(db); ++} ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/uint.c ++++ /ext/misc/uint.c +@@ -78,6 +78,11 @@ + return (nKey1 - i) - (nKey2 - j); + } + ++int sqlite3UintInit(sqlite3 *db){ ++ return sqlite3_create_collation(db, "UINT", SQLITE_UTF8, 0, uintCollFunc); ++} ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -88,5 +93,6 @@ + ){ + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErrMsg; /* Unused parameter */ +- return sqlite3_create_collation(db, "uint", SQLITE_UTF8, 0, uintCollFunc); ++ return sqlite3UintInit(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/uuid.c ++++ /ext/misc/uuid.c +@@ -206,21 +206,12 @@ + sqlite3_result_blob(context, pBlob, 16, SQLITE_TRANSIENT); + } + +-#ifdef _WIN32 +-__declspec(dllexport) +-#endif +-int sqlite3_uuid_init( +- sqlite3 *db, +- char **pzErrMsg, +- const sqlite3_api_routines *pApi +-){ ++int sqlite3UuidInit(sqlite3 *db){ + int rc = SQLITE_OK; +- SQLITE_EXTENSION_INIT2(pApi); +- (void)pzErrMsg; /* Unused parameter */ + rc = sqlite3_create_function(db, "uuid", 0, SQLITE_UTF8|SQLITE_INNOCUOUS, 0, + sqlite3UuidFunc, 0, 0); + if( rc==SQLITE_OK ){ +- rc = sqlite3_create_function(db, "uuid_str", 1, ++ rc = sqlite3_create_function(db, "uuid_str", 1, + SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, + 0, sqlite3UuidStrFunc, 0, 0); + } +@@ -231,3 +222,18 @@ + } + return rc; + } ++ ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) ++#ifdef _WIN32 ++__declspec(dllexport) ++#endif ++int sqlite3_uuid_init( ++ sqlite3 *db, ++ char **pzErrMsg, ++ const sqlite3_api_routines *pApi ++){ ++ SQLITE_EXTENSION_INIT2(pApi); ++ (void)pzErrMsg; /* Unused parameter */ ++ return sqlite3UuidInit(db); ++} ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ +--- /ext/misc/zipfile.c ++++ /ext/misc/zipfile.c +@@ -24,6 +24,8 @@ + ** * No support for zip64 extensions + ** * Only the "inflate/deflate" (zlib) compression method is supported + */ ++#ifdef SQLITE_HAVE_ZLIB ++ + #include "sqlite3ext.h" + SQLITE_EXTENSION_INIT1 + #include <stdio.h> +@@ -2137,7 +2139,7 @@ + /* + ** Register the "zipfile" virtual table. + */ +-static int zipfileRegister(sqlite3 *db){ ++int sqlite3ZipfileInit(sqlite3 *db){ + static sqlite3_module zipfileModule = { + 1, /* iVersion */ + zipfileConnect, /* xCreate */ +@@ -2171,9 +2173,10 @@ + return rc; + } + #else /* SQLITE_OMIT_VIRTUALTABLE */ +-# define zipfileRegister(x) SQLITE_OK ++# define sqlite3ZipfileInit(x) SQLITE_OK + #endif + ++#if !defined(SQLITE_CORE) || defined(SQLITE_TEST) + #ifdef _WIN32 + __declspec(dllexport) + #endif +@@ -2184,5 +2187,8 @@ + ){ + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErrMsg; /* Unused parameter */ +- return zipfileRegister(db); ++ return sqlite3ZipfileInit(db); + } ++#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */ ++ ++#endif /* SQLITE_HAVE_ZLIB */ diff --git a/dev-db/sqlite/files/sqlite-3.31.0-full_archive-build.patch b/dev-db/sqlite/files/sqlite-3.32.1-full_archive-build_2.patch index 9ff44c0fe7ce..f12c0b22a483 100644 --- a/dev-db/sqlite/files/sqlite-3.31.0-full_archive-build.patch +++ b/dev-db/sqlite/files/sqlite-3.32.1-full_archive-build_2.patch @@ -1,3 +1,4 @@ +Enable some extensions in libsqlite3.so. Move some code to libsqlite3.so to avoid duplication. Link executables against libsqlite3.so. Increase timeout for fuzzcheck. @@ -5,7 +6,7 @@ Fix building with dlopen() not available. --- /Makefile.in +++ /Makefile.in -@@ -311,6 +311,9 @@ +@@ -313,6 +313,9 @@ # Source code for extensions # SRC += \ @@ -15,37 +16,67 @@ Fix building with dlopen() not available. $(TOP)/ext/fts1/fts1.c \ $(TOP)/ext/fts1/fts1.h \ $(TOP)/ext/fts1/fts1_hash.c \ -@@ -363,8 +366,12 @@ +@@ -365,8 +368,24 @@ $(TOP)/ext/rbu/sqlite3rbu.h \ $(TOP)/ext/rbu/sqlite3rbu.c SRC += \ + $(TOP)/ext/misc/appendvfs.c \ ++ $(TOP)/ext/misc/carray.c \ ++ $(TOP)/ext/misc/completion.c \ ++ $(TOP)/ext/misc/csv.c \ + $(TOP)/ext/misc/dbdata.c \ ++ $(TOP)/ext/misc/eval.c \ ++ $(TOP)/ext/misc/fileio.c \ ++ $(TOP)/ext/misc/ieee754.c \ $(TOP)/ext/misc/json1.c \ - $(TOP)/ext/misc/stmt.c ++ $(TOP)/ext/misc/regexp.c \ ++ $(TOP)/ext/misc/sha1.c \ ++ $(TOP)/ext/misc/shathree.c \ + $(TOP)/ext/misc/sqlar.c \ + $(TOP)/ext/misc/stmt.c \ ++ $(TOP)/ext/misc/totype.c \ ++ $(TOP)/ext/misc/uint.c \ ++ $(TOP)/ext/misc/uuid.c \ + $(TOP)/ext/misc/zipfile.c # Generated source code files # -@@ -435,7 +442,6 @@ +@@ -437,33 +456,24 @@ # Statically linked extensions # TESTSRC += \ - $(TOP)/ext/expert/sqlite3expert.c \ $(TOP)/ext/expert/test_expert.c \ $(TOP)/ext/misc/amatch.c \ - $(TOP)/ext/misc/carray.c \ -@@ -461,7 +467,6 @@ - $(TOP)/ext/misc/totype.c \ +- $(TOP)/ext/misc/carray.c \ + $(TOP)/ext/misc/closure.c \ +- $(TOP)/ext/misc/csv.c \ +- $(TOP)/ext/misc/eval.c \ + $(TOP)/ext/misc/explain.c \ +- $(TOP)/ext/misc/fileio.c \ + $(TOP)/ext/misc/fuzzer.c \ + $(TOP)/ext/fts5/fts5_tcl.c \ + $(TOP)/ext/fts5/fts5_test_mi.c \ + $(TOP)/ext/fts5/fts5_test_tok.c \ +- $(TOP)/ext/misc/ieee754.c \ + $(TOP)/ext/misc/mmapwarm.c \ + $(TOP)/ext/misc/nextchar.c \ + $(TOP)/ext/misc/normalize.c \ + $(TOP)/ext/misc/percentile.c \ + $(TOP)/ext/misc/prefixes.c \ +- $(TOP)/ext/misc/regexp.c \ + $(TOP)/ext/misc/remember.c \ + $(TOP)/ext/misc/series.c \ + $(TOP)/ext/misc/spellfix.c \ +- $(TOP)/ext/misc/totype.c \ $(TOP)/ext/misc/unionvtab.c \ $(TOP)/ext/misc/wholenumber.c \ - $(TOP)/ext/misc/zipfile.c \ $(TOP)/ext/userauth/userauth.c # Source code to the library files needed by the test fixture -@@ -639,25 +644,25 @@ +@@ -645,25 +655,25 @@ libtclsqlite3.la: tclsqlite.lo libsqlite3.la $(LTLINK) -no-undefined -o $@ tclsqlite.lo \ @@ -82,7 +113,7 @@ Fix building with dlopen() not available. srcck1$(BEXE): $(TOP)/tool/srcck1.c $(BCC) -o srcck1$(BEXE) $(TOP)/tool/srcck1.c -@@ -767,7 +772,7 @@ +@@ -774,7 +784,7 @@ # Rule to build the amalgamation # sqlite3.lo: sqlite3.c @@ -91,22 +122,23 @@ Fix building with dlopen() not available. # Rules to build the LEMON compiler generator # -@@ -1064,14 +1069,9 @@ +@@ -1074,15 +1084,6 @@ # Source files that go into making shell.c SHELL_SRC = \ $(TOP)/src/shell.c.in \ - $(TOP)/ext/misc/appendvfs.c \ - $(TOP)/ext/misc/shathree.c \ - $(TOP)/ext/misc/fileio.c \ - $(TOP)/ext/misc/completion.c \ +- $(TOP)/ext/misc/shathree.c \ +- $(TOP)/ext/misc/fileio.c \ +- $(TOP)/ext/misc/completion.c \ - $(TOP)/ext/misc/sqlar.c \ +- $(TOP)/ext/misc/uint.c \ - $(TOP)/ext/expert/sqlite3expert.c \ - $(TOP)/ext/expert/sqlite3expert.h \ - $(TOP)/ext/misc/zipfile.c \ $(TOP)/ext/misc/memtrace.c \ $(TOP)/src/test_windirent.c -@@ -1239,11 +1239,11 @@ +@@ -1251,11 +1252,11 @@ # Fuzz testing fuzztest: fuzzcheck$(TEXE) $(FUZZDATA) sessionfuzz$(TEXE) $(TOP)/test/sessionfuzz-data1.db @@ -120,7 +152,7 @@ Fix building with dlopen() not available. valgrind ./sessionfuzz$(TEXE) run $(TOP)/test/sessionfuzz-data1.db # The veryquick.test TCL tests. -@@ -1274,24 +1274,23 @@ +@@ -1286,24 +1287,23 @@ smoketest: $(TESTPROGS) fuzzcheck$(TEXE) ./testfixture$(TEXE) $(TOP)/test/main.test $(TESTOPTS) @@ -153,7 +185,7 @@ Fix building with dlopen() not available. $(TOP)/src/tclsqlite.c \ $(TOP)/ext/repair/sqlite3_checker.tcl \ $(TOP)/ext/repair/checkindex.c \ -@@ -1302,36 +1301,36 @@ +@@ -1314,36 +1314,36 @@ sqlite3_checker.c: $(CHECKER_DEPS) $(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/ext/repair/sqlite3_checker.c.in >$@ @@ -208,7 +240,7 @@ Fix building with dlopen() not available. changesetfuzz$(TEXE): $(TOP)/ext/session/changesetfuzz.c sqlite3.lo $(LTLINK) -o $@ $(TOP)/ext/session/changesetfuzz.c sqlite3.lo $(TLIBS) -@@ -1356,11 +1355,11 @@ +@@ -1368,11 +1368,11 @@ kvtest$(TEXE): $(TOP)/test/kvtest.c sqlite3.c $(LTLINK) $(KV_OPT) -o $@ $(TOP)/test/kvtest.c sqlite3.c $(TLIBS) @@ -236,40 +268,6 @@ Fix building with dlopen() not available. else OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1" fi ---- /ext/misc/sqlar.c -+++ /ext/misc/sqlar.c -@@ -14,6 +14,8 @@ - ** for working with sqlar archives and used by the shell tool's built-in - ** sqlar support. - */ -+#ifdef SQLITE_HAVE_ZLIB -+ - #include "sqlite3ext.h" - SQLITE_EXTENSION_INIT1 - #include <zlib.h> -@@ -121,3 +123,5 @@ - } - return rc; - } -+ -+#endif /* SQLITE_HAVE_ZLIB */ ---- /ext/misc/zipfile.c -+++ /ext/misc/zipfile.c -@@ -24,6 +24,8 @@ - ** * No support for zip64 extensions - ** * Only the "inflate/deflate" (zlib) compression method is supported - */ -+#ifdef SQLITE_HAVE_ZLIB -+ - #include "sqlite3ext.h" - SQLITE_EXTENSION_INIT1 - #include <stdio.h> -@@ -2186,3 +2188,5 @@ - (void)pzErrMsg; /* Unused parameter */ - return zipfileRegister(db); - } -+ -+#endif /* SQLITE_HAVE_ZLIB */ --- /ext/repair/sqlite3_checker.c.in +++ /ext/repair/sqlite3_checker.c.in @@ -2,6 +2,7 @@ @@ -289,9 +287,76 @@ Fix building with dlopen() not available. INCLUDE $ROOT/src/tclsqlite.c INCLUDE $ROOT/ext/misc/btreeinfo.c INCLUDE $ROOT/ext/repair/checkindex.c +--- /src/main.c ++++ /src/main.c +@@ -50,12 +50,31 @@ + #ifdef SQLITE_ENABLE_FTS5 + int sqlite3Fts5Init(sqlite3*); + #endif ++#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) ++int sqlite3DbdataRegister(sqlite3*); ++#endif + #ifdef SQLITE_ENABLE_JSON1 + int sqlite3Json1Init(sqlite3*); + #endif + #ifdef SQLITE_ENABLE_STMTVTAB + int sqlite3StmtVtabInit(sqlite3*); + #endif ++int sqlite3CarrayInit(sqlite3*); ++int sqlite3CompletionVtabInit(sqlite3*); ++int sqlite3CsvInit(sqlite3*); ++int sqlite3EvalInit(sqlite3*); ++int sqlite3FileioInit(sqlite3*); ++int sqlite3IeeeInit(sqlite3*); ++int sqlite3RegexpInit(sqlite3*); ++int sqlite3ShaInit(sqlite3*); ++int sqlite3ShathreeInit(sqlite3*); ++int sqlite3TotypeInit(sqlite3*); ++int sqlite3UintInit(sqlite3*); ++int sqlite3UuidInit(sqlite3*); ++#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) ++int sqlite3ZipfileInit(sqlite3*); ++int sqlite3SqlarInit(sqlite3*); ++#endif + + /* + ** An array of pointers to extension initializer functions for +@@ -83,6 +102,9 @@ + #ifdef SQLITE_ENABLE_DBPAGE_VTAB + sqlite3DbpageRegister, + #endif ++#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) ++ sqlite3DbdataRegister, ++#endif + #ifdef SQLITE_ENABLE_DBSTAT_VTAB + sqlite3DbstatRegister, + #endif +@@ -96,6 +118,22 @@ + #ifdef SQLITE_ENABLE_BYTECODE_VTAB + sqlite3VdbeBytecodeVtabInit, + #endif ++ sqlite3CarrayInit, ++ sqlite3CompletionVtabInit, ++ sqlite3CsvInit, ++ sqlite3EvalInit, ++ sqlite3FileioInit, ++ sqlite3IeeeInit, ++ sqlite3RegexpInit, ++ sqlite3ShaInit, ++ sqlite3ShathreeInit, ++ sqlite3TotypeInit, ++ sqlite3UintInit, ++ sqlite3UuidInit, ++#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) ++ sqlite3ZipfileInit, ++ sqlite3SqlarInit, ++#endif + }; + + #ifndef SQLITE_AMALGAMATION --- /src/shell.c.in +++ /src/shell.c.in -@@ -61,6 +61,7 @@ +@@ -69,6 +69,7 @@ #include <stdio.h> #include <assert.h> #include "sqlite3.h" @@ -299,7 +364,7 @@ Fix building with dlopen() not available. typedef sqlite3_int64 i64; typedef sqlite3_uint64 u64; typedef unsigned char u8; -@@ -127,6 +128,10 @@ +@@ -135,6 +136,10 @@ # define SHELL_USE_LOCAL_GETLINE 1 #endif @@ -309,13 +374,17 @@ Fix building with dlopen() not available. + #if defined(_WIN32) || defined(WIN32) - # include <io.h> -@@ -939,18 +944,7 @@ - INCLUDE ../ext/misc/shathree.c - INCLUDE ../ext/misc/fileio.c - INCLUDE ../ext/misc/completion.c + # if SQLITE_OS_WINRT +@@ -1005,22 +1010,7 @@ + INCLUDE test_windirent.c + #define dirent DIRENT + #endif +-INCLUDE ../ext/misc/shathree.c +-INCLUDE ../ext/misc/fileio.c +-INCLUDE ../ext/misc/completion.c -INCLUDE ../ext/misc/appendvfs.c INCLUDE ../ext/misc/memtrace.c +-INCLUDE ../ext/misc/uint.c -#ifdef SQLITE_HAVE_ZLIB -INCLUDE ../ext/misc/zipfile.c -INCLUDE ../ext/misc/sqlar.c @@ -329,29 +398,34 @@ Fix building with dlopen() not available. #if defined(SQLITE_ENABLE_SESSION) /* -@@ -4173,10 +4167,13 @@ - sqlite3_shathree_init(p->db, 0, 0); - sqlite3_completion_init(p->db, 0, 0); - #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) -+ extern int sqlite3_dbdata_init(sqlite3 *, char **, const sqlite3_api_routines *); - sqlite3_dbdata_init(p->db, 0, 0); - #endif - #ifdef SQLITE_HAVE_ZLIB -+ extern int sqlite3_zipfile_init(sqlite3 *, char **, const sqlite3_api_routines *); - sqlite3_zipfile_init(p->db, 0, 0); -+ extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *); - sqlite3_sqlar_init(p->db, 0, 0); +@@ -4261,17 +4251,6 @@ + #ifndef SQLITE_OMIT_LOAD_EXTENSION + sqlite3_enable_load_extension(p->db, 1); #endif +- sqlite3_fileio_init(p->db, 0, 0); +- sqlite3_shathree_init(p->db, 0, 0); +- sqlite3_completion_init(p->db, 0, 0); +- sqlite3_uint_init(p->db, 0, 0); +-#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) +- sqlite3_dbdata_init(p->db, 0, 0); +-#endif +-#ifdef SQLITE_HAVE_ZLIB +- sqlite3_zipfile_init(p->db, 0, 0); +- sqlite3_sqlar_init(p->db, 0, 0); +-#endif sqlite3_create_function(p->db, "shell_add_schema", 3, SQLITE_UTF8, 0, -@@ -6176,6 +6173,7 @@ + shellAddSchemaName, 0, 0); + sqlite3_create_function(p->db, "shell_module_schema", 1, SQLITE_UTF8, 0, +@@ -6281,8 +6260,6 @@ + ); goto end_ar_command; } - sqlite3_fileio_init(cmd.db, 0, 0); -+ extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *); - sqlite3_sqlar_init(cmd.db, 0, 0); +- sqlite3_fileio_init(cmd.db, 0, 0); +- sqlite3_sqlar_init(cmd.db, 0, 0); sqlite3_create_function(cmd.db, "shell_putsnl", 1, SQLITE_UTF8, cmd.p, shellPutsFunc, 0, 0); -@@ -10354,6 +10352,7 @@ + +@@ -10621,6 +10598,7 @@ #endif } data.out = stdout; @@ -359,6 +433,94 @@ Fix building with dlopen() not available. sqlite3_appendvfs_init(0,0,0); /* Go ahead and open the database file if it already exists. If the +--- /src/test_config.c ++++ /src/test_config.c +@@ -540,6 +540,8 @@ + Tcl_SetVar2(interp, "sqlite_options", "progress", "1", TCL_GLOBAL_ONLY); + #endif + ++ Tcl_SetVar2(interp, "sqlite_options", "regexp", "1", TCL_GLOBAL_ONLY); ++ + #ifdef SQLITE_OMIT_REINDEX + Tcl_SetVar2(interp, "sqlite_options", "reindex", "0", TCL_GLOBAL_ONLY); + #else +@@ -662,6 +664,8 @@ + Tcl_SetVar2(interp, "sqlite_options", "truncate_opt", "1", TCL_GLOBAL_ONLY); + #endif + ++ Tcl_SetVar2(interp, "sqlite_options", "uint", "1", TCL_GLOBAL_ONLY); ++ + #ifdef SQLITE_OMIT_UTF16 + Tcl_SetVar2(interp, "sqlite_options", "utf16", "0", TCL_GLOBAL_ONLY); + #else +--- /test/e_expr.test ++++ /test/e_expr.test +@@ -1078,7 +1078,7 @@ + # + # There is a regexp function if ICU is enabled though. + # +-ifcapable !icu { ++ifcapable !icu&&!regexp { + do_catchsql_test e_expr-18.1.1 { + SELECT regexp('abc', 'def') + } {1 {no such function: regexp}} +--- /test/icu.test ++++ /test/icu.test +@@ -41,7 +41,7 @@ + # + test_expr icu-1.1 {i1='hello'} {i1 REGEXP 'hello'} 1 + test_expr icu-1.2 {i1='hello'} {i1 REGEXP '.ello'} 1 +- test_expr icu-1.3 {i1='hello'} {i1 REGEXP '.ell'} 0 ++ test_expr icu-1.3 {i1='hello'} {i1 REGEXP '.ell$'} 0 + test_expr icu-1.4 {i1='hello'} {i1 REGEXP '.ell.*'} 1 + test_expr icu-1.5 {i1=NULL} {i1 REGEXP '.ell.*'} {} + +--- /test/pragma.test ++++ /test/pragma.test +@@ -1360,17 +1360,32 @@ + } ;# ifcapable trigger + + ifcapable schema_pragmas { +- do_test pragma-11.1 { +- execsql2 { +- pragma collation_list; +- } +- } {seq 0 name RTRIM seq 1 name NOCASE seq 2 name BINARY} +- do_test pragma-11.2 { +- db collate New_Collation blah... +- execsql { +- pragma collation_list; +- } +- } {0 New_Collation 1 RTRIM 2 NOCASE 3 BINARY} ++ ifcapable uint { ++ do_test pragma-11.1 { ++ execsql2 { ++ pragma collation_list; ++ } ++ } {seq 0 name UINT seq 1 name RTRIM seq 2 name NOCASE seq 3 name BINARY} ++ do_test pragma-11.2 { ++ db collate New_Collation blah... ++ execsql { ++ pragma collation_list; ++ } ++ } {0 New_Collation 1 UINT 2 RTRIM 3 NOCASE 4 BINARY} ++ } ++ ifcapable !uint { ++ do_test pragma-11.1 { ++ execsql2 { ++ pragma collation_list; ++ } ++ } {seq 0 name RTRIM seq 1 name NOCASE seq 2 name BINARY} ++ do_test pragma-11.2 { ++ db collate New_Collation blah... ++ execsql { ++ pragma collation_list; ++ } ++ } {0 New_Collation 1 RTRIM 2 NOCASE 3 BINARY} ++ } + } + + ifcapable schema_pragmas&&tempdb { --- /test/sessionfuzz.c +++ /test/sessionfuzz.c @@ -700,42 +700,6 @@ @@ -414,14 +576,26 @@ Fix building with dlopen() not available. sqlite3ext.h sqlite3rbu.h sqliteicu.h -@@ -403,6 +404,11 @@ +@@ -404,6 +405,23 @@ sqlite3session.c fts5.c stmt.c + appendvfs.c ++ carray.c ++ completion.c ++ csv.c + dbdata.c ++ eval.c ++ fileio.c ++ ieee754.c ++ regexp.c ++ sha1.c ++ shathree.c + sqlar.c + sqlite3expert.c ++ totype.c ++ uint.c ++ uuid.c + zipfile.c } { copy_file tsrc/$file @@ -440,7 +614,7 @@ Fix building with dlopen() not available. const char *sqlite3_analyzer_init_proc(Tcl_Interp *interp){ --- /tool/sqltclsh.c.in +++ /tool/sqltclsh.c.in -@@ -27,19 +27,17 @@ +@@ -27,21 +27,13 @@ #define SQLITE_OMIT_SHARED_CACHE 1 #define SQLITE_DEFAULT_MEMSTATUS 0 #define SQLITE_MAX_EXPR_DEPTH 0 @@ -457,10 +631,10 @@ Fix building with dlopen() not available. (void)interp; + extern int sqlite3_appendvfs_init(sqlite3 *,char **, const sqlite3_api_routines *); sqlite3_appendvfs_init(0,0,0); - #ifdef SQLITE_HAVE_ZLIB -+ extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *); - sqlite3_auto_extension((void(*)(void))sqlite3_sqlar_init); -+ extern int sqlite3_zipfile_init(sqlite3 *, char **, const sqlite3_api_routines *); - sqlite3_auto_extension((void(*)(void))sqlite3_zipfile_init); - #endif +-#ifdef SQLITE_HAVE_ZLIB +- sqlite3_auto_extension((void(*)(void))sqlite3_sqlar_init); +- sqlite3_auto_extension((void(*)(void))sqlite3_zipfile_init); +-#endif + return + BEGIN_STRING diff --git a/dev-db/sqlite/files/sqlite-3.32.3-backports_1.patch b/dev-db/sqlite/files/sqlite-3.32.3-backports_1.patch new file mode 100644 index 000000000000..256d18ee76fc --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.32.3-backports_1.patch @@ -0,0 +1,361 @@ +https://sqlite.org/src/info/d48af4d2cfff3d5f +https://sqlite.org/src/info/cc888878ea8d5bc7 +https://sqlite.org/src/info/be545f85a6ef09cc +https://sqlite.org/src/info/6e0ffa2053124168 +https://sqlite.org/src/info/4d0cfb1236884349 +https://sqlite.org/src/info/ccff8cb8267d4c56 +https://sqlite.org/src/info/5124732370fd53c9 + +--- /ext/fts3/fts3.c ++++ /ext/fts3/fts3.c +@@ -2068,7 +2068,7 @@ + sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */ + sqlite3_int64 iVal /* Write this value to the list */ + ){ +- assert( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) ); ++ assert_fts3_nc( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) ); + *pp += sqlite3Fts3PutVarint(*pp, iVal-*piPrev); + *piPrev = iVal; + } +@@ -5208,10 +5208,12 @@ + ); + if( res ){ + nNew = (int)(pOut - pPhrase->doclist.pList) - 1; +- assert( pPhrase->doclist.pList[nNew]=='\0' ); +- assert( nNew<=pPhrase->doclist.nList && nNew>0 ); +- memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew); +- pPhrase->doclist.nList = nNew; ++ if( nNew>=0 ){ ++ assert( pPhrase->doclist.pList[nNew]=='\0' ); ++ assert( nNew<=pPhrase->doclist.nList && nNew>0 ); ++ memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew); ++ pPhrase->doclist.nList = nNew; ++ } + *paPoslist = pPhrase->doclist.pList; + *pnToken = pPhrase->nToken; + } +@@ -5563,7 +5565,10 @@ + }else + #endif + { +- bHit = (pExpr->bEof==0 && pExpr->iDocid==pCsr->iPrevId); ++ bHit = ( ++ pExpr->bEof==0 && pExpr->iDocid==pCsr->iPrevId ++ && pExpr->pPhrase->doclist.nList>0 ++ ); + } + break; + } +--- /ext/fts3/fts3_write.c ++++ /ext/fts3/fts3_write.c +@@ -341,7 +341,9 @@ + ** created by merging the oldest :2 segments from absolute level :1. See + ** function sqlite3Fts3Incrmerge() for details. */ + /* 29 */ "SELECT 2 * total(1 + leaves_end_block - start_block) " +- " FROM %Q.'%q_segdir' WHERE level = ? AND idx < ?", ++ " FROM (SELECT * FROM %Q.'%q_segdir' " ++ " WHERE level = ? ORDER BY idx ASC LIMIT ?" ++ " )", + + /* SQL_DELETE_SEGDIR_ENTRY + ** Delete the %_segdir entry on absolute level :1 with index :2. */ +@@ -2853,6 +2855,19 @@ + return SQLITE_OK; + } + ++static int fts3GrowSegReaderBuffer(Fts3MultiSegReader *pCsr, int nReq){ ++ if( nReq>pCsr->nBuffer ){ ++ char *aNew; ++ pCsr->nBuffer = nReq*2; ++ aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer); ++ if( !aNew ){ ++ return SQLITE_NOMEM; ++ } ++ pCsr->aBuffer = aNew; ++ } ++ return SQLITE_OK; ++} ++ + + int sqlite3Fts3SegReaderStep( + Fts3Table *p, /* Virtual table handle */ +@@ -2987,15 +3002,9 @@ + } + + nByte = sqlite3Fts3VarintLen(iDelta) + (isRequirePos?nList+1:0); +- if( nDoclist+nByte>pCsr->nBuffer ){ +- char *aNew; +- pCsr->nBuffer = (nDoclist+nByte)*2; +- aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer); +- if( !aNew ){ +- return SQLITE_NOMEM; +- } +- pCsr->aBuffer = aNew; +- } ++ ++ rc = fts3GrowSegReaderBuffer(pCsr, nByte+nDoclist); ++ if( rc ) return rc; + + if( isFirst ){ + char *a = &pCsr->aBuffer[nDoclist]; +@@ -3020,6 +3029,9 @@ + fts3SegReaderSort(apSegment, nMerge, j, xCmp); + } + if( nDoclist>0 ){ ++ rc = fts3GrowSegReaderBuffer(pCsr, nDoclist+FTS3_NODE_PADDING); ++ if( rc ) return rc; ++ memset(&pCsr->aBuffer[nDoclist], 0, FTS3_NODE_PADDING); + pCsr->aDoclist = pCsr->aBuffer; + pCsr->nDoclist = nDoclist; + rc = SQLITE_ROW; +@@ -4288,7 +4300,7 @@ + int i; + int nHeight = (int)aRoot[0]; + NodeWriter *pNode; +- if( nHeight<1 || nHeight>FTS_MAX_APPENDABLE_HEIGHT ){ ++ if( nHeight<1 || nHeight>=FTS_MAX_APPENDABLE_HEIGHT ){ + sqlite3_reset(pSelect); + return FTS_CORRUPT_VTAB; + } +--- /src/expr.c ++++ /src/expr.c +@@ -4272,7 +4272,9 @@ + int nCol; + testcase( op==TK_EXISTS ); + testcase( op==TK_SELECT ); +- if( op==TK_SELECT && (nCol = pExpr->x.pSelect->pEList->nExpr)!=1 ){ ++ if( pParse->db->mallocFailed ){ ++ return 0; ++ }else if( op==TK_SELECT && (nCol = pExpr->x.pSelect->pEList->nExpr)!=1 ){ + sqlite3SubselectError(pParse, nCol, 1); + }else{ + return sqlite3CodeSubselect(pParse, pExpr); +--- /test/fts3corrupt4.test ++++ /test/fts3corrupt4.test +@@ -6123,4 +6123,163 @@ + SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'rtree ner "json1^enable"'; + } + ++#------------------------------------------------------------------------- ++do_execsql_test 42.1 { ++ CREATE VIRTUAL TABLE f USING fts3(a, b); ++} ++do_execsql_test 42.2 { ++ INSERT INTO f_segdir VALUES(0,2,1111,0,0,X'00'); ++ INSERT INTO f_segdir VALUES(0,3,0 ,0,0,X'00013003010200'); ++} ++do_execsql_test 42.3 { ++ INSERT INTO f(f) VALUES ('merge=107,2'); ++} ++ ++#------------------------------------------------------------------------- ++reset_db ++set saved $sqlite_fts3_enable_parentheses ++set sqlite_fts3_enable_parentheses 1 ++do_execsql_test 43.1 { ++ CREATE VIRTUAL TABLE def USING fts3(xyz); ++ INSERT INTO def_segdir VALUES(0,0,0,0,0, X'0001310301c9000103323334050d81'); ++} {} ++ ++do_execsql_test 43.2 { ++ SELECT rowid FROM def WHERE def MATCH '1 NEAR 1' ++} {1} ++ ++set sqlite_fts3_enable_parentheses $saved ++ ++#------------------------------------------------------------------------- ++reset_db ++do_execsql_test 44.1 { ++ CREATE VIRTUAL TABLE t0 USING fts3(col0 INTEGER PRIMARY KEY,col1 VARCHAR(8),col2 BINARY,col3 BINARY); ++ INSERT INTO t0_content VALUES(0,NULL,NULL,NULL,NULL); ++ INSERT INTO t0_segdir VALUES(0,0,0,0,'0 42',X'00013103010200010332333405010201ba00000461616161050101020200000462626262050101030200'); ++} ++ ++do_execsql_test 44.2 { ++ SELECT matchinfo(t0, t0) IS NULL FROM t0 WHERE t0 MATCH '1*' ++} {0} ++ ++#------------------------------------------------------------------------- ++# ++reset_db ++do_test 45.0 { ++ sqlite3 db {} ++ db deserialize [decode_hexdb { ++.open --hexdb ++| size 24576 pagesize 4096 filename crash-65c98512cc9e49.db ++| page 1 offset 0 ++| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. ++| 16: 10 00 01 01 00 40 20 20 00 00 00 00 00 00 00 06 .....@ ........ ++| 96: 00 00 00 00 0d 0e fc 00 06 0d bc 00 0f ca 0f 6c ...............l ++| 112: 0f 04 0e 13 0e c9 0d bc 00 00 00 00 00 00 00 00 ................ ++| 3504: 00 00 00 00 00 00 00 00 00 00 00 00 55 06 07 17 ............U... ++| 3520: 1b 1b 01 81 01 74 61 62 6c 65 78 31 5f 73 74 61 .....tablex1_sta ++| 3536: 74 78 31 5f 73 74 61 74 06 43 52 45 41 54 45 20 tx1_stat.CREATE ++| 3552: 54 41 42 4c 45 20 27 78 31 5f 73 74 61 74 27 28 TABLE 'x1_stat'( ++| 3568: 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 id INTEGER PRIMA ++| 3584: 52 59 20 4b 45 59 2c 20 76 61 6c 75 65 20 42 4c RY KEY, value BL ++| 3600: 41 82 29 81 33 04 07 17 1f 1f 01 82 35 74 61 62 A.).3.......5tab ++| 3616: 6c 65 78 31 5f 73 65 67 64 69 72 78 31 5f 73 65 lex1_segdirx1_se ++| 3632: 67 64 69 72 04 43 52 45 41 54 45 20 54 41 42 4c gdir.CREATE TABL ++| 3648: 45 20 27 78 31 5f 73 65 67 64 69 72 27 28 6c 65 E 'x1_segdir'(le ++| 3664: 76 65 6c 20 49 4e 54 45 47 45 52 2c 69 64 78 20 vel INTEGER,idx ++| 3680: 49 4e 54 45 47 45 52 2c 73 74 61 72 74 5f 62 6c INTEGER,start_bl ++| 3696: 6f 63 6b 20 49 4e 54 45 47 45 52 2c 6c 65 61 76 ock INTEGER,leav ++| 3712: 65 73 5f 65 6e 64 5f 62 6c 6f 63 6b 20 49 4e 54 es_end_block INT ++| 3728: 45 47 45 52 2c 65 6e 64 5f 62 6c 6f 63 6b 20 49 EGER,end_block I ++| 3744: 4e 54 45 47 45 52 2c 72 6f 6f 74 20 42 4c 4f 42 NTEGER,root BLOB ++| 3760: 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 6c 65 76 ,PRIMARY KEY(lev ++| 3776: 65 6c 2c 20 69 64 78 29 29 31 05 06 17 45 1f 01 el, idx))1...E.. ++| 3792: 00 69 6e 64 65 78 73 71 6c 69 74 65 5f 61 75 74 .indexsqlite_aut ++| 3808: 6f 69 6e 64 65 78 5f 78 31 5f 73 65 67 64 69 72 oindex_x1_segdir ++| 3824: 5f 31 78 31 5f 73 65 67 64 69 72 05 00 00 00 08 _1x1_segdir..... ++| 3840: 60 00 00 00 66 03 07 17 23 23 01 81 13 74 61 62 `...f...##...tab ++| 3856: 6c 65 78 31 5f 73 65 67 6d 65 6e 74 73 78 31 5f lex1_segmentsx1_ ++| 3872: 73 65 67 6d 65 6e 74 73 03 43 52 45 41 54 45 20 segments.CREATE ++| 3888: 54 41 42 4c 45 20 27 78 31 5f 73 65 67 6d 65 6e TABLE 'x1_segmen ++| 3904: 74 73 27 28 62 6c 6f 63 6b 69 64 20 49 4e 54 45 ts'(blockid INTE ++| 3920: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c GER PRIMARY KEY, ++| 3936: 20 62 6c 6f 63 6b 20 42 4c 4f 42 29 5c 02 07 17 block BLOB).... ++| 3952: 21 21 01 81 03 74 61 62 6c 65 78 31 5f 63 6f 6e !!...tablex1_con ++| 3968: 74 65 6e 74 78 31 5f 63 6f 6e 74 65 6e 74 02 43 tentx1_content.C ++| 3984: 52 45 41 54 45 20 54 41 42 4c 45 20 27 78 31 5f REATE TABLE 'x1_ ++| 4000: 63 6f 6e 74 65 6e 74 27 28 64 6f 63 69 64 20 49 content'(docid I ++| 4016: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b NTEGER PRIMARY K ++| 4032: 45 59 2c 20 27 63 30 78 27 29 34 01 06 17 11 11 EY, 'c0x')4..... ++| 4048: 08 57 74 61 62 6c 65 78 31 78 31 43 52 45 41 54 .Wtablex1x1CREAT ++| 4064: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 E VIRTUAL TABLE ++| 4080: 78 31 20 55 53 49 4e 47 20 66 74 73 33 28 78 29 x1 USING fts3(x) ++| page 2 offset 4096 ++| 0: 0d 00 00 00 11 0f 77 f0 0f f8 0f f0 0f e8 0f e0 ......w......... ++| 16: 0f d8 0f d0 0f c8 0f c0 00 00 00 00 00 00 00 00 ................ ++| 3952: 00 00 00 00 00 00 00 00 06 11 03 00 13 77 78 79 .............wxy ++| 3968: 06 10 03 00 13 74 75 76 06 0f 03 00 13 71 33 73 .....tuv.....q3s ++| 3984: 06 0e 03 00 13 6e 6f 70 06 0d 03 00 13 6b 6c 6d .....nop.....klm ++| 4000: 06 0c 03 04 c3 68 69 6a 06 0b 03 00 13 65 66 67 .....hij.....efg ++| 4016: 06 0a 03 00 13 62 63 64 06 09 03 00 13 79 7a 61 .....bcd.....yza ++| 4032: 06 08 03 00 13 76 77 78 06 07 03 00 13 73 74 75 .....vwx.....stu ++| 4048: 06 06 03 00 13 70 71 72 06 05 03 00 13 6d 6e 6f .....pqr.....mno ++| 4064: 06 03 03 00 13 6a 6b 6c 06 03 03 00 13 67 68 69 .....jkl.....ghi ++| 4080: 06 02 02 00 03 64 65 66 06 01 03 00 13 61 52 63 .....def.....aRc ++| page 3 offset 8192 ++| 0: 0d 00 00 00 03 0f a7 00 0f b5 0f a7 0f fa 01 00 ................ ++| 4000: 00 00 00 00 00 00 00 0c 02 03 00 1e 00 03 6b 6c ..............kl ++| 4016: 6d 03 0d 02 00 43 01 04 00 81 0a 00 03 61 62 63 m....C.......abc ++| 4032: 03 0b 32 00 00 03 62 63 64 03 0a 02 00 00 03 64 ..2...bcd......d ++| 4048: 69 26 03 02 02 00 00 03 65 66 67 03 0b 02 00 00 i&......efg..... ++| 4064: 03 67 68 69 03 03 02 00 00 03 68 69 6a 03 0c 02 .ghi......hij... ++| 4080: 00 00 03 6a 6a 2c 03 04 02 00 03 81 00 03 00 00 ...jj,.......... ++| page 4 offset 12288 ++| 0: 0d 0f 3a 00 05 0f 25 00 0f 9e 0f 88 0f 43 0f 25 ..:...%......C.% ++| 16: 0f 72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .r.............. ++| 3856: 00 00 00 00 00 00 00 00 00 56 01 08 08 13 1e 03 .........V...... ++| 3872: 30 20 39 00 03 13 05 07 08 08 18 08 13 1e 30 20 0 9...........0 ++| 3888: 39 00 03 77 78 79 03 11 02 00 0f 6c 00 09 01 08 9..wxy.....l.... ++| 3904: 08 15 54 27 04 07 09 01 08 08 15 42 02 30 20 33 ..T'.......B.0 3 ++| 3920: 36 00 03 6e 6f 70 03 0e 02 00 00 03 71 72 73 03 6..nop......qrs. ++| 3936: 0f 02 00 00 03 74 75 76 03 10 02 00 0f cf b1 06 .....tuv........ ++| 3952: 01 08 14 06 07 01 08 09 01 1b 14 02 02 31 32 38 .............128 ++| 3968: 20 2d 37 32 10 01 01 6b 14 03 07 09 09 08 08 15 -72...k........ ++| 3984: 1e 30 20 33 36 00 03 79 7a 61 03 09 02 00 2f 02 .0 36..yza..../. ++| 4000: 07 09 08 08 08 15 54 30 20 33 36 00 03 6d 6e 6f ......T0 36..mno ++| 4016: 03 05 02 00 00 03 70 71 72 03 06 02 00 00 03 73 ......pqr......s ++| 4032: 74 75 03 07 02 00 00 03 76 77 78 03 08 02 00 00 tu......vwx..... ++| 4048: 00 00 4a 08 08 08 15 54 30 20 33 36 00 03 61 62 ..J....T0 36..ab ++| 4064: 63 03 01 02 00 00 03 64 65 66 03 02 02 00 00 03 c......def...... ++| 4080: 67 68 69 03 03 67 00 00 03 6a 6b 6c 03 04 02 00 ghi..g...jkl.... ++| page 5 offset 16384 ++| 0: 0a 0f e7 00 05 0f da 00 0f e1 0f fa 0f f4 0f ed ................ ++| 16: 0f da 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++| 4048: 00 00 00 00 00 00 00 1a 01 03 06 04 01 08 01 02 ................ ++| 4064: 06 05 04 08 08 01 05 00 00 00 06 01 03 06 04 09 ................ ++| 4080: 02 01 02 04 05 04 09 09 01 03 05 04 09 08 01 02 ................ ++| page 6 offset 20480 ++| 0: 0d 00 10 00 01 0f f9 00 0f f9 00 00 00 00 00 00 ................ ++| 4080: 00 00 00 00 00 00 00 00 00 05 01 03 00 10 01 03 ................ ++| end crash-65c98512cc9e49.db ++}]} {} ++ ++do_catchsql_test 45.2 { ++ INSERT INTO x1(x1) VALUES( 'merge=1' ) ++} {1 {database disk image is malformed}} ++ ++#------------------------------------------------------------------------- ++reset_db ++set saved $sqlite_fts3_enable_parentheses ++set sqlite_fts3_enable_parentheses 1 ++do_execsql_test 46.1 { ++ CREATE VIRTUAL TABLE t0 USING fts3(a INTEGER PRIMARY KEY,b,c,d); ++ INSERT INTO t0_segdir VALUES(0,0,0,0,'0 42',X'0001310301c9000103323334050d8000f200000461616161050101020200000462626262050101030200'); ++} {} ++ ++do_catchsql_test 46.2 { ++ SELECT * FROM t0 ++ WHERE t0 MATCH x'2b0a312b0a312a312a2a0b5d0a0b0b0a312a0a0b0b0a312a0b310a392a0b0a27312a2a0b5d0a312a0b310a31315d0b310a312a316d2a0b313b15bceaa50a312a0b0a27312a2a0b5d0a312a0b310a312b0b2a310a312a0b2a0b2a0b2e5d0a0bff313336e34a2a312a0b0a3c310b0a0b4b4b0b4b2a4bec40322b2a0b310a0a312a0a0a0a0a0a0a0a0a0b310a312a2a2a0b5d0a0b0b0a312a0b310a312a0b0a4e4541530b310a5df5ced70a0a0a0a0a4f520a0a0a0a0a0a0a312a0b0a4e4541520b310a5d616161610a0a0a0a4f520a0a0a0a0a0a312b0a312a312a0a0a0a0a0a0a004a0b0a310b220a0b0a310a4a22310a0b0a7e6fe0e0e030e0e0e0e0e01176e02000e0e0e0e0e01131320226310a0b0a310a4a22310a0b0a310a766f8b8b4ee0e0300ae0090909090909090909090909090909090909090909090909090909090909090947aaaa540b09090909090909090909090909090909090909090909090909090909090909fae0e0f2f22164e0e0f273e07fefefef7d6dfafafafa6d6d6d6d'; ++} {1 {database disk image is malformed}} ++ ++set sqlite_fts3_enable_parentheses $saved ++ + finish_test +--- /test/fts3corrupt6.test ++++ /test/fts3corrupt6.test +@@ -0,0 +1,60 @@ ++# 2020 June 8 ++# ++# The author disclaims copyright to this source code. In place of ++# a legal notice, here is a blessing: ++# ++# May you do good and not evil. ++# May you find forgiveness for yourself and forgive others. ++# May you share freely, never taking more than you give. ++# ++#************************************************************************* ++# This file implements regression tests for SQLite library. The ++# focus of this script is testing the FTS3 module. ++# ++# $Id: fts3aa.test,v 1.1 2007/08/20 17:38:42 shess Exp $ ++# ++ ++set testdir [file dirname $argv0] ++source $testdir/tester.tcl ++source $testdir/fts3_common.tcl ++set testprefix fts3corrupt6 ++ ++# If SQLITE_ENABLE_FTS3 is defined, omit this file. ++ifcapable !fts3 { ++ finish_test ++ return ++} ++ ++set ::saved_sqlite_fts3_enable_parentheses $::sqlite_fts3_enable_parentheses ++set sqlite_fts3_enable_parentheses 1 ++sqlite3_fts3_may_be_corrupt 1 ++database_may_be_corrupt ++ ++do_execsql_test 1.0 { ++ BEGIN TRANSACTION; ++ CREATE TABLE t_content(col0 INTEGER); ++ PRAGMA writable_schema=ON; ++ CREATE VIRTUAL TABLE t0 USING fts3(col0 INTEGER PRIMARY KEY,col1 VARCHAR(8),col2 BINARY,col3 BINARY); ++ INSERT INTO t0_content VALUES(0,NULL,NULL,NULL,NULL); ++ INSERT INTO t0_segdir VALUES(0,0,0,0,'0 42',X'000131030102000103323334050101010200000461616161050101020200000462626262050101030200'); ++ COMMIT; ++} ++ ++do_execsql_test 1.1 { ++ SELECT 0+matchinfo(t0,'yxyyxy') FROM t0 WHERE t0 MATCH CAST( x'2b0a312b0a312a312a2a0b5d0a0b0b0a312a0a0b0b0a312a0b310a392a0b0a27312a2a0b5d0a312a0b310a31315d0b310a312a316d2a0b313b15bceaa50a312a0b0a27312a2a0b5d0a312a0b310a312b0b2a310a312a0b2a0b2a0b2e5d0a0bff313336e34a2a312a0b0a3c310b0a0b4b4b0b4b2a4bec40322b2a0b310a0a312a0a0a0a0a0a0a0a0a0b310a312a2a2a0b5d0a0b0b0a312a0b310a312a0b0a4e4541530b310a5df5ced70a0a0a0a0a4f520a0a0a0a0a0a0a312a0b0a4e4541520b310a5d616161610a0a0a0a4f520a0a0a0a0a0a312b0a312a312a0a0a0a0a0a0a004a0b0a310b220a0b0a310a4a22310a0b0a7e6fe0e0e030e0e0e0e0e01176e02000e0e0e0e0e01131320226310a0b0a310a4a22310a0b0a310a766f8b8b4ee0e0300ae0090909090909090909090909090909090909090909090909090909090909090947aaaa540b09090909090909090909090909090909090909090909090909090909090909fae0e0f2f22164e0e0f273e07fefefef7d6dfafafafa6d6d6d6d' AS TEXT); ++} {0} ++ ++do_execsql_test 1.2 { ++ CREATE VIRTUAL TABLE t1 USING fts3(col0 INTEGER PRIMARY KEY,col1 VARCHAR(8),col2 BINARY,col3 BINARY); ++ INSERT INTO t1_content VALUES(0,NULL,NULL,NULL,NULL); ++ INSERT INTO t1_segdir VALUES(0,0,0,0,'0 42',X'000131030102000103323334050101010200000461616161050101020200000462626262050101030200'); ++} ++ ++do_execsql_test 1.3 { ++ SELECT 42+matchinfo(t1,'yxyyxy') FROM t1 WHERE t1 MATCH x'2b0a312b0a312a312a2a0b5d0a0b0b0a312a0a0b0b0a312a0b310a392a0b0a27312a2a0b5d0a312a0b310a31315d0b310a312a316d2a0b313b15bceaa50a312a0b0a27312a2a0b5d0a312a0b310a312b0b2a310a312a0b2a0b2a0b2e5d0a0bff313336e34a2a312a0b0a3c310b0a0b4b4b0b4b2a4bec40322b2a0b310a0a312a0a0a0a0a0a0a0a0a0b310a312a2a2a0b5d0a0b0b0a312a0b310a312a0b0a4e4541530b310a5df5ced70a0a0a0a0a4f520a0a0a0a0a0a0a312a0b0a4e4541520b310a5d616161610a0a0a0a4f520a0a0a0a0a0a312b0a312a312a0a0a0a0a0a0a004a0b0a310b220a0b0a310a4a22310a0b0a7e6fe0e0e030e0e0e0e0e01176e02000e0e0e0e0e01131320226310a0b0a310a4a22310a0b0a310a766f8b8b4ee0e0300ae0090909090909090909090909090909090909090909090909090909090909090947aaaa540b09090909090909090909090909090909090909090909090909090909090909fae0e0f2f22164e0e0f273e07fefefef7d6dfafafafa6d6d6d6d'; ++} {42} ++ ++set sqlite_fts3_enable_parentheses $saved_sqlite_fts3_enable_parentheses ++finish_test ++ ++ diff --git a/dev-db/sqlite/files/sqlite-3.32.3-backports_2.patch b/dev-db/sqlite/files/sqlite-3.32.3-backports_2.patch new file mode 100644 index 000000000000..32b6f9b1624f --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.32.3-backports_2.patch @@ -0,0 +1,302 @@ +https://sqlite.org/src/info/30735432bc33cb95 +https://sqlite.org/src/info/1bd18ca35bdbf303 +https://sqlite.org/src/info/49da8bdce17ced91 +https://sqlite.org/src/info/f25a56c26e28abd4 + +--- /ext/fts5/fts5_index.c ++++ /ext/fts5/fts5_index.c +@@ -2321,11 +2321,11 @@ + } + + search_success: +- pIter->iLeafOffset = iOff + nNew; +- if( pIter->iLeafOffset>n || nNew<1 ){ ++ if( (i64)iOff+nNew>n || nNew<1 ){ + p->rc = FTS5_CORRUPT; + return; + } ++ pIter->iLeafOffset = iOff + nNew; + pIter->iTermLeafOffset = pIter->iLeafOffset; + pIter->iTermLeafPgno = pIter->iLeafPgno; + +--- /ext/fts5/test/fts5corrupt3.test ++++ /ext/fts5/test/fts5corrupt3.test +@@ -10108,6 +10108,221 @@ + INSERT INTO t1(t1) SELECT x FROM t2; + } {1 {database disk image is malformed}} + ++#------------------------------------------------------------------------- ++reset_db ++do_test 69.0 { ++ sqlite3 db {} ++ db deserialize [decode_hexdb { ++.open --hexdb ++| size 32768 pagesize 4096 filename crash-31c462b8b665d0.db ++| page 1 offset 0 ++| 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. ++| 16: 10 00 01 01 00 40 20 20 00 00 00 00 00 00 00 08 .....@ ........ ++| 32: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++| 96: 00 00 00 00 0d 0f c7 00 07 0d 92 00 0f 8d 0f 36 ...............6 ++| 112: 0e cb 0e 6b 0e 0e 0d b6 0d 92 00 00 00 00 00 00 ...k............ ++| 3472: 00 00 22 08 06 17 11 11 01 31 74 61 62 6c 65 74 .........1tablet ++| 3488: 32 74 32 08 43 52 45 41 54 45 20 54 41 42 4c 45 2t2.CREATE TABLE ++| 3504: 20 74 32 28 78 29 56 07 06 17 1f 1f 01 7d 74 61 t2(x)V.......ta ++| 3520: 62 6c 65 74 31 5f 63 6f 6e 66 69 67 74 31 5f 63 blet1_configt1_c ++| 3536: 6f 6e 66 69 67 07 43 52 45 41 54 45 20 54 41 42 onfig.CREATE TAB ++| 3552: 4c 45 20 27 74 31 5f 63 6f 6e 66 69 67 27 28 6b LE 't1_config'(k ++| 3568: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 PRIMARY KEY, v) ++| 3584: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5b 06 WITHOUT ROWID[. ++| 3600: 07 17 21 21 01 81 01 74 61 62 6c 65 74 31 5f 64 ..!!...tablet1_d ++| 3616: 6f 63 73 69 7a 65 74 31 5f 64 6f 63 73 69 7a 65 ocsizet1_docsize ++| 3632: 06 43 52 45 41 54 45 20 54 41 42 4c 45 20 27 74 .CREATE TABLE 't ++| 3648: 31 5f 64 6f 63 73 69 7a 65 27 28 69 64 20 49 4e 1_docsize'(id IN ++| 3664: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 TEGER PRIMARY KE ++| 3680: 59 2c 20 73 7a 20 42 4c 4f 42 29 5e 05 07 17 21 Y, sz BLOB)^...! ++| 3696: 21 01 81 07 74 61 62 6c 65 74 31 5f 63 6f 6e 74 !...tablet1_cont ++| 3712: 65 6e 74 74 31 5f 63 6f 6e 74 65 6e 74 05 43 52 entt1_content.CR ++| 3728: 45 41 54 45 20 54 41 42 4c 45 20 27 74 31 5f 63 EATE TABLE 't1_c ++| 3744: 6f 6e 74 65 6e 74 27 28 69 64 20 49 4e 54 45 47 ontent'(id INTEG ++| 3760: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 ER PRIMARY KEY, ++| 3776: 63 39 2c 20 63 31 2c 20 63 32 29 69 04 07 17 19 c9, c1, c2)i.... ++| 3792: 19 01 81 2d 74 61 62 6c 65 74 31 5f 69 64 78 74 ...-tablet1_idxt ++| 3808: 31 5f 69 64 78 04 43 52 45 41 54 45 20 54 41 42 1_idx.CREATE TAB ++| 3824: 4c 45 20 27 74 31 5f 69 64 78 27 28 73 65 67 69 LE 't1_idx'(segi ++| 3840: 64 2c 20 74 65 72 6d 2c 20 70 67 6e 6f 2c 20 50 d, term, pgno, P ++| 3856: 52 49 4d 41 52 59 20 4b 45 59 28 73 65 67 69 64 RIMARY KEY(segid ++| 3872: 2c 20 74 65 72 6d 29 29 20 57 49 54 48 4f 55 54 , term)) WITHOUT ++| 3888: 20 52 4f 57 49 44 55 03 07 17 1b 1b 01 81 01 74 ROWIDU........t ++| 3904: 61 62 6c 65 74 31 5f 64 61 74 61 74 31 5f 64 61 ablet1_datat1_da ++| 3920: 74 61 03 43 52 45 41 54 45 20 54 41 42 4c 45 20 ta.CREATE TABLE ++| 3936: 27 74 31 5f 64 61 74 61 27 28 69 64 20 49 4e 54 't1_data'(id INT ++| 3952: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 EGER PRIMARY KEY ++| 3968: 2c 20 62 6c 6f 63 6b 20 42 4c 4f 42 29 38 02 06 , block BLOB)8.. ++| 3984: 17 11 11 08 5f 74 61 62 6c 65 74 31 74 31 43 52 ...._tablet1t1CR ++| 4000: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 EATE VIRTUAL TAB ++| 4016: 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73 35 LE t1 USING fts5 ++| 4032: 28 61 2c 62 2c 63 29 00 00 00 00 00 00 00 00 00 (a,b,c)......... ++| page 3 offset 8192 ++| 0: 0d 00 00 00 03 0c 94 00 0f e6 0f ef 0c 94 00 00 ................ ++| 3216: 00 00 00 00 86 4a 84 80 80 80 80 01 04 00 8d 18 .....J.......... ++| 3232: 00 00 03 2b 02 30 30 01 02 06 01 02 06 01 02 06 ...+.00......... ++| 3248: 1f 02 03 01 02 03 01 02 03 01 08 32 30 31 36 30 ...........20160 ++| 3264: 36 30 39 01 02 07 01 02 07 01 02 07 01 01 34 01 609...........4. ++| 3280: 02 05 01 02 05 01 02 05 01 01 35 01 02 04 01 02 ..........5..... ++| 3296: 04 01 02 04 02 07 30 30 30 30 30 30 30 1c 02 04 ......0000000... ++| 3312: 01 02 04 01 02 04 01 06 62 69 6e 61 72 79 03 06 ........binary.. ++| 3328: 01 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 ................ ++| 3344: 02 02 03 06 00 02 02 03 06 01 02 02 03 06 01 02 ................ ++| 3360: 02 03 06 01 02 02 03 06 01 02 02 03 06 01 02 02 ................ ++| 3376: 03 06 01 02 02 03 06 01 02 02 01 08 63 6f 6d 70 ............comp ++| 3392: 69 6c 65 72 01 02 02 01 02 02 01 02 02 01 06 64 iler...........d ++| 3408: 62 73 74 61 74 07 02 03 01 02 03 01 02 03 02 04 bstat........... ++| 3424: 65 62 75 67 04 02 02 01 02 02 01 02 02 01 06 65 ebug...........e ++| 3440: 6e 61 62 6c 65 07 02 02 01 02 02 01 02 02 01 02 nable........... ++| 3456: 02 01 02 02 01 02 02 01 02 02 01 02 02 01 02 02 ................ ++| 3472: 01 02 02 01 02 02 01 02 02 01 02 02 01 02 02 01 ................ ++| 3488: 01 02 01 02 02 01 02 02 01 02 02 01 02 02 01 02 ................ ++| 3504: 02 01 02 02 02 08 78 74 65 6e 73 69 6f 6e 1f 02 ......xtension.. ++| 3520: 04 01 02 04 01 02 04 01 04 66 74 73 34 1a 02 03 .........fts4... ++| 3536: 01 02 03 01 02 03 04 01 35 0d 02 03 01 02 03 01 ........5....... ++| 3552: 02 03 01 03 67 63 63 01 aa 03 01 02 03 01 02 03 ....gcc......... ++| 3568: 02 06 65 6f 70 6f 6c 79 10 02 03 02 02 03 01 02 ..eopoly........ ++| 3584: 03 01 05 6a 73 6f 6e 31 13 02 03 01 02 03 01 02 ...json1........ ++| 3600: 03 01 04 6c 6f 61 64 1f 02 03 01 02 03 01 02 03 ...load......... ++| 3616: 01 03 6d 61 78 1c 02 02 01 02 02 01 02 02 02 05 ..max........... ++| 3632: 65 6d 6f 72 79 1c 02 03 01 02 03 01 02 03 04 04 emory........... ++| 3648: 73 79 73 35 16 02 03 01 02 03 01 02 03 01 06 6e sys5...........n ++| 3664: 6f 63 61 73 65 02 06 01 02 02 03 06 01 02 02 03 ocase........... ++| 3680: 06 01 02 02 03 06 01 02 02 03 06 01 02 02 03 06 ................ ++| 3696: 01 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 ................ ++| 3712: 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 02 ................ ++| 3728: 02 01 04 6f 6d 69 74 1f 02 02 01 02 02 01 02 01 ...omit......... ++| 3744: ff ff ff ff ff ff ff ff f0 00 00 00 00 00 01 02 ................ ++| 3760: 58 81 96 4d 01 06 01 02 02 03 06 01 02 02 03 06 X..M............ ++| 3776: 01 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 ................ ++| 3792: 02 02 03 06 01 02 02 03 06 01 02 02 03 06 01 02 ................ ++| 3808: 02 03 06 01 02 02 03 06 01 02 02 03 06 01 02 02 ................ ++| 3824: 01 0a 74 68 72 65 61 64 73 61 66 65 22 02 02 01 ..threadsafe.... ++| 3840: 02 02 01 02 02 01 04 76 74 61 62 07 02 04 01 02 .......vtab..... ++| 3856: 04 01 02 04 01 01 78 01 06 01 01 02 01 06 01 01 ......x......... ++| 3872: 02 01 06 01 1e 02 01 06 01 01 02 01 06 01 01 02 ................ ++| 3888: 01 06 01 01 02 01 06 01 01 02 01 06 01 01 02 01 ................ ++| 3904: 06 01 01 02 01 06 01 01 02 01 06 01 01 02 01 06 ................ ++| 3920: 01 01 02 01 06 01 01 02 01 06 01 01 02 01 06 01 ................ ++| 3936: 00 02 01 06 01 01 02 01 06 01 01 02 01 06 01 01 ................ ++| 3952: 02 01 06 01 01 02 01 06 01 01 02 01 06 01 01 02 ................ ++| 3968: 01 06 01 01 02 01 06 01 01 02 01 06 01 01 02 01 ................ ++| 3984: 06 01 01 02 01 06 01 01 02 01 06 01 01 02 01 06 ................ ++| 4000: 01 01 02 01 06 01 01 02 01 06 01 01 02 01 06 01 ................ ++| 4016: 01 02 01 06 01 01 02 01 06 01 01 02 01 06 01 01 ................ ++| 4032: 02 01 06 01 01 02 01 06 01 01 02 04 15 13 0c 0c ................ ++| 4048: 12 44 13 11 0f 47 13 0f 0b 0e 11 10 0f 0e 10 0f .D...G.......... ++| 4064: 44 0f 10 40 15 0f 07 01 03 00 14 24 5a 24 24 0f D..@.......$Z$$. ++| 4080: 0a 03 00 24 00 00 00 00 01 01 01 00 01 01 01 01 ...$............ ++| page 4 offset 12288 ++| 0: 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++| 4080: 00 00 00 00 00 00 00 00 00 00 05 04 09 0c 01 02 ................ ++| page 5 offset 16384 ++| 0: 0d 00 00 00 24 0c 0a 00 0f d8 0f af 0f 86 0f 74 ....$..........t ++| 16: 0f 61 0f 4e 0f 2f 0f 0f 0e ef 0e d7 0e be 0e a5 .a.N./.......... ++| 32: 0e 8d 0e 74 0e 5b 0e 40 0e 24 0e 08 0d ef 0d d5 ...t.[.@.$...... ++| 48: 0d bb 0d a0 0d 84 0d 68 0d 4f 0d 00 00 00 00 00 .......h.O...... ++| 3072: 00 00 00 00 00 00 00 00 00 00 18 24 05 00 25 0f ...........$..%. ++| 3088: 19 54 48 52 45 41 44 53 41 46 45 3d 30 58 42 49 .THREADSAFE=0XBI ++| 3104: 4e 41 52 59 18 23 05 00 25 0f 19 54 48 52 45 41 NARY.#..%..THREA ++| 3120: 44 53 41 46 45 3d 30 58 4e 4f 43 41 53 45 17 22 DSAFE=0XNOCASE.. ++| 3136: 05 00 25 0f 17 54 48 52 45 41 44 53 41 46 45 3d ..%..THREADSAFE= ++| 3152: 30 58 52 54 52 49 4d 1f 21 05 00 33 0f 19 4f 4d 0XRTRIM.!..3..OM ++| 3168: 49 54 20 4c 4f 41 44 20 45 58 54 45 4e 53 49 4f IT LOAD EXTENSIO ++| 3184: 4e 58 42 49 4e 41 52 59 1f 20 05 00 33 d3 19 4f NXBINARY. ..3..O ++| 3200: 4d 49 54 28 2c 4f 41 44 b2 04 55 85 44 54 e5 34 MIT(,OAD..U.DT.4 ++| 3216: 94 f4 e5 84 e4 f4 34 15 34 51 e1 f0 50 03 30 f1 ......4.4Q..P.0. ++| 3232: 74 f4 d4 95 42 04 c4 f4 14 42 04 55 85 44 54 e5 t...B....B.U.DT. ++| 3248: 34 94 f4 e5 85 25 45 24 94 d1 f1 e0 50 03 30 f1 4....%E$....P.0. ++| 3264: 94 d4 15 82 04 d4 54 d4 f5 25 93 d3 53 03 03 03 ......T..%..S... ++| 3280: 03 03 03 05 84 24 94 e4 15 25 91 f1 d0 50 03 30 .....$...%...P.0 ++| 3296: f1 94 d4 15 82 04 d4 54 d4 f5 25 93 d3 53 03 03 .......T..%..S.. ++| 3312: 03 03 03 03 05 84 e4 f4 34 15 34 51 e1 c0 50 03 ........4.4Q..P. ++| 3328: 30 f1 74 d4 15 82 04 d4 54 d4 f5 25 93 d3 53 03 0.t.....T..%..S. ++| 3344: 03 03 03 03 03 05 85 25 45 24 94 d1 81 b0 50 02 .......%E$....P. ++| 3360: 50 f1 94 54 e4 14 24 c4 52 05 25 45 24 54 55 84 P..T..$.R.%E$TU. ++| 3376: 24 94 e4 15 25 91 81 a0 50 02 50 f1 94 54 e4 14 $...%...P.P..T.. ++| 3392: 24 c4 52 05 25 45 24 54 55 84 e4 f4 34 15 34 51 $.R.%E$TU...4.4Q ++| 3408: 71 90 50 02 50 f1 74 54 e4 14 24 c4 52 05 25 45 q.P.P.tT..$.R.%E ++| 3424: 24 54 55 85 25 45 24 94 d1 a1 80 50 02 90 f1 94 $TU.%E$....P.... ++| 3440: 54 e4 14 24 c4 52 04 d4 54 d5 35 95 33 55 84 24 T..$.R..T.5.3U.$ ++| 3456: 94 e4 15 25 91 a1 70 50 02 90 f1 94 54 e4 14 24 ...%..pP....T..$ ++| 3472: c4 52 04 d4 54 d5 35 95 33 55 84 e4 f4 34 15 34 .R..T.5.3U...4.4 ++| 3488: 51 91 60 50 02 90 f1 74 54 e4 14 24 c4 52 04 d4 Q.`P...tT..$.R.. ++| 3504: 54 d5 35 95 33 55 85 25 45 24 94 d1 81 50 50 02 T.5.3U.%E$...PP. ++| 3520: 50 f1 94 54 e4 14 24 c4 52 04 a5 34 f4 e3 15 84 P..T..$.R..4.... ++| 3536: 24 94 e4 15 25 91 81 40 50 02 50 f1 94 54 e4 14 $...%..@P.P..T.. ++| 3552: 24 c4 52 04 a5 34 f4 e3 15 84 e4 f4 34 15 34 51 $.R..4......4.4Q ++| 3568: 71 30 50 02 4f f1 74 54 e4 14 24 c4 52 04 a5 34 q0P.O.tT..$.R..4 ++| 3584: f4 e3 15 85 25 45 24 94 d1 a1 20 50 02 90 f1 94 ....%E$... P.... ++| 3600: 54 e4 14 24 c4 52 04 74 54 f5 04 f4 c5 95 84 24 T..$.R.tT......$ ++| 3616: 94 e4 15 25 91 a1 10 50 02 90 f1 94 54 e4 14 24 ...%...P....T..$ ++| 3632: c4 52 04 74 54 f5 04 f4 c5 95 84 e4 f4 34 15 34 .R.tT........4.4 ++| 3648: 51 91 00 50 02 90 f1 74 54 e4 14 24 c4 51 f4 74 Q..P...tT..$.Q.t ++| 3664: 54 f5 04 f4 c5 95 85 25 45 24 94 d1 70 f0 50 02 T......%E$..p.P. ++| 3680: 30 f1 94 54 e4 14 24 c5 20 46 54 53 35 58 42 49 0..T..$. FTS5XBI ++| 3696: 4e 41 52 59 17 0e 05 00 23 0f 19 45 4e 41 42 4c NARY....#..ENABL ++| 3712: 45 20 46 54 53 35 58 4f 4f 43 41 53 45 16 0d 05 E FTS5XOOCASE... ++| 3728: 00 23 0f 17 45 4e 41 42 4c 45 20 46 54 53 35 58 .#..ENABLE FTS5X ++| 3744: 52 54 52 49 4d 17 0c 05 00 23 0f 19 45 4e 41 42 RTRIM....#..ENAB ++| 3760: 4c 45 20 46 54 53 34 58 42 49 4e 41 52 59 97 0b LE FTS4XBINARY.. ++| 3776: 05 00 23 0f 19 45 4e 41 42 4c 45 20 46 54 53 34 ..#..ENABLE FTS4 ++| 3792: 58 4e 4f 43 41 53 45 16 0a 05 00 23 0f 17 45 4e XNOCASE....#..EN ++| 3808: 41 42 4c 45 20 46 54 53 34 58 52 54 52 49 4d 1e ABLE FTS4XRTRIM. ++| 3824: 09 05 00 3e 5f 19 45 4e 41 42 4c 45 20 44 42 53 ...>_.ENABLE DBS ++| 3840: 44 41 54 20 56 54 41 42 58 42 49 4e 41 52 59 1e DAT VTABXBINARY. ++| 3856: 08 05 00 31 0f 19 45 4e 41 42 4c 45 20 44 42 53 ...1..ENABLE DBS ++| 3872: 54 41 54 20 56 54 41 42 58 4e 4f 43 4d e3 45 1d TAT VTABXNOCM.E. ++| 3888: 07 05 00 31 0f 17 45 4e 41 42 4c 45 20 44 42 53 ...1..ENABLE DBS ++| 3904: 54 41 54 20 56 54 41 42 58 52 54 52 49 4d 11 06 TAT VTABXRTRIM.. ++| 3920: 05 00 17 0f 19 44 45 42 55 47 58 42 49 4e 41 52 .....DEBUGXBINAR ++| 3936: 59 11 05 05 00 17 0f 19 44 45 42 55 47 58 4e 4f Y.......DEBUGXNO ++| 3952: 43 41 53 45 10 02 02 50 08 5f 17 44 45 42 55 47 CASE...P._.DEBUG ++| 3968: 58 52 54 52 49 4d 27 03 05 00 44 0f 19 43 4f 4d XRTRIM'...D..COM ++| 3984: 50 49 4c 45 52 3d 67 63 63 2d 35 2e 34 2e 30 20 PILER=gcc-5.4.0 ++| 4000: 32 30 31 36 30 36 30 39 58 42 49 4e 41 52 59 27 20160609XBINARY' ++| 4016: 02 05 00 43 0f 19 43 4f 4d 50 49 4c 45 52 3d 67 ...C..COMPILER=g ++| 4032: 63 63 2d 35 2e 34 2e 30 20 32 30 31 36 30 36 30 cc-5.4.0 2016060 ++| 4048: 39 58 4e 4f 43 41 53 45 26 01 05 00 43 c9 17 43 9XNOCASE&...C..C ++| 4064: 4f 4d 50 49 4c 47 02 3d 67 63 63 2d 35 2e 34 2e OMPILG.=gcc-5.4. ++| 4080: 30 20 32 30 31 36 30 36 30 39 58 52 54 52 49 4d 0 20160609XRTRIM ++| page 6 offset 20480 ++| 0: 0d 00 00 00 24 0e e0 00 0f f8 0f f0 0f e8 0f e0 ....$........... ++| 16: 0f d8 0f d0 0f c8 0f c0 0f b8 0f b0 0f a8 0f a0 ................ ++| 32: 0f 98 0f 90 0f 88 0f 80 0f 78 0f 70 0f 68 0f 60 .........x.p.h.` ++| 48: 0f 58 0f 50 0f 48 0f 40 0f 38 00 00 00 00 00 00 .X.P.H.@.8...... ++| 3808: 06 24 03 00 12 02 01 01 06 23 03 00 12 02 01 01 .$.......#...... ++| 3824: 06 22 03 00 12 02 01 01 06 21 03 00 12 03 01 01 .........!...... ++| 3840: 06 20 03 00 12 03 01 01 06 1f 03 00 12 03 01 01 . .............. ++| 3856: 06 1e 03 00 12 03 01 01 06 1d 03 00 12 03 01 01 ................ ++| 3872: 06 1c 03 00 12 03 01 01 06 1b 03 00 12 02 01 01 ................ ++| 3888: 06 1a 03 00 12 02 01 01 06 19 03 00 12 02 01 01 ................ ++| 3904: 06 18 03 00 12 02 01 01 06 17 03 00 12 02 01 01 ................ ++| 3920: 06 16 03 00 12 02 01 01 06 15 03 00 12 02 01 01 ................ ++| 3936: 06 14 03 00 12 02 01 01 06 13 03 00 12 02 01 01 ................ ++| 3952: 06 12 03 00 12 02 01 01 06 11 03 00 12 02 01 01 ................ ++| 3968: 06 10 03 00 12 02 01 01 06 1f 03 00 12 02 01 01 ................ ++| 3984: 06 0e 03 00 12 02 01 01 06 0d 03 00 12 02 01 01 ................ ++| 4000: 06 0c 03 00 12 02 01 01 06 0b 03 00 12 02 01 01 ................ ++| 4016: 06 0a 03 00 12 02 01 01 06 09 03 00 12 03 01 01 ................ ++| 4032: 06 08 03 00 12 03 01 01 06 07 03 00 12 03 01 01 ................ ++| 4048: 06 06 03 00 12 01 01 01 06 05 03 00 12 01 01 01 ................ ++| 4064: 06 04 03 00 12 01 01 01 06 03 03 00 12 06 01 01 ................ ++| 4080: 06 02 03 00 12 06 01 01 06 01 03 00 12 06 01 01 ................ ++| page 7 offset 24576 ++| 0: 0a 00 00 00 01 0f f4 00 0f f4 00 00 00 00 00 00 ................ ++| 4080: 00 00 00 00 0b 03 1b 01 76 65 72 73 69 6f 6e 04 ........version. ++| page 8 offset 28672 ++| 0: 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ++| 4048: 00 00 00 00 00 00 11 03 02 2b 69 6e 74 65 67 72 .........+integr ++| 4064: 69 74 79 2d 63 68 65 63 6b 09 00 00 00 00 00 00 ity-check....... ++| end crash-31c462b8b665d0.db ++}]} {} ++ ++ ++do_catchsql_test 69.2 { ++ SELECT * FROM t1 WHERE a MATCH 'fx*' ++} {1 {database disk image is malformed}} + + sqlite3_fts5_may_be_corrupt 0 + finish_test +--- /src/btree.c ++++ /src/btree.c +@@ -3886,7 +3886,7 @@ + Pgno nFree = get4byte(&pBt->pPage1->aData[36]); + Pgno nFin = finalDbSize(pBt, nOrig, nFree); + +- if( nOrig<nFin ){ ++ if( nOrig<nFin || nFree>=nOrig ){ + rc = SQLITE_CORRUPT_BKPT; + }else if( nFree>0 ){ + rc = saveAllCursors(pBt, 0, 0); +@@ -8772,7 +8772,11 @@ + assert( pPage->intKey || pX->nKey>=0 ); + assert( pPage->leaf || !pPage->intKey ); + if( pPage->nFree<0 ){ +- rc = btreeComputeFreeSpace(pPage); ++ if( pCur->eState>CURSOR_INVALID ){ ++ rc = SQLITE_CORRUPT_BKPT; ++ }else{ ++ rc = btreeComputeFreeSpace(pPage); ++ } + if( rc ) return rc; + } + +--- /test/corruptL.test ++++ /test/corruptL.test +@@ -1266,5 +1266,30 @@ + do_execsql_test 15.1 { + UPDATE c1 SET c= NOT EXISTS(SELECT 1 FROM c1 ORDER BY (SELECT 1 FROM c1 ORDER BY a)) +10 WHERE d BETWEEN 4 AND 7; + } {} ++ ++#------------------------------------------------------------------------- ++reset_db ++do_execsql_test 16.0 { ++ CREATE TABLE t1(w, x, y, z, UNIQUE(w, x), UNIQUE(y, z)); ++ INSERT INTO t1 VALUES(1, 1, 1, 1); ++ ++ CREATE TABLE t1idx(x, y, i INTEGER, PRIMARY KEY(x)) WITHOUT ROWID; ++ INSERT INTO t1idx VALUES(10, NULL, 5); ++ ++ PRAGMA writable_schema = 1; ++ UPDATE sqlite_master SET rootpage = ( ++ SELECT rootpage FROM sqlite_master WHERE name='t1idx' ++ ) WHERE type = 'index'; ++} ++ ++db close ++sqlite3 db test.db ++ ++do_catchsql_test 16.1 { ++ PRAGMA writable_schema = ON; ++ INSERT INTO t1(rowid, w, x, y, z) VALUES(5, 10, 11, 10, NULL); ++} {1 {database disk image is malformed}} ++ + finish_test + ++ diff --git a/dev-db/sqlite/files/sqlite-3.32.3-backports_3.patch b/dev-db/sqlite/files/sqlite-3.32.3-backports_3.patch new file mode 100644 index 000000000000..07cb5d4a3960 --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.32.3-backports_3.patch @@ -0,0 +1,220 @@ +https://sqlite.org/src/info/14eed318aa9e6e16 +https://sqlite.org/src/info/9679c0c61131f0e9 +https://sqlite.org/src/info/28515bbbae4fbc26 +https://sqlite.org/src/info/892e9191dc8f8056 +https://sqlite.org/src/info/270ac1a0f232d755 + +--- /ext/fts3/fts3.c ++++ /ext/fts3/fts3.c +@@ -5831,7 +5831,8 @@ + fts3EvalRestart(pCsr, pRoot, &rc); + do { + fts3EvalNextRow(pCsr, pRoot, &rc); +- assert( pRoot->bEof==0 ); ++ assert_fts3_nc( pRoot->bEof==0 ); ++ if( pRoot->bEof ) rc = FTS_CORRUPT_VTAB; + }while( pRoot->iDocid!=iDocid && rc==SQLITE_OK ); + } + } +--- /ext/misc/appendvfs.c ++++ /ext/misc/appendvfs.c +@@ -439,7 +439,7 @@ + p = (ApndFile*)pFile; + memset(p, 0, sizeof(*p)); + pSubFile = ORIGFILE(pFile); +- p->base.pMethods = &apnd_io_methods; ++ pFile->pMethods = &apnd_io_methods; + rc = pSubVfs->xOpen(pSubVfs, zName, pSubFile, flags, pOutFlags); + if( rc ) goto apnd_open_done; + rc = pSubFile->pMethods->xFileSize(pSubFile, &sz); +--- /ext/misc/cksumvfs.c ++++ /ext/misc/cksumvfs.c +@@ -634,7 +634,7 @@ + p = (CksmFile*)pFile; + memset(p, 0, sizeof(*p)); + pSubFile = ORIGFILE(pFile); +- p->base.pMethods = &cksm_io_methods; ++ pFile->pMethods = &cksm_io_methods; + rc = pSubVfs->xOpen(pSubVfs, zName, pSubFile, flags, pOutFlags); + if( rc ) goto cksm_open_done; + if( flags & SQLITE_OPEN_WAL ){ +--- /src/date.c ++++ /src/date.c +@@ -1112,8 +1112,8 @@ + case 'm': sqlite3_snprintf(3, &z[j],"%02d",x.M); j+=2; break; + case 'M': sqlite3_snprintf(3, &z[j],"%02d",x.m); j+=2; break; + case 's': { +- sqlite3_snprintf(30,&z[j],"%lld", +- (i64)(x.iJD/1000 - 21086676*(i64)10000)); ++ i64 iS = (i64)(x.iJD/1000 - 21086676*(i64)10000); ++ sqlite3Int64ToText(iS, &z[j]); + j += sqlite3Strlen30(&z[j]); + break; + } +--- /src/memdb.c ++++ /src/memdb.c +@@ -339,7 +339,7 @@ + p->mFlags = SQLITE_DESERIALIZE_RESIZEABLE | SQLITE_DESERIALIZE_FREEONCLOSE; + assert( pOutFlags!=0 ); /* True because flags==SQLITE_OPEN_MAIN_DB */ + *pOutFlags = flags | SQLITE_OPEN_MEMORY; +- p->base.pMethods = &memdb_io_methods; ++ pFile->pMethods = &memdb_io_methods; + p->szMax = sqlite3GlobalConfig.mxMemdbSize; + return SQLITE_OK; + } +--- /src/memjournal.c ++++ /src/memjournal.c +@@ -366,7 +366,7 @@ + assert( MEMJOURNAL_DFLT_FILECHUNKSIZE==fileChunkSize(p->nChunkSize) ); + } + +- p->pMethod = (const sqlite3_io_methods*)&MemJournalMethods; ++ pJfd->pMethods = (const sqlite3_io_methods*)&MemJournalMethods; + p->nSpill = nSpill; + p->flags = flags; + p->zJournal = zName; +@@ -392,7 +392,7 @@ + int sqlite3JournalCreate(sqlite3_file *pJfd){ + int rc = SQLITE_OK; + MemJournal *p = (MemJournal*)pJfd; +- if( p->pMethod==&MemJournalMethods && ( ++ if( pJfd->pMethods==&MemJournalMethods && ( + #ifdef SQLITE_ENABLE_ATOMIC_WRITE + p->nSpill>0 + #else +--- /src/os_unix.c ++++ /src/os_unix.c +@@ -5689,7 +5689,7 @@ + if( rc!=SQLITE_OK ){ + if( h>=0 ) robust_close(pNew, h, __LINE__); + }else{ +- pNew->pMethod = pLockingStyle; ++ pId->pMethods = pLockingStyle; + OpenCounter(+1); + verifyDbFile(pNew); + } +--- /src/os_win.c ++++ /src/os_win.c +@@ -5266,7 +5266,7 @@ + } + + sqlite3_free(zTmpname); +- pFile->pMethod = pAppData ? pAppData->pMethod : &winIoMethod; ++ id->pMethods = pAppData ? pAppData->pMethod : &winIoMethod; + pFile->pVfs = pVfs; + pFile->h = h; + if( isReadonly ){ +--- /src/sqliteInt.h ++++ /src/sqliteInt.h +@@ -4437,6 +4437,7 @@ + int sqlite3FixExprList(DbFixer*, ExprList*); + int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); + int sqlite3RealSameAsInt(double,sqlite3_int64); ++void sqlite3Int64ToText(i64,char*); + int sqlite3AtoF(const char *z, double*, int, u8); + int sqlite3GetInt32(const char *, int*); + int sqlite3Atoi(const char*); +--- /src/test_multiplex.c ++++ /src/test_multiplex.c +@@ -591,9 +591,9 @@ + + if( rc==SQLITE_OK ){ + if( pSubOpen->pMethods->iVersion==1 ){ +- pMultiplexOpen->base.pMethods = &gMultiplex.sIoMethodsV1; ++ pConn->pMethods = &gMultiplex.sIoMethodsV1; + }else{ +- pMultiplexOpen->base.pMethods = &gMultiplex.sIoMethodsV2; ++ pConn->pMethods = &gMultiplex.sIoMethodsV2; + } + }else{ + multiplexFreeComponents(pGroup); +--- /src/util.c ++++ /src/util.c +@@ -596,6 +596,30 @@ + #endif + + /* ++** Render an signed 64-bit integer as text. Store the result in zOut[]. ++** ++** The caller must ensure that zOut[] is at least 21 bytes in size. ++*/ ++void sqlite3Int64ToText(i64 v, char *zOut){ ++ int i; ++ u64 x; ++ char zTemp[22]; ++ if( v<0 ){ ++ x = (v==SMALLEST_INT64) ? ((u64)1)<<63 : -v; ++ }else{ ++ x = v; ++ } ++ i = sizeof(zTemp)-2; ++ zTemp[sizeof(zTemp)-1] = 0; ++ do{ ++ zTemp[i--] = (x%10) + '0'; ++ x = x/10; ++ }while( x ); ++ if( v<0 ) zTemp[i--] = '-'; ++ memcpy(zOut, &zTemp[i+1], sizeof(zTemp)-1-i); ++} ++ ++/* + ** Compare the 19-character string zNum against the text representation + ** value 2^63: 9223372036854775808. Return negative, zero, or positive + ** if zNum is less than, equal to, or greater than the string. +--- /src/vdbemem.c ++++ /src/vdbemem.c +@@ -104,16 +104,25 @@ + static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){ + StrAccum acc; + assert( p->flags & (MEM_Int|MEM_Real|MEM_IntReal) ); +- sqlite3StrAccumInit(&acc, 0, zBuf, sz, 0); ++ assert( sz>22 ); + if( p->flags & MEM_Int ){ +- sqlite3_str_appendf(&acc, "%lld", p->u.i); +- }else if( p->flags & MEM_IntReal ){ +- sqlite3_str_appendf(&acc, "%!.15g", (double)p->u.i); ++#if GCC_VERSION>=7000000 ++ /* Work-around for GCC bug ++ ** https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96270 */ ++ i64 x; ++ assert( (p->flags&MEM_Int)*2==sizeof(x) ); ++ memcpy(&x, (char*)&p->u, (p->flags&MEM_Int)*2); ++ sqlite3Int64ToText(x, zBuf); ++#else ++ sqlite3Int64ToText(p->u.i, zBuf); ++#endif + }else{ +- sqlite3_str_appendf(&acc, "%!.15g", p->u.r); ++ sqlite3StrAccumInit(&acc, 0, zBuf, sz, 0); ++ sqlite3_str_appendf(&acc, "%!.15g", ++ (p->flags & MEM_IntReal)!=0 ? (double)p->u.i : p->u.r); ++ assert( acc.zText==zBuf && acc.mxAlloc<=0 ); ++ zBuf[acc.nChar] = 0; /* Fast version of sqlite3StrAccumFinish(&acc) */ + } +- assert( acc.zText==zBuf && acc.mxAlloc<=0 ); +- zBuf[acc.nChar] = 0; /* Fast version of sqlite3StrAccumFinish(&acc) */ + } + + #ifdef SQLITE_DEBUG +--- /test/fts3corrupt4.test ++++ /test/fts3corrupt4.test +@@ -6282,4 +6282,19 @@ + + set sqlite_fts3_enable_parentheses $saved + ++#------------------------------------------------------------------------- ++reset_db ++do_execsql_test 47.1 { ++ CREATE VIRTUAL TABLE t1 USING fts3(a,b,c); ++} ++do_execsql_test 47.2 { ++ INSERT INTO t1_segdir VALUES(0,0,0,0,0,X'000130120106000106000106001f030001030001030000083230313630363039090107000107000107000001340901050001050001050000013509010400010400010400010730303030303030091c0400010400010400000662696e6172793c0301020200030102020003010202000301020200030102020003010202000301020200030102020003010202000301020200030102020003010202000008636f6d70696c657209010200010200010200000664627374617409070300010300010300010465627567090402000102000102000006656e61626c653f07020001020001020001020001020001020001020001020001020001020001020001020001010001020001020001020001020001020001020001020001020001087874656e73696f6e091f0400010400010400000466747334090a0300010300010300030135090d03000103000103000003676363090103000103000103000106656f706f6c790910030001030001030000056a736f6e310913030001030001030000046c6f6164091f030001030001030000036d6178091c02000102000102000105656d6f7279091c03000103000103000304737973350916030001030001030000066e6f636173653c02010202000301020200030102020003010202000301020200030102020003010202000301020200030102020003010202000301020200030102020000046f6d6974091f020001020001020000057274726565091903000103000103000302696d3c01010202000301020200030102020003010202000301020200030102020003010202000301a202000301020200030102020003010202000301020200000a746872656164736166650922020001020001020000047674616209070400010400010400000178b401010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200'); ++ INSERT INTO t1_segdir VALUES(0,1,0,0,0,X'0001300425061b000008323031363036303903250700000134032505000001350325040001073030303030303003251a000008636f6d70696c657203250200000664627374617403250a00010465627567032508000006656e61626c650925090504040404040001087874656e73696f6e03251d0000046674733403250d0003013503250f000003676363032503000106656f706f6c790325110000056a736f6e310325130000046c6f616403251c0000036d6178032518000105656d6f7279032519000304737973350325150000046f6d697403251b000005727472656503251700000a7468726561647361666503251e0000047674616333250b00'); ++} ++ ++do_catchsql_test 47.3 { ++ SELECT matchinfo(t1) FROM t1 WHERE t1 MATCH '"json1 enable"'; ++} {1 {database disk image is malformed}} ++ ++ + finish_test diff --git a/dev-db/sqlite/files/sqlite-3.32.3-security_fixes.patch b/dev-db/sqlite/files/sqlite-3.32.3-security_fixes.patch new file mode 100644 index 000000000000..ad2a3bfe16d0 --- /dev/null +++ b/dev-db/sqlite/files/sqlite-3.32.3-security_fixes.patch @@ -0,0 +1,146 @@ +https://sqlite.org/src/info/cc888878ea8d5bc7 +https://sqlite.org/src/info/be545f85a6ef09cc +https://sqlite.org/src/info/6e0ffa2053124168 +https://sqlite.org/src/info/4d0cfb1236884349 + +--- /ext/fts3/fts3.c ++++ /ext/fts3/fts3.c +@@ -5208,10 +5208,12 @@ + ); + if( res ){ + nNew = (int)(pOut - pPhrase->doclist.pList) - 1; +- assert( pPhrase->doclist.pList[nNew]=='\0' ); +- assert( nNew<=pPhrase->doclist.nList && nNew>0 ); +- memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew); +- pPhrase->doclist.nList = nNew; ++ if( nNew>=0 ){ ++ assert( pPhrase->doclist.pList[nNew]=='\0' ); ++ assert( nNew<=pPhrase->doclist.nList && nNew>0 ); ++ memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew); ++ pPhrase->doclist.nList = nNew; ++ } + *paPoslist = pPhrase->doclist.pList; + *pnToken = pPhrase->nToken; + } +--- /ext/fts3/fts3_write.c ++++ /ext/fts3/fts3_write.c +@@ -341,7 +341,9 @@ + ** created by merging the oldest :2 segments from absolute level :1. See + ** function sqlite3Fts3Incrmerge() for details. */ + /* 29 */ "SELECT 2 * total(1 + leaves_end_block - start_block) " +- " FROM %Q.'%q_segdir' WHERE level = ? AND idx < ?", ++ " FROM (SELECT * FROM %Q.'%q_segdir' " ++ " WHERE level = ? ORDER BY idx ASC LIMIT ?" ++ " )", + + /* SQL_DELETE_SEGDIR_ENTRY + ** Delete the %_segdir entry on absolute level :1 with index :2. */ +@@ -2853,6 +2855,19 @@ + return SQLITE_OK; + } + ++static int fts3GrowSegReaderBuffer(Fts3MultiSegReader *pCsr, int nReq){ ++ if( nReq>pCsr->nBuffer ){ ++ char *aNew; ++ pCsr->nBuffer = nReq*2; ++ aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer); ++ if( !aNew ){ ++ return SQLITE_NOMEM; ++ } ++ pCsr->aBuffer = aNew; ++ } ++ return SQLITE_OK; ++} ++ + + int sqlite3Fts3SegReaderStep( + Fts3Table *p, /* Virtual table handle */ +@@ -2987,15 +3002,9 @@ + } + + nByte = sqlite3Fts3VarintLen(iDelta) + (isRequirePos?nList+1:0); +- if( nDoclist+nByte>pCsr->nBuffer ){ +- char *aNew; +- pCsr->nBuffer = (nDoclist+nByte)*2; +- aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer); +- if( !aNew ){ +- return SQLITE_NOMEM; +- } +- pCsr->aBuffer = aNew; +- } ++ ++ rc = fts3GrowSegReaderBuffer(pCsr, nByte+nDoclist); ++ if( rc ) return rc; + + if( isFirst ){ + char *a = &pCsr->aBuffer[nDoclist]; +@@ -3020,6 +3029,9 @@ + fts3SegReaderSort(apSegment, nMerge, j, xCmp); + } + if( nDoclist>0 ){ ++ rc = fts3GrowSegReaderBuffer(pCsr, nDoclist+FTS3_NODE_PADDING); ++ if( rc ) return rc; ++ memset(&pCsr->aBuffer[nDoclist], 0, FTS3_NODE_PADDING); + pCsr->aDoclist = pCsr->aBuffer; + pCsr->nDoclist = nDoclist; + rc = SQLITE_ROW; +--- /src/expr.c ++++ /src/expr.c +@@ -4272,7 +4272,9 @@ + int nCol; + testcase( op==TK_EXISTS ); + testcase( op==TK_SELECT ); +- if( op==TK_SELECT && (nCol = pExpr->x.pSelect->pEList->nExpr)!=1 ){ ++ if( pParse->db->mallocFailed ){ ++ return 0; ++ }else if( op==TK_SELECT && (nCol = pExpr->x.pSelect->pEList->nExpr)!=1 ){ + sqlite3SubselectError(pParse, nCol, 1); + }else{ + return sqlite3CodeSubselect(pParse, pExpr); +--- /test/fts3corrupt4.test ++++ /test/fts3corrupt4.test +@@ -6123,4 +6123,44 @@ + SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'rtree ner "json1^enable"'; + } + ++#------------------------------------------------------------------------- ++do_execsql_test 42.1 { ++ CREATE VIRTUAL TABLE f USING fts3(a, b); ++} ++do_execsql_test 42.2 { ++ INSERT INTO f_segdir VALUES(0,2,1111,0,0,X'00'); ++ INSERT INTO f_segdir VALUES(0,3,0 ,0,0,X'00013003010200'); ++} ++do_execsql_test 42.3 { ++ INSERT INTO f(f) VALUES ('merge=107,2'); ++} ++ ++#------------------------------------------------------------------------- ++reset_db ++set saved $sqlite_fts3_enable_parentheses ++set sqlite_fts3_enable_parentheses 1 ++do_execsql_test 43.1 { ++ CREATE VIRTUAL TABLE def USING fts3(xyz); ++ INSERT INTO def_segdir VALUES(0,0,0,0,0, X'0001310301c9000103323334050d81'); ++} {} ++ ++do_execsql_test 43.2 { ++ SELECT rowid FROM def WHERE def MATCH '1 NEAR 1' ++} {1} ++ ++set sqlite_fts3_enable_parentheses $saved ++ ++#------------------------------------------------------------------------- ++reset_db ++do_execsql_test 44.1 { ++ CREATE VIRTUAL TABLE t0 USING fts3(col0 INTEGER PRIMARY KEY,col1 VARCHAR(8),col2 BINARY,col3 BINARY); ++ INSERT INTO t0_content VALUES(0,NULL,NULL,NULL,NULL); ++ INSERT INTO t0_segdir VALUES(0,0,0,0,'0 42',X'00013103010200010332333405010201ba00000461616161050101020200000462626262050101030200'); ++} ++ ++do_execsql_test 44.2 { ++ SELECT matchinfo(t0, t0) IS NULL FROM t0 WHERE t0 MATCH '1*' ++} {0} ++ ++ + finish_test diff --git a/dev-db/sqlite/sqlite-3.31.1.ebuild b/dev-db/sqlite/sqlite-3.32.3-r1.ebuild index 50984a94d7b8..c433b78721c9 100644 --- a/dev-db/sqlite/sqlite-3.31.1.ebuild +++ b/dev-db/sqlite/sqlite-3.32.3-r1.ebuild @@ -16,11 +16,8 @@ HOMEPAGE="https://sqlite.org/" if [[ "${PV}" == "9999" ]]; then SRC_URI="" else - SRC_URI="doc? ( https://sqlite.org/2020/${PN}-doc-${DOC_PV}.zip ) - tcl? ( https://sqlite.org/2020/${PN}-src-${SRC_PV}.zip ) - test? ( https://sqlite.org/2020/${PN}-src-${SRC_PV}.zip ) - tools? ( https://sqlite.org/2020/${PN}-src-${SRC_PV}.zip ) - !tcl? ( !test? ( !tools? ( https://sqlite.org/2020/${PN}-autoconf-${SRC_PV}.tar.gz ) ) )" + SRC_URI="https://sqlite.org/2020/${PN}-src-${SRC_PV}.zip + doc? ( https://sqlite.org/2020/${PN}-doc-${DOC_PV}.zip )" fi LICENSE="public-domain" @@ -36,19 +33,8 @@ if [[ "${PV}" == "9999" ]]; then BDEPEND=">=dev-lang/tcl-8.6:0 dev-vcs/fossil" else - BDEPEND="doc? ( app-arch/unzip ) - tcl? ( - app-arch/unzip - >=dev-lang/tcl-8.6:0 - ) - test? ( - app-arch/unzip - >=dev-lang/tcl-8.6:0 - ) - tools? ( - app-arch/unzip - >=dev-lang/tcl-8.6:0 - )" + BDEPEND="app-arch/unzip + >=dev-lang/tcl-8.6:0" fi RDEPEND="sys-libs/zlib:0=[${MULTILIB_USEDEP}] icu? ( dev-libs/icu:0=[${MULTILIB_USEDEP}] ) @@ -58,21 +44,11 @@ RDEPEND="sys-libs/zlib:0=[${MULTILIB_USEDEP}] DEPEND="${RDEPEND} test? ( >=dev-lang/tcl-8.6:0[${MULTILIB_USEDEP}] )" -full_archive() { - [[ "${PV}" == "9999" ]] || use tcl || use test || use tools -} - -pkg_setup() { - if [[ "${PV}" == "9999" ]]; then - S="${WORKDIR}/${PN}" - else - if full_archive; then - S="${WORKDIR}/${PN}-src-${SRC_PV}" - else - S="${WORKDIR}/${PN}-autoconf-${SRC_PV}" - fi - fi -} +if [[ "${PV}" == "9999" ]]; then + S="${WORKDIR}/${PN}" +else + S="${WORKDIR}/${PN}-src-${SRC_PV}" +fi src_unpack() { if [[ "${PV}" == "9999" ]]; then @@ -123,30 +99,14 @@ src_unpack() { } src_prepare() { - if full_archive; then - eapply "${FILESDIR}/${PN}-3.31.0-full_archive-build.patch" - eapply "${FILESDIR}/${PN}-3.31.1-full_archive-architectures.patch" - eapply "${FILESDIR}/${PN}-3.31.1-full_archive-security_fixes.patch" + eapply "${FILESDIR}/"${PN}-3.32.1-full_archive-build_{1,2}.patch + eapply "${FILESDIR}/"${PN}-3.32.3-backports_{1,2,3}.patch - eapply_user + eapply_user - # Fix AC_CHECK_FUNCS. - # https://mailinglists.sqlite.org/cgi-bin/mailman/private/sqlite-dev/2016-March/002762.html - sed -e "s/AC_CHECK_FUNCS(.*)/AC_CHECK_FUNCS([fdatasync fullfsync gmtime_r isnan localtime_r localtime_s malloc_usable_size posix_fallocate pread pread64 pwrite pwrite64 strchrnul usleep utime])/" -i configure.ac || die "sed failed" - else - eapply "${FILESDIR}/${PN}-3.25.0-nonfull_archive-build.patch" - eapply "${FILESDIR}/${PN}-3.31.1-nonfull_archive-architectures.patch" - eapply "${FILESDIR}/${PN}-3.31.1-nonfull_archive-security_fixes.patch" - - eapply_user - - # Fix AC_CHECK_FUNCS. - # https://mailinglists.sqlite.org/cgi-bin/mailman/private/sqlite-dev/2016-March/002762.html - sed \ - -e "s/AC_CHECK_FUNCS(\[fdatasync.*/AC_CHECK_FUNCS([fdatasync fullfsync gmtime_r isnan localtime_r localtime_s malloc_usable_size posix_fallocate pread pread64 pwrite pwrite64 strchrnul usleep utime])/" \ - -e "/AC_CHECK_FUNCS(posix_fallocate)/d" \ - -i configure.ac || die "sed failed" - fi + # Fix AC_CHECK_FUNCS. + # https://mailinglists.sqlite.org/cgi-bin/mailman/private/sqlite-dev/2016-March/002762.html + sed -e "s/AC_CHECK_FUNCS(.*)/AC_CHECK_FUNCS([fdatasync fullfsync gmtime_r isnan localtime_r localtime_s malloc_usable_size posix_fallocate pread pread64 pwrite pwrite64 strchrnul usleep utime])/" -i configure.ac || die "sed failed" eautoreconf @@ -158,23 +118,24 @@ multilib_src_configure() { local options=() options+=( - --enable-$(full_archive && echo load-extension || echo dynamic-extensions) + --enable-load-extension --enable-threadsafe ) - if ! full_archive; then - options+=(--disable-static-shell) - fi # Support detection of misuse of SQLite API. # https://sqlite.org/compile.html#enable_api_armor append-cppflags -DSQLITE_ENABLE_API_ARMOR + # Support bytecode and tables_used virtual tables. + # https://sqlite.org/bytecodevtab.html + append-cppflags -DSQLITE_ENABLE_BYTECODE_VTAB + # Support column metadata functions. # https://sqlite.org/c3ref/column_database_name.html append-cppflags -DSQLITE_ENABLE_COLUMN_METADATA # Support sqlite_dbpage virtual table. - # https://sqlite.org/compile.html#enable_dbpage_vtab + # https://sqlite.org/dbpage.html append-cppflags -DSQLITE_ENABLE_DBPAGE_VTAB # Support dbstat virtual table. @@ -182,7 +143,6 @@ multilib_src_configure() { append-cppflags -DSQLITE_ENABLE_DBSTAT_VTAB # Support sqlite3_serialize() and sqlite3_deserialize() functions. - # https://sqlite.org/compile.html#enable_deserialize # https://sqlite.org/c3ref/serialize.html # https://sqlite.org/c3ref/deserialize.html append-cppflags -DSQLITE_ENABLE_DESERIALIZE @@ -251,7 +211,8 @@ multilib_src_configure() { append-cppflags -DSQLITE_ENABLE_UNLOCK_NOTIFY # Support LIMIT and ORDER BY clauses on DELETE and UPDATE statements. - # https://sqlite.org/compile.html#enable_update_delete_limit + # https://sqlite.org/lang_delete.html#optional_limit_and_order_by_clauses + # https://sqlite.org/lang_update.html#optional_limit_and_order_by_clauses append-cppflags -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT # Support soundex() function. @@ -263,26 +224,14 @@ multilib_src_configure() { append-cppflags -DSQLITE_USE_URI # debug USE flag. - if full_archive; then - options+=($(use_enable debug)) - else - if use debug; then - append-cppflags -DSQLITE_DEBUG - else - append-cppflags -DNDEBUG - fi - fi + options+=($(use_enable debug)) # icu USE flag. if use icu; then # Support ICU extension. # https://sqlite.org/compile.html#enable_icu append-cppflags -DSQLITE_ENABLE_ICU - if full_archive; then - sed -e "s/^TLIBS = @LIBS@/& -licui18n -licuuc/" -i Makefile.in || die "sed failed" - else - sed -e "s/^LIBS = @LIBS@/& -licui18n -licuuc/" -i Makefile.in || die "sed failed" - fi + sed -e "s/^TLIBS = @LIBS@/& -licui18n -licuuc/" -i Makefile.in || die "sed failed" fi # readline USE flag. @@ -290,8 +239,8 @@ multilib_src_configure() { --disable-editline $(use_enable readline) ) - if full_archive && use readline; then - options+=(--with-readline-inc="-I${EPREFIX}/usr/include/readline") + if use readline; then + options+=(--with-readline-inc="-I${ESYSROOT}/usr/include/readline") fi # secure-delete USE flag. @@ -305,9 +254,7 @@ multilib_src_configure() { options+=($(use_enable static-libs static)) # tcl, test, tools USE flags. - if full_archive; then - options+=(--enable-tcl) - fi + options+=(--enable-tcl) if [[ "${CHOST}" == *-mint* ]]; then append-cppflags -DSQLITE_OMIT_WAL diff --git a/dev-db/sqlite/sqlite-3.32.3.ebuild b/dev-db/sqlite/sqlite-3.32.3.ebuild new file mode 100644 index 000000000000..fd258a4bd4c0 --- /dev/null +++ b/dev-db/sqlite/sqlite-3.32.3.ebuild @@ -0,0 +1,340 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI="7" + +inherit autotools flag-o-matic multilib-minimal toolchain-funcs + +if [[ "${PV}" != "9999" ]]; then + SRC_PV="$(printf "%u%02u%02u%02u" $(ver_rs 1- " "))" + DOC_PV="${SRC_PV}" + # DOC_PV="$(printf "%u%02u%02u00" $(ver_rs 1-3 " "))" +fi + +DESCRIPTION="SQL database engine" +HOMEPAGE="https://sqlite.org/" +if [[ "${PV}" == "9999" ]]; then + SRC_URI="" +else + SRC_URI="https://sqlite.org/2020/${PN}-src-${SRC_PV}.zip + doc? ( https://sqlite.org/2020/${PN}-doc-${DOC_PV}.zip )" +fi + +LICENSE="public-domain" +SLOT="3" +KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv s390 sparc x86 ~ppc-aix ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris" +IUSE="debug doc icu +readline secure-delete static-libs tcl test tools" +if [[ "${PV}" == "9999" ]]; then + PROPERTIES="live" +fi +RESTRICT="!test? ( test )" + +if [[ "${PV}" == "9999" ]]; then + BDEPEND=">=dev-lang/tcl-8.6:0 + dev-vcs/fossil" +else + BDEPEND="app-arch/unzip + >=dev-lang/tcl-8.6:0" +fi +RDEPEND="sys-libs/zlib:0=[${MULTILIB_USEDEP}] + icu? ( dev-libs/icu:0=[${MULTILIB_USEDEP}] ) + readline? ( sys-libs/readline:0=[${MULTILIB_USEDEP}] ) + tcl? ( dev-lang/tcl:0=[${MULTILIB_USEDEP}] ) + tools? ( dev-lang/tcl:0=[${MULTILIB_USEDEP}] )" +DEPEND="${RDEPEND} + test? ( >=dev-lang/tcl-8.6:0[${MULTILIB_USEDEP}] )" + +if [[ "${PV}" == "9999" ]]; then + S="${WORKDIR}/${PN}" +else + S="${WORKDIR}/${PN}-src-${SRC_PV}" +fi + +src_unpack() { + if [[ "${PV}" == "9999" ]]; then + local distdir="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}" + addwrite "${distdir}" + mkdir -p "${distdir}/fossil-src/${PN}" || die + + mkdir "${WORKDIR}/${PN}" || die + pushd "${WORKDIR}/${PN}" > /dev/null || die + if [[ ! -f "${distdir}/fossil-src/${PN}/sqlite.fossil" ]]; then + einfo fossil clone --verbose https://sqlite.org/src sqlite.fossil + fossil clone --verbose https://sqlite.org/src sqlite.fossil || die + echo + else + cp -p "${distdir}/fossil-src/${PN}/sqlite.fossil" . || die + einfo fossil pull --repository sqlite.fossil --verbose https://sqlite.org/src + fossil pull --repository sqlite.fossil --verbose https://sqlite.org/src || die + echo + fi + cp -p sqlite.fossil "${distdir}/fossil-src/${PN}" || die + einfo fossil open --quiet sqlite.fossil + fossil open --quiet sqlite.fossil || die + echo + popd > /dev/null || die + + if use doc; then + mkdir "${WORKDIR}/${PN}-doc" || die + pushd "${WORKDIR}/${PN}-doc" > /dev/null || die + if [[ ! -f "${distdir}/fossil-src/${PN}/sqlite-doc.fossil" ]]; then + einfo fossil clone --verbose https://sqlite.org/docsrc sqlite-doc.fossil + fossil clone --verbose https://sqlite.org/docsrc sqlite-doc.fossil || die + echo + else + cp -p "${distdir}/fossil-src/${PN}/sqlite-doc.fossil" . || die + einfo fossil pull --repository sqlite-doc.fossil --verbose https://sqlite.org/docsrc + fossil pull --repository sqlite-doc.fossil --verbose https://sqlite.org/docsrc || die + echo + fi + cp -p sqlite-doc.fossil "${distdir}/fossil-src/${PN}" || die + einfo fossil open --quiet sqlite-doc.fossil + fossil open --quiet sqlite-doc.fossil || die + echo + popd > /dev/null || die + fi + else + default + fi +} + +src_prepare() { + eapply "${FILESDIR}/${PN}-3.32.1-full_archive-build_1.patch" + eapply "${FILESDIR}/${PN}-3.32.1-full_archive-build_2.patch" + eapply "${FILESDIR}/${PN}-3.32.3-security_fixes.patch" + + eapply_user + + # Fix AC_CHECK_FUNCS. + # https://mailinglists.sqlite.org/cgi-bin/mailman/private/sqlite-dev/2016-March/002762.html + sed -e "s/AC_CHECK_FUNCS(.*)/AC_CHECK_FUNCS([fdatasync fullfsync gmtime_r isnan localtime_r localtime_s malloc_usable_size posix_fallocate pread pread64 pwrite pwrite64 strchrnul usleep utime])/" -i configure.ac || die "sed failed" + + eautoreconf + + multilib_copy_sources +} + +multilib_src_configure() { + local -x CPPFLAGS="${CPPFLAGS}" CFLAGS="${CFLAGS}" + local options=() + + options+=( + --enable-load-extension + --enable-threadsafe + ) + + # Support detection of misuse of SQLite API. + # https://sqlite.org/compile.html#enable_api_armor + append-cppflags -DSQLITE_ENABLE_API_ARMOR + + # Support bytecode and tables_used virtual tables. + # https://sqlite.org/bytecodevtab.html + append-cppflags -DSQLITE_ENABLE_BYTECODE_VTAB + + # Support column metadata functions. + # https://sqlite.org/c3ref/column_database_name.html + append-cppflags -DSQLITE_ENABLE_COLUMN_METADATA + + # Support sqlite_dbpage virtual table. + # https://sqlite.org/dbpage.html + append-cppflags -DSQLITE_ENABLE_DBPAGE_VTAB + + # Support dbstat virtual table. + # https://sqlite.org/dbstat.html + append-cppflags -DSQLITE_ENABLE_DBSTAT_VTAB + + # Support sqlite3_serialize() and sqlite3_deserialize() functions. + # https://sqlite.org/c3ref/serialize.html + # https://sqlite.org/c3ref/deserialize.html + append-cppflags -DSQLITE_ENABLE_DESERIALIZE + + # Support comments in output of EXPLAIN. + # https://sqlite.org/compile.html#enable_explain_comments + append-cppflags -DSQLITE_ENABLE_EXPLAIN_COMMENTS + + # Support Full-Text Search versions 3, 4 and 5. + # https://sqlite.org/fts3.html + # https://sqlite.org/fts5.html + append-cppflags -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS4 + options+=(--enable-fts5) + + # Support hidden columns. + append-cppflags -DSQLITE_ENABLE_HIDDEN_COLUMNS + + # Support JSON1 extension. + # https://sqlite.org/json1.html + append-cppflags -DSQLITE_ENABLE_JSON1 + + # Support memsys5 memory allocator. + # https://sqlite.org/malloc.html#memsys5 + append-cppflags -DSQLITE_ENABLE_MEMSYS5 + + # Support sqlite3_normalized_sql() function. + # https://sqlite.org/c3ref/expanded_sql.html + append-cppflags -DSQLITE_ENABLE_NORMALIZE + + # Support sqlite_offset() function. + # https://sqlite.org/lang_corefunc.html#sqlite_offset + append-cppflags -DSQLITE_ENABLE_OFFSET_SQL_FUNC + + # Support pre-update hook functions. + # https://sqlite.org/c3ref/preupdate_count.html + append-cppflags -DSQLITE_ENABLE_PREUPDATE_HOOK + + # Support Resumable Bulk Update extension. + # https://sqlite.org/rbu.html + append-cppflags -DSQLITE_ENABLE_RBU + + # Support R*Trees. + # https://sqlite.org/rtree.html + # https://sqlite.org/geopoly.html + append-cppflags -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_GEOPOLY + + # Support scan status functions. + # https://sqlite.org/c3ref/stmt_scanstatus.html + # https://sqlite.org/c3ref/stmt_scanstatus_reset.html + append-cppflags -DSQLITE_ENABLE_STMT_SCANSTATUS + + # Support sqlite_stmt virtual table. + # https://sqlite.org/stmt.html + append-cppflags -DSQLITE_ENABLE_STMTVTAB + + # Support Session extension. + # https://sqlite.org/sessionintro.html + options+=(--enable-session) + + # Support unknown() function. + # https://sqlite.org/compile.html#enable_unknown_sql_function + append-cppflags -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + + # Support unlock notification. + # https://sqlite.org/unlock_notify.html + append-cppflags -DSQLITE_ENABLE_UNLOCK_NOTIFY + + # Support LIMIT and ORDER BY clauses on DELETE and UPDATE statements. + # https://sqlite.org/lang_delete.html#optional_limit_and_order_by_clauses + # https://sqlite.org/lang_update.html#optional_limit_and_order_by_clauses + append-cppflags -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT + + # Support soundex() function. + # https://sqlite.org/lang_corefunc.html#soundex + append-cppflags -DSQLITE_SOUNDEX + + # Support URI filenames. + # https://sqlite.org/uri.html + append-cppflags -DSQLITE_USE_URI + + # debug USE flag. + options+=($(use_enable debug)) + + # icu USE flag. + if use icu; then + # Support ICU extension. + # https://sqlite.org/compile.html#enable_icu + append-cppflags -DSQLITE_ENABLE_ICU + sed -e "s/^TLIBS = @LIBS@/& -licui18n -licuuc/" -i Makefile.in || die "sed failed" + fi + + # readline USE flag. + options+=( + --disable-editline + $(use_enable readline) + ) + if use readline; then + options+=(--with-readline-inc="-I${ESYSROOT}/usr/include/readline") + fi + + # secure-delete USE flag. + if use secure-delete; then + # Enable secure_delete pragma by default. + # https://sqlite.org/pragma.html#pragma_secure_delete + append-cppflags -DSQLITE_SECURE_DELETE + fi + + # static-libs USE flag. + options+=($(use_enable static-libs static)) + + # tcl, test, tools USE flags. + options+=(--enable-tcl) + + if [[ "${CHOST}" == *-mint* ]]; then + append-cppflags -DSQLITE_OMIT_WAL + fi + + if [[ "${ABI}" == "x86" ]]; then + if $(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P -dM - < /dev/null 2> /dev/null | grep -q "^#define __SSE__ 1$"; then + append-cflags -mfpmath=sse + else + append-cflags -ffloat-store + fi + fi + + econf "${options[@]}" +} + +multilib_src_compile() { + emake HAVE_TCL="$(usex tcl 1 "")" TCLLIBDIR="${EPREFIX}/usr/$(get_libdir)/${P}" + + if use tools && multilib_is_native_abi; then + emake changeset dbdump dbhash dbtotxt index_usage rbu scrub showdb showjournal showshm showstat4 showwal sqldiff sqlite3_analyzer sqlite3_checker sqlite3_expert sqltclsh + fi +} + +multilib_src_test() { + if [[ "${EUID}" -eq 0 ]]; then + ewarn "Skipping tests due to root permissions" + return + fi + + local -x SQLITE_HISTORY="${T}/sqlite_history_${ABI}" + + emake HAVE_TCL="$(usex tcl 1 "")" $(use debug && echo fulltest || echo test) +} + +multilib_src_install() { + emake DESTDIR="${D}" HAVE_TCL="$(usex tcl 1 "")" TCLLIBDIR="${EPREFIX}/usr/$(get_libdir)/${P}" install + + if use tools && multilib_is_native_abi; then + install_tool() { + if [[ -f ".libs/${1}" ]]; then + newbin ".libs/${1}" "${2}" + else + newbin "${1}" "${2}" + fi + } + + install_tool changeset sqlite3-changeset + install_tool dbdump sqlite3-db-dump + install_tool dbhash sqlite3-db-hash + install_tool dbtotxt sqlite3-db-to-txt + install_tool index_usage sqlite3-index-usage + install_tool rbu sqlite3-rbu + install_tool scrub sqlite3-scrub + install_tool showdb sqlite3-show-db + install_tool showjournal sqlite3-show-journal + install_tool showshm sqlite3-show-shm + install_tool showstat4 sqlite3-show-stat4 + install_tool showwal sqlite3-show-wal + install_tool sqldiff sqlite3-diff + install_tool sqlite3_analyzer sqlite3-analyzer + install_tool sqlite3_checker sqlite3-checker + install_tool sqlite3_expert sqlite3-expert + install_tool sqltclsh sqlite3-tclsh + + unset -f install_tool + fi +} + +multilib_src_install_all() { + find "${D}" -name "*.la" -type f -delete || die + + doman sqlite3.1 + + if use doc; then + rm "${WORKDIR}/${PN}-doc-${DOC_PV}/"*.{db,txt} || die + ( + docinto html + dodoc -r "${WORKDIR}/${PN}-doc-${DOC_PV}/"* + ) + fi +} |