From 5aa46f9bd69fb34b7fece8c2b086a53a914ab79d Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 6 Dec 2021 16:29:53 +0000 Subject: [PATCH 01/14] Start a new branch on which to cherrypick fixes against 3.37.0. FossilOrigin-Name: cea9e41aaee9b43496909fa2ba80dddaee1dd77d44bcb4d8d38034d1b003d762 --- VERSION | 2 +- configure | 40 +++++++++------------------------------- manifest | 20 ++++++++++---------- manifest.uuid | 2 +- 4 files changed, 21 insertions(+), 43 deletions(-) diff --git a/VERSION b/VERSION index c03c47aa89..08a0898f89 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.37.0 +3.37.1 diff --git a/configure b/configure index 8da48f587a..788988987f 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sqlite 3.37.0. +# Generated by GNU Autoconf 2.69 for sqlite 3.37.1. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -726,8 +726,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.37.0' -PACKAGE_STRING='sqlite 3.37.0' +PACKAGE_VERSION='3.37.1' +PACKAGE_STRING='sqlite 3.37.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -774,7 +774,6 @@ USE_GCOV OPT_FEATURE_FLAGS HAVE_ZLIB USE_AMALGAMATION -AMALGAMATION_LINE_MACROS TARGET_DEBUG TARGET_HAVE_EDITLINE TARGET_HAVE_READLINE @@ -903,7 +902,6 @@ with_readline_lib with_readline_inc enable_debug enable_amalgamation -amalgamation_line_macros enable_load_extension enable_math enable_all @@ -1469,7 +1467,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.37.0 to adapt to many kinds of systems. +\`configure' configures sqlite 3.37.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1534,7 +1532,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.37.0:";; + short | recursive ) echo "Configuration of sqlite 3.37.1:";; esac cat <<\_ACEOF @@ -1662,7 +1660,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.37.0 +sqlite configure 3.37.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2081,7 +2079,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.37.0, which was +It was created by sqlite $as_me 3.37.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -10307,13 +10305,6 @@ done # USE_AMALGAMATION=1 -######### -# By default, amalgamation sqlite3.c will have #line directives. -# This is a build option not shown by ./configure --help -# To control it, use configure option: amalgamation_line_macros=? -# where ? is no to suppress #line directives or yes to create them. -AMALGAMATION_LINE_MACROS=--linemacros=0 - ######### # See whether we can run specific tclsh versions known to work well; # if not, then we fall back to plain tclsh. @@ -11284,19 +11275,6 @@ if test "${enable_amalgamation}" = "no" ; then USE_AMALGAMATION=0 fi -######## -# See whether --disable -if test "${amalgamation_line_macros+set}" = set; then : - enableval=$amalgamation_line_macros; -fi - -if test "${amalgamation_line_macros}" = "yes" ; then - AMALGAMATION_LINE_MACROS=--linemacros=1 -fi -if test "${amalgamation_line_macros}" = "no" ; then - AMALGAMATION_LINE_MACROS=--linemacros=0 -fi - ######### # Look for zlib. Only needed by extensions and by the sqlite3.exe shell @@ -12400,7 +12378,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.37.0, which was +This file was extended by sqlite $as_me 3.37.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -12466,7 +12444,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sqlite config.status 3.37.0 +sqlite config.status 3.37.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/manifest b/manifest index dfb723ab2a..f67fa04153 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Version\s3.37.0 -D 2021-11-27T14:13:22.430 +C Start\sa\snew\sbranch\son\swhich\sto\scherrypick\sfixes\sagainst\s3.37.0. +D 2021-12-06T16:29:53.928 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -7,7 +7,7 @@ F Makefile.in 0e91c42a1dd13a569b1fa4f4dfb7d3632f3164a1c05c71341533d67db5b641dd F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241 F Makefile.msc 88f05063ee36a5fb77d69b877ef824d0743b5325c95bfbf74d6ff17bd1c9fb1f F README.md 27fb76aa7eb57ed63a53bbba7292b6bf71f51125554f79f16b5d040edd1e6110 -F VERSION c6595fef606851f2bc3ebed6a7386c73751835fc909feab7c093739fa4b3c1d1 +F VERSION 912d4358751f2d7528c5a984129a84ac35fa96ee3207d2437b415cc36c06d6e4 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 @@ -34,7 +34,7 @@ F autoconf/tea/win/rules.vc c511f222b80064096b705dbeb97060ee1d6b6d63 F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6 F config.h.in 6376abec766e9a0785178b1823b5a587e9f1ccbc F config.sub c2d0260f17f3e4bc0b6808fccf1b291cb5e9126c14fc5890efc77b9fd0175559 -F configure e8003577b8c433cf61371d27d4beeca3a3ed37611a504ff5f4d4286923b87d03 x +F configure c0b18493ed7674901dc6ca07f6badec411faec78f335618a728b1c20ed56408a x F configure.ac 4e4b58b32f88c8da9914a2f2c3158f80e69907eccc019fcc7e3ba14ffd91c640 F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd @@ -1933,10 +1933,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 7c567338ae4dd31097e9ae5c693b84369c35c5a52534797e8186b4be7297ba78 -R 1bdaa083fa0abfc53c61429627c688f2 -T +sym-major-release * -T +sym-release * -T +sym-version-3.37.0 * +P bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a +R cdbd66aa01718c358cf2d24b75827502 +T *branch * branch-3.37 +T *sym-branch-3.37 * +T -sym-trunk * U drh -Z 6f6dbee10adfe1c5275055f73bc6984f +Z 3234c55974413333201859e4e65b8d8f diff --git a/manifest.uuid b/manifest.uuid index 44318ef9d2..ca3d67c624 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a \ No newline at end of file +cea9e41aaee9b43496909fa2ba80dddaee1dd77d44bcb4d8d38034d1b003d762 \ No newline at end of file From 764d1809ce1de85d77d9db6a23e4c4b40951c0ad Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 6 Dec 2021 16:36:37 +0000 Subject: [PATCH 02/14] In the shell tool, avoid modifying internal data structures until after the arguments to ".open" have been parsed. FossilOrigin-Name: cbd69ed8afd3facda39fe8c81a3e8e4a1928923bcfd93e99d1bb8b3868ef3e5b --- manifest | 16 +++++++--------- manifest.uuid | 2 +- src/shell.c.in | 34 +++++++++++++++++++--------------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/manifest b/manifest index f67fa04153..af75137a65 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Start\sa\snew\sbranch\son\swhich\sto\scherrypick\sfixes\sagainst\s3.37.0. -D 2021-12-06T16:29:53.928 +C In\sthe\sshell\stool,\savoid\smodifying\sinternal\sdata\sstructures\suntil\safter\sthe\sarguments\sto\s".open"\shave\sbeen\sparsed. +D 2021-12-06T16:36:37.667 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -551,7 +551,7 @@ F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c 4a1db4aadd802683db40ca2dbbb268187bd195f10cbdb7206dbd8ac988795571 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c a7a3d9f54eb24821ec5f67f2e5589b68a5d42d46fc5849d7376886777d93a85a -F src/shell.c.in 975f268ef261773fcbed1e519dfa10c4f33e8b1cffc12120563e61857fff07c6 +F src/shell.c.in e7ee6517544d075d9f06ee2571567026b89cf9fbeef16a74918019b1cb425764 F src/sqlite.h.in 5cd209ac7dc4180f0e19292846f40440b8488015849ca0110c70b906b57d68f0 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 8ff2fd2c166150b2e48639f5e506fb44e29f1a3f65031710b9e89d1c126ac839 @@ -1933,10 +1933,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a -R cdbd66aa01718c358cf2d24b75827502 -T *branch * branch-3.37 -T *sym-branch-3.37 * -T -sym-trunk * +P cea9e41aaee9b43496909fa2ba80dddaee1dd77d44bcb4d8d38034d1b003d762 +Q +fcc509d325dabe06275e7804183bb8b4ba6470a45b443bc8292eecd0974e6367 +R 29ff6f0ab37b56a9972cccaffdc627cd U drh -Z 3234c55974413333201859e4e65b8d8f +Z a94d193d2ea331fde75cdd8dc9044784 diff --git a/manifest.uuid b/manifest.uuid index ca3d67c624..f72a3cbb67 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cea9e41aaee9b43496909fa2ba80dddaee1dd77d44bcb4d8d38034d1b003d762 \ No newline at end of file +cbd69ed8afd3facda39fe8c81a3e8e4a1928923bcfd93e99d1bb8b3868ef3e5b \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index b4b4e2fcce..72fe26339e 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -8941,16 +8941,8 @@ static int do_meta_command(char *zLine, ShellState *p){ char *zNewFilename = 0; /* Name of the database file to open */ int iName = 1; /* Index in azArg[] of the filename */ int newFlag = 0; /* True to delete file before opening */ - /* Close the existing database */ - session_close_all(p, -1); - close_db(p->db); - p->db = 0; - p->pAuxDb->zDbFilename = 0; - sqlite3_free(p->pAuxDb->zFreeOnClose); - p->pAuxDb->zFreeOnClose = 0; - p->openMode = SHELL_OPEN_UNSPEC; - p->openFlags = 0; - p->szMax = 0; + int openMode = SHELL_OPEN_UNSPEC; + /* Check for command-line arguments */ for(iName=1; iNameopenMode = SHELL_OPEN_ZIPFILE; + openMode = SHELL_OPEN_ZIPFILE; #endif }else if( optionMatch(z, "append") ){ - p->openMode = SHELL_OPEN_APPENDVFS; + openMode = SHELL_OPEN_APPENDVFS; }else if( optionMatch(z, "readonly") ){ - p->openMode = SHELL_OPEN_READONLY; + openMode = SHELL_OPEN_READONLY; }else if( optionMatch(z, "nofollow") ){ p->openFlags |= SQLITE_OPEN_NOFOLLOW; #ifndef SQLITE_OMIT_DESERIALIZE }else if( optionMatch(z, "deserialize") ){ - p->openMode = SHELL_OPEN_DESERIALIZE; + openMode = SHELL_OPEN_DESERIALIZE; }else if( optionMatch(z, "hexdb") ){ - p->openMode = SHELL_OPEN_HEXDB; + openMode = SHELL_OPEN_HEXDB; }else if( optionMatch(z, "maxsize") && iName+1szMax = integerValue(azArg[++iName]); #endif /* SQLITE_OMIT_DESERIALIZE */ @@ -8986,6 +8978,18 @@ static int do_meta_command(char *zLine, ShellState *p){ zNewFilename = sqlite3_mprintf("%s", z); } } + + /* Close the existing database */ + session_close_all(p, -1); + close_db(p->db); + p->db = 0; + p->pAuxDb->zDbFilename = 0; + sqlite3_free(p->pAuxDb->zFreeOnClose); + p->pAuxDb->zFreeOnClose = 0; + p->openMode = openMode; + p->openFlags = 0; + p->szMax = 0; + /* If a filename is specified, try to open it first */ if( zNewFilename || p->openMode==SHELL_OPEN_HEXDB ){ if( newFlag && !p->bSafeMode ) shellDeleteFile(zNewFilename); From 7956fbb7b6eeecd62bdbafdd52be3e618d7d8ba9 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 6 Dec 2021 16:42:31 +0000 Subject: [PATCH 03/14] Fix SQLITE_TESTCTRL_IMPOSTER so that it is a harmless no-op if the schema parameter is invalid. FossilOrigin-Name: b15c553c2ca3143c269e25f41e1a4e6c00f72a89e4b0a382260620567f159081 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/main.c | 14 +++++++++----- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index af75137a65..066dd3fd25 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sthe\sshell\stool,\savoid\smodifying\sinternal\sdata\sstructures\suntil\safter\sthe\sarguments\sto\s".open"\shave\sbeen\sparsed. -D 2021-12-06T16:36:37.667 +C Fix\sSQLITE_TESTCTRL_IMPOSTER\sso\sthat\sit\sis\sa\sharmless\sno-op\sif\sthe\sschema\nparameter\sis\sinvalid. +D 2021-12-06T16:42:31.658 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -514,7 +514,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c 7fcbbe9114ac402ea3c0c6a3810f13fc89cae8131ea1659ec472be7caac10192 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c e1dcff1c916bf6834e150b492eddda5d9792453182d2ad64294d2266b6e93c4c -F src/main.c 7bd4fdc41ef53535271a1816ff043ba153cda03842b444b6e2f57b27b2cb9090 +F src/main.c e94230dba03f44b73c52abc8b814468a0cb6d4a66d71af33452edd78ed1b1228 F src/malloc.c ef796bcc0e81d845d59a469f1cf235056caf9024172fd524e32136e65593647b F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -1933,8 +1933,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cea9e41aaee9b43496909fa2ba80dddaee1dd77d44bcb4d8d38034d1b003d762 -Q +fcc509d325dabe06275e7804183bb8b4ba6470a45b443bc8292eecd0974e6367 -R 29ff6f0ab37b56a9972cccaffdc627cd +P cbd69ed8afd3facda39fe8c81a3e8e4a1928923bcfd93e99d1bb8b3868ef3e5b +Q +2d9a45ab10aaad681e11d639195430c0988b6ca1b96db6bf0b31b889e88a5430 +R 6ff1e713f602aa09b26aa85d4ecde7a6 U drh -Z a94d193d2ea331fde75cdd8dc9044784 +Z ff7b20be846cfbdcbb432488413e7c4a diff --git a/manifest.uuid b/manifest.uuid index f72a3cbb67..286308488b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cbd69ed8afd3facda39fe8c81a3e8e4a1928923bcfd93e99d1bb8b3868ef3e5b \ No newline at end of file +b15c553c2ca3143c269e25f41e1a4e6c00f72a89e4b0a382260620567f159081 \ No newline at end of file diff --git a/src/main.c b/src/main.c index 4b2d0592c9..ce53496bc0 100644 --- a/src/main.c +++ b/src/main.c @@ -4260,12 +4260,16 @@ int sqlite3_test_control(int op, ...){ */ case SQLITE_TESTCTRL_IMPOSTER: { sqlite3 *db = va_arg(ap, sqlite3*); + int iDb; sqlite3_mutex_enter(db->mutex); - db->init.iDb = sqlite3FindDbName(db, va_arg(ap,const char*)); - db->init.busy = db->init.imposterTable = va_arg(ap,int); - db->init.newTnum = va_arg(ap,int); - if( db->init.busy==0 && db->init.newTnum>0 ){ - sqlite3ResetAllSchemasOfConnection(db); + iDb = sqlite3FindDbName(db, va_arg(ap,const char*)); + if( iDb>=0 ){ + db->init.iDb = iDb; + db->init.busy = db->init.imposterTable = va_arg(ap,int); + db->init.newTnum = va_arg(ap,int); + if( db->init.busy==0 && db->init.newTnum>0 ){ + sqlite3ResetAllSchemasOfConnection(db); + } } sqlite3_mutex_leave(db->mutex); break; From 5b6692ddddf6bb2778b984096aa5e3bd0088f78e Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 6 Dec 2021 16:51:03 +0000 Subject: [PATCH 04/14] Do not allow certain dangerous ".testctrl" commands in safe mode. FossilOrigin-Name: 4602644f858eb3b55fec0ead1de58de1f60cb85165cbb309bfe6bb136099a895 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/shell.c.in | 46 ++++++++++++++++++++++++++-------------------- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/manifest b/manifest index 066dd3fd25..33b2dfe93c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sSQLITE_TESTCTRL_IMPOSTER\sso\sthat\sit\sis\sa\sharmless\sno-op\sif\sthe\sschema\nparameter\sis\sinvalid. -D 2021-12-06T16:42:31.658 +C Do\snot\sallow\scertain\sdangerous\s".testctrl"\scommands\sin\ssafe\smode. +D 2021-12-06T16:51:03.671 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -551,7 +551,7 @@ F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c 4a1db4aadd802683db40ca2dbbb268187bd195f10cbdb7206dbd8ac988795571 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c a7a3d9f54eb24821ec5f67f2e5589b68a5d42d46fc5849d7376886777d93a85a -F src/shell.c.in e7ee6517544d075d9f06ee2571567026b89cf9fbeef16a74918019b1cb425764 +F src/shell.c.in 1458b700144c8326fda2514aaddeda49d6f01f1d1ccf7b9b696c53a3535a119c F src/sqlite.h.in 5cd209ac7dc4180f0e19292846f40440b8488015849ca0110c70b906b57d68f0 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 8ff2fd2c166150b2e48639f5e506fb44e29f1a3f65031710b9e89d1c126ac839 @@ -1933,8 +1933,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P cbd69ed8afd3facda39fe8c81a3e8e4a1928923bcfd93e99d1bb8b3868ef3e5b -Q +2d9a45ab10aaad681e11d639195430c0988b6ca1b96db6bf0b31b889e88a5430 -R 6ff1e713f602aa09b26aa85d4ecde7a6 +P b15c553c2ca3143c269e25f41e1a4e6c00f72a89e4b0a382260620567f159081 +Q +080e72d119b836c49916201bf135445aa7d53cefe40a47437a93448c4d0f41cd +R 51cd582cb9955c5dc3be330e9d72a468 U drh -Z ff7b20be846cfbdcbb432488413e7c4a +Z 5e49a351a4154863e1f171f45499a747 diff --git a/manifest.uuid b/manifest.uuid index 286308488b..22264761dc 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b15c553c2ca3143c269e25f41e1a4e6c00f72a89e4b0a382260620567f159081 \ No newline at end of file +4602644f858eb3b55fec0ead1de58de1f60cb85165cbb309bfe6bb136099a895 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 72fe26339e..543141c9e4 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -10208,30 +10208,31 @@ static int do_meta_command(char *zLine, ShellState *p){ static const struct { const char *zCtrlName; /* Name of a test-control option */ int ctrlCode; /* Integer code for that option */ + int unSafe; /* Not valid for --safe mode */ const char *zUsage; /* Usage notes */ } aCtrl[] = { - { "always", SQLITE_TESTCTRL_ALWAYS, "BOOLEAN" }, - { "assert", SQLITE_TESTCTRL_ASSERT, "BOOLEAN" }, - /*{ "benign_malloc_hooks",SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, "" },*/ - /*{ "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST, "" },*/ - { "byteorder", SQLITE_TESTCTRL_BYTEORDER, "" }, - { "extra_schema_checks",SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS,"BOOLEAN" }, - /*{ "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, "" },*/ - { "imposter", SQLITE_TESTCTRL_IMPOSTER, "SCHEMA ON/OFF ROOTPAGE"}, - { "internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, "" }, - { "localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,"BOOLEAN" }, - { "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT, "BOOLEAN" }, - { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS, "DISABLE-MASK" }, + { "always", SQLITE_TESTCTRL_ALWAYS, 1, "BOOLEAN" }, + { "assert", SQLITE_TESTCTRL_ASSERT, 1, "BOOLEAN" }, + /*{ "benign_malloc_hooks",SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS,1, "" },*/ + /*{ "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST, 1, "" },*/ + { "byteorder", SQLITE_TESTCTRL_BYTEORDER, 0, "" }, + { "extra_schema_checks",SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS,0,"BOOLEAN" }, + /*{ "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, 1,"" },*/ + { "imposter", SQLITE_TESTCTRL_IMPOSTER,1,"SCHEMA ON/OFF ROOTPAGE"}, + { "internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS,0,"" }, + { "localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,0,"BOOLEAN" }, + { "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT,1, "BOOLEAN" }, + { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS,0,"DISABLE-MASK" }, #ifdef YYCOVERAGE - { "parser_coverage", SQLITE_TESTCTRL_PARSER_COVERAGE, "" }, + { "parser_coverage", SQLITE_TESTCTRL_PARSER_COVERAGE,0,"" }, #endif - { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE, "OFFSET " }, - { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE, "" }, - { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE, "" }, - { "prng_seed", SQLITE_TESTCTRL_PRNG_SEED, "SEED ?db?" }, - { "seek_count", SQLITE_TESTCTRL_SEEK_COUNT, "" }, - { "sorter_mmap", SQLITE_TESTCTRL_SORTER_MMAP, "NMAX" }, - { "tune", SQLITE_TESTCTRL_TUNE, "ID VALUE" }, + { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE,0, "OFFSET " }, + { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE,0, "" }, + { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE, 0, "" }, + { "prng_seed", SQLITE_TESTCTRL_PRNG_SEED, 0, "SEED ?db?" }, + { "seek_count", SQLITE_TESTCTRL_SEEK_COUNT, 0, "" }, + { "sorter_mmap", SQLITE_TESTCTRL_SORTER_MMAP, 0, "NMAX" }, + { "tune", SQLITE_TESTCTRL_TUNE, 1, "ID VALUE" }, }; int testctrl = -1; int iCtrl = -1; @@ -10279,6 +10280,11 @@ static int do_meta_command(char *zLine, ShellState *p){ if( testctrl<0 ){ utf8_printf(stderr,"Error: unknown test-control: %s\n" "Use \".testctrl --help\" for help\n", zCmd); + }else if( aCtrl[iCtrl].unSafe && p->bSafeMode ){ + utf8_printf(stderr, + "line %d: \".testctrl %s\" may not be used in safe mode\n", + p->lineno, aCtrl[iCtrl].zCtrlName); + exit(1); }else{ switch(testctrl){ From b8b877b3dd7c61eabd149f2ea3a3fb2504e6a8a2 Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 6 Dec 2021 16:56:06 +0000 Subject: [PATCH 05/14] Do not allow SQLITE_LIMIT_LENGTH to be set lower than 1 as an SQLITE_LIMIT_LENGTH of 0 causes lots of unnecessary problems for users of the sqlite3_str object. FossilOrigin-Name: 286243f3a49f721b2ed5b278738e9edd8ca0f190abdbec645866bce97fcc7d04 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/main.c | 2 ++ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 33b2dfe93c..17fb39815c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sallow\scertain\sdangerous\s".testctrl"\scommands\sin\ssafe\smode. -D 2021-12-06T16:51:03.671 +C Do\snot\sallow\sSQLITE_LIMIT_LENGTH\sto\sbe\sset\slower\sthan\s1\sas\san\s\nSQLITE_LIMIT_LENGTH\sof\s0\scauses\slots\sof\sunnecessary\sproblems\sfor\nusers\sof\sthe\ssqlite3_str\sobject. +D 2021-12-06T16:56:06.133 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -514,7 +514,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 F src/insert.c 7fcbbe9114ac402ea3c0c6a3810f13fc89cae8131ea1659ec472be7caac10192 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c e1dcff1c916bf6834e150b492eddda5d9792453182d2ad64294d2266b6e93c4c -F src/main.c e94230dba03f44b73c52abc8b814468a0cb6d4a66d71af33452edd78ed1b1228 +F src/main.c 1ea70751e6005ab6a9f784730fa0919efaa6639440a287deb73cb711e5aae57a F src/malloc.c ef796bcc0e81d845d59a469f1cf235056caf9024172fd524e32136e65593647b F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de @@ -1933,8 +1933,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P b15c553c2ca3143c269e25f41e1a4e6c00f72a89e4b0a382260620567f159081 -Q +080e72d119b836c49916201bf135445aa7d53cefe40a47437a93448c4d0f41cd -R 51cd582cb9955c5dc3be330e9d72a468 +P 4602644f858eb3b55fec0ead1de58de1f60cb85165cbb309bfe6bb136099a895 +Q +8fd5b8ec4ab9b5554d27f25a4638d56e347eab78b60900f24b15a815d3731330 +R 38d89c5246bd32fe865833fcca2fea74 U drh -Z 5e49a351a4154863e1f171f45499a747 +Z a3d8c2c0dc3baa5617e16ec1777530e4 diff --git a/manifest.uuid b/manifest.uuid index 22264761dc..f04cb587e8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -4602644f858eb3b55fec0ead1de58de1f60cb85165cbb309bfe6bb136099a895 \ No newline at end of file +286243f3a49f721b2ed5b278738e9edd8ca0f190abdbec645866bce97fcc7d04 \ No newline at end of file diff --git a/src/main.c b/src/main.c index ce53496bc0..804719f176 100644 --- a/src/main.c +++ b/src/main.c @@ -2857,6 +2857,8 @@ int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){ if( newLimit>=0 ){ /* IMP: R-52476-28732 */ if( newLimit>aHardLimit[limitId] ){ newLimit = aHardLimit[limitId]; /* IMP: R-51463-25634 */ + }else if( newLimit<1 && limitId==SQLITE_LIMIT_LENGTH ){ + newLimit = 1; } db->aLimit[limitId] = newLimit; } From 3d25b94a1325ee6411ebb459533eb4edc568686e Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 6 Dec 2021 19:03:56 +0000 Subject: [PATCH 06/14] Fix an OOB read that could occur in fts5 when processing corrupt records. FossilOrigin-Name: 734606ea1a42c2e31ea62c114f2480b52182114b6bd87eb2f1145a171daad80f --- ext/fts5/fts5_index.c | 8 +++-- ext/fts5/test/fts5corrupt6.test | 54 +++++++++++++++++++++++++++++++++ manifest | 15 ++++----- manifest.uuid | 2 +- 4 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 ext/fts5/test/fts5corrupt6.test diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index 54efb340c3..fe253984b3 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -1879,8 +1879,12 @@ static void fts5SegIterReverseNewPage(Fts5Index *p, Fts5SegIter *pIter){ int iRowidOff; iRowidOff = fts5LeafFirstRowidOff(pNew); if( iRowidOff ){ - pIter->pLeaf = pNew; - pIter->iLeafOffset = iRowidOff; + if( iRowidOff>=pNew->szLeaf ){ + p->rc = FTS5_CORRUPT; + }else{ + pIter->pLeaf = pNew; + pIter->iLeafOffset = iRowidOff; + } } } diff --git a/ext/fts5/test/fts5corrupt6.test b/ext/fts5/test/fts5corrupt6.test new file mode 100644 index 0000000000..6403d3a406 --- /dev/null +++ b/ext/fts5/test/fts5corrupt6.test @@ -0,0 +1,54 @@ +# 2015 Apr 24 +# +# 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 tests that FTS5 handles corrupt databases (i.e. internal +# inconsistencies in the backing tables) correctly. In this case +# "correctly" means without crashing. +# + +source [file join [file dirname [info script]] fts5_common.tcl] +set testprefix fts5corrupt6 + +# If SQLITE_ENABLE_FTS5 is defined, omit this file. +ifcapable !fts5 { + finish_test + return +} +sqlite3_fts5_may_be_corrupt 1 +database_may_be_corrupt + +proc editblock {block} { + binary format Sa* 20000 [string range $block 2 end] +} +db func editblock editblock + +do_execsql_test 1.0 { + CREATE VIRTUAL TABLE ft USING fts5(abc, def); + WITH a(i) AS ( + SELECT 1 UNION ALL SELECT i+1 FROM a WHERE i<1000 + ) + INSERT INTO ft SELECT + 'abc abc abc abc abc abc abc abc abc abc', + 'def def def def def def def def def def' + FROM a; + UPDATE ft_data SET block = editblock(block) WHERE id=( + SELECT id FROM ft_data ORDER BY id LIMIT 1 OFFSET 5 + ); +} + +do_catchsql_test 1.1 { + SELECT rowid FROM ft('def') ORDER BY rowid DESC LIMIT 1 OFFSET 9999; +} {1 {database disk image is malformed}} + + +sqlite3_fts5_may_be_corrupt 0 +finish_test + diff --git a/manifest b/manifest index 17fb39815c..67153d8bf1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sallow\sSQLITE_LIMIT_LENGTH\sto\sbe\sset\slower\sthan\s1\sas\san\s\nSQLITE_LIMIT_LENGTH\sof\s0\scauses\slots\sof\sunnecessary\sproblems\sfor\nusers\sof\sthe\ssqlite3_str\sobject. -D 2021-12-06T16:56:06.133 +C Fix\san\sOOB\sread\sthat\scould\soccur\sin\sfts5\swhen\sprocessing\scorrupt\srecords. +D 2021-12-06T19:03:56.546 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -119,7 +119,7 @@ F ext/fts5/fts5_buffer.c 3001fbabb585d6de52947b44b455235072b741038391f830d6b7292 F ext/fts5/fts5_config.c 501e7d3566bc92766b0e11c0109a7c5a6146bc41144195459af5422f6c2078aa F ext/fts5/fts5_expr.c fcd0770d53028c2b53a15d0f53bf6d0e01b1bf3dd97630b9fedf0801f03aa3ec F ext/fts5/fts5_hash.c d4fb70940359f2120ccd1de7ffe64cc3efe65de9e8995b822cd536ff64c96982 -F ext/fts5/fts5_index.c a3ada4897c3b14b8a15a8695d2cb3a46b5761137aae0964fc44efe96a877ddd0 +F ext/fts5/fts5_index.c b1b2e5d4a9e3b54c740d8354cc47e3fa879f54c2176de55e0b882dab45ab7b07 F ext/fts5/fts5_main.c 7c6092a53e6802962fa07b0fad3e61cb077b6c98b74b727d8d44ac2cf63bd914 F ext/fts5/fts5_storage.c 76c6085239eb44424004c022e9da17a5ecd5aaec859fba90ad47d3b08f4c8082 F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae @@ -163,6 +163,7 @@ F ext/fts5/test/fts5corrupt2.test 7453752ba12ce91690c469a6449d412561cc604b1dec99 F ext/fts5/test/fts5corrupt3.test 0e473620582a53ac61f468f364db8a151c1e18d2a879b16439d172c12c4c9828 F ext/fts5/test/fts5corrupt4.test f4c08e2182a48d8b70975fd869ee5391855c06d8a0ff87b6a2529e7c5a88a1d3 F ext/fts5/test/fts5corrupt5.test 550d0884c14424f9acad051a741f1dd99ec9342277d938e91ff3daf9123d1209 +F ext/fts5/test/fts5corrupt6.test bf8eeae07825b088b9665d9d8e4accbd8dc9bf3cb85b6c64cf6c9e18ccc420a4 F ext/fts5/test/fts5delete.test 619295b20dbc1d840b403ee07c878f52378849c3c02e44f2ee143b3e978a0aa7 F ext/fts5/test/fts5detail.test 54015e9c43ec4ba542cfb93268abdf280e0300f350efd08ee411284b03595cc4 F ext/fts5/test/fts5determin.test 1b77879b2ae818b5b71c859e534ee334dac088b7cf3ff3bf76a2c82b1c788d11 @@ -1933,8 +1934,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 4602644f858eb3b55fec0ead1de58de1f60cb85165cbb309bfe6bb136099a895 -Q +8fd5b8ec4ab9b5554d27f25a4638d56e347eab78b60900f24b15a815d3731330 -R 38d89c5246bd32fe865833fcca2fea74 +P 286243f3a49f721b2ed5b278738e9edd8ca0f190abdbec645866bce97fcc7d04 +Q +bb9b1a15f7e80483162049dfd981d059dc69d03348b521f7ac164a8cd3ae3cc4 +R 11b7b358bb4439e3707636b101a10749 U drh -Z a3d8c2c0dc3baa5617e16ec1777530e4 +Z 0fb17ca5c1175f1d0d4866226b8ef13c diff --git a/manifest.uuid b/manifest.uuid index f04cb587e8..679c03f913 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -286243f3a49f721b2ed5b278738e9edd8ca0f190abdbec645866bce97fcc7d04 \ No newline at end of file +734606ea1a42c2e31ea62c114f2480b52182114b6bd87eb2f1145a171daad80f \ No newline at end of file From fe553b671c8edfec90544a5deaac026e89cc5501 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Dec 2021 03:12:37 +0000 Subject: [PATCH 07/14] When a table has an INTEGER PRIMARY KEY ON CONFLICT REPLACE and some other uniqueness constraint, and it participates in an upsert on that other constraint, ensure that code that checks for conflicts on the INTEGER PRIMARY KEY is well-formed. Fix for the problem reported by [forum:/forumpost/06b16b8b29f8c8c3|forum post 06b16b8b29f8c8c3]. FossilOrigin-Name: 1f1e0b4e6d3a63fecaef8fafc8374ff17cff6d7af4c03994fa245e9953ee42cb --- manifest | 17 +++++++++-------- manifest.uuid | 2 +- src/insert.c | 2 ++ test/upsert1.test | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 67153d8bf1..2f128654f4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sOOB\sread\sthat\scould\soccur\sin\sfts5\swhen\sprocessing\scorrupt\srecords. -D 2021-12-06T19:03:56.546 +C When\sa\stable\shas\san\sINTEGER\sPRIMARY\sKEY\sON\sCONFLICT\sREPLACE\sand\ssome\sother\nuniqueness\sconstraint,\sand\sit\sparticipates\sin\san\supsert\son\sthat\sother\nconstraint,\sensure\sthat\scode\sthat\schecks\sfor\sconflicts\son\sthe\sINTEGER\sPRIMARY\nKEY\sis\swell-formed.\s\sFix\sfor\sthe\sproblem\sreported\sby\n[forum:/forumpost/06b16b8b29f8c8c3|forum\spost\s06b16b8b29f8c8c3]. +D 2021-12-30T03:12:37.060 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -512,7 +512,7 @@ F src/hash.c 8d7dda241d0ebdafb6ffdeda3149a412d7df75102cecfc1021c98d6219823b19 F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51 F src/hwtime.h cb1d7e3e1ed94b7aa6fde95ae2c2daccc3df826be26fc9ed7fd90d1750ae6144 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 -F src/insert.c 7fcbbe9114ac402ea3c0c6a3810f13fc89cae8131ea1659ec472be7caac10192 +F src/insert.c 9b133400f1c7f6d83ca14565e9cf4d2b9b8c938123b5d6793ae2fccb85c52834 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c e1dcff1c916bf6834e150b492eddda5d9792453182d2ad64294d2266b6e93c4c F src/main.c 1ea70751e6005ab6a9f784730fa0919efaa6639440a287deb73cb711e5aae57a @@ -1675,7 +1675,7 @@ F test/upfrom1.test 8cb06689e99cd707d884faa16da0e8eb26ff658bb01c47ddf72fadade666 F test/upfrom2.test 88d39cb755db5789541e645d4e2764abc697a56958f28a3f8451a0e9342bbd6b F test/upfrom3.test 6130f24ebf97f5ea865e5d2a14a2d543fe5428a62e87cc60f62d875e45c1f5f0 F test/upfromfault.test 3a10075a0043f0c4fad6614b2c371f88a8ba5a4acab68b907438413865d6a8d6 -F test/upsert1.test 88f9e258c6a0eeeb85937b08831e8daad440ba41f125af48439e9d33f266fb18 +F test/upsert1.test b0ae2f58680c5205b4bc1cdeed3c3d444057c506f6c44494fa3eac60731d68a2 F test/upsert2.test 9c3cdbb1a890227f6504ce4b0e3de68f4cdfa16bb21d8641208a9239896c5a09 F test/upsert3.test 88d7d590a1948a9cb6eac1b54b0642f67a9f35a1fc0f19b200e97d5d39e3179c F test/upsert4.test 25d2a1da92f149331ae0c51ca6e3eee78189577585eab92de149900d62994fa5 @@ -1934,8 +1934,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 286243f3a49f721b2ed5b278738e9edd8ca0f190abdbec645866bce97fcc7d04 -Q +bb9b1a15f7e80483162049dfd981d059dc69d03348b521f7ac164a8cd3ae3cc4 -R 11b7b358bb4439e3707636b101a10749 +P 734606ea1a42c2e31ea62c114f2480b52182114b6bd87eb2f1145a171daad80f +Q +2f09b51b1ff37bf98f958564cc1224968caa7e33147e6666b5c1ba20b2a7813b +R 5622256169633c4273f028bc7f702bde U drh -Z 0fb17ca5c1175f1d0d4866226b8ef13c +Z dd8e1fa4a4c11d1bda663be0f9f79095 +# Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 679c03f913..b5e2ef7b24 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -734606ea1a42c2e31ea62c114f2480b52182114b6bd87eb2f1145a171daad80f \ No newline at end of file +1f1e0b4e6d3a63fecaef8fafc8374ff17cff6d7af4c03994fa245e9953ee42cb \ No newline at end of file diff --git a/src/insert.c b/src/insert.c index 97205cb2ae..4bd94e486b 100644 --- a/src/insert.c +++ b/src/insert.c @@ -2009,6 +2009,7 @@ void sqlite3GenerateConstraintChecks( if( onError==OE_Replace /* IPK rule is REPLACE */ && onError!=overrideError /* Rules for other constraints are different */ && pTab->pIndex /* There exist other constraints */ + && !upsertIpkDelay /* IPK check already deferred by UPSERT */ ){ ipkTop = sqlite3VdbeAddOp0(v, OP_Goto)+1; VdbeComment((v, "defer IPK REPLACE until last")); @@ -2417,6 +2418,7 @@ void sqlite3GenerateConstraintChecks( if( ipkTop ){ sqlite3VdbeGoto(v, ipkTop); VdbeComment((v, "Do IPK REPLACE")); + assert( ipkBottom>0 ); sqlite3VdbeJumpHere(v, ipkBottom); } diff --git a/test/upsert1.test b/test/upsert1.test index 5250a5d2f5..a321d6171d 100644 --- a/test/upsert1.test +++ b/test/upsert1.test @@ -241,4 +241,18 @@ do_catchsql_test upsert1-1000 { ON CONFLICT(c2) DO UPDATE SET c1 = c0; } {1 {NOT NULL constraint failed: t0.c0}} +# 2021-12-29 forum post https://sqlite.org/forum/forumpost/06b16b8b29f8c8c3 +# By Jingzhou Fu. When there is both an INTEGER PRIMARY KEY ON CONFLICT REPLACE +# and an upsert on a constraint other than the INTEGER PRIMARY KEY, the +# constraint checking logic generates invalid bytecode which might result +# in a NULL pointer dereference. +# +reset_db +do_execsql_test upsert1-1100 { + CREATE TABLE t1(a INTEGER PRIMARY KEY ON CONFLICT REPLACE, b UNIQUE); + INSERT INTO t1(b) VALUES(22); + INSERT INTO t1 VALUES(2,22) ON CONFLICT (b) DO NOTHING; + SELECT * FROM t1; +} {1 22} + finish_test From 7771ab2192420a7a11b8202282c8e3060874c4b2 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Dec 2021 03:22:21 +0000 Subject: [PATCH 08/14] Following a prior error, an ALWAYS() in sqlite3ExprCanBeNull() might be false. dbsqlfuzz 5dbec6678a20e7595a34dfdd869a3b9722b3ca43. FossilOrigin-Name: b33e47709a2eb56b543ee3a34af201cd05e316bde8dcf45cebcf4e157d728508 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 2f128654f4..b71aa965b7 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\sa\stable\shas\san\sINTEGER\sPRIMARY\sKEY\sON\sCONFLICT\sREPLACE\sand\ssome\sother\nuniqueness\sconstraint,\sand\sit\sparticipates\sin\san\supsert\son\sthat\sother\nconstraint,\sensure\sthat\scode\sthat\schecks\sfor\sconflicts\son\sthe\sINTEGER\sPRIMARY\nKEY\sis\swell-formed.\s\sFix\sfor\sthe\sproblem\sreported\sby\n[forum:/forumpost/06b16b8b29f8c8c3|forum\spost\s06b16b8b29f8c8c3]. -D 2021-12-30T03:12:37.060 +C Following\sa\sprior\serror,\san\sALWAYS()\sin\ssqlite3ExprCanBeNull()\smight\sbe\sfalse.\ndbsqlfuzz\s5dbec6678a20e7595a34dfdd869a3b9722b3ca43. +D 2021-12-30T03:22:21.044 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -503,7 +503,7 @@ F src/date.c fa928630fecf1d436cdc7a7a5c950c781709023ca782c21b7a43cc7361a9451e F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 861e08690fcb0f2ee1165eff0060ea8d4f3e2ea10f80dab7d32ad70443a6ff2d F src/delete.c 0c151975fa99560767d7747f9b60543d0093d9f8b89f13d2d6058e9c83ad19e7 -F src/expr.c 4b6dfb224b6234ff4f529023993b503048e1b045ff49cbb911e7d28a28cca795 +F src/expr.c 827179c78d2ca7cc318392811de8151c60eacf7ce804b13e61bb7ef38f954846 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 187b67af20c5795953a592832c5d985e4313fe503ebd8f95e3e9e9ad5a730bb5 F src/func.c 1cfb09d7ffca81238eccefdb0293e1f5b7cfebbd1816dfad5ec6024742a7496b @@ -1934,9 +1934,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 734606ea1a42c2e31ea62c114f2480b52182114b6bd87eb2f1145a171daad80f -Q +2f09b51b1ff37bf98f958564cc1224968caa7e33147e6666b5c1ba20b2a7813b -R 5622256169633c4273f028bc7f702bde +P 1f1e0b4e6d3a63fecaef8fafc8374ff17cff6d7af4c03994fa245e9953ee42cb +Q +4e207401acce1bdc17025f2d55bd94234b435e286cd43e1eda03b6949a2a91d3 +R df7c0c91d41f276842e9a74e954fddd9 U drh -Z dd8e1fa4a4c11d1bda663be0f9f79095 +Z e5b6072860607cbec3e9993396c83b29 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b5e2ef7b24..5860bee257 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1f1e0b4e6d3a63fecaef8fafc8374ff17cff6d7af4c03994fa245e9953ee42cb \ No newline at end of file +b33e47709a2eb56b543ee3a34af201cd05e316bde8dcf45cebcf4e157d728508 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 2a00748846..a51d37a7b7 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2457,7 +2457,7 @@ int sqlite3ExprCanBeNull(const Expr *p){ return ExprHasProperty(p, EP_CanBeNull) || p->y.pTab==0 || /* Reference to column of index on expression */ (p->iColumn>=0 - && ALWAYS(p->y.pTab->aCol!=0) /* Defense against OOM problems */ + && p->y.pTab->aCol!=0 /* Possible due to prior error */ && p->y.pTab->aCol[p->iColumn].notNull==0); default: return 1; From bbefc9e8219fa32f135f9b29ce0cffb4d33a4026 Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Dec 2021 03:56:30 +0000 Subject: [PATCH 09/14] Fix a minor issue in the configure script. FossilOrigin-Name: 0413d37e327525d7747d9f9643eb73197a83d9e810bcdc3e0cd35762a94ba22b --- configure | 40 ++++++++++++++++++++++++++-------------- configure.ac | 11 +++++++++++ manifest | 15 +++++++-------- manifest.uuid | 2 +- 4 files changed, 45 insertions(+), 23 deletions(-) diff --git a/configure b/configure index 788988987f..28b508a051 100755 --- a/configure +++ b/configure @@ -770,6 +770,7 @@ ac_includes_default="\ ac_subst_vars='LTLIBOBJS LIBOBJS BUILD_CFLAGS +AMALGAMATION_LINE_MACROS USE_GCOV OPT_FEATURE_FLAGS HAVE_ZLIB @@ -3937,13 +3938,13 @@ if ${lt_cv_nm_interface+:} false; then : else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:3940: $ac_compile\"" >&5) + (eval echo "\"\$as_me:3941: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:3943: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:3944: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:3946: output\"" >&5) + (eval echo "\"\$as_me:3947: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -5149,7 +5150,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5152 "configure"' > conftest.$ac_ext + echo '#line 5153 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -6674,11 +6675,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6677: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6678: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6681: \$? = $ac_status" >&5 + echo "$as_me:6682: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7013,11 +7014,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7016: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7017: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7020: \$? = $ac_status" >&5 + echo "$as_me:7021: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7118,11 +7119,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7121: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7122: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7125: \$? = $ac_status" >&5 + echo "$as_me:7126: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -7173,11 +7174,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7176: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7177: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7180: \$? = $ac_status" >&5 + echo "$as_me:7181: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -9553,7 +9554,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 9556 "configure" +#line 9557 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -9649,7 +9650,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 9652 "configure" +#line 9653 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11860,6 +11861,17 @@ else fi +######### +# Enable/disabled amalagamation line macros +######## +AMALGAMATION_LINE_MACROS=--linemacros=0 +if test "${amalgamation_line_macros}" = "yes" ; then + AMALGAMATION_LINE_MACROS=--linemacros=1 +fi +if test "${amalgamation_line_macros}" = "no" ; then + AMALGAMATION_LINE_MACROS=--linemacros=0 +fi + ######### # Output the config header diff --git a/configure.ac b/configure.ac index 70664dd411..32fe0d229a 100644 --- a/configure.ac +++ b/configure.ac @@ -791,6 +791,17 @@ else fi AC_SUBST(USE_GCOV) +######### +# Enable/disabled amalagamation line macros +######## +AMALGAMATION_LINE_MACROS=--linemacros=0 +if test "${amalgamation_line_macros}" = "yes" ; then + AMALGAMATION_LINE_MACROS=--linemacros=1 +fi +if test "${amalgamation_line_macros}" = "no" ; then + AMALGAMATION_LINE_MACROS=--linemacros=0 +fi +AC_SUBST(AMALGAMATION_LINE_MACROS) ######### # Output the config header diff --git a/manifest b/manifest index b71aa965b7..ab717b8e63 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Following\sa\sprior\serror,\san\sALWAYS()\sin\ssqlite3ExprCanBeNull()\smight\sbe\sfalse.\ndbsqlfuzz\s5dbec6678a20e7595a34dfdd869a3b9722b3ca43. -D 2021-12-30T03:22:21.044 +C Fix\sa\sminor\sissue\sin\sthe\sconfigure\sscript. +D 2021-12-30T03:56:30.496 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -34,8 +34,8 @@ F autoconf/tea/win/rules.vc c511f222b80064096b705dbeb97060ee1d6b6d63 F config.guess 883205ddf25b46f10c181818bf42c09da9888884af96f79e1719264345053bd6 F config.h.in 6376abec766e9a0785178b1823b5a587e9f1ccbc F config.sub c2d0260f17f3e4bc0b6808fccf1b291cb5e9126c14fc5890efc77b9fd0175559 -F configure c0b18493ed7674901dc6ca07f6badec411faec78f335618a728b1c20ed56408a x -F configure.ac 4e4b58b32f88c8da9914a2f2c3158f80e69907eccc019fcc7e3ba14ffd91c640 +F configure 85be99bde3156905202042b2f292c2acf6eaf3119bbca3058c3007a1b7c85b79 x +F configure.ac c8ba54bac7e73e000acdfef5e394fe21a3876aa09d0f5c07131bf5ac5a525299 F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/F2FS.txt c1d4a0ae9711cfe0e1d8b019d154f1c29e0d3abfe820787ba1e9ed7691160fcd F doc/lemon.html efc0cd2345d66905505d98f862e1c571512def0ceb5b016cb658fd4918eb76a3 @@ -1934,9 +1934,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 1f1e0b4e6d3a63fecaef8fafc8374ff17cff6d7af4c03994fa245e9953ee42cb -Q +4e207401acce1bdc17025f2d55bd94234b435e286cd43e1eda03b6949a2a91d3 -R df7c0c91d41f276842e9a74e954fddd9 +P b33e47709a2eb56b543ee3a34af201cd05e316bde8dcf45cebcf4e157d728508 +R 4e80605c01a2de9eb11cd0893e085b06 U drh -Z e5b6072860607cbec3e9993396c83b29 +Z 0d7fa1ebbc0cdecbad587ee34951d57d # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5860bee257..47cc1bc54a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b33e47709a2eb56b543ee3a34af201cd05e316bde8dcf45cebcf4e157d728508 \ No newline at end of file +0413d37e327525d7747d9f9643eb73197a83d9e810bcdc3e0cd35762a94ba22b \ No newline at end of file From be531827a61fdfef38e553873a02a1a410aa867e Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Dec 2021 11:13:44 +0000 Subject: [PATCH 10/14] Change an assert() in FTS3 into assert_fts3_nc(), since it is a harmless condition that can occur when processing a corrupt database file. FossilOrigin-Name: 35e2b27af7242a3f74b31e0e25a0ea892f6aec66341b9194c0f5957f9d1926bc --- ext/fts3/fts3.c | 2 +- manifest | 13 +++++++------ manifest.uuid | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index d729454634..074123d658 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -4473,7 +4473,7 @@ void sqlite3Fts3DoclistPrev( assert( nDoclist>0 ); assert( *pbEof==0 ); - assert( p || *piDocid==0 ); + assert_fts3_nc( p || *piDocid==0 ); assert( !p || (p>aDoclist && p<&aDoclist[nDoclist]) ); if( p==0 ){ diff --git a/manifest b/manifest index ab717b8e63..fb66c49755 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sminor\sissue\sin\sthe\sconfigure\sscript. -D 2021-12-30T03:56:30.496 +C Change\san\sassert()\sin\sFTS3\sinto\sassert_fts3_nc(),\ssince\sit\sis\sa\sharmless\ncondition\sthat\scan\soccur\swhen\sprocessing\sa\scorrupt\sdatabase\sfile. +D 2021-12-30T11:13:44.239 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -84,7 +84,7 @@ F ext/fts3/README.content b9078d0843a094d86af0d48dffbff13c906702b4c3558012e67b9c F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a F ext/fts3/README.tokenizers b92bdeb8b46503f0dd301d364efc5ef59ef9fa8e2758b8e742f39fa93a2e422d F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d -F ext/fts3/fts3.c da41de21622774b1cb8c3415e8d2a6961ad7c978ab534f2a54434f76a5c4dfbc +F ext/fts3/fts3.c 6bfdc941372ee431e3d362986674a8708eb0e700b28c3d35d46d953a9351155f F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe F ext/fts3/fts3Int.h cff59b8b13dafe9d59924a5d710f771ed8b121a55cccbc99b6e2a723fcde14dc F ext/fts3/fts3_aux.c f0dc9bd98582615b7750218899bd0c729879b6bbf94d1be57ca1833ff49afc6f @@ -1934,8 +1934,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P b33e47709a2eb56b543ee3a34af201cd05e316bde8dcf45cebcf4e157d728508 -R 4e80605c01a2de9eb11cd0893e085b06 +P 0413d37e327525d7747d9f9643eb73197a83d9e810bcdc3e0cd35762a94ba22b +Q +e773d6219bded9a5dfa9930882682dadaa7f1c6be344dbde904c9477a89f2d2c +R d08b440cf09b997cf0a2ac4ea84184a3 U drh -Z 0d7fa1ebbc0cdecbad587ee34951d57d +Z 92b86f3d18a222dca5f5b54143c88a87 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 47cc1bc54a..f25d392dbd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0413d37e327525d7747d9f9643eb73197a83d9e810bcdc3e0cd35762a94ba22b \ No newline at end of file +35e2b27af7242a3f74b31e0e25a0ea892f6aec66341b9194c0f5957f9d1926bc \ No newline at end of file From b484ae62b847f0eafb50efe27d304a656c348ccc Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Dec 2021 11:27:53 +0000 Subject: [PATCH 11/14] Do not attempt to reprepare a prepared statement that returns SQLITE_SCHEMA if there was an OOM. This enhancement supercedes check-in [fee469925231d074]. FossilOrigin-Name: 103f95db3e17d7d021b489c160b84e66c630b4f13516be11d10fffe2b42599fa --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/prepare.c | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index fb66c49755..ec51feef19 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Change\san\sassert()\sin\sFTS3\sinto\sassert_fts3_nc(),\ssince\sit\sis\sa\sharmless\ncondition\sthat\scan\soccur\swhen\sprocessing\sa\scorrupt\sdatabase\sfile. -D 2021-12-30T11:13:44.239 +C Do\snot\sattempt\sto\sreprepare\sa\sprepared\sstatement\sthat\sreturns\sSQLITE_SCHEMA\nif\sthere\swas\san\sOOM.\s\sThis\senhancement\ssupercedes\scheck-in\n[fee469925231d074]. +D 2021-12-30T11:27:53.009 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -546,7 +546,7 @@ F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586 F src/pcache1.c 54881292a9a5db202b2c0ac541c5e3ef9a5e8c4f1c1383adb2601d5499a60e65 F src/pragma.c c536665ce8431c8b1efbf7e0a5c01852f49f7bf28f1954f8118b2d28e4a3797f F src/pragma.h 87330ed2fbfa2a1274de93ca0ab850fba336189228cb256089202c3b52766fad -F src/prepare.c 7520a371f1de8a53e3023eba75bc0d3473196833c6363d285cad8d002eabef0b +F src/prepare.c 40961a1170a4c4151a90dae29dd00fc6c155f1af8246abeeeb8f0a10b3fb9719 F src/printf.c 5901672228f305f7d493cbc4e7d76a61a5caecdbc1cd06b1f9ec42ea4265cf8d F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c F src/resolve.c 4a1db4aadd802683db40ca2dbbb268187bd195f10cbdb7206dbd8ac988795571 @@ -1934,9 +1934,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0413d37e327525d7747d9f9643eb73197a83d9e810bcdc3e0cd35762a94ba22b -Q +e773d6219bded9a5dfa9930882682dadaa7f1c6be344dbde904c9477a89f2d2c -R d08b440cf09b997cf0a2ac4ea84184a3 +P 35e2b27af7242a3f74b31e0e25a0ea892f6aec66341b9194c0f5957f9d1926bc +Q +94fdbeffaf501daf30dc7fae7cef5c2bfdb3a9b055562adfc04374a9fc899c8d +R 2e378f0669170828555bdec2486f2427 U drh -Z 92b86f3d18a222dca5f5b54143c88a87 +Z 842111f4c154d3714cdf1f89ef94ee32 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index f25d392dbd..58ebd4bd82 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -35e2b27af7242a3f74b31e0e25a0ea892f6aec66341b9194c0f5957f9d1926bc \ No newline at end of file +103f95db3e17d7d021b489c160b84e66c630b4f13516be11d10fffe2b42599fa \ No newline at end of file diff --git a/src/prepare.c b/src/prepare.c index 14b5dbad6d..183a749a5f 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -808,6 +808,7 @@ static int sqlite3LockAndPrepare( ** reset is considered a permanent error. */ rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail); assert( rc==SQLITE_OK || *ppStmt==0 ); + if( rc==SQLITE_OK || db->mallocFailed ) break; }while( rc==SQLITE_ERROR_RETRY || (rc==SQLITE_SCHEMA && (sqlite3ResetOneSchema(db,-1), cnt++)==0) ); sqlite3BtreeLeaveAll(db); From 2e4f1fd0f8194715fced74119cd9eeebbd6d489b Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Dec 2021 11:35:38 +0000 Subject: [PATCH 12/14] Fix windowC tests to specify little-endian or big-endian UTF16, for cross-platform portability. [forum post 559b84a5c6|forum:/forumpost/559b84a5c6]. And give the correct prefix to tests in the windowC.test module. FossilOrigin-Name: 8af7cb2a3e7ca778695a7a44359537457bf57dc8bdad9b2b4d20a73385c028d8 --- manifest | 15 ++++++++------- manifest.uuid | 2 +- test/windowC.test | 12 ++++++++++-- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index ec51feef19..84c723d6c3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\sattempt\sto\sreprepare\sa\sprepared\sstatement\sthat\sreturns\sSQLITE_SCHEMA\nif\sthere\swas\san\sOOM.\s\sThis\senhancement\ssupercedes\scheck-in\n[fee469925231d074]. -D 2021-12-30T11:27:53.009 +C Fix\swindowC\stests\sto\sspecify\slittle-endian\sor\sbig-endian\sUTF16,\sfor\scross-platform\sportability.\s[forum\spost\s559b84a5c6|forum:/forumpost/559b84a5c6].\s\sAnd\ngive\sthe\scorrect\sprefix\sto\stests\sin\sthe\swindowC.test\smodule. +D 2021-12-30T11:35:38.305 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1804,7 +1804,7 @@ F test/window8.test 4ab16817414af0c904abe2ebdf88eb6c2b00058b84f9748c6174ff11fc45 F test/window9.test 349c71eab4288a1ffc19e2f65872ec2c37e6cf8a1dda2ad300364b7450ae4836 F test/windowA.test 6d63dc1260daa17141a55007600581778523a8b420629f1282d2acfc36af23be F test/windowB.test b67bda5645f3226790e1a360c4225241840b84adb5aa2e69bfb0b27eef3b84d9 -F test/windowC.test 8799158a2a3ea365980371400f08fd4dff70eadffa5a1e45d42430246da70706 +F test/windowC.test 6fd75f5bb2f1343d34e470e36e68f0ff638d8a42f6aa7d99471261b31a0d42f2 F test/windowerr.tcl f5acd6fbc210d7b5546c0e879d157888455cd4a17a1d3f28f07c1c8a387019e0 F test/windowerr.test a8b752402109c15aa1c5efe1b93ccb0ce1ef84fa964ae1cd6684dd0b3cc1819b F test/windowfault.test 15094c1529424e62f798bc679e3fe9dfab6e8ba2f7dfe8c923b6248c31660a7c @@ -1934,9 +1934,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 35e2b27af7242a3f74b31e0e25a0ea892f6aec66341b9194c0f5957f9d1926bc -Q +94fdbeffaf501daf30dc7fae7cef5c2bfdb3a9b055562adfc04374a9fc899c8d -R 2e378f0669170828555bdec2486f2427 +P 103f95db3e17d7d021b489c160b84e66c630b4f13516be11d10fffe2b42599fa +Q +adf3a1e6f7575964e467f6813ff980e802cf5a37aaa9e1736af702c493f276b1 +Q +fb43456324c26879767b08febf1b5a2b46a289f25398a3872f81d845afd5d84e +R 735729ed1dd528b1833df911de4b51c9 U drh -Z 842111f4c154d3714cdf1f89ef94ee32 +Z 06a68db535c004a4f614268f0fa96a9f # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 58ebd4bd82..bb9dca60be 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -103f95db3e17d7d021b489c160b84e66c630b4f13516be11d10fffe2b42599fa \ No newline at end of file +8af7cb2a3e7ca778695a7a44359537457bf57dc8bdad9b2b4d20a73385c028d8 \ No newline at end of file diff --git a/test/windowC.test b/test/windowC.test index 499c2f50fd..013876f9b3 100644 --- a/test/windowC.test +++ b/test/windowC.test @@ -13,7 +13,7 @@ set testdir [file dirname $argv0] source $testdir/tester.tcl -set testprefix windowB +set testprefix windowC ifcapable !windowfunc { finish_test @@ -67,11 +67,19 @@ foreach {tn bBlob seps} { # reset_db do_execsql_test 2.0 { - PRAGMA encoding=UTF16; + PRAGMA encoding=UTF16le; WITH separator(x) AS (VALUES(',a,'),(',bc,')), value(y) AS (VALUES(1),(x'5585d09013455178cd11ce4a')) SELECT group_concat(y,x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM separator, value; } {{} 1 蕕郐䔓硑ᇍ䫎 1} +reset_db +do_execsql_test 2.1 { + PRAGMA encoding=UTF16be; + WITH separator(x) AS (VALUES(',a,'),(',bc,')), + value(y) AS (VALUES(1),(x'5585d09013455178cd11ce4a')) + SELECT group_concat(y,x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) + FROM separator, value; +} {{} 1 喅킐ፅ典촑칊 1} finish_test From f74840dadb9828ae3fc65acf1ac57c1f477a644a Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Dec 2021 12:26:16 +0000 Subject: [PATCH 13/14] Disable the atoi1.test test module on non-x64 hardware. FossilOrigin-Name: 986a94d036f029539c3bb3873096f4a85ee26fc674f56856c57ca3dfd3bd0f37 --- manifest | 14 ++++++-------- manifest.uuid | 2 +- test/atof1.test | 5 +++++ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 84c723d6c3..c69d9630de 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\swindowC\stests\sto\sspecify\slittle-endian\sor\sbig-endian\sUTF16,\sfor\scross-platform\sportability.\s[forum\spost\s559b84a5c6|forum:/forumpost/559b84a5c6].\s\sAnd\ngive\sthe\scorrect\sprefix\sto\stests\sin\sthe\swindowC.test\smodule. -D 2021-12-30T11:35:38.305 +C Disable\sthe\satoi1.test\stest\smodule\son\snon-x64\shardware. +D 2021-12-30T12:26:16.459 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -689,7 +689,7 @@ F test/async2.test c0a9bd20816d7d6a2ceca7b8c03d3d69c28ffb8b F test/async3.test d73a062002376d7edc1fe3edff493edbec1fc2f7 F test/async4.test 1787e3952128aa10238bf39945126de7ca23685a F test/async5.test 383ab533fdb9f7ad228cc99ee66e1acb34cc0dc0 -F test/atof1.test 10049623e77006691c4c2978c1dc8a3f75276377a53417811aa85bda7493f963 +F test/atof1.test 77e8517df10cb39f2e4e65dbefe1e81c8d8e65f29f68b09265ca6e534c68227e F test/atomic.test 065a453dde33c77ff586d91ccaa6ed419829d492dbb1a5694b8a09f3f9d7d061 F test/atomic2.test b6863b4aa552543874f80b42fb3063f1c8c2e3d8e56b6562f00a3cc347b5c1da F test/atrc.c c388fac43dbba05c804432a7135ae688b32e8f25818e9994ffba4b64cf60c27c @@ -1934,10 +1934,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 103f95db3e17d7d021b489c160b84e66c630b4f13516be11d10fffe2b42599fa -Q +adf3a1e6f7575964e467f6813ff980e802cf5a37aaa9e1736af702c493f276b1 -Q +fb43456324c26879767b08febf1b5a2b46a289f25398a3872f81d845afd5d84e -R 735729ed1dd528b1833df911de4b51c9 +P 8af7cb2a3e7ca778695a7a44359537457bf57dc8bdad9b2b4d20a73385c028d8 +R 6693a475946c1486ee6fea9335c37ae8 U drh -Z 06a68db535c004a4f614268f0fa96a9f +Z fea361e0670d77fc216a84308b91e7a4 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index bb9dca60be..1dbb8ccf85 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8af7cb2a3e7ca778695a7a44359537457bf57dc8bdad9b2b4d20a73385c028d8 \ No newline at end of file +986a94d036f029539c3bb3873096f4a85ee26fc674f56856c57ca3dfd3bd0f37 \ No newline at end of file diff --git a/test/atof1.test b/test/atof1.test index 0505fb2268..a68266c9b1 100644 --- a/test/atof1.test +++ b/test/atof1.test @@ -19,6 +19,11 @@ if {$::longdouble_size<=8} { finish_test return } +if {![info exists tcl_platform(machine)] + || $::tcl_platform(machine)!="x86_64"} { + finish_test + return +} expr srand(1) for {set i 1} {$i<20000} {incr i} { From 57acbb1380e3b51476aa8c71d1a881821f8ad5ff Mon Sep 17 00:00:00 2001 From: drh <> Date: Thu, 30 Dec 2021 15:30:28 +0000 Subject: [PATCH 14/14] Version 3.37.1 FossilOrigin-Name: 378629bf2ea546f73eee84063c5358439a12f7300e433f18c9e1bddd948dea62 --- manifest | 11 +++++++---- manifest.uuid | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/manifest b/manifest index c69d9630de..8c0b0d4a10 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Disable\sthe\satoi1.test\stest\smodule\son\snon-x64\shardware. -D 2021-12-30T12:26:16.459 +C Version\s3.37.1 +D 2021-12-30T15:30:28.342 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1934,8 +1934,11 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 8af7cb2a3e7ca778695a7a44359537457bf57dc8bdad9b2b4d20a73385c028d8 +P 986a94d036f029539c3bb3873096f4a85ee26fc674f56856c57ca3dfd3bd0f37 R 6693a475946c1486ee6fea9335c37ae8 +T +bgcolor * #d0c0ff +T +sym-release * +T +sym-version-3.37.1 * U drh -Z fea361e0670d77fc216a84308b91e7a4 +Z 8f71d7fd3282e6b87441d928ca292620 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 1dbb8ccf85..05414622d6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -986a94d036f029539c3bb3873096f4a85ee26fc674f56856c57ca3dfd3bd0f37 \ No newline at end of file +378629bf2ea546f73eee84063c5358439a12f7300e433f18c9e1bddd948dea62 \ No newline at end of file