mirror of https://github.com/sqlite/sqlite
Fix a problem with creating virtual table with names specified using malformed utf-8 within utf-16 databases.
FossilOrigin-Name: 9969cff2d0553c9bfa88a437e1bb0cc4200d49d7
This commit is contained in:
parent
b7134d0863
commit
7377945a7b
16
manifest
16
manifest
|
@ -1,5 +1,5 @@
|
|||
C Fix\san\sFTS3/4\sproblem\swith\shandling\sempty\stokenizer\sdeclarations\s(e.g.\s"CREATE\sVIRTUAL\sTABLE\st(tokenize=);").
|
||||
D 2015-03-19T16:25:42.953
|
||||
C Fix\sa\sproblem\swith\screating\svirtual\stable\swith\snames\sspecified\susing\smalformed\sutf-8\swithin\sutf-16\sdatabases.
|
||||
D 2015-03-19T18:56:17.585
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 88a3e6261286db378fdffa1124cad11b3c05f5bb
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
|
@ -293,7 +293,7 @@ F src/update.c 3c4ecc282accf12d39edb8d524cf089645e55a13
|
|||
F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
|
||||
F src/util.c 98a7627ca48ad3265b6940915a1d08355eb3fc7e
|
||||
F src/vacuum.c 9460b9de7b2d4e34b0d374894aa6c8a0632be8ec
|
||||
F src/vdbe.c a2725107658fd9572637e8e09d46dcfe851edb96
|
||||
F src/vdbe.c 33f8e0b1bc928bf7a38526c4e58e0404617b09b9
|
||||
F src/vdbe.h 6fc69d9c5e146302c56e163cb4b31d1ee64a18c3
|
||||
F src/vdbeInt.h bb56fd199d8af1a2c1b9639ee2f70724b4338e3a
|
||||
F src/vdbeapi.c 583d56b129dd27f12bed518270de9ebe521e6a75
|
||||
|
@ -302,7 +302,7 @@ F src/vdbeblob.c 4f2e8e075d238392df98c5e03a64342465b03f90
|
|||
F src/vdbemem.c c0dc81285b7571b0a31c40f17846fe2397ec1cd9
|
||||
F src/vdbesort.c 919717d7599fa31d343ec28bffd0f9e91a4ff5f6
|
||||
F src/vdbetrace.c 7e4222955e07dd707a2f360c0eb73452be1cb010
|
||||
F src/vtab.c 699f2b8d509cfe379c33dde33827875d5b030e01
|
||||
F src/vtab.c 1680f58978ae014a331d99b4c87316d079056c5e
|
||||
F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
|
||||
F src/wal.c 878c8e1a51cb2ec45c395d26b7d5cd9e1a098e4a
|
||||
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
||||
|
@ -1112,7 +1112,7 @@ F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102
|
|||
F test/veryquick.test 57ab846bacf7b90cf4e9a672721ea5c5b669b661
|
||||
F test/view.test f311691d696a5cc27e3c1b875cec1b0866b4ccd9
|
||||
F test/vtab1.test 1cef14310144718812351a61c5cfb4ba8494a171
|
||||
F test/vtab2.test 7bcffc050da5c68f4f312e49e443063e2d391c0d
|
||||
F test/vtab2.test 366256bee644d034cbe078fbe1ec5bbe6b13fe42
|
||||
F test/vtab3.test b45f47d20f225ccc9c28dc915d92740c2dee311e
|
||||
F test/vtab4.test 942f8b8280b3ea8a41dae20e7822d065ca1cb275
|
||||
F test/vtab5.test 889f444970393c73f1e077e2bdc5d845e157a391
|
||||
|
@ -1246,7 +1246,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
|||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P ad4b19d2ac0889a23fe3b0fd844286efc10cdd82
|
||||
R c1e92c20bf07c55ca3aab820a2e7d65e
|
||||
P 26d2def8a53094356008861636d66f9ae8f2448a
|
||||
R d2ae591b867dc2d251eb915bd9224363
|
||||
U dan
|
||||
Z b1c155f5360e29835532ab6770165b81
|
||||
Z 0a1bb76f793e7ed736ebaafb02806892
|
||||
|
|
|
@ -1 +1 @@
|
|||
26d2def8a53094356008861636d66f9ae8f2448a
|
||||
9969cff2d0553c9bfa88a437e1bb0cc4200d49d7
|
16
src/vdbe.c
16
src/vdbe.c
|
@ -6009,13 +6009,21 @@ case OP_VBegin: {
|
|||
#endif /* SQLITE_OMIT_VIRTUALTABLE */
|
||||
|
||||
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
||||
/* Opcode: VCreate P1 * * P4 *
|
||||
/* Opcode: VCreate P1 P2 * * *
|
||||
**
|
||||
** P4 is the name of a virtual table in database P1. Call the xCreate method
|
||||
** for that table.
|
||||
** P2 is a register that holds the name of a virtual table in database
|
||||
** P1. Call the xCreate method for that table.
|
||||
*/
|
||||
case OP_VCreate: {
|
||||
rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg);
|
||||
Mem sMem; /* For storing the record being decoded */
|
||||
memset(&sMem, 0, sizeof(sMem));
|
||||
sMem.db = db;
|
||||
rc = sqlite3VdbeMemCopy(&sMem, &aMem[pOp->p2]);
|
||||
if( rc==SQLITE_OK ){
|
||||
const char *zTab = (const char*)sqlite3_value_text(&sMem);
|
||||
rc = sqlite3VtabCallCreate(db, pOp->p1, zTab, &p->zErrMsg);
|
||||
}
|
||||
sqlite3VdbeMemRelease(&sMem);
|
||||
break;
|
||||
}
|
||||
#endif /* SQLITE_OMIT_VIRTUALTABLE */
|
||||
|
|
|
@ -389,6 +389,7 @@ void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){
|
|||
char *zStmt;
|
||||
char *zWhere;
|
||||
int iDb;
|
||||
int iReg;
|
||||
Vdbe *v;
|
||||
|
||||
/* Compute the complete text of the CREATE VIRTUAL TABLE statement */
|
||||
|
@ -423,8 +424,10 @@ void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){
|
|||
sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
|
||||
zWhere = sqlite3MPrintf(db, "name='%q' AND type='table'", pTab->zName);
|
||||
sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
|
||||
sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0,
|
||||
pTab->zName, sqlite3Strlen30(pTab->zName) + 1);
|
||||
|
||||
iReg = ++pParse->nMem;
|
||||
sqlite3VdbeAddOp4(v, OP_String8, 0, iReg, 0, pTab->zName, 0);
|
||||
sqlite3VdbeAddOp2(v, OP_VCreate, iDb, iReg);
|
||||
}
|
||||
|
||||
/* If we are rereading the sqlite_master table create the in-memory
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
#***********************************************************************
|
||||
# This file implements regression tests for SQLite library.
|
||||
#
|
||||
# $Id: vtab2.test,v 1.9 2008/10/13 10:37:50 danielk1977 Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
set testprefix vtab2
|
||||
|
||||
ifcapable !vtab||!schema_pragmas {
|
||||
finish_test
|
||||
|
@ -133,4 +133,22 @@ do_test vtab2-4.5 {
|
|||
execsql { SELECT * FROM fkey }
|
||||
} {t1 a}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
reset_db
|
||||
do_execsql_test 5.1 {
|
||||
PRAGMA encoding='UTF16';
|
||||
}
|
||||
|
||||
do_test 5.2 {
|
||||
sqlite3_exec_hex db { CREATE VIRTUAL TABLE %C8 USING fts3 }
|
||||
} {0 {}}
|
||||
|
||||
do_test 5.3 {
|
||||
sqlite3_exec_hex db { CREATE VIRTUAL TABLE %C9 USING s }
|
||||
} {/1 {malformed database schema.* already exists}/}
|
||||
|
||||
|
||||
|
||||
finish_test
|
||||
|
||||
|
|
Loading…
Reference in New Issue