Fix crash in backup restore related to sqlite_sequence.

The new JobManager stuff created a table that had an
auto-incrementing ID, which was incorrectly being backed
up and restored, causing a crash. Now we skip it on both
import and export.
This commit is contained in:
Greyson Parrelli 2019-04-16 10:10:02 -04:00
parent 2701607810
commit 128da6db04
2 changed files with 5 additions and 3 deletions

View File

@ -84,7 +84,8 @@ public class FullBackupExporter extends FullBackupBase {
!table.equals(OneTimePreKeyDatabase.TABLE_NAME) && !table.equals(OneTimePreKeyDatabase.TABLE_NAME) &&
!table.equals(SessionDatabase.TABLE_NAME) && !table.equals(SessionDatabase.TABLE_NAME) &&
!table.startsWith(SearchDatabase.SMS_FTS_TABLE_NAME) && !table.startsWith(SearchDatabase.SMS_FTS_TABLE_NAME) &&
!table.startsWith(SearchDatabase.MMS_FTS_TABLE_NAME)) !table.startsWith(SearchDatabase.MMS_FTS_TABLE_NAME) &&
!table.startsWith("sqlite_"))
{ {
count = exportTable(table, input, outputStream, null, null, count); count = exportTable(table, input, outputStream, null, null, count);
} }

View File

@ -109,8 +109,9 @@ public class FullBackupImporter extends FullBackupBase {
private static void processStatement(@NonNull SQLiteDatabase db, SqlStatement statement) { private static void processStatement(@NonNull SQLiteDatabase db, SqlStatement statement) {
boolean isForSmsFtsSecretTable = statement.getStatement().contains(SearchDatabase.SMS_FTS_TABLE_NAME + "_"); boolean isForSmsFtsSecretTable = statement.getStatement().contains(SearchDatabase.SMS_FTS_TABLE_NAME + "_");
boolean isForMmsFtsSecretTable = statement.getStatement().contains(SearchDatabase.MMS_FTS_TABLE_NAME + "_"); boolean isForMmsFtsSecretTable = statement.getStatement().contains(SearchDatabase.MMS_FTS_TABLE_NAME + "_");
boolean isForSqliteSecretTable = statement.getStatement().toLowerCase().startsWith("create table sqlite_");
if (isForSmsFtsSecretTable || isForMmsFtsSecretTable) { if (isForSmsFtsSecretTable || isForMmsFtsSecretTable || isForSqliteSecretTable) {
Log.i(TAG, "Ignoring import for statement: " + statement.getStatement()); Log.i(TAG, "Ignoring import for statement: " + statement.getStatement());
return; return;
} }
@ -165,7 +166,7 @@ public class FullBackupImporter extends FullBackupBase {
String name = cursor.getString(0); String name = cursor.getString(0);
String type = cursor.getString(1); String type = cursor.getString(1);
if ("table".equals(type)) { if ("table".equals(type) && !name.startsWith("sqlite_")) {
db.execSQL("DROP TABLE IF EXISTS " + name); db.execSQL("DROP TABLE IF EXISTS " + name);
} }
} }