From 0020c7c6dc5beab7bb8dc8536de1452d3cc63646 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 13 Apr 2021 12:13:05 -0400 Subject: [PATCH] Clear storageIDs from recipient rows with bad data. TBH this shouldn't affect external users. I believe this bad data was only experienced internally a long time ago. But we want to make sure we don't continue to sync that bad data, so we're just stripping the storageID's from it. --- .../database/helpers/SQLCipherOpenHelper.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index 18c277c33d..51cd6c486b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -170,8 +170,9 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab private static final int ABOUT = 89; private static final int SPLIT_SYSTEM_NAMES = 90; private static final int PAYMENTS = 91; + private static final int CLEAN_STORAGE_IDS = 92; - private static final int DATABASE_VERSION = 91; + private static final int DATABASE_VERSION = 92; private static final String DATABASE_NAME = "signal.db"; private final Context context; @@ -1291,6 +1292,13 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS receipt_public_key_index ON payments (receipt_public_key);"); } + if (oldVersion < CLEAN_STORAGE_IDS) { + ContentValues values = new ContentValues(); + values.putNull("storage_service_key"); + int count = db.update("recipient", values, "storage_service_key NOT NULL AND ((phone NOT NULL AND INSTR(phone, '+') = 0) OR (group_id NOT NULL AND (LENGTH(group_id) != 85 and LENGTH(group_id) != 53)))", null); + Log.i(TAG, "There were " + count + " bad rows that had their storageID removed."); + } + db.setTransactionSuccessful(); } finally { db.endTransaction();