@@ -896,7 +896,6 @@ int sqlcipher_codec_ctx_migrate(codec_ctx *ctx) {
896
896
BTREE_USER_VERSION , 0 , /* Preserve the user version */
897
897
BTREE_APPLICATION_ID , 0 , /* Preserve the application id */
898
898
};
899
-
900
899
key_sz = ctx -> read_ctx -> pass_sz + 1 ;
901
900
key = sqlcipher_malloc (key_sz );
902
901
memset (key , 0 , key_sz );
@@ -907,35 +906,34 @@ int sqlcipher_codec_ctx_migrate(codec_ctx *ctx) {
907
906
char * attach_command = sqlite3_mprintf ("ATTACH DATABASE '%s-migrated' as migrate KEY '%s';" ,
908
907
db_filename , key );
909
908
910
- int rc = sqlcipher_check_connection (db_filename , key , "" );
909
+ int rc = sqlcipher_check_connection (db_filename , key , key_sz , "" );
911
910
if (rc == SQLITE_OK ){
912
- // no upgrade required
911
+ CODEC_TRACE (( "No upgrade required - exiting\n" ));
913
912
goto exit ;
914
913
}
915
914
916
- // check for 1x format
917
- //rc = sqlcipher_check_connection(db_filename, key, pragma_hmac_off);
918
- //if(rc == SQLITE_OK) {
919
- // upgrade_1x_format = 1;
920
- //}
921
-
922
915
// Version 2 - check for 4k with hmac format
923
- rc = sqlcipher_check_connection (db_filename , key , pragma_4k_kdf_iter );
916
+ rc = sqlcipher_check_connection (db_filename , key , key_sz , pragma_4k_kdf_iter );
924
917
if (rc == SQLITE_OK ) {
918
+ CODEC_TRACE (("Version 2 format found\n" ));
925
919
upgrade_4k_format = 1 ;
926
920
}
927
921
928
922
// Version 1 - check both no hmac and 4k together
929
923
char * pragma_1x_and_4k = sqlite3_mprintf ("%s%s" , pragma_hmac_off ,
930
924
pragma_4k_kdf_iter );
931
- rc = sqlcipher_check_connection (db_filename , key , pragma_1x_and_4k );
925
+ rc = sqlcipher_check_connection (db_filename , key , key_sz , pragma_1x_and_4k );
932
926
sqlite3_free (pragma_1x_and_4k );
933
927
if (rc == SQLITE_OK ) {
928
+ CODEC_TRACE (("Version 1 format found\n" ));
934
929
upgrade_1x_format = 1 ;
935
930
upgrade_4k_format = 1 ;
936
931
}
937
932
938
- if (upgrade_1x_format == 0 || upgrade_4k_format == 0 ) goto handle_error ;
933
+ if (upgrade_1x_format == 0 && upgrade_4k_format == 0 ) {
934
+ CODEC_TRACE (("Upgrade format not determined\n" ));
935
+ goto handle_error ;
936
+ }
939
937
940
938
const char * commands [] = {
941
939
upgrade_4k_format == 1 ? pragma_4k_kdf_iter : "" ,
@@ -1016,31 +1014,33 @@ int sqlcipher_codec_ctx_migrate(codec_ctx *ctx) {
1016
1014
sqlite3ResetAllSchemasOfConnection (db );
1017
1015
remove (migrated_db_filename );
1018
1016
sqlite3_free (migrated_db_filename );
1017
+ } else {
1018
+ CODEC_TRACE (("*** migration failure** \n\n" ));
1019
1019
}
1020
+
1020
1021
}
1021
1022
goto exit ;
1022
1023
1023
1024
handle_error :
1024
- CODEC_TRACE (("an error occurred\n" ));
1025
+ CODEC_TRACE (("An error occurred attempting to migrate the database \n" ));
1025
1026
rc = SQLITE_ERROR ;
1026
1027
1027
1028
exit :
1028
1029
return rc ;
1029
1030
}
1030
1031
1031
- int sqlcipher_check_connection (char * filename , char * key , char * sql ) {
1032
+ int sqlcipher_check_connection (char * filename , char * key , int key_sz , char * sql ) {
1032
1033
int rc ;
1033
1034
sqlite3 * db ;
1034
1035
char * errMsg ;
1035
1036
sqlite3_stmt * statement ;
1036
- int status = SQLITE_ERROR ;
1037
1037
char * query_sqlite_master = "SELECT count(*) FROM sqlite_master;" ;
1038
1038
1039
1039
rc = sqlite3_open (filename , & db );
1040
1040
if (rc != SQLITE_OK ){
1041
1041
goto cleanup ;
1042
1042
}
1043
- rc = sqlite3_key (db , key , ( int ) strlen ( key ) );
1043
+ rc = sqlite3_key (db , key , key_sz );
1044
1044
if (rc != SQLITE_OK ){
1045
1045
goto cleanup ;
1046
1046
}
@@ -1053,7 +1053,7 @@ int sqlcipher_check_connection(char *filename, char *key, char *sql) {
1053
1053
goto cleanup ;
1054
1054
}
1055
1055
if (sqlite3_step (statement ) == SQLITE_ROW ){
1056
- status = SQLITE_OK ;
1056
+ rc = SQLITE_OK ;
1057
1057
}
1058
1058
goto cleanup ;
1059
1059
@@ -1066,7 +1066,7 @@ int sqlcipher_check_connection(char *filename, char *key, char *sql) {
1066
1066
}
1067
1067
1068
1068
exit :
1069
- return status ;
1069
+ return rc ;
1070
1070
1071
1071
}
1072
1072
0 commit comments