From 699b788187d0d9013914e5cb3a63bba58d804e10 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Sat, 3 Feb 2024 12:26:38 -0500 Subject: [PATCH] Fix possible stack overflow in backup export. --- .../securesms/backup/FullBackupExporter.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java index 9aab505225..8c2cd48029 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java @@ -580,9 +580,9 @@ public class FullBackupExporter extends FullBackupBase { } private static boolean isNonExpiringMessage(@NonNull SQLiteDatabase db, @NonNull Cursor cursor) { + long id = CursorUtil.requireLong(cursor, MessageTable.ID); long expireStarted = CursorUtil.requireLong(cursor, MessageTable.EXPIRE_STARTED); long expiresIn = CursorUtil.requireLong(cursor, MessageTable.EXPIRES_IN); - long originalMessageId = CursorUtil.requireLong(cursor, MessageTable.ORIGINAL_MESSAGE_ID); long latestRevisionId = CursorUtil.requireLong(cursor, MessageTable.LATEST_REVISION_ID); long expiresAt = expireStarted + expiresIn; @@ -592,11 +592,7 @@ public class FullBackupExporter extends FullBackupBase { return false; } - if (originalMessageId > 0 && !isForNonExpiringMessage(db, originalMessageId)) { - return false; - } - - if (latestRevisionId > 0 && !isForNonExpiringMessage(db, latestRevisionId)) { + if (latestRevisionId > 0 && latestRevisionId != id && !isForNonExpiringMessage(db, latestRevisionId)) { return false; } @@ -604,7 +600,7 @@ public class FullBackupExporter extends FullBackupBase { } private static boolean isForNonExpiringMessage(@NonNull SQLiteDatabase db, long messageId) { - String[] columns = new String[] { MessageTable.EXPIRE_STARTED, MessageTable.EXPIRES_IN, MessageTable.LATEST_REVISION_ID, MessageTable.ORIGINAL_MESSAGE_ID }; + String[] columns = new String[] { MessageTable.ID, MessageTable.EXPIRE_STARTED, MessageTable.EXPIRES_IN, MessageTable.LATEST_REVISION_ID }; String where = MessageTable.ID + " = ?"; String[] args = SqlUtil.buildArgs(messageId);