From 7042ce8c5cda3c255c6f4c50e9deb999eec53feb Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 9 Jan 2025 09:54:28 -0500 Subject: [PATCH] Ensure that ANR traces are kept within a reasonable size range. --- .../thoughtcrime/securesms/database/LogDatabase.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt index ea69387bd7..65b01bc9f8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt @@ -448,17 +448,27 @@ class LogDatabase private constructor( $THREAD_DUMP TEXT NOT NULL ) """ + + val MAX_DUMP_SIZE = 1.mebiBytes.inWholeBytes.toInt() + const val TRIMMED_FOOTER = "...\n\nTruncated because the dump exceeded 1MiB in size!" } private val readableDatabase: SQLiteDatabase get() = openHelper.readableDatabase private val writableDatabase: SQLiteDatabase get() = openHelper.writableDatabase fun save(currentTime: Long, threadDumps: String) { + val trimmedDump = if (threadDumps.length > MAX_DUMP_SIZE) { + Log.w(TAG, "Large ANR thread dump! Size: ${threadDumps.length}") + threadDumps.substring(0, MAX_DUMP_SIZE - TRIMMED_FOOTER.length) + TRIMMED_FOOTER + } else { + threadDumps + } + writableDatabase .insertInto(TABLE_NAME) .values( CREATED_AT to currentTime, - THREAD_DUMP to threadDumps + THREAD_DUMP to trimmedDump ) .run()