Check for valid context before using cipher_store_pass

Identified by Nicholas Starke
This commit is contained in:
Nick Parker 2015-04-21 14:06:30 -05:00
parent 32117b0dea
commit 18f95ebbea
2 changed files with 21 additions and 5 deletions

View File

@ -97,13 +97,17 @@ int sqlcipher_codec_pragma(sqlite3* db, int iDb, Parse *pParse, const char *zLef
} }
} else } else
if( sqlite3StrICmp(zLeft, "cipher_store_pass")==0 && zRight ) { if( sqlite3StrICmp(zLeft, "cipher_store_pass")==0 && zRight ) {
if(ctx) {
sqlcipher_codec_set_store_pass(ctx, sqlite3GetBoolean(zRight, 1)); sqlcipher_codec_set_store_pass(ctx, sqlite3GetBoolean(zRight, 1));
}
} else } else
if( sqlite3StrICmp(zLeft, "cipher_store_pass")==0 && !zRight ) { if( sqlite3StrICmp(zLeft, "cipher_store_pass")==0 && !zRight ) {
if(ctx){
char *store_pass_value = sqlite3_mprintf("%d", sqlcipher_codec_get_store_pass(ctx)); char *store_pass_value = sqlite3_mprintf("%d", sqlcipher_codec_get_store_pass(ctx));
codec_vdbe_return_static_string(pParse, "cipher_store_pass", store_pass_value); codec_vdbe_return_static_string(pParse, "cipher_store_pass", store_pass_value);
sqlite3_free(store_pass_value); sqlite3_free(store_pass_value);
} }
}
if( sqlite3StrICmp(zLeft, "cipher_profile")== 0 && zRight ){ if( sqlite3StrICmp(zLeft, "cipher_profile")== 0 && zRight ){
char *profile_status = sqlite3_mprintf("%d", sqlcipher_cipher_profile(db, zRight)); char *profile_status = sqlite3_mprintf("%d", sqlcipher_cipher_profile(db, zRight));
codec_vdbe_return_static_string(pParse, "cipher_profile", profile_status); codec_vdbe_return_static_string(pParse, "cipher_profile", profile_status);

View File

@ -1923,7 +1923,7 @@ db close
file delete -force test.db file delete -force test.db
# verify invalid cipher does not cause segfault # verify invalid cipher does not cause segfault
if_built_with_openssl verify-invalid-cipher-does_not_segfault { if_built_with_openssl verify-invalid-cipher-does-not-segfault {
sqlite_orig db test.db sqlite_orig db test.db
execsql { execsql {
PRAGMA key = 'test'; PRAGMA key = 'test';
@ -1934,6 +1934,18 @@ if_built_with_openssl verify-invalid-cipher-does_not_segfault {
db close db close
file delete -force test.db file delete -force test.db
# verify setting cipher_store_pass before key
# does not cause segfault
do_test verify-cipher-store-pass-before-key-does-not-segfault {
sqlite_orig db test.db
execsql {
PRAGMA cipher_store_pass = 1;
PRAGMA key = 'test';
}
} {}
db close
file delete -force test.db
# verify the pragma cipher # verify the pragma cipher
# reports the default value # reports the default value
if_built_with_openssl verify-pragma-cipher-default { if_built_with_openssl verify-pragma-cipher-default {