mirror of https://github.com/sqlite/sqlite
Do not allow direct access to internal-use SQL functions such as
sqlite_rename_column() and sqlite3_rename_table() except when the new SQLITE_TESTCTRL_INTERNAL_FUNCTIONS flag is set. FossilOrigin-Name: 6e1330545e7b74fe5f1f20751a3425e2788441485fc07fcb7626e448c72027ce
This commit is contained in:
parent
49b269e095
commit
eea8eb6d04
|
@ -471,6 +471,7 @@ TESTSRC2 = \
|
|||
$(TOP)/src/dbstat.c \
|
||||
$(TOP)/src/expr.c \
|
||||
$(TOP)/src/func.c \
|
||||
$(TOP)/src/global.c \
|
||||
$(TOP)/src/insert.c \
|
||||
$(TOP)/src/wal.c \
|
||||
$(TOP)/src/main.c \
|
||||
|
|
1
main.mk
1
main.mk
|
@ -396,6 +396,7 @@ TESTSRC2 = \
|
|||
$(TOP)/src/dbstat.c \
|
||||
$(TOP)/src/expr.c \
|
||||
$(TOP)/src/func.c \
|
||||
$(TOP)/src/global.c \
|
||||
$(TOP)/src/insert.c \
|
||||
$(TOP)/src/wal.c \
|
||||
$(TOP)/src/main.c \
|
||||
|
|
42
manifest
42
manifest
|
@ -1,8 +1,8 @@
|
|||
C Minor\scomment\senhancement\sin\salter.c.\s\sNo\schanges\sto\scode.
|
||||
D 2018-11-26T15:00:25.043
|
||||
C Do\snot\sallow\sdirect\saccess\sto\sinternal-use\sSQL\sfunctions\ssuch\sas\nsqlite_rename_column()\sand\ssqlite3_rename_table()\sexcept\swhen\sthe\nnew\sSQLITE_TESTCTRL_INTERNAL_FUNCTIONS\sflag\sis\sset.
|
||||
D 2018-11-26T18:09:15.177
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F Makefile.in b730006b54c990461d864c5387f2e6f13aadb0236804555fb010ed6865a5f058
|
||||
F Makefile.in 15f0851eb3754e37de848d5f8ab24146cf677b44ac38353a2c23e39c999aa422
|
||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||
F Makefile.msc 071853dfc2148aadaeb7a153b9986cc9d71b7f256874f79b119f97a4c89453f5
|
||||
F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee
|
||||
|
@ -428,7 +428,7 @@ F ext/userauth/userauth.c f81aa5a3ecacf406f170c62a144405858f6f6de51dbdc0920134e6
|
|||
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
||||
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
||||
F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
|
||||
F main.mk ddb6616776c53dfc06bb3f8396df8721c8b699294271fd0c3d110dd278d9c723
|
||||
F main.mk eeaa279fa6acdcfa6555058548075569a06f891fd67f5901b1e7700d18052fda
|
||||
F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
|
||||
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
|
||||
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
|
||||
|
@ -440,7 +440,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca
|
|||
F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
|
||||
F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
|
||||
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
|
||||
F src/alter.c a61ed147e755a6decdffc3e7be2ec64602194ddfc0107227e52a26527928f4a6
|
||||
F src/alter.c f886160da189e4e99093cd5a2aca625652cc9b027d5100b87f81c175d1056387
|
||||
F src/analyze.c 3dc6b98cf007b005af89df165c966baaa48e8124f38c87b4d2b276fe7f0b9eb9
|
||||
F src/attach.c 92b51739a885da8bd84bc9a05485f1e48148bce5c15432f059b45af98fff75cd
|
||||
F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df
|
||||
|
@ -462,7 +462,7 @@ F src/expr.c 9aacc0b72348ba90010b672dcbbbe2fa56e1182043bc917a3a147b2bc57a5497
|
|||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||
F src/fkey.c 972a4ba14296bef2303a0abbad1e3d82bc3c61f9e6ce4e8e9528bdee68748812
|
||||
F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f
|
||||
F src/global.c 9bf034fd560bdd514715170ed8460bb7f823cec113f0569ef3f18a20c7ccd128
|
||||
F src/global.c 8291eee0782b83124de14ec0389ec9fd6ae1873358a6b0d9469fe17a46ad803b
|
||||
F src/hash.c 931ec82d7e070654a8facb42549bbb3a25720171d73ba94c3d3160580d01ef1f
|
||||
F src/hash.h ab34c5c54a9e9de2e790b24349ba5aab3dbb4fd4
|
||||
F src/hwtime.h 747c1bbe9df21a92e9c50f3bbec1de841dc5e5da
|
||||
|
@ -470,7 +470,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
|
|||
F src/insert.c 6b81aae27b196925d8ff78824f4bbd435d6a40cd38dc324685e21735bb402109
|
||||
F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e
|
||||
F src/loadext.c 448eab53ecdb566a1259ee2d45ebff9c0bc4a2cf393774488775c33e4fbe89bf
|
||||
F src/main.c 0efc9f6fba87f7b406135062c9a1f00c5f73487730e38794c698be5f78cfea54
|
||||
F src/main.c 4cfb3913cc9e65d3ac649b1785ac753fc225d29425d5437e012f7eac0cefe0eb
|
||||
F src/malloc.c 07295435093ce354c6d9063ac05a2eeae28bd251d2e63c48b3d67c12c76f7e18
|
||||
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
||||
F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
|
||||
|
@ -499,24 +499,24 @@ F src/parse.y 6840fe7c0b5eb4dd25ee5d075213bc8255ed4c0678d71bfb6744d0520d91c179
|
|||
F src/pcache.c 696a01f1a6370c1b50a09c15972bc3bee3333f8fcd1f2da8e9a76b1b062c59ee
|
||||
F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586
|
||||
F src/pcache1.c 716975564c15eb6679e97f734cec1bfd6c16ac3d4010f05f1f8e509fc7d19880
|
||||
F src/pragma.c a2eab23fbf7c70c28f3a22629de2662d052c22853649430be302b910719574de
|
||||
F src/pragma.c 4e056f042683b99c4ea0db395f68d051b1a95833ab40951c40d3ef7e1fee1354
|
||||
F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13
|
||||
F src/prepare.c f81f8d707e583192c28fea0b2e19385415b7d188123b23f49b038076408d7a69
|
||||
F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381
|
||||
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
|
||||
F src/resolve.c bc8c79e56439b111e7d9415e44940951f7087e9466c3a9d664558ef0faf31073
|
||||
F src/resolve.c 4cfc44def0f0690ceaab8f6481f5d76284d7f9509aab6e218a679b4836a54614
|
||||
F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93
|
||||
F src/select.c 61e867a906f140b73baf4ce7a201ad6dcba30820969f5618ee40e9a0d32c6f5f
|
||||
F src/shell.c.in 6a9d8a56700d136addc14d1cd25863b8112e5c12e1877f373750bda476ff6314
|
||||
F src/sqlite.h.in 61035b527eab8097017ce77180bbfa88d76cd5661aa366c752d0bdc8a60da8d1
|
||||
F src/shell.c.in 482e23a370cbe5b0d4c73a0f0f5fce34f7caa08a14a8d75e12f0225c4e14915c
|
||||
F src/sqlite.h.in cb63bf37ccde7ed391669feb3fa5131ea6ce0d0bd0f5561c295a2faee208bbc5
|
||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||
F src/sqlite3ext.h 960f1b86c3610fa23cb6a267572a97dcf286e77aa0dd3b9b23292ffaa1ea8683
|
||||
F src/sqliteInt.h c10361d952c33521111861ed4b0d625b62ad29b5fc4ee5e296a74cb032dc3cf3
|
||||
F src/sqliteInt.h 1161f7579cdd6217737a66517ef27f4016426603eff492e9b31f45a7d7d4c61f
|
||||
F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
|
||||
F src/status.c 46e7aec11f79dad50965a5ca5fa9de009f7d6bde08be2156f1538a0a296d4d0e
|
||||
F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
|
||||
F src/tclsqlite.c e72862a271348d779672b45a730c33fd0c535e630ff927e8ce4a0c908d1d28c6
|
||||
F src/test1.c b95363b0bc9e1ecc61964ca5a22c137422af4808a54a7bbb1a4f7d6d6257f704
|
||||
F src/test1.c 5390e5afb31fed61f72d0be0cb1b322d198a6e03fc13ff245ae76d17b4dcf2e9
|
||||
F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
|
||||
F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
|
||||
F src/test4.c 18ec393bb4d0ad1de729f0b94da7267270f3d8e6
|
||||
|
@ -603,17 +603,17 @@ F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
|||
F test/aggnested.test 18b00de006597e960a6b27ccec51474ac66cf1070a87c1933e5694dc02190ef1
|
||||
F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
|
||||
F test/all.test 2ecb8bbd52416642e41c9081182a8df05d42c75637afd4488aace78cc4b69e13
|
||||
F test/alter.test 99e72759d48d6531ac2a9f346b4a9b5fe8f89c67a0fa5e916a3990d3b1fe9d09
|
||||
F test/alter.test 93dee7c0ff9106fbd53a8bbf519107904b884050a99c4565412c58c37d68c802
|
||||
F test/alter2.test a966ccfcddf9ce0a4e0e6ff1aca9e6e7948e0e242cd7e43fc091948521807687
|
||||
F test/alter3.test 4d79934d812eaeacc6f22781a080f8cfe012fdc3
|
||||
F test/alter4.test 7e93a21fe131e1dfeb317e90056856f96b10381fc7fe3a05e765569a23400433
|
||||
F test/alterauth.test 63442ba61ceb0c1eeb63aac1f4f5cebfa509d352276059d27106ae256bafc959
|
||||
F test/alterauth2.test c0a1ddf5b93d93cb0d15ba7acaf0c5c6fb515bbe861ede75b2d3fabad33b6499
|
||||
F test/altercol.test 50095d59d07a178a2a6330ec2440b2f1a0b59918364c32d29b8a692f29a97a1a
|
||||
F test/altercol.test 313ed080ed61691c52cd87053129889f71582d6d0efebdd5f3edad2a98c66874
|
||||
F test/alterlegacy.test 82022721ce0de29cedc9a7af63bc9fcc078b0ee000f8283b4b6ea9c3eab2f44b
|
||||
F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74a3fb80c9
|
||||
F test/altermalloc2.test fa7b1c1139ea39b8dec407cf1feb032ca8e0076bd429574969b619175ad0174b
|
||||
F test/altertab.test ebb159e81589919852b2c3af8efbc25e6568bd758892fdc49cdaf1d73d26072f
|
||||
F test/altertab.test 17e46baa6b2234048c91891a303141afceca4da95a36ee1a0a9fec6ccef1f4da
|
||||
F test/altertab2.test 0d64de5632ca5de13b023839cfe5b8952d029e4622befcea1433adaa93883220
|
||||
F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
|
||||
F test/analyze.test 7168c8bffa5d5cbc53c05b7e9c7fcdd24b365a1bc5046ce80c45efa3c02e6b7c
|
||||
|
@ -834,7 +834,7 @@ F test/fallocate.test 07416bd593a116d5893cb244f45a94d5c6fe030561df3bd972e6135f81
|
|||
F test/filectrl.test 6e871c2d35dead1d9a88e176e8d2ca094fec6bb3
|
||||
F test/filefmt.test f393e80c4b8d493b7a7f8f3809a8425bbf4292af1f5140f01cb1427798a2bbd4
|
||||
F test/fkey1.test d11dbb8a93ead9b5c46ae5d02da016d61245d47662fb2d844c99214f6163f768
|
||||
F test/fkey2.test 6206484a0eba570902a1a4d86489df24d0265f6994daebf851861d8f0cf4a27b
|
||||
F test/fkey2.test d35d1c81e7569bdd2b872e91750f7098117d2e8291369f70b7e3d50a0e523dc2
|
||||
F test/fkey3.test 76d475c80b84ee7a5d062e56ccb6ea68882e2b49
|
||||
F test/fkey4.test 86446017011273aad8f9a99c1a65019e7bd9ca9d
|
||||
F test/fkey5.test 24dd28eb3d9f1b5a174f47e9899ace5facb08373a4223593c8c631e6cf9f7d5a
|
||||
|
@ -1669,7 +1669,7 @@ F test/with4.test 257be66c0c67fee1defbbac0f685c3465e2cad037f21ce65f23f86084f1982
|
|||
F test/withM.test 693b61765f2b387b5e3e24a4536e2e82de15ff64
|
||||
F test/without_rowid1.test 533add9100255e4cc430d371b3ecfb79f11f956b86c3a1b9d34413bf8e482d8f
|
||||
F test/without_rowid2.test af260339f79d13cb220288b67cd287fbcf81ad99
|
||||
F test/without_rowid3.test e1bb85362d9b7b63ea2b93c433bb2923fff8badb98e463474365531c1cd5f880
|
||||
F test/without_rowid3.test ea4b59dd1b0d7f5f5e4b7cca978cdb905752a9d7c57dc4344a591dba765a3691
|
||||
F test/without_rowid4.test 4e08bcbaee0399f35d58b5581881e7a6243d458a
|
||||
F test/without_rowid5.test 89b1c587bd92a0590e440da33e7666bf4891572a
|
||||
F test/without_rowid6.test 1f99644e6508447fb050f73697350c7ceca3392e
|
||||
|
@ -1778,7 +1778,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 773c5c1d9c0ec40c51949c38c9dc17e778086f3f92791cca9b85288de0076dab
|
||||
R bd1cce260bf92d4e4c6a5defd366f276
|
||||
P 12920bcb99b25e147e1877ee001bc551a743e3530c954fe2b45a18a4eef9eeff
|
||||
R 734cdae4ed46e5a1c91537ccdb311830
|
||||
U drh
|
||||
Z b5887b5598774ae88d83c7acee12bcb5
|
||||
Z f1fd1e821045e43bc79e2f50ef188d8d
|
||||
|
|
|
@ -1 +1 @@
|
|||
12920bcb99b25e147e1877ee001bc551a743e3530c954fe2b45a18a4eef9eeff
|
||||
6e1330545e7b74fe5f1f20751a3425e2788441485fc07fcb7626e448c72027ce
|
17
src/alter.c
17
src/alter.c
|
@ -1188,15 +1188,8 @@ static void renameParseCleanup(Parse *pParse){
|
|||
** into zNew. The name should be quoted if bQuote is true.
|
||||
**
|
||||
** This function is used internally by the ALTER TABLE RENAME COLUMN command.
|
||||
** Though accessible to application code, it is not intended for use by
|
||||
** applications. The existance of this function, and the way it works,
|
||||
** is subject to change without notice.
|
||||
**
|
||||
** If any of the parameters are out-of-bounds, then simply return NULL.
|
||||
** An out-of-bounds parameter can only occur when the application calls
|
||||
** this function directly. The parameters will always be well-formed when
|
||||
** this routine is invoked by the bytecode for a legitimate ALTER TABLE
|
||||
** statement.
|
||||
** It is only accessible to SQL created using sqlite3NestedParse(). It is
|
||||
** not reachable from ordinary SQL passed into sqlite3_prepare().
|
||||
*/
|
||||
static void renameColumnFunc(
|
||||
sqlite3_context *context,
|
||||
|
@ -1604,9 +1597,9 @@ static void renameTableTest(
|
|||
*/
|
||||
void sqlite3AlterFunctions(void){
|
||||
static FuncDef aAlterTableFuncs[] = {
|
||||
FUNCTION(sqlite_rename_column, 9, 0, 0, renameColumnFunc),
|
||||
FUNCTION(sqlite_rename_table, 7, 0, 0, renameTableFunc),
|
||||
FUNCTION(sqlite_rename_test, 5, 0, 0, renameTableTest),
|
||||
INTERNAL_FUNCTION(sqlite_rename_column, 9, renameColumnFunc),
|
||||
INTERNAL_FUNCTION(sqlite_rename_table, 7, renameTableFunc),
|
||||
INTERNAL_FUNCTION(sqlite_rename_test, 5, renameTableTest),
|
||||
};
|
||||
sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs));
|
||||
}
|
||||
|
|
|
@ -240,6 +240,7 @@ SQLITE_WSD struct Sqlite3Config sqlite3Config = {
|
|||
0, /* xTestCallback */
|
||||
#endif
|
||||
0, /* bLocaltimeFault */
|
||||
0, /* bInternalFunctions */
|
||||
0x7ffffffe, /* iOnceResetThreshold */
|
||||
SQLITE_DEFAULT_SORTERREF_SIZE /* szSorterRef */
|
||||
};
|
||||
|
|
17
src/main.c
17
src/main.c
|
@ -3953,15 +3953,26 @@ int sqlite3_test_control(int op, ...){
|
|||
|
||||
/* sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
|
||||
**
|
||||
** If parameter onoff is non-zero, configure the wrappers so that all
|
||||
** subsequent calls to localtime() and variants fail. If onoff is zero,
|
||||
** undo this setting.
|
||||
** If parameter onoff is non-zero, subsequent calls to localtime()
|
||||
** and its variants fail. If onoff is zero, undo this setting.
|
||||
*/
|
||||
case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
|
||||
sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int);
|
||||
break;
|
||||
}
|
||||
|
||||
/* sqlite3_test_control(SQLITE_TESTCTRL_INTERNAL_FUNCS, int onoff);
|
||||
**
|
||||
** If parameter onoff is non-zero, internal-use-only SQL functions
|
||||
** are visible to ordinary SQL. This is useful for testing but is
|
||||
** unsafe because invalid parameters to those internal-use-only functions
|
||||
** can result in crashes or segfaults.
|
||||
*/
|
||||
case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: {
|
||||
sqlite3GlobalConfig.bInternalFunctions = va_arg(ap, int);
|
||||
break;
|
||||
}
|
||||
|
||||
/* sqlite3_test_control(SQLITE_TESTCTRL_NEVER_CORRUPT, int);
|
||||
**
|
||||
** Set or clear a flag that indicates that the database file is always well-
|
||||
|
|
|
@ -1239,6 +1239,7 @@ void sqlite3Pragma(
|
|||
pParse->nMem = 2;
|
||||
for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
|
||||
for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
|
||||
if( p->funcFlags & SQLITE_FUNC_INTERNAL ) continue;
|
||||
sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -771,6 +771,15 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
|
|||
notValid(pParse, pNC, "non-deterministic functions",
|
||||
NC_IdxExpr|NC_PartIdx);
|
||||
}
|
||||
if( (pDef->funcFlags & SQLITE_FUNC_INTERNAL)!=0
|
||||
&& pParse->nested==0
|
||||
&& sqlite3Config.bInternalFunctions==0
|
||||
){
|
||||
/* Internal-use-only functions are disallowed unless the
|
||||
** SQL is being compiled using sqlite3NestedParse() */
|
||||
no_such_func = 1;
|
||||
pDef = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if( 0==IN_RENAME_OBJECT ){
|
||||
|
|
|
@ -7677,6 +7677,7 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||
{ "byteorder", SQLITE_TESTCTRL_BYTEORDER, "" },
|
||||
/*{ "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, "" }, */
|
||||
{ "imposter", SQLITE_TESTCTRL_IMPOSTER, "SCHEMA ON/OFF ROOTPAGE"},
|
||||
{ "internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, "BOOLEAN" },
|
||||
{ "localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,"BOOLEAN" },
|
||||
{ "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT, "BOOLEAN" },
|
||||
{ "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS, "DISABLE-MASK" },
|
||||
|
@ -7771,6 +7772,7 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||
/* sqlite3_test_control(int, int) */
|
||||
case SQLITE_TESTCTRL_ASSERT:
|
||||
case SQLITE_TESTCTRL_ALWAYS:
|
||||
case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS:
|
||||
if( nArg==3 ){
|
||||
int opt = booleanValue(azArg[2]);
|
||||
rc2 = sqlite3_test_control(testctrl, opt);
|
||||
|
|
|
@ -7242,6 +7242,7 @@ int sqlite3_test_control(int op, ...);
|
|||
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
|
||||
#define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */
|
||||
#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
|
||||
#define SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 17
|
||||
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
|
||||
#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
|
||||
#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19
|
||||
|
|
|
@ -1683,8 +1683,9 @@ struct FuncDestructor {
|
|||
** single query - might change over time */
|
||||
#define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */
|
||||
#define SQLITE_FUNC_OFFSET 0x8000 /* Built-in sqlite_offset() function */
|
||||
#define SQLITE_FUNC_WINDOW 0x10000 /* Built-in window-only function */
|
||||
#define SQLITE_FUNC_WINDOW_SIZE 0x20000 /* Requires partition size as arg. */
|
||||
#define SQLITE_FUNC_WINDOW 0x00010000 /* Built-in window-only function */
|
||||
#define SQLITE_FUNC_WINDOW_SIZE 0x20000 /* Requires partition size as arg. */
|
||||
#define SQLITE_FUNC_INTERNAL 0x00040000 /* For use by NestedParse() only */
|
||||
|
||||
/*
|
||||
** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
|
||||
|
@ -1760,10 +1761,13 @@ struct FuncDestructor {
|
|||
#define AGGREGATE2(zName, nArg, arg, nc, xStep, xFinal, extraFlags) \
|
||||
{nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|extraFlags, \
|
||||
SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,xFinal,0,#zName, {0}}
|
||||
|
||||
#define WAGGREGATE(zName, nArg, arg, nc, xStep, xFinal, xValue, xInverse, f) \
|
||||
{nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|f, \
|
||||
SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,xValue,xInverse,#zName, {0}}
|
||||
#define INTERNAL_FUNCTION(zName, nArg, xFunc) \
|
||||
{nArg, SQLITE_FUNC_INTERNAL|SQLITE_UTF8|SQLITE_FUNC_CONSTANT, \
|
||||
0, 0, xFunc, 0, 0, 0, #zName, {0} }
|
||||
|
||||
|
||||
/*
|
||||
** All current savepoints are stored in a linked list starting at
|
||||
|
@ -3414,6 +3418,7 @@ struct Sqlite3Config {
|
|||
int (*xTestCallback)(int); /* Invoked by sqlite3FaultSim() */
|
||||
#endif
|
||||
int bLocaltimeFault; /* True to fail localtime() calls */
|
||||
int bInternalFunctions; /* Internal SQL functions are visible */
|
||||
int iOnceResetThreshold; /* When to reset OP_Once counters */
|
||||
u32 szSorterRef; /* Min size in bytes to use sorter-refs */
|
||||
};
|
||||
|
|
17
src/test1.c
17
src/test1.c
|
@ -6329,7 +6329,7 @@ static int SQLITE_TCLAPI reset_prng_state(
|
|||
/*
|
||||
** tclcmd: database_may_be_corrupt
|
||||
**
|
||||
** Indicate that database files might be corrupt. In other words, set the normal
|
||||
** Indicate that database files might be corrupt. In other words, set the normal
|
||||
** state of operation.
|
||||
*/
|
||||
static int SQLITE_TCLAPI database_may_be_corrupt(
|
||||
|
@ -6344,8 +6344,9 @@ static int SQLITE_TCLAPI database_may_be_corrupt(
|
|||
/*
|
||||
** tclcmd: database_never_corrupt
|
||||
**
|
||||
** Indicate that database files are always well-formed. This enables extra assert()
|
||||
** statements that test conditions that are always true for well-formed databases.
|
||||
** Indicate that database files are always well-formed. This enables
|
||||
** extra assert() statements that test conditions that are always true
|
||||
** for well-formed databases.
|
||||
*/
|
||||
static int SQLITE_TCLAPI database_never_corrupt(
|
||||
ClientData clientData, /* Pointer to sqlite3_enable_XXX function */
|
||||
|
@ -6711,9 +6712,10 @@ static int SQLITE_TCLAPI test_test_control(
|
|||
const char *zName;
|
||||
int i;
|
||||
} aVerb[] = {
|
||||
{ "SQLITE_TESTCTRL_LOCALTIME_FAULT", SQLITE_TESTCTRL_LOCALTIME_FAULT },
|
||||
{ "SQLITE_TESTCTRL_SORTER_MMAP", SQLITE_TESTCTRL_SORTER_MMAP },
|
||||
{ "SQLITE_TESTCTRL_IMPOSTER", SQLITE_TESTCTRL_IMPOSTER },
|
||||
{ "SQLITE_TESTCTRL_LOCALTIME_FAULT", SQLITE_TESTCTRL_LOCALTIME_FAULT },
|
||||
{ "SQLITE_TESTCTRL_SORTER_MMAP", SQLITE_TESTCTRL_SORTER_MMAP },
|
||||
{ "SQLITE_TESTCTRL_IMPOSTER", SQLITE_TESTCTRL_IMPOSTER },
|
||||
{ "SQLITE_TESTCTRL_INTERNAL_FUNCTIONS", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS},
|
||||
};
|
||||
int iVerb;
|
||||
int iFlag;
|
||||
|
@ -6731,6 +6733,7 @@ static int SQLITE_TCLAPI test_test_control(
|
|||
|
||||
iFlag = aVerb[iVerb].i;
|
||||
switch( iFlag ){
|
||||
case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS:
|
||||
case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
|
||||
int val;
|
||||
if( objc!=3 ){
|
||||
|
@ -6738,7 +6741,7 @@ static int SQLITE_TCLAPI test_test_control(
|
|||
return TCL_ERROR;
|
||||
}
|
||||
if( Tcl_GetBooleanFromObj(interp, objv[2], &val) ) return TCL_ERROR;
|
||||
sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, val);
|
||||
sqlite3_test_control(iFlag, val);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -684,6 +684,7 @@ do_test alter-8.2 {
|
|||
# alter-9.X - Special test: Make sure the sqlite_rename_column() and
|
||||
# rename_table() functions do not crash when handed bad input.
|
||||
#
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_test alter-9.1 {
|
||||
execsql {SELECT SQLITE_RENAME_COLUMN(0,0,0,0,0,0,0,0,0)}
|
||||
} {{}}
|
||||
|
@ -696,6 +697,14 @@ foreach {tn sql} {
|
|||
catch { execsql $sql }
|
||||
} 1
|
||||
}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
|
||||
# If the INTERNAL_FUNCTIONS test-control is disabled (which is the default),
|
||||
# then the sqlite_rename_table() SQL function is not accessible to ordinary SQL.
|
||||
#
|
||||
do_catchsql_test alter-9.3 {
|
||||
SELECT sqlite_rename_table(0,0,0,0,0,0,0);
|
||||
} {1 {no such function: sqlite_rename_table}}
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
# alter-10.X - Make sure ALTER TABLE works with multi-byte UTF-8 characters
|
||||
|
|
|
@ -618,6 +618,7 @@ foreach {tn trigger error} {
|
|||
#-------------------------------------------------------------------------
|
||||
# Passing invalid parameters directly to sqlite_rename_column().
|
||||
#
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_execsql_test 14.1 {
|
||||
CREATE TABLE ddd(sql, type, object, db, tbl, icol, znew, bquote);
|
||||
INSERT INTO ddd VALUES(
|
||||
|
@ -640,6 +641,15 @@ do_execsql_test 14.2 {
|
|||
sqlite_rename_column(sql, type, object, db, tbl, icol, znew, bquote, 0)
|
||||
FROM ddd;
|
||||
} {{} {} {} {}}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
|
||||
# If the INTERNAL_FUNCTIONS test-control is disabled (which is the default)
|
||||
# then the sqlite_rename_table() SQL function is not accessible to
|
||||
# ordinary SQL.
|
||||
#
|
||||
do_catchsql_test 14.3 {
|
||||
SELECT sqlite_rename_column(0,0,0,0,0,0,0,0,0);
|
||||
} {1 {no such function: sqlite_rename_column}}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
|
|
@ -240,11 +240,13 @@ ifcapable vtab {
|
|||
);
|
||||
} {}
|
||||
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_execsql_test 7.2 {
|
||||
SELECT
|
||||
sqlite_rename_table(db, 0, 0, sql, zOld, zNew, bTemp)
|
||||
FROM ddd;
|
||||
} {{} {} {}}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
|
|
@ -987,6 +987,7 @@ ifcapable altertable {
|
|||
'main', 'table', 't1', $zCreate, $zOld, $zNew, 0
|
||||
)}
|
||||
}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_test fkey2-14.2.1.1 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
|
@ -996,6 +997,7 @@ ifcapable altertable {
|
|||
do_test fkey2-14.2.1.3 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
|
||||
# Test ALTER TABLE RENAME TABLE a bit.
|
||||
#
|
||||
|
@ -1068,6 +1070,7 @@ ifcapable altertable {
|
|||
}
|
||||
} {{CREATE TABLE t2(a, b, c REFERENCES t1, d DEFAULT NULL REFERENCES t1, e REFERENCES t1 DEFAULT NULL, h DEFAULT 'text' REFERENCES t1)}}
|
||||
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_test fkey2-14.2tmp.1.1 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
|
@ -1077,6 +1080,7 @@ ifcapable altertable {
|
|||
do_test fkey2-14.2tmp.1.3 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
|
||||
# Test ALTER TABLE RENAME TABLE a bit.
|
||||
#
|
||||
|
@ -1150,6 +1154,7 @@ ifcapable altertable {
|
|||
}
|
||||
} {{CREATE TABLE t2(a, b, c REFERENCES t1, d DEFAULT NULL REFERENCES t1, e REFERENCES t1 DEFAULT NULL, h DEFAULT 'text' REFERENCES t1)}}
|
||||
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_test fkey2-14.2aux.1.1 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
|
@ -1159,6 +1164,7 @@ ifcapable altertable {
|
|||
do_test fkey2-14.2aux.1.3 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
|
||||
# Test ALTER TABLE RENAME TABLE a bit.
|
||||
#
|
||||
|
|
|
@ -953,6 +953,7 @@ ifcapable altertable {
|
|||
'main', 'table', 't1', $zCreate, $zOld, $zNew, 0
|
||||
)}
|
||||
}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_test without_rowid3-14.2.1.1 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
|
@ -962,6 +963,7 @@ ifcapable altertable {
|
|||
do_test without_rowid3-14.2.1.3 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
|
||||
# Test ALTER TABLE RENAME TABLE a bit.
|
||||
#
|
||||
|
@ -1037,6 +1039,7 @@ ifcapable altertable {
|
|||
}
|
||||
} {{CREATE TABLE t2(a, b, c REFERENCES t1, d DEFAULT NULL REFERENCES t1, e REFERENCES t1 DEFAULT NULL, h DEFAULT 'text' REFERENCES t1)}}
|
||||
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_test without_rowid3-14.2tmp.1.1 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
|
@ -1046,6 +1049,7 @@ ifcapable altertable {
|
|||
do_test without_rowid3-14.2tmp.1.3 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
|
||||
# Test ALTER TABLE RENAME TABLE a bit.
|
||||
#
|
||||
|
@ -1122,6 +1126,7 @@ ifcapable altertable {
|
|||
}
|
||||
} {{CREATE TABLE t2(a, b, c REFERENCES t1, d DEFAULT NULL REFERENCES t1, e REFERENCES t1 DEFAULT NULL, h DEFAULT 'text' REFERENCES t1)}}
|
||||
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 1
|
||||
do_test without_rowid3-14.2aux.1.1 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES t2)} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
|
@ -1131,6 +1136,7 @@ ifcapable altertable {
|
|||
do_test without_rowid3-14.2aux.1.3 {
|
||||
test_rename_parent {CREATE TABLE t1(a REFERENCES "t2")} t2 t3
|
||||
} {{CREATE TABLE t1(a REFERENCES "t3")}}
|
||||
sqlite3_test_control SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 0
|
||||
|
||||
# Test ALTER TABLE RENAME TABLE a bit.
|
||||
#
|
||||
|
|
Loading…
Reference in New Issue