Repository Analysis

signalapp/Signal-Android

A private messenger for Android.

0.6 Likely human-written View on GitHub
0.6
Adjusted Score
0.6
Raw Score
100%
Time Factor
2026-05-29
Last Push
28,861
Stars
Kotlin
Language
1,298,842
Lines of Code
7951
Files
150
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 61HIGH 17MEDIUM 8LOW 64

Pattern Findings

150 matches across 13 categories. Click a row to expand file-level details.

Hallucination Indicators61 hits · 545 pts
SeverityFileLineSnippet
CRITICALdemo/apng/src/main/java/org/signal/apng/DemoActivity.kt55// _root_ide_package_.org.signal.apng.MainActivity.TestModel.ApngModel(
CRITICALdemo/apng/src/main/java/org/signal/apng/DemoActivity.kt59// _root_ide_package_.org.signal.apng.MainActivity.TestModel.ApngModel(
CRITICALdemo/apng/src/main/java/org/signal/apng/DemoActivity.kt63// _root_ide_package_.org.signal.apng.MainActivity.TestModel.ApngModel(
CRITICALdemo/apng/src/main/java/org/signal/apng/DemoActivity.kt67// _root_ide_package_.org.signal.apng.MainActivity.TestModel.ApngModel(
CRITICAL…util/src/main/java/org/signal/core/util/JsonUtils.java25 com.fasterxml.jackson.module.kotlin.ExtensionsKt.registerKotlinModule(objectMapper);
CRITICAL…-jvm/src/main/java/org/signal/core/models/ServiceId.kt46 fromLibSignal(org.signal.libsignal.protocol.ServiceId.parseFromString(raw))
CRITICAL…-jvm/src/main/java/org/signal/core/models/ServiceId.kt69 fromLibSignal(org.signal.libsignal.protocol.ServiceId.parseFromFixedWidthBinary(raw))
CRITICAL…-jvm/src/main/java/org/signal/core/models/ServiceId.kt71 fromLibSignal(org.signal.libsignal.protocol.ServiceId.parseFromBinary(raw))
CRITICAL…-jvm/src/main/java/org/signal/core/models/ServiceId.kt148 fun from(uuid: UUID): ACI = ACI(org.signal.libsignal.protocol.ServiceId.Aci(uuid))
CRITICAL…-jvm/src/main/java/org/signal/core/models/ServiceId.kt203 fun from(uuid: UUID): PNI = PNI(org.signal.libsignal.protocol.ServiceId.Pni(uuid))
CRITICAL…-jvm/src/main/java/org/signal/core/models/ServiceId.kt215 PNI(org.signal.libsignal.protocol.ServiceId.Pni(uuid))
CRITICAL…-jvm/src/main/java/org/signal/core/models/ServiceId.kt232 PNI(org.signal.libsignal.protocol.ServiceId.Pni(uuid))
CRITICAL…onents/settings/conversation/GroupSettingsStateTest.kt15 private val v2GroupId = GroupId.v2(org.signal.libsignal.zkgroup.groups.GroupMasterKey(ByteArray(32)))
CRITICAL…ava/org/thoughtcrime/securesms/ApplicationContext.java419 org.signal.registration.RegistrationDependencies.Companion.provide(
CRITICAL…ava/org/thoughtcrime/securesms/ApplicationContext.java421 new org.thoughtcrime.securesms.registration.v2.AppRegistrationNetworkController(this, AppDependencies.getPushSer
CRITICAL…ava/org/thoughtcrime/securesms/ApplicationContext.java422 new org.thoughtcrime.securesms.registration.v2.AppRegistrationStorageController(this),
CRITICAL…crime/securesms/database/model/KeyTransparencyStore.kt26 val aci = org.signal.core.models.ServiceId.ACI.fromLibSignal(libsignalAci)
CRITICAL…crime/securesms/database/model/KeyTransparencyStore.kt31 val aci = org.signal.core.models.ServiceId.ACI.fromLibSignal(libsignalAci)
CRITICAL…n/java/org/thoughtcrime/securesms/util/WindowUtil.java22 org.signal.core.ui.WindowExtensionsKt.initializeScreenshotSecurity(window);
CRITICAL…rg/thoughtcrime/securesms/mediasend/CameraXFragment.kt618@androidx.compose.ui.tooling.preview.Preview(
CRITICAL…rg/thoughtcrime/securesms/mediasend/CameraXFragment.kt646@androidx.compose.ui.tooling.preview.Preview(
CRITICAL…rg/thoughtcrime/securesms/mediasend/CameraXFragment.kt674@androidx.compose.ui.tooling.preview.Preview(
CRITICAL…rg/thoughtcrime/securesms/mediasend/CameraXFragment.kt702@androidx.compose.ui.tooling.preview.Preview(
CRITICAL…rg/thoughtcrime/securesms/mediasend/CameraXFragment.kt730@androidx.compose.ui.tooling.preview.Preview(
CRITICAL…p/internal/backup/InternalBackupPlaygroundViewModel.kt272 statusMessage = "Remote backup exists. ${result.result.mediaCount} media items, using ${result.result.used
CRITICAL…nts/settings/app/chats/folders/ChatFoldersViewModel.kt357 return state.value.currentFolder.folderRecord.name.isEmpty()
CRITICAL…/securesms/components/voice/VoiceNotePlayerCallback.kt204 val currentStreamType = androidx.media3.common.util.Util.getStreamTypeForAudioUsage(player.audioAttributes.usage)
CRITICAL…sms/backup/v2/processor/AccountDataArchiveProcessor.kt474 private fun org.thoughtcrime.securesms.mms.SentMediaQuality.toRemoteSentMediaQuality(): AccountData.SentMediaQuality {
CRITICAL…java/org/signal/lint/AlertDialogBuilderDetectorTest.kt42 Fix for src/foo/Example.java line 5: Replace with new com.google.android.material.dialog.MaterialAlertDialogBuil
CRITICAL…java/org/signal/lint/AlertDialogBuilderDetectorTest.kt45 + new com.google.android.material.dialog.MaterialAlertDialogBuilder(context).show();
CRITICAL…java/org/signal/lint/AlertDialogBuilderDetectorTest.kt81 Fix for src/foo/Example.java line 5: Replace with new com.google.android.material.dialog.MaterialAlertDialogBuil
CRITICAL…java/org/signal/lint/AlertDialogBuilderDetectorTest.kt84 + AlertDialog.Builder builder = new com.google.android.material.dialog.MaterialAlertDialogBuilder(context)
CRITICAL…java/org/signal/lint/AlertDialogBuilderDetectorTest.kt119 Fix for src/foo/Example.java line 5: Replace with new com.google.android.material.dialog.MaterialAlertDialogBuil
CRITICAL…java/org/signal/lint/AlertDialogBuilderDetectorTest.kt122 + new com.google.android.material.dialog.MaterialAlertDialogBuilder(context).show();
CRITICAL…java/org/signal/lint/AlertDialogBuilderDetectorTest.kt158 Fix for src/foo/Example.java line 5: Replace with new com.google.android.material.dialog.MaterialAlertDialogBuil
CRITICAL…java/org/signal/lint/AlertDialogBuilderDetectorTest.kt161 + AlertDialog.Builder builder = new com.google.android.material.dialog.MaterialAlertDialogBuilder(context)
CRITICAL…/src/test/java/org/signal/lint/CardViewDetectorTest.kt42 Fix for src/foo/Example.java line 5: Replace with new com.google.android.material.card.MaterialCardView(cont
CRITICAL…/src/test/java/org/signal/lint/CardViewDetectorTest.kt45 + new com.google.android.material.card.MaterialCardView(context);
CRITICAL…/src/test/java/org/signal/lint/CardViewDetectorTest.kt81 Fix for src/foo/Example.java line 5: Replace with new com.google.android.material.card.MaterialCardView(context)
CRITICAL…/src/test/java/org/signal/lint/CardViewDetectorTest.kt84 + CardView cardView = new com.google.android.material.card.MaterialCardView(context)
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt41 Fix for src/foo/Example.java line 4: Replace with org.signal.core.util.logging.Log.d(TAG, "Hello World"):
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt44 + org.signal.core.util.logging.Log.d(TAG, "Hello World");
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt77 Fix for src/foo/Example.java line 4: Replace with org.signal.core.util.logging.Log.d(TAG, "Hello"):
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt80 + org.signal.core.util.logging.Log.d(TAG, "Hello");
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt115 Fix for src/foo/Example.kt line 5: Replace with org.signal.core.util.logging.Log.d(TAG, "Hello World"):
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt118 + org.signal.core.util.logging.Log.d(TAG, "Hello World")
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt150 Fix for src/foo/test.kt line 3: Replace with org.signal.core.util.logging.Log.d(TAG, "Hello World"):
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt153 + org.signal.core.util.logging.Log.d(TAG, "Hello World")
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt186 Fix for src/foo/Example.java line 4: Replace with org.signal.core.util.logging.Log.d(TAG, ""):
CRITICAL…t/java/org/signal/lint/SystemOutPrintLnDetectorTest.kt189 + org.signal.core.util.logging.Log.d(TAG, "");
CRITICAL…src/test/java/org/signal/lint/SignalLogDetectorTest.kt43 Fix for src/foo/Example.java line 5: Replace with org.signal.core.util.logging.Log.d("TAG", "msg"):
CRITICAL…src/test/java/org/signal/lint/SignalLogDetectorTest.kt46 + org.signal.core.util.logging.Log.d("TAG", "msg");
CRITICAL…src/test/java/org/signal/lint/SignalLogDetectorTest.kt82 Fix for src/foo/Example.java line 5: Replace with org.signal.core.util.logging.Log.d("TAG", "msg"):
CRITICAL…src/test/java/org/signal/lint/SignalLogDetectorTest.kt85 + org.signal.core.util.logging.Log.d("TAG", "msg");
CRITICAL…src/test/java/org/signal/lint/SignalLogDetectorTest.kt286 Fix for src/foo/Example.java line 5: Replace with org.signal.core.util.logging.Log.d("TAG", "msg"):
CRITICAL…src/test/java/org/signal/lint/SignalLogDetectorTest.kt289 + org.signal.core.util.logging.Log.d("TAG", "msg");
CRITICAL…/main/java/org/signal/lint/SystemOutPrintLnDetector.kt63 val fixSource = "org.signal.core.util.logging.Log.d(TAG, $message)"
CRITICAL…alservice/api/messages/EnvelopeContentValidatorTest.kt235 syncMessage = org.whispersystems.signalservice.internal.push.SyncMessage()
CRITICAL…ing/src/main/java/org/signal/billing/BillingApiImpl.kt184 org.signal.core.util.billing.BillingResponseCode.fromBillingLibraryResponseCode(billingClient.isFeatureSupported
CRITICAL…ing/src/main/java/org/signal/billing/BillingApiImpl.kt188 org.signal.core.util.billing.BillingResponseCode.fromBillingLibraryResponseCode(e.billingResponseCode)
1 more matches not shown…
Cross-File Repetition17 hits · 85 pts
SeverityFileLineSnippet
HIGH…/migration/V242_MessageFullTextSearchEmojiSupportV2.kt0create trigger message_ai after insert on message begin insert into message_fts(rowid, body, thread_id) values (new._id,
HIGH…rs/migration/V239_MessageFullTextSearchEmojiSupport.kt0create trigger message_ai after insert on message begin insert into message_fts(rowid, body, thread_id) values (new._id,
HIGH…tabase/helpers/migration/V175_FixFullTextSearchLink.kt0create trigger message_ai after insert on message begin insert into message_fts(rowid, body, thread_id) values (new._id,
HIGH…esms/database/helpers/migration/V265_FixFtsTriggers.kt0create trigger message_ai after insert on message begin insert into message_fts(rowid, body, thread_id) values (new._id,
HIGH…/migration/V242_MessageFullTextSearchEmojiSupportV2.kt0create trigger message_au after update on message begin insert into message_fts(message_fts, rowid, body, thread_id) val
HIGH…rs/migration/V239_MessageFullTextSearchEmojiSupport.kt0create trigger message_au after update on message begin insert into message_fts(message_fts, rowid, body, thread_id) val
HIGH…tabase/helpers/migration/V175_FixFullTextSearchLink.kt0create trigger message_au after update on message begin insert into message_fts(message_fts, rowid, body, thread_id) val
HIGH…esms/database/helpers/migration/V265_FixFtsTriggers.kt0create trigger message_au after update on message begin insert into message_fts(message_fts, rowid, body, thread_id) val
HIGH…189_CreateCallLinkTableColumnsAndRebuildFKReference.kt0insert into call_tmp select _id, call_id, message_id, peer, null as call_link, type, direction, event, timestamp, ringer
HIGH…abase/helpers/migration/V183_CallLinkTableMigration.kt0insert into call_tmp select _id, call_id, message_id, peer, null as call_link, type, direction, event, timestamp, ringer
HIGH…elpers/migration/V184_CallLinkReplaceIndexMigration.kt0insert into call_tmp select _id, call_id, message_id, peer, null as call_link, type, direction, event, timestamp, ringer
HIGH…ms/database/helpers/migration/V149_LegacyMigrations.kt0delete from reaction where (is_mms = 0 and message_id not in (select _id from sms)) or (is_mms = 1 and message_id not in
HIGH…ms/database/helpers/migration/V149_LegacyMigrations.kt0delete from reaction where (is_mms = 0 and message_id not in (select _id from sms)) or (is_mms = 1 and message_id not in
HIGH…ase/helpers/migration/V167_RecreateReactionTriggers.kt0delete from reaction where (is_mms = 0 and message_id not in (select _id from sms)) or (is_mms = 1 and message_id not in
HIGH…src/test/java/org/signal/lint/SignalLogDetectorTest.kt0fix for src/foo/example.java line 5: replace with org.signal.core.util.logging.log.d("tag", "msg"): @@ -5 +5 - log.d("ta
HIGH…src/test/java/org/signal/lint/SignalLogDetectorTest.kt0fix for src/foo/example.java line 5: replace with org.signal.core.util.logging.log.d("tag", "msg"): @@ -5 +5 - log.d("ta
HIGH…src/test/java/org/signal/lint/SignalLogDetectorTest.kt0fix for src/foo/example.java line 5: replace with org.signal.core.util.logging.log.d("tag", "msg"): @@ -5 +5 - log.d("ta
Over-Commented Block31 hits · 31 pts
SeverityFileLineSnippet
LOWlefthook.yml1# Lefthook git hooks configuration
LOWdemo/apng/src/main/java/org/signal/apng/DemoActivity.kt41// filename = "test00.png",
LOW…me/securesms/conversation/ConversationItemPreviewer.kt41 insertFailedMediaMessage(other = other, attachmentCount = 2)
LOW…/org/thoughtcrime/securesms/database/RecipientTable.kt4941 internal object Capabilities {
LOW…ase/helpers/migration/V191_UniqueMessageMigrationV2.kt81 // Now that we've corrected data that we know we want to preserve, the rest should all be duplicates that we can saf
LOW…ings/conversation/InternalConversationSettingsState.kt101 // Left as an example in case we add one in the future
LOW…oughtcrime/securesms/giph/ui/AspectRatioImageView.java41 this(context, null);
LOW…g/thoughtcrime/securesms/fonts/FontTypefaceProvider.kt21// val typeface = cachedTypeface
LOWbuild-logic/plugins/src/main/java/Licenses.kt1081
LOWbuild-logic/plugins/src/main/java/Licenses.kt1101 # Neither the name of Google Inc. nor the names of its
LOWbuild-logic/plugins/src/main/java/Licenses.kt1121 # listed below with further processing for compound word breaking. The
LOWbuild-logic/plugins/src/main/java/Licenses.kt1141 # * modification, are permitted provided that the following conditions
LOWbuild-logic/plugins/src/main/java/Licenses.kt1161 # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
LOWbuild-logic/plugins/src/main/java/Licenses.kt1181 # * the documentation and/or other materials provided with the
LOWbuild-logic/plugins/src/main/java/Licenses.kt1201 #
LOWbuild-logic/plugins/src/main/java/Licenses.kt1221 # software, including all implied warranties of merchantability and
LOWbuild-logic/plugins/src/main/java/Licenses.kt1241 # NO WARRANTY
LOWbuild-logic/plugins/src/main/java/Licenses.kt1261 # officers and other employees shall be held liable for any and all
LOWbuild-logic/plugins/src/main/java/Licenses.kt1281 #
LOWbuild-logic/plugins/src/main/java/Licenses.kt1301 # All rights reserved.
LOWbuild-logic/plugins/src/main/java/Licenses.kt1321 # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
LOWbuild-logic/plugins/src/main/java/Licenses.kt1341 # modification, are permitted provided that the following conditions
LOWbuild-logic/plugins/src/main/java/Licenses.kt1381 # that is in the public domain, and is intended to remain in the
LOW…rime/securesms/video/videoconverter/OutputSurface.java101 // at the Java level, so if we don't either then the object can get GCed, which
LOW…me/securesms/video/videoconverter/muxer/Mp4Writer.java321 // ----------------------------------------------------------------------
LOW…lservice/internal/websocket/LibSignalChatConnection.kt81 // that have responses embedded within them.
LOW…systems/signalservice/api/svr/SecureValueRecoveryV3.kt81 * There's no concept of "deleting" data with SVR3.
LOW…systems/signalservice/api/svr/SecureValueRecoveryV3.kt101// when (val cause = e.cause) {
LOW…systems/signalservice/api/svr/SecureValueRecoveryV3.kt141// val masterKey = MasterKey(result.value)
LOW…systems/signalservice/api/svr/SecureValueRecoveryV3.kt181// } catch (e: Exception) {
LOW…systems/signalservice/api/svr/SecureValueRecoveryV3.kt201// } catch (e: CancellationException) {
Fake / Example Data13 hits · 13 pts
SeverityFileLineSnippet
LOW…ms/phonenumbers/PhoneNumberVisualTransformationTest.kt14 val expected = "555-0123"
LOW…n/res/layout/conversation_item_received_multimedia.xml234 tools:text="Mango pickle lorem ipsum" />
LOW…/main/res/layout/conversation_item_sent_multimedia.xml173 tools:text="Mango pickle lorem ipsum" />
LOW…res/layout/v2_conversation_item_text_only_outgoing.xml66 tools:text="Mango pickle lorem ipsum" />
LOW…in/res/layout/conversation_item_received_text_only.xml148 tools:text="Mango pickle lorem ipsum" />
LOW…c/main/res/layout/conversation_item_sent_text_only.xml65 tools:text="Mango pickle lorem ipsum" />
LOW…p/src/main/res/layout/v2_media_gallery_folder_item.xml50 tools:text="Lorem ipsum dolor sit amet" />
LOW…p/src/main/res/layout/v2_media_gallery_folder_item.xml50 tools:text="Lorem ipsum dolor sit amet" />
LOW…uresms/components/settings/app/help/LicenseFragment.kt78 LicenseScreen(listOf("Lorem ipsum", "Delor"))
LOW…g/thoughtcrime/securesms/nicknames/NicknameActivity.kt195 note = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod temor incididunt ut labore et do
LOW…g/thoughtcrime/securesms/nicknames/NicknameActivity.kt195 note = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod temor incididunt ut labore et do
LOW…/org/thoughtcrime/securesms/nicknames/ViewNoteSheet.kt110 note = "Lorem ipsum dolor sit amet\n\nWebsite: https://example.com"
LOW…/org/thoughtcrime/securesms/nicknames/ViewNoteSheet.kt110 note = "Lorem ipsum dolor sit amet\n\nWebsite: https://example.com"
Decorative Section Separators4 hits · 12 pts
SeverityFileLineSnippet
MEDIUMbuild-logic/plugins/src/main/java/Licenses.kt1299 # ----------------------------------------------------------------------
MEDIUMbuild-logic/plugins/src/main/java/Licenses.kt1324 # --------------------------------------------------------------------------
MEDIUMbuild-logic/plugins/src/main/java/Licenses.kt1336 # --------------------------------------------------------------------------
MEDIUMbuild-logic/plugins/src/main/java/Licenses.kt1366 # --------------------------------------------------------------------------
AI Slop Vocabulary3 hits · 8 pts
SeverityFileLineSnippet
LOW…/org/thoughtcrime/securesms/database/MessageTypes.java13 * Note: We technically could use up to 64 bits, but {@link #TOTAL_MASK} is currently just set to
MEDIUM…in/java/org/thoughtcrime/securesms/main/MainToolbar.kt517 // TODO [alex] - Add proper icon (cannot utilize layer-list)
MEDIUM…rime/securesms/conversation/v2/ConversationActivity.kt110 // Note: We utilize this instead of 'replaceFragment' because there seems to be a bug
Hyper-Verbose Identifiers7 hits · 7 pts
SeverityFileLineSnippet
LOW…ime/securesms/conversation/ConversationUpdateItem.java340 private final class GroupDataManager {
LOWlib/spinner/src/main/assets/js/tooltips.js19function initializeRecipientTooltips() {
LOWlib/spinner/src/main/assets/js/tooltips.js232function initializeMessageTooltips() {
LOW…ems/signalservice/internal/push/PushServiceSocket.java2076 private static class RegistrationSessionResponseHandler implements ResponseCodeHandler {
LOW…ems/signalservice/internal/push/PushServiceSocket.java2120 private static class RequestVerificationCodeResponseHandler implements ResponseCodeHandler {
LOW…ems/signalservice/internal/push/PushServiceSocket.java2173 private static class PatchRegistrationSessionResponseHandler implements ResponseCodeHandler {
LOW…ems/signalservice/internal/push/PushServiceSocket.java2205 private static class SubmitVerificationCodeResponseHandler implements ResponseCodeHandler {
Slop Phrases3 hits · 6 pts
SeverityFileLineSnippet
LOW…thoughtcrime/securesms/util/SnapToTopDataObserver.java61 * different callbacks. Don't forget to call `submit()`!
LOW…ghtcrime/securesms/compose/FragmentBackPressedState.kt62 * Don't forget to call [FragmentBackPressedState.attach]!
MEDIUM…systems/signalservice/api/websocket/SignalWebSocket.kt397 * Concerning the requested batch size, it's worth noting that this is simply an upper bound. This method will
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippet
LOW…/helpers/migration/V312_RefactorNameCollisionTables.kt20 // Step 1: Create the new thread linking table
LOW…/helpers/migration/V312_RefactorNameCollisionTables.kt33 // Step 2: Populate thread links from existing collision data
LOW…/helpers/migration/V312_RefactorNameCollisionTables.kt42 // Step 3: Recreate name_collision without thread_id and dismissed columns
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMbuild-logic/plugins/src/main/java/Licenses.kt1298 # This file is derived from the above dictionary version of Nov 22, 2020
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippet
LOWreproducible-builds/apkdiff/util.py172 # Check if attr exists in obj2
LOWreproducible-builds/apkdiff/apkdiff.py204 # Check if package exists in both files
Deep Nesting3 hits · 3 pts
SeverityFileLineSnippet
LOWreproducible-builds/apkdiff/util.py21
LOWreproducible-builds/apkdiff/apkdiff.py106
LOWreproducible-builds/apkdiff/apkdiff.py190
Excessive Try-Catch Wrapping2 hits · 2 pts
SeverityFileLineSnippet
LOWreproducible-builds/apkdiff/util.py191 except Exception as e:
LOWreproducible-builds/apkdiff/util.py194 except Exception as e: