Have the dbstat module dequote any argument passed to the CREATE VIRTUAL TABLE statement before attempting to match it against the names of attached databases.

FossilOrigin-Name: e60461e984b8df09256bb0d733dbfae52568a145
This commit is contained in:
dan 2016-01-22 15:44:07 +00:00
parent d7d305a25a
commit b5c557b87e
4 changed files with 80 additions and 10 deletions

View File

@ -1,5 +1,5 @@
C Enable\sFTS4\swhen\sbuilding\sthe\sshell\swith\sthe\sMSVC\smakefile.
D 2016-01-22T04:22:36.961
C Have\sthe\sdbstat\smodule\sdequote\sany\sargument\spassed\sto\sthe\sCREATE\sVIRTUAL\sTABLE\sstatement\sbefore\sattempting\sto\smatch\sit\sagainst\sthe\snames\sof\sattached\sdatabases.
D 2016-01-22T15:44:07.317
F Makefile.in 027c1603f255390c43a426671055a31c0a65fdb4
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc d2b93511a969c0c8fcf52aeb5e426571e8c610d2
@ -296,7 +296,7 @@ F src/callback.c 29ae4faba226c7ebb9aee93016b5ce8a8f071261
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
F src/date.c 997651e3ee6c2818fbf7fcdb7156cef9eb3ece20
F src/dbstat.c ffd63fc8ba7541476ced189b95e95d7f2bc63f78
F src/dbstat.c d33af6b426449d7bfd5b3d9f77911c20d1c8abdc
F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da
F src/expr.c df0d7c3230d59abd679da22ff5ce4cfd0e3a0e63
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
@ -1052,7 +1052,7 @@ F test/spellfix3.test f7bf7b3482971473d32b6b00f6944c5c066cff97
F test/sqldiff1.test 8f6bc7c6a5b3585d350d779c6078869ba402f8f5
F test/sqllimits1.test a74ee2a3740b9f9c2437c246d8fb77354862a142
F test/sqllog.test a8faa2df39610a037dd372ed872d124260d32953
F test/stat.test 8de91498c99f5298b303f70f1d1f3b9557af91bf
F test/stat.test fafe6e82dfdb97d8c8be31cd83e36e973079ce0f
F test/statfault.test f525a7bf633e50afd027700e9a486090684b1ac1
F test/stmt.test 25d64e3dbf9a3ce89558667d7f39d966fe2a71b9
F test/subquery.test d7268d193dd33d5505df965399d3a594e76ae13f
@ -1419,7 +1419,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P 67625b963a6f5a0c6dff1a04a323e693569c2d94
R a9194694e295a05f59bbd77f1c470bc0
U mistachkin
Z bf1c280948a8257fdbbacb5c97da93b0
P e4c07df557cd50786b05eecf011bf94708e6e31b
R ccbd95b5668f9b5a41b204404932d800
U dan
Z ad5fc4f27f7e976928da8b4460d48d82

View File

@ -1 +1 @@
e4c07df557cd50786b05eecf011bf94708e6e31b
e60461e984b8df09256bb0d733dbfae52568a145

View File

@ -149,7 +149,11 @@ static int statConnect(
int iDb;
if( argc>=4 ){
iDb = sqlite3FindDbName(db, argv[3]);
char *zDb = sqlite3DbStrDup(db, argv[3]);
if( zDb==0 ) return SQLITE_NOMEM;
sqlite3Dequote(zDb);
iDb = sqlite3FindDbName(db, zDb);
sqlite3DbFree(db, zDb);
if( iDb<0 ){
*pzErr = sqlite3_mprintf("no such database: %s", argv[3]);
return SQLITE_ERROR;

View File

@ -14,6 +14,7 @@
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix stat
ifcapable !vtab||!compound {
finish_test
@ -184,4 +185,69 @@ do_catchsql_test stat-6.1 {
CREATE VIRTUAL TABLE temp.s2 USING dbstat(mainx);
} {1 {no such database: mainx}}
#-------------------------------------------------------------------------
# Test that the argument passed to the dbstat constructor is dequoted
# before it is matched against the names of attached databases.
#
forcedelete test.db2
do_execsql_test 7.1 {
ATTACH 'test.db2' AS '123';
CREATE TABLE "123".x1(a, b);
INSERT INTO x1 VALUES(1, 2);
}
do_execsql_test 7.1.1 {
SELECT * FROM dbstat('123');
} {
sqlite_master / 1 leaf 1 37 875 37 0 1024
x1 / 2 leaf 1 4 1008 4 1024 1024
}
do_execsql_test 7.1.2 {
SELECT * FROM dbstat(123);
} {
sqlite_master / 1 leaf 1 37 875 37 0 1024
x1 / 2 leaf 1 4 1008 4 1024 1024
}
do_execsql_test 7.1.3 {
CREATE VIRTUAL TABLE x2 USING dbstat('123');
SELECT * FROM x2;
} {
sqlite_master / 1 leaf 1 37 875 37 0 1024
x1 / 2 leaf 1 4 1008 4 1024 1024
}
do_execsql_test 7.1.4 {
CREATE VIRTUAL TABLE x3 USING dbstat(123);
SELECT * FROM x3;
} {
sqlite_master / 1 leaf 1 37 875 37 0 1024
x1 / 2 leaf 1 4 1008 4 1024 1024
}
do_execsql_test 7.2 {
DETACH 123;
DROP TABLE x2;
DROP TABLE x3;
ATTACH 'test.db2' AS '123corp';
}
do_execsql_test 7.2.1 {
SELECT * FROM dbstat('123corp');
} {
sqlite_master / 1 leaf 1 37 875 37 0 1024
x1 / 2 leaf 1 4 1008 4 1024 1024
}
do_catchsql_test 7.2.2 {
SELECT * FROM dbstat(123corp);
} {1 {unrecognized token: "123corp"}}
do_execsql_test 7.2.3 {
CREATE VIRTUAL TABLE x2 USING dbstat('123corp');
SELECT * FROM x2;
} {
sqlite_master / 1 leaf 1 37 875 37 0 1024
x1 / 2 leaf 1 4 1008 4 1024 1024
}
do_catchsql_test 7.2.4 {
CREATE VIRTUAL TABLE x3 USING dbstat(123corp);
SELECT * FROM x3;
} {1 {unrecognized token: "123corp"}}
finish_test