Skip to content

Commit 94c8898

Browse files
committed
defer memory hook until after xInit
1 parent 81ed3a5 commit 94c8898

2 files changed

Lines changed: 18 additions & 13 deletions

File tree

src/crypto_impl.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ static volatile int default_plaintext_header_sz = 0;
5252
static volatile int default_hmac_algorithm = SQLCIPHER_HMAC_SHA512;
5353
static volatile int default_kdf_algorithm = SQLCIPHER_PBKDF2_HMAC_SHA512;
5454
static volatile int mem_security_on = 1;
55+
static volatile int mem_security_initialized = 0;
5556
static volatile int mem_security_activated = 0;
5657
static volatile unsigned int sqlcipher_activate_count = 0;
5758
static volatile sqlite3_mem_methods default_mem_methods;
@@ -147,8 +148,12 @@ static sqlite3_mem_methods sqlcipher_mem_methods = {
147148
};
148149

149150
void sqlcipher_init_memmethods() {
150-
sqlite3_config(SQLITE_CONFIG_GETMALLOC, &default_mem_methods);
151-
sqlite3_config(SQLITE_CONFIG_MALLOC, &sqlcipher_mem_methods);
151+
if(mem_security_initialized) return;
152+
if(sqlite3_config(SQLITE_CONFIG_GETMALLOC, &default_mem_methods) != SQLITE_OK ||
153+
sqlite3_config(SQLITE_CONFIG_MALLOC, &sqlcipher_mem_methods) != SQLITE_OK) {
154+
mem_security_on = mem_security_activated = 0;
155+
}
156+
mem_security_initialized = 1;
152157
}
153158

154159
int sqlcipher_register_provider(sqlcipher_provider *p) {

src/malloc.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,17 @@ int sqlite3MallocInit(void){
111111
int rc;
112112
if( sqlite3GlobalConfig.m.xMalloc==0 ){
113113
sqlite3MemSetDefault();
114-
/* BEGIN SQLCIPHER */
114+
115+
memset(&mem0, 0, sizeof(mem0));
116+
mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
117+
if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
118+
|| sqlite3GlobalConfig.nPage<=0 ){
119+
sqlite3GlobalConfig.pPage = 0;
120+
sqlite3GlobalConfig.szPage = 0;
121+
}
122+
rc = sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData);
123+
if( rc!=SQLITE_OK ) memset(&mem0, 0, sizeof(mem0));
124+
/* BEGIN SQLCIPHER */
115125
#ifdef SQLITE_HAS_CODEC
116126
/* install wrapping functions for memory management
117127
that will wipe all memory allocated by SQLite
@@ -123,16 +133,6 @@ int sqlite3MallocInit(void){
123133
#endif
124134
/* END SQLCIPHER */
125135
}
126-
127-
memset(&mem0, 0, sizeof(mem0));
128-
mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
129-
if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
130-
|| sqlite3GlobalConfig.nPage<=0 ){
131-
sqlite3GlobalConfig.pPage = 0;
132-
sqlite3GlobalConfig.szPage = 0;
133-
}
134-
rc = sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData);
135-
if( rc!=SQLITE_OK ) memset(&mem0, 0, sizeof(mem0));
136136
return rc;
137137
}
138138

0 commit comments

Comments
 (0)