mirror of
https://github.com/status-im/sqlcipher.git
synced 2025-02-23 09:18:11 +00:00
Fix sqlcipher_export & cipher_migrate when tracing API used
This commit is contained in:
parent
8f52dde735
commit
8a43a6273a
@ -610,6 +610,7 @@ void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_value **ar
|
||||
int saved_flags; /* Saved value of the db->flags */
|
||||
int saved_nChange; /* Saved value of db->nChange */
|
||||
int saved_nTotalChange; /* Saved value of db->nTotalChange */
|
||||
u8 saved_mTrace; /* Saved value of db->mTrace */
|
||||
int (*saved_xTrace)(u32,void*,void*,void*); /* Saved db->xTrace */
|
||||
int rc = SQLITE_OK; /* Return code from service routines */
|
||||
char *zSql = NULL; /* SQL statements */
|
||||
@ -619,9 +620,11 @@ void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_value **ar
|
||||
saved_nChange = db->nChange;
|
||||
saved_nTotalChange = db->nTotalChange;
|
||||
saved_xTrace = db->xTrace;
|
||||
saved_mTrace = db->mTrace;
|
||||
db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_PreferBuiltin;
|
||||
db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder);
|
||||
db->xTrace = 0;
|
||||
db->mTrace = 0;
|
||||
|
||||
/* Query the schema of the main database. Create a mirror schema
|
||||
** in the temporary database.
|
||||
@ -707,6 +710,7 @@ end_of_export:
|
||||
db->nChange = saved_nChange;
|
||||
db->nTotalChange = saved_nTotalChange;
|
||||
db->xTrace = saved_xTrace;
|
||||
db->mTrace = saved_mTrace;
|
||||
|
||||
sqlite3_free(zSql);
|
||||
|
||||
|
@ -1026,6 +1026,7 @@ int sqlcipher_codec_ctx_migrate(codec_ctx *ctx) {
|
||||
int saved_flags;
|
||||
int saved_nChange;
|
||||
int saved_nTotalChange;
|
||||
u8 saved_mTrace;
|
||||
int (*saved_xTrace)(u32,void*,void*,void*); /* Saved db->xTrace */
|
||||
Db *pDb = 0;
|
||||
sqlite3 *db = ctx->pBt->db;
|
||||
@ -1130,9 +1131,11 @@ int sqlcipher_codec_ctx_migrate(codec_ctx *ctx) {
|
||||
saved_nChange = db->nChange;
|
||||
saved_nTotalChange = db->nTotalChange;
|
||||
saved_xTrace = db->xTrace;
|
||||
saved_mTrace = db->mTrace;
|
||||
db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_PreferBuiltin;
|
||||
db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder);
|
||||
db->xTrace = 0;
|
||||
db->mTrace = 0;
|
||||
|
||||
pDest = db->aDb[0].pBt;
|
||||
pDb = &(db->aDb[db->nDb-1]);
|
||||
@ -1164,6 +1167,7 @@ int sqlcipher_codec_ctx_migrate(codec_ctx *ctx) {
|
||||
db->nChange = saved_nChange;
|
||||
db->nTotalChange = saved_nTotalChange;
|
||||
db->xTrace = saved_xTrace;
|
||||
db->mTrace = saved_mTrace;
|
||||
db->autoCommit = 1;
|
||||
sqlite3BtreeClose(pDb->pBt);
|
||||
pDb->pBt = 0;
|
||||
|
@ -103,6 +103,11 @@ proc cmpFilesChunked {file1 file2 {chunksize 16384}} {
|
||||
return 0
|
||||
}
|
||||
|
||||
proc trace_proc sql {
|
||||
global TRACE_OUT
|
||||
lappend TRACE_OUT [string trim $sql]
|
||||
}
|
||||
|
||||
# The database is initially empty.
|
||||
# set an hex key create some basic data
|
||||
# create table and insert operations should work
|
||||
@ -2318,5 +2323,29 @@ if_built_with_openssl wont-write-database-with-invalid-cipher-2 {
|
||||
db close
|
||||
file delete -force test.db
|
||||
|
||||
do_test verify-cipher-export-with-trace-configured {
|
||||
sqlite_orig db plain.db
|
||||
execsql {
|
||||
CREATE TABLE t1(a,b);
|
||||
INSERT INTO t1(a,b) VALUES(1,2);
|
||||
}
|
||||
set TRACE_OUT {}
|
||||
db trace trace_proc
|
||||
set stmt [sqlite3_prepare db {ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'encrypted';} -1 TAIL]
|
||||
sqlite3_step $stmt
|
||||
sqlite3_finalize $stmt
|
||||
set stmt [sqlite3_prepare db {SELECT sqlcipher_export('encrypted');} -1 TAIL]
|
||||
sqlite3_step $stmt
|
||||
sqlite3_finalize $stmt
|
||||
set stmt [sqlite3_prepare db {DETACH DATABASE encrypted;} -1 TAIL]
|
||||
sqlite3_step $stmt
|
||||
sqlite3_finalize $stmt
|
||||
set TRACE_OUT
|
||||
} {{ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'encrypted';} {SELECT sqlcipher_export('encrypted');} {DETACH DATABASE encrypted;}}
|
||||
set TRACE_OUT {}
|
||||
db close
|
||||
file delete -force plain.db
|
||||
file delete -force encrypted.db
|
||||
|
||||
sqlite3_test_control_pending_byte $old_pending_byte
|
||||
finish_test
|
||||
|
Loading…
x
Reference in New Issue
Block a user