Tuta is an email service with a strong focus on security and privacy that lets you encrypt emails, contacts and calendar entries on all your devices.
This report summarizes scanner evidence for tutao/tutanota, a TypeScript project with 8,083 GitHub stars. SynthScan examined 794,707 lines of code across 3387 source files, recording 943 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 1.3 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 886 finding(s).
Are imports declared and package/API names verified? 49 finding(s).
Are wrappers, guards, and repeated structures necessary? 731 finding(s).
Which changes need focused human review? 943 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 943 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/tests/TestUtils.ts | 203 | export function makePopulatedClientModelInfo(): ClientModelInfo { | CODE |
| LOW | test/tests/TestUtils.ts | 437 | export function clientInitializedTypeModelResolver(): TypeModelResolver { | CODE |
| LOW | test/tests/TestUtils.ts | 442 | export function instancePipelineFromTypeModelResolver( | CODE |
| LOW | test/tests/TestUtils.ts | 465 | export function modelMapperFromTypeModelResolver(typeModelResolver: TypeModelResolver): ModelMapper { | CODE |
| LOW | test/tests/TestUtils.ts | 469 | export function offlineMapperFromTypeModelResolver(typeModelResolver: TypeModelResolver): OfflineMapper { | CODE |
| LOW | test/tests/misc/FormatValidatorTest.ts | 63 | function testCreditCardNumberValidation(val: string, isValid: boolean) { | CODE |
| LOW | test/tests/crypto/KeyEncryptionTest.ts | 121 | function legacyEncryptKeyWithDeviceKeyChain(keyChainKey: AesKey, keyToBeEncrypted: AesKey): Uint8Array<ArrayBuffer> { | CODE |
| LOW | test/tests/crypto/WebAssemblyTestUtils.ts | 4 | export async function loadWasmFromFileOrNetwork(wasmFile: string): Promise<ArrayBuffer> { | CODE |
| LOW | …/tests/instance-pipeline/ApplicationTypesFacadeTest.ts | 140 | function createApplicationTypesGetOutFromResponse(applicationTypesGetOut: Uint8Array<ArrayBuffer>) { | CODE |
| LOW | test/tests/instance-pipeline/CryptoMapperTest.ts | 639 | function makeDecryptedParsedInstance(typeModel: ClientTypeModel) { | CODE |
| LOW | test/tests/instance-pipeline/PatchGeneratorTest.ts | 488 | async function createTestEntityWithOriginal(overrides: Partial<TestEntity>): Promise<TestEntity> { | CODE |
| LOW | test/tests/calendar/CalendarViewModelTest.ts | 468 | async function makeCalendarEventEditModelThatFailsSaving(mode: CalendarOperation, existingEvent: CalendarEvent): Promise | CODE |
| LOW | test/tests/calendar/CalendarViewModelTest.ts | 474 | async function makeCalendarEventEditModelThatThrowsOnSaving(mode: CalendarOperation, existingEvent: CalendarEvent): Prom | CODE |
| LOW | test/tests/calendar/ics-import/CalendarImporterTest.ts | 65 | function mockImportDialogConfirmation(expectedSuccessfulEvents: CalendarEvent[]) { | CODE |
| LOW | test/tests/calendar/ics-import/CalendarParserTest.ts | 1563 | function testParsedCalendarDataEquality(actual: ParsedCalendarData, expected: ParsedCalendarData, message?: string): voi | CODE |
| LOW | test/tests/mail/view/MailViewerViewModelTest.ts | 248 | async function testHeaderUnsubscribePost(headers: string, expectedUrl: string, expectedPostResult: boolean) { | CODE |
| LOW | test/tests/contacts/ContactMergeUtilsTest.ts | 175 | function createFilledContactMailAddresses(mailAddresses: string[]) { | CODE |
| LOW | test/tests/contacts/ContactMergeUtilsTest.ts | 319 | function createFilledContactPhoneNumbers(phoneNumbers: string[]) { | CODE |
| LOW | test/tests/contacts/ContactMergeUtilsTest.ts | 344 | function createFilledContactOtherFields(comment: string, company: string, title: string, nickname: string) { | CODE |
| LOW | test/tests/contacts/ContactMergeUtilsTest.ts | 348 | function addFilledContactOtherFields( | CODE |
| LOW | test/tests/network/LoginFacadeTest.ts | 569 | async function testConnectionFailingSyncLogin() { | CODE |
| LOW | test/tests/network/LoginFacadeTest.ts | 619 | async function testConnectionFailingAsyncLogin() { | CODE |
| LOW | test/tests/network/ServiceExecutorTest.ts | 154 | function assertThatNoRequestsWereMade() { | CODE |
| LOW | test/tests/network/EntityRestClientTest.ts | 221 | function assertThatNoRequestsWereMade() { | CODE |
| LOW | test/tests/network/EntityRestClientTest.ts | 1064 | function mockSetupMultipleSuccessCall(version, untypedGroupMembers: Array<OutgoingServerJson>, untypedPersistentPostRe | CODE |
| LOW | test/tests/network/crypto/CryptoFacadeTest.ts | 1740 | async function prepareRsaPubEncBucketKeyResolveSessionKeyTest(fileSessionKeys: Array<Aes256Key> = []): Promise<{ | CODE |
| LOW | test/tests/network/crypto/CryptoFacadeTest.ts | 1847 | async function preparePqPubEncBucketKeyResolveSessionKeyTest( | CODE |
| LOW | test/tests/network/crypto/CryptoFacadeTest.ts | 1947 | async function prepareConfidentialMailToExternalRecipient( | CODE |
| LOW | test/tests/network/crypto/CryptoFacadeTest.ts | 2025 | async function prepareConfidentialReplyFromExternalUser(): Promise<{ | CODE |
| LOW | test/tests/network/crypto/CryptoFacadeTest.ts | 2119 | async function createEncryptedMailInstance( | CODE |
| LOW | …/tests/network/crypto/facades/KeyRotationFacadeTest.ts | 352 | function prepareMultiAdminUserKeyRotation( | CODE |
| LOW | …/tests/network/crypto/facades/KeyRotationFacadeTest.ts | 2442 | function mockPrepareKeyForOtherMembers(user: User, adminKeyLoader: AdminKeyLoaderFacade, cryptoWrapperMock: CryptoWrappe | CODE |
| LOW | …/tests/network/crypto/facades/KeyRotationFacadeTest.ts | 2541 | function verifyUserGroupKeyDataExceptAdminKey(userGroupKeyData: UserGroupKeyRotationData, generatedKeyPairs: Map<AesKey, | CODE |
| LOW | test/tests/desktop/ElectronUpdaterTest.ts | 164 | async function clickOnInstallNotificationEventually() { | CODE |
| LOW | test/tests/desktop/sse/DesktopAlarmSchedulerTest.ts | 312 | function createDeleteAlarmNotification(alarmIdentifier: string) { | CODE |
| LOW | test/tests/subscription/priceTestUtils.ts | 196 | export function createUpgradePriceServiceMock( | CODE |
| LOW | test/tests/subscription/PriceUtilsTest.ts | 156 | async function initPriceAndConfigProvider(): Promise<PriceAndConfigProvider> { | CODE |
| LOW | …rker/utils/spamClassification/SpamMailProcessorTest.ts | 93 | async function createModelInputAndUploadableVectors(datum: SpamMailDatum) { | CODE |
| LOW | …ils/spamClassification/SpamClassifierDataDealerTest.ts | 43 | function createMailByFolderAndReceivedDate(mailId: IdTuple, mailSet: IdTuple, receivedDate: Date, mailDetailsId: Id) { | CODE |
| LOW | …ils/spamClassification/SpamClassifierDataDealerTest.ts | 52 | function createSpamTrainingDatumByConfidenceAndDecision( | CODE |
| LOW | …ils/spamClassification/SpamClassifierDataDealerTest.ts | 67 | function createClientSpamTrainingDatumIndexEntryByClientSpamTrainingDatumElementId(clientSpamTrainingDatumElementId: Id) | CODE |
| LOW | …/worker/utils/spamClassification/SpamClassifierTest.ts | 76 | async function convertToClientTrainingDatum(spamData: SpamMailDatum[], spamProcessor: SpamMailProcessor, isSpam: boolean | CODE |
| LOW | …/worker/utils/spamClassification/SpamClassifierTest.ts | 469 | async function filterForMisclassifiedClientSpamTrainingData( | CODE |
| LOW | …sts/api/worker/search/OfflineStoragePersistenceTest.ts | 515 | async function fakeStoreListElementEntityInOfflineDb(sqlCipherFacade: SqlCipherFacade, entity: ListElementEntity) { | CODE |
| LOW | test/tests/api/worker/facades/ConfigurationDbTest.ts | 104 | function makeNewsletterBannerRuleMocks( | CODE |
| LOW | …sts/api/worker/facades/InstanceKeyProviderMakerTest.ts | 126 | async function convertInstanceToEntityAdapter(instancePipeline: InstancePipeline, entityAdapter: EntityAdapter) { | CODE |
| LOW | test/tests/login/LoginViewModelTest.ts | 40 | function getCredentialsProviderStub(): CredentialsProvider { | CODE |
| LOW | libs/jsQR.js | 1 | (function webpackUniversalModuleDefinition(root, factory) { | CODE |
| LOW | libs/jsQR.js | 9759 | function countBlackWhiteRunTowardsPoint(origin, end, matrix, length) { | CODE |
| LOW | libs/openid-client.js | 279 | function generateRandomCodeVerifier() { | CODE |
| LOW | libs/openid-client.js | 428 | function parseWwwAuthenticateChallenges(response) { | CODE |
| LOW | libs/openid-client.js | 497 | async function parseOAuthResponseErrorBody(response) { | CODE |
| LOW | libs/openid-client.js | 567 | function getValidatedIdTokenClaims(ref) { | CODE |
| LOW | libs/openid-client.js | 577 | async function processGenericAccessTokenResponse(as, client, response, additionalRequiredIdTokenClaims, decryptFn, recog | CODE |
| LOW | libs/openid-client.js | 649 | function checkAuthenticationChallenges(response) { | CODE |
| LOW | libs/openid-client.js | 655 | async function processRefreshTokenResponse(as, client, response, options) { | CODE |
| LOW | libs/openid-client.js | 694 | async function authorizationCodeGrantRequest(as, client, clientAuthentication, callbackParameters, redirectUri, codeVeri | CODE |
| LOW | libs/openid-client.js | 743 | async function processAuthorizationCodeResponse(as, client, response, options) { | CODE |
| LOW | libs/openid-client.js | 751 | async function processAuthorizationCodeOpenIDResponse(as, client, response, expectedNonce, maxAge, decryptFn, recognized | CODE |
| LOW | libs/openid-client.js | 1106 | function calculatePKCECodeChallenge(codeVerifier) { | CODE |
| 663 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rustfmt.toml | 1 | edition = "2024" | COMMENT |
| LOW | test/tests/misc/ListModelTest.ts | 341 | // start state: | COMMENT |
| LOW | test/tests/misc/ListModelTest.ts | 361 | o("when item below selection start is selected selectPrevious adds previous item to selection ", async function () { | COMMENT |
| LOW | test/tests/misc/ListModelTest.ts | 381 | }) | COMMENT |
| LOW | test/tests/misc/ListModelTest.ts | 401 | o(getSortedSelection()).deepEquals([itemA, itemB, itemC]) | COMMENT |
| LOW | test/tests/misc/ListModelTest.ts | 461 | listModel.onSingleInclusiveSelection(itemA) | COMMENT |
| LOW | test/tests/misc/ListModelTest.ts | 481 | ) | COMMENT |
| LOW | test/tests/misc/ListModelTest.ts | 621 | // A + | COMMENT |
| LOW | test/tests/misc/ListModelTest.ts | 681 | // | COMMENT |
| LOW | test/tests/misc/ListElementListModelTest.ts | 61 | o("when the active item is deleted selectPrevious single will still select previous item relative to it", async funct | COMMENT |
| LOW | test/tests/misc/ListElementListModelTest.ts | 81 | }) | COMMENT |
| LOW | test/tests/misc/ListElementListModelTest.ts | 101 | o(listModel.state.inMultiselect).equals(true) | COMMENT |
| LOW | test/tests/misc/PasswordGeneratorTest.ts | 61 | // const upperBoundFor7 = 13421772 | COMMENT |
| LOW | test/tests/crypto/_TODO.ts | 1 | // TODO | COMMENT |
| LOW | …sts/calendar/eventeditor/CalendarEventWhenModelTest.ts | 561 | // const eventWithDefaults = getEventWithDefaultTimes() | COMMENT |
| LOW | …sts/desktop/imapimport/imapsync/ImapSyncSessionTest.ts | 261 | // Drafts | COMMENT |
| LOW | test/tests/api/worker/crypto/CompatibilityTest.ts | 561 | * instructions how to update the test data. | COMMENT |
| LOW | test/tests/api/worker/facades/BlobFacadeTest.ts | 1121 | // Blob id OETv4XP----0 hash [3, -112, 88, -58, -14, -64] bytes [1, 2, 3] | COMMENT |
| LOW | tuta-sdk/rust/make_ios.sh | 61 | # -L "${RELEASE_DIR}/" \ | COMMENT |
| LOW | tuta-sdk/rust/crypto-primitives/src/aes.rs | 41 | #[derive(PartialEq)] | COMMENT |
| LOW | …rust/crypto-primitives/src/compatibility_test_utils.rs | 1 | // when used externally by other crates the feature flag "test_utils" must be active | COMMENT |
| LOW | tuta-sdk/rust/crypto-primitives/src/aead_facade.rs | 21 | pub enum AeadEncryptError { | COMMENT |
| LOW | tuta-sdk/rust/crypto-primitives/src/utils.rs | 1 | #[allow(dead_code)] // TODO decide where to call it | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/metamodel.rs | 61 | pub enum Cardinality { | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/rest_error.rs | 301 | #[error("Not Found")] | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/key_cache.rs | 61 | let referenced = self.current_user_group_key.read().unwrap(); | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/instance_mapper.rs | 101 | /// - (De)Serialize (how to write this type to an arbitrary data format) | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/util/test_utils.rs | 301 | /// # Examples | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/util/test_utils.rs | 341 | let entity = create_test_entity_dict_with_provider(&provider, type_ref.app, type_ref.type_id); | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/date/event_facade.rs | 401 | } | COMMENT |
| LOW | …k/rust/sdk/src/blobs/binary_blob_wrapper_serializer.rs | 1 | #[cfg(test)] | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/blobs/blob_facade.rs | 81 | /// | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/services/generator.rs | 41 | /// | COMMENT |
| LOW | tuta-sdk/rust/sdk/src/services/generator.rs | 61 | /// service_impl!(declare, NewsService, "tutanota/newsservice", 75); | COMMENT |
| LOW | resources/scripts/after-install.sh | 1 | #!/bin/bash | COMMENT |
| LOW | libs/mithril.js | 41 | // | COMMENT |
| LOW | libs/mithril.js | 361 | * @param {'svg' | 'math' | String | null} ns) - the current XML namespace, if any | COMMENT |
| LOW | libs/mithril.js | 381 | // deal with them! | COMMENT |
| LOW | libs/mithril.js | 401 | // and must be created. | COMMENT |
| LOW | libs/mithril.js | 421 | // | COMMENT |
| LOW | libs/mithril.js | 1081 | } | COMMENT |
| LOW | libs/mithril.js | 1421 | // | COMMENT |
| LOW | libs/mithril.js | 1641 | // internal. Also, censor the various lifecycle methods. | COMMENT |
| LOW | libs/jsQR.js | 441 | if (max - min <= MIN_DYNAMIC_RANGE) { | COMMENT |
| LOW | libs/luxon.js | 3221 | COMMENT | |
| LOW | libs/luxon.js | 5841 | // When handling many dates, calculating the offset for now every time is | COMMENT |
| LOW | libs/jszip.js | 561 | COMMENT | |
| LOW | libs/jszip.js | 3821 | /** | COMMENT |
| LOW | libs/jszip.js | 5661 | COMMENT | |
| LOW | libs/jszip.js | 5721 | // Permission is granted to anyone to use this software for any purpose, | COMMENT |
| LOW | libs/jszip.js | 5781 | },{}],45:[function(require,module,exports$1){ | COMMENT |
| LOW | libs/jszip.js | 5841 | },{}],46:[function(require,module,exports$1){ | COMMENT |
| LOW | libs/jszip.js | 6301 | // var curr = s.strstart + s.lookahead; | COMMENT |
| LOW | libs/jszip.js | 7721 | // This software is provided 'as-is', without any express or implied | COMMENT |
| LOW | libs/jszip.js | 7781 | // warranty. In no event will the authors be held liable for any damages | COMMENT |
| LOW | libs/jszip.js | 7981 | // if (len <= op - whave) { | COMMENT |
| LOW | libs/jszip.js | 8121 | },{}],49:[function(require,module,exports$1){ | COMMENT |
| LOW | libs/jszip.js | 9681 | // warranty. In no event will the authors be held liable for any damages | COMMENT |
| LOW | libs/jszip.js | 10021 | // (C) 1995-2013 Jean-loup Gailly and Mark Adler | COMMENT |
| LOW | libs/jszip.js | 10061 | // Permission is granted to anyone to use this software for any purpose, | COMMENT |
| 76 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | libs/openid-client.js | 1096 | return None$1(); | CODE |
| HIGH | src/platform-kit/meta/EntityUtils.ts | 79 | * @return True if firstId is bigger than secondId, false otherwise. | COMMENT |
| HIGH | src/platform-kit/utils/ArrayUtils.ts | 100 | * @return True if the element was removed, false otherwise. | COMMENT |
| HIGH | src/platform-kit/utils/StringUtils.ts | 21 | * @return True if string begins with substring, false otherwise. | COMMENT |
| HIGH | src/platform-kit/utils/StringUtils.ts | 40 | * @return True if string ends with substring, false otherwise. | COMMENT |
| HIGH | src/applications/common/native/WebDesktopFacade.ts | 16 | print(): Promise<void> { | CODE |
| HIGH | src/applications/common/api/common/utils/UserUtils.ts | 8 | * @return True if the user is an admin | COMMENT |
| HIGH | src/applications/common/api/common/utils/UserUtils.ts | 20 | * @return True if an internal user is logged in, false if no user or an external user is logged in. | COMMENT |
| HIGH | src/applications/common/api/main/UserController.ts | 88 | * @return True if the user is an admin | COMMENT |
| HIGH | src/applications/common/api/main/UserController.ts | 112 | * @return True if an internal user is logged in, false if no user or an external user is logged in. | COMMENT |
| HIGH | …/applications/mail-app/templates/TemplateGroupUtils.ts | 10 | * @return True if the group has been created. | COMMENT |
| HIGH | …idge/common/generatedipc/types/MobileSystemFacade.d.ts | 66 | print(): Promise<void> | CODE |
| HIGH | …ve-bridge/common/generatedipc/types/DesktopFacade.d.ts | 7 | print(): Promise<void> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/plugin-kit/plugin-manager/hostApi/WindowHost.ts | 20 | // if (!this.manifest.permissions.windowOpen.allowedDomains.includes(targetUrl.host)) { | COMMENT |
| CRITICAL | …calendar/gui/eventeditor-view/CalendarEventEditView.ts | 100 | vnode.attrs.model.editModels.alarmModel.addAll(initialAlarms) | CODE |
| CRITICAL | …calendar/gui/eventeditor-view/CalendarEventEditView.ts | 107 | this.separateStartAndEndTimeZone = vnode.attrs.model.editModels.whenModel.hasSeparateStartAndEndTimeZone() | CODE |
| CRITICAL | …pplications/common/support/pages/ContactSupportPage.ts | 63 | this.htmlEditor.editor.initialized.promise.then(() => { | CODE |
| CRITICAL | src/app-kit/native-bridge/main/IosNativeTransport.ts | 25 | this.window.webkit.messageHandlers.nativeApp.postMessage(encoded) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/tests/mail/SendMailModelTest.ts | 88 | const BODY_TEXT_1 = "lorem ipsum dolor yaddah yaddah" | CODE |
| LOW | test/tests/contacts/ContactListEditorTest.ts | 14 | const newEmail = "test@test.com" | CODE |
| LOW | test/tests/contacts/ContactListEditorTest.ts | 23 | const newEmail = "test@test.com" | CODE |
| LOW | test/tests/contacts/ContactListEditorTest.ts | 34 | const newEmail = "test@test.com" | CODE |
| LOW | test/tests/network/ServiceExecutorTest.ts | 114 | saltData = createTestEntity(SaltDataTypeRef, { mailAddress: "someuser@example.org" }, { populateAggregates: true }) | CODE |
| LOW | …pi/common/utils/imapImportUtils/ImapImportUtilsTest.ts | 33 | o.check(guessServerImapConfigFromEmail("test@test.com")).equals(null) | CODE |
| LOW | test/tests/api/worker/crypto/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | test/tests/api/worker/crypto/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | libs/purify.js | 650 | "placeholder", | CODE |
| LOW | libs/purify.js | 1270 | "placeholder", | CODE |
| LOW | …ndar/src/androidTest/assets/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | …ndar/src/androidTest/assets/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | …/java/de/tutao/calendar/widget/WidgetConfigActivity.kt | 713 | "foo@bar.com", | CODE |
| LOW | …/java/de/tutao/calendar/widget/WidgetConfigActivity.kt | 743 | "foo@bar.com", | CODE |
| LOW | …/app/src/androidTest/assets/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | …/app/src/androidTest/assets/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | …ared/src/androidTest/assets/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | …ared/src/androidTest/assets/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | app-ios/tutanotaTests/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | app-ios/tutanotaTests/CompatibilityTestData.json | 3848 | "uncompressedText": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut lab | CODE |
| LOW | src/ui/dialogs/MultiPageDialog.ts | 63 | * m("h3", "John Doe"), | COMMENT |
| LOW | src/ui/dialogs/MultiPageDialog.ts | 64 | * m("h3", "Jane Doe"), | COMMENT |
| LOW | src/ui/base/InputButton.ts | 39 | * display: lang.get("placeholder"), | COMMENT |
| LOW | src/ui/base/SingleLineTextField.ts | 63 | * ariaLabel: lange.get("placeholder"), | COMMENT |
| LOW | src/ui/base/SingleLineTextField.ts | 67 | * placeholder: lang.get("placeholder"), | COMMENT |
| LOW | src/ui/base/ExpandableTextArea.ts | 36 | type TextAreaAttributes = Pick<TextAreaAttrs, "style" | "variant" | "placeholder" | "oninput" | "disabled" | "resizable" | CODE |
| LOW | src/ui/base/ExpandableTextArea.ts | 54 | * placeholder: "placeholder", | COMMENT |
| LOW | src/ui/base/ExpandableTextArea.ts | 79 | "placeholder", | CODE |
| LOW | src/ui/base/TextArea.ts | 48 | * placeholder: "placeholder", | COMMENT |
| LOW | src/app-kit/mimimi/src/test_utils.rs | 36 | .from(("Matthias", "map@example.org")) | CODE |
| LOW | src/app-kit/mimimi/src/test_utils.rs | 37 | .to(("Johannes", "jhm@example.org")) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/platform-kit/base/base-crypto/CryptoFacade.ts | 412 | // because we need to check if the confidential flag is set, which is encrypted still | COMMENT |
| LOW⚡ | …c/applications/common/calendar/gui/CalendarTimeGrid.ts | 244 | // Step 1: Convert events to row-based coordinates | COMMENT |
| LOW⚡ | …c/applications/common/calendar/gui/CalendarTimeGrid.ts | 252 | // Step 2: Pack events into columns using first-fit strategy | COMMENT |
| LOW⚡ | …c/applications/common/calendar/gui/CalendarTimeGrid.ts | 255 | // Step 3: Expand events to fill available horizontal space | COMMENT |
| LOW⚡ | src/applications/common/calendar/gui/AllDaySection.ts | 133 | // Step 1: Convert events to column-based coordinates | COMMENT |
| LOW⚡ | src/applications/common/calendar/gui/AllDaySection.ts | 140 | // Step 2: Pack events into columns using first-fit strategy | COMMENT |
| LOW | …applications/common/desktop/files/DesktopFileFacade.ts | 450 | // (see revision ac6ba0a87f5c718649354a8f5a589dcfa570515e), so we need to check if the value is a file URL and if so, | COMMENT |
| LOW | …applications/common/gui/desktop/SearchInPageOverlay.ts | 199 | * from losing it via click/tab we need to check if anything else was clicked and tell the main thread to | COMMENT |
| LOW | …plications/common/api/main/PageContextLoginListener.ts | 61 | * It is possible that a KDF migration was executed by a different client. This would change the passphrase key, so we | COMMENT |
| LOW | src/applications/mail-app/mail/view/MailListView.ts | 264 | // We have downloaded it, but we need to check if it still exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app-ios/calendar-project.yml | 29 | # XCode will not resolve symbolic links when adding a folder reference, so we will just use a relative path | COMMENT |
| LOW | app-ios/mail-project.yml | 28 | # XCode will not resolve symbolic links when adding a folder reference, so we will just use a relative path | COMMENT |
| LOW | app-ios/drive-project.yml | 29 | # XCode will not resolve symbolic links when adding a folder reference, so we will just use a relative path | COMMENT |
| MEDIUM | app-ios/TutanotaSharedFramework/Utils/Utils.swift | 13 | // Definitely need a script to automate. | COMMENT |
| MEDIUM | …cations/calendar-app/calendar/export/CalendarParser.ts | 708 | // Convert it back to NumberString. Could use original one but this feels more robust. | COMMENT |
| MEDIUM | …c/applications/common/subscription/utils/PriceUtils.ts | 40 | // additional cast to make this robust against changes to the PaymentInterval enum. | COMMENT |
| MEDIUM | …lications/mail-app/mail/model/ConversationListModel.ts | 305 | // Essentially, we keep loading until that mail is loaded and manually select its conversation once it's found | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …lications/mail-app/mail/model/ConversationListModel.ts | 600 | // The way the cache works is that it tries to fulfill the API contract of returning as many items as requested as lon | COMMENT |
| HIGH | src/applications/mail-app/mail/model/MailListModel.ts | 354 | // The way the cache works is that it tries to fulfill the API contract of returning as many items as requested as lon | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …lendar/src/main/java/de/tutao/calendar/MainActivity.kt | 0 | document.documentelement.style.setproperty('--safe-area-inset-left', '${left}px'); document.documentelement.style.setpro | STRING |
| HIGH | …id/app/src/main/java/de/tutao/tutanota/MainActivity.kt | 0 | document.documentelement.style.setproperty('--safe-area-inset-left', '${left}px'); document.documentelement.style.setpro | STRING |
| HIGH | …oid/drive/src/main/java/de/tutao/drive/MainActivity.kt | 0 | document.documentelement.style.setproperty('--safe-area-inset-left', '${left}px'); document.documentelement.style.setpro | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …c/applications/common/calendar/gui/CalendarTimeGrid.ts | 244 | // Step 1: Convert events to row-based coordinates | COMMENT |
| LOW⚡ | …c/applications/common/calendar/gui/CalendarTimeGrid.ts | 252 | // Step 2: Pack events into columns using first-fit strategy | COMMENT |
| LOW⚡ | …c/applications/common/calendar/gui/CalendarTimeGrid.ts | 255 | // Step 3: Expand events to fill available horizontal space | COMMENT |
| LOW⚡ | src/applications/common/calendar/gui/AllDaySection.ts | 133 | // Step 1: Convert events to column-based coordinates | COMMENT |
| LOW⚡ | src/applications/common/calendar/gui/AllDaySection.ts | 140 | // Step 2: Pack events into columns using first-fit strategy | COMMENT |
| LOW | src/applications/common/api/common/utils/IndexUtils.ts | 97 | // NOTE: This function is not covering all edge-cases. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/examples/PlatformKitExample.ts | 40 | // ── argon2 facade (wasm from test/build/) ───────────────────────────────────── | COMMENT |
| MEDIUM | test/examples/PlatformKitExample.ts | 49 | // ── apps ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/examples/PlatformKitExample.ts | 62 | // ── stubs ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/examples/PlatformKitExample.ts | 112 | // ── setup & run ─────────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app-ios/Sqlcipher/SqliteDb.swift | 89 | print("Error closing database: \(errmsg): \(self.getLastErrorMessage())") // ignore | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app-ios/Sqlcipher/SqliteDb.swift | 8 | /// Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tuta-sdk/rust/sdk/src/crypto/crypto_facade.rs | 288 | let mut _auth_status: Option<EncryptionAuthStatus> = None; // TODO: implement | CODE |