The Mullvad VPN client app for desktop and mobile
This report summarizes scanner evidence for mullvad/mullvadvpn-app, a Rust project with 7,727 GitHub stars. SynthScan examined 523,793 lines of code across 5788 source files, recording 839 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 1.8 (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? 799 finding(s).
Are imports declared and package/API names verified? 22 finding(s).
Are wrappers, guards, and repeated structures necessary? 293 finding(s).
Which changes need focused human review? 839 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 839 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 | deny.toml | 101 | { name = "tokio", version = "0" }, | COMMENT |
| LOW | osv-scanner.toml | 1 | # List of ignored known vulnerabilities | COMMENT |
| LOW | osv-scanner.toml | 21 | # * The default should be to ignore a vulnerability for three months. | COMMENT |
| LOW | osv-scanner.toml | 41 | # issue, follow these steps: | COMMENT |
| LOW | osv-scanner.toml | 61 | # ``` | COMMENT |
| LOW | talpid-core/src/resolver.rs | 461 | ) -> Result<Server<ResolverImpl>, Error> { | COMMENT |
| LOW | talpid-core/src/tunnel_state_machine/mod.rs | 61 | const TUNNEL_STATE_MACHINE_SHUTDOWN_TIMEOUT: Duration = Duration::from_secs(5); | COMMENT |
| LOW | talpid-core/src/tunnel_state_machine/mod.rs | 101 | /// Block traffic unless connected to the VPN. | COMMENT |
| LOW | talpid-core/src/tunnel_state_machine/mod.rs | 761 | NewState((Box<dyn TunnelState>, TunnelStateTransition)), | COMMENT |
| LOW | talpid-core/src/firewall/macos.rs | 21 | COMMENT | |
| LOW | talpid-core/src/firewall/mod.rs | 81 | /// See the [security](../../../docs/security.md) document for the specification on how to | COMMENT |
| LOW | talpid-core/src/firewall/mod.rs | 101 | #[cfg(target_os = "macos")] | COMMENT |
| LOW | talpid-core/src/firewall/linux.rs | 361 | // in the cgroup that the parent process belongs to at the time. | COMMENT |
| LOW | talpid-core/src/firewall/linux.rs | 421 | // Split tunneled processes have their PIDs added to a cgroup (v1 or v2). | COMMENT |
| LOW | talpid-core/src/firewall/windows/hyperv.rs | 41 | let con = WMIConnection::with_namespace_path(WMI_NAMESPACE).map_err(Error::ConnectWmi)?; | COMMENT |
| LOW | talpid-core/src/firewall/windows/objects/persistent.rs | 61 | COMMENT | |
| LOW | talpid-core/src/firewall/windows/winfw/mod.rs | 61 | /// Return the policy currently in effect. | COMMENT |
| LOW | talpid-core/src/split_tunnel/android.rs | 1 | /// Errors related to split tunneling. | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/tun.rs | 41 | /// Errors related to split tunneling. | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/tun.rs | 61 | CreatePcap(#[source] pcap::Error), | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/bpf.rs | 21 | task::{Context, Poll}, | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/bpf.rs | 341 | /// n=0: bpf_wordalign(0) == 0 | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/process.rs | 41 | UnsupportedMacosVersion { | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/process.rs | 521 | } | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/process.rs | 541 | path: PathBuf, | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/process.rs | 561 | /// "ruid":0, | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/default.rs | 1 | //! Functions for handling default interfaces/routes | COMMENT |
| LOW | talpid-core/src/split_tunnel/macos/include/bindings.h | 1 | #include <sys/param.h> | COMMENT |
| LOW | talpid-core/src/split_tunnel/linux/mod.rs | 241 | /// This returns none if we're using cgroups v1, or if we failed to create the v1 cgroup. | COMMENT |
| LOW | talpid-core/src/split_tunnel/windows/path_monitor.rs | 1 | //! This module detects changes to paths that are symlinks, resolves them and updates paths used by | COMMENT |
| LOW | talpid-core/src/split_tunnel/windows/service.rs | 21 | // generous timeout here. It might make sense to redesign split tunneling to not block the rest | COMMENT |
| LOW | talpid-core/src/split_tunnel/windows/mod.rs | 321 | /// | COMMENT |
| LOW | talpid-core/src/split_tunnel/windows/driver.rs | 901 | } | COMMENT |
| LOW | mullvad-daemon-relay-selector/src/relay_selector/mod.rs | 21 | /// retry attempts (`ip_version` and `obfuscation`). All other fields are left as | COMMENT |
| LOW | mullvad-daemon-relay-selector/src/relay_selector/mod.rs | 221 | #[cfg(test)] | COMMENT |
| LOW | mullvad-api/src/lib.rs | 81 | pub struct ApiEndpoint { | COMMENT |
| LOW | mullvad-api/src/lib.rs | 101 | /// The overridden sigsum trusted public keys used for verifying the transparency logged | COMMENT |
| LOW | mullvad-api/src/lib.rs | 121 | /// By default, `force_direct` will be `true` if the `api-override` feature | COMMENT |
| LOW | mullvad-api/src/relay_list.rs | 501 | /// | COMMENT |
| LOW | mullvad-api/src/access_mode.rs | 41 | #[cfg(not(target_os = "android"))] | COMMENT |
| LOW | mullvad-api/src/access_mode.rs | 61 | ) -> Result<()> { | COMMENT |
| LOW | mullvad-api/src/relay_list_transparency/mod.rs | 81 | /// that corresponds to this signature and the timestamp of when it was signed. | COMMENT |
| LOW | mullvad-api/src/relay_list_transparency/mod.rs | 121 | } | COMMENT |
| LOW | mullvad-update/src/format/mod.rs | 1 | //! This module includes all that is needed for the (de)serialization of Mullvad version metadata. | COMMENT |
| LOW | mullvad-update/src/format/serializer.rs | 1 | //! Serializer for signed version response data | COMMENT |
| LOW | mullvad-update/src/client/tls.rs | 1 | //! rustls client config shared by the reqwest-based HTTP clients in this crate. | COMMENT |
| LOW | mullvad-version/src/main.rs | 41 | COMMENT | |
| LOW | test/osv-scanner.toml | 1 | # See repository root `osv-scanner.toml` for instructions and rules for this file. | COMMENT |
| LOW | test/am-i-mullvad-client/src/lib.rs | 41 | Connect(#[from] hyper_util::client::legacy::Error), | COMMENT |
| LOW | test/test-rpc/src/client.rs | 261 | /// | COMMENT |
| LOW | test/test-manager/test_macro/src/lib.rs | 1 | use proc_macro::TokenStream; | COMMENT |
| LOW | test/test-manager/test_macro/src/lib.rs | 21 | /// The `test_function` macro takes 3 optional arguments | COMMENT |
| LOW | test/test-manager/test_macro/src/lib.rs | 41 | /// rpc: ServiceClient, | COMMENT |
| LOW | test/test-manager/src/main.rs | 81 | /// Partner API token to use for testing. Overrides the account of the environment. | COMMENT |
| LOW | test/test-manager/src/main.rs | 101 | /// | COMMENT |
| LOW | test/test-manager/src/config/vm.rs | 41 | #[serde(default)] | COMMENT |
| LOW | test/test-manager/src/config/manifest.rs | 61 | /// defaults. | COMMENT |
| LOW | test/test-manager/src/config/manifest/test_locations.rs | 21 | /// The format is a list of maps with a single key-value | COMMENT |
| LOW | test/test-manager/src/tests/tunnel.rs | 581 | Ok(()) | COMMENT |
| LOW | test/test-manager/src/tests/ui.rs | 121 | rpc: ServiceClient, | COMMENT |
| 431 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | desktop/packages/mullvad-vpn/test/unit/utils.ts | 6 | function isReactElementWithChildren(element: unknown): element is ReactElementWithChildren { | CODE |
| LOW | desktop/packages/mullvad-vpn/test/unit/utils.ts | 35 | export function expectChildrenToMatchElements( | CODE |
| LOW | …/e2e/installed/state-dependent/split-tunneling.spec.ts | 178 | function getDaemonSplitTunnelingApplications() { | CODE |
| LOW | …ages/mullvad-vpn/test/e2e/setup/mock-relay-selector.ts | 21 | function getDiscardCausedByAntiCensorship( | CODE |
| LOW | …ages/mullvad-vpn/test/e2e/setup/mock-relay-selector.ts | 35 | function getDiscardCausedByIpVersion(relay: IRelayListHostname, ipVersion: Constraint<IpVersion>) { | CODE |
| LOW | …ages/mullvad-vpn/test/e2e/setup/mock-relay-selector.ts | 49 | function getDiscardCausedByLocation( | CODE |
| LOW | …ages/mullvad-vpn/test/e2e/setup/mock-relay-selector.ts | 72 | function getDiscardCausedByOwnership(ownership: Ownership | undefined, relay: IRelayListHostname) { | CODE |
| LOW | …ages/mullvad-vpn/test/e2e/setup/mock-relay-selector.ts | 83 | function getDiscardCausedByProviders( | CODE |
| LOW | …ages/mullvad-vpn/test/e2e/setup/mock-relay-selector.ts | 94 | function getDiscardCausedByConflictWithOtherHop( | CODE |
| LOW | …ages/mullvad-vpn/test/e2e/setup/mock-relay-selector.ts | 108 | function getDiscardCausedByEntryConstraints( | CODE |
| LOW | …/packages/mullvad-vpn/scripts/fetch-relay-locations.py | 25 | def extract_relay_translations(): | CODE |
| LOW | …/packages/mullvad-vpn/scripts/fetch-relay-locations.py | 73 | def extract_relay_locations_pot(countries): | CODE |
| LOW | …kages/mullvad-vpn/scripts/integrate-relay-locations.py | 27 | def merge_relay_locations_catalogue_template(): | CODE |
| LOW | …ages/mullvad-vpn/scripts/verify-translations-format.ts | 29 | function parseTranslationsForLocale(locale: string): GetTextTranslation[] { | CODE |
| LOW | …ages/mullvad-vpn/scripts/verify-translations-format.ts | 53 | function checkFormatSpecifiersImpl(msgid: string, msgstr: string): boolean { | CODE |
| LOW | …tom-list-button/RemoveLocationFromCustomListButton.tsx | 15 | export function RemoveLocationFromCustomListButton({ | CODE |
| LOW | …-geographical-location-menu/CustomListLocationMenu.tsx | 14 | export function CustomListGeographicalLocationMenu({ | CODE |
| LOW | …e-custom-list-dialog/CreateCustomListDialogContext.tsx | 38 | export function CreateCustomListDialogProvider({ | CODE |
| LOW | …s/create-custom-list-dialog/CreateCustomListDialog.tsx | 29 | function CreateCustomListDialogImpl(props: CreateCustomListDialogImplProps) { | CODE |
| LOW | …t-dialog/hooks/use-handle-submit-create-custom-list.ts | 6 | export function useHandleSubmitAddCustomList() { | CODE |
| LOW | …ist-dialog/hooks/use-handle-custom-list-name-change.ts | 5 | export function useHandleCustomListNameChange() { | CODE |
| LOW | …st-dialog/hooks/use-handle-click-create-custom-list.ts | 5 | export function useHandleClickCreateCustomList() { | CODE |
| LOW | …nu-button/CustomListGeographicalLocationMenuButton.tsx | 11 | export function CustomListGeographicalLocationMenuButton({ | CODE |
| LOW | …dit-custom-list-dialog/EditCustomListDialogContext.tsx | 38 | export function EditCustomListDialogProvider({ | CODE |
| LOW | …ist-dialog/hooks/use-handle-custom-list-name-change.ts | 5 | export function useHandleCustomListNameChange() { | CODE |
| LOW | …st-dialog/hooks/use-handle-click-update-custom-list.ts | 5 | export function useHandleClickUpdateCustomList() { | CODE |
| LOW | …t-dialog/hooks/use-handle-submit-update-custom-list.ts | 6 | export function useHandleSubmitUpdateCustomList() { | CODE |
| LOW | …o-custom-list-dialog/AddLocationToCustomListDialog.tsx | 17 | export function AddLocationToCustomListDialog({ | CODE |
| LOW | …tom-list-list-item/AddLocationToCustomListListItem.tsx | 20 | export function AddLocationToCustomListListItem({ list, location }: SelectListProps) { | CODE |
| LOW | …om-lists/hooks/use-remove-location-from-custom-list.ts | 10 | export function useRemoveLocationFromCustomList() { | CODE |
| LOW | …/custom-lists/hooks/use-add-location-to-custom-list.ts | 7 | export function useAddLocationToCustomList() { | CODE |
| LOW | …s/locations/utils/map-redux-relay-to-relay-location.ts | 13 | export function mapReduxRelayToRelayLocation( | CODE |
| LOW | …es/locations/utils/search-custom-list-and-locations.ts | 6 | export function searchCustomListAndLocations( | CODE |
| LOW | …s/utils/filter-countries-by-ownership-and-providers.ts | 7 | export function filterCountriesByOwnershipAndProviders( | CODE |
| LOW | …/utils/filter-countries-by-relay-locations-filtered.ts | 10 | export function filterCountriesByRelayLocationsFiltered( | CODE |
| LOW | …locations/utils/get-relay-locations-filtered-filter.ts | 10 | export function getRelayLocationsFilteredFilter( | CODE |
| LOW | …s/utils/get-relay-locations-filtered-matches-filter.ts | 4 | export function getRelayLocationsFilteredMatchesFilter(relayMatches: RelaySelectorRelayMatch[]) { | CODE |
| LOW | …/utils/get-relay-locations-filtered-discards-filter.ts | 5 | export function getRelayLocationsFilteredDiscardsFilter( | CODE |
| LOW | …cations/utils/map-redux-country-to-country-location.ts | 10 | export function mapReduxCountryToCountryLocation( | CODE |
| LOW | …res/locations/utils/map-redux-city-to-city-location.ts | 13 | export function mapReduxCityToCityLocation( | CODE |
| LOW | …ocation-menu-button/GeographicalLocationMenuButton.tsx | 11 | export function GeographicalLocationMenuButton({ | CODE |
| LOW | …custom-list-menu-option/CreateCustomListMenuOption.tsx | 13 | export function CreateCustomListMenuOption({ | CODE |
| LOW | …list-menu-option/AddLocationToCustomListMenuOption.tsx | 20 | export function AddLocationToCustomListMenuOption({ | CODE |
| LOW | …cation-menu/hooks/use-show-set-as-entry-menu-option.ts | 5 | export function useShowSetAsEntryMenuOption(location: GeographicalLocation) { | CODE |
| LOW | …ocation-menu/hooks/use-show-set-as-exit-menu-option.ts | 5 | export function useShowSetAsExitMenuOption(location: GeographicalLocation) { | CODE |
| LOW | …/hooks/use-map-redux-countries-to-country-locations.ts | 10 | export function useMapReduxCountriesToCountryLocations( | CODE |
| LOW | …ures/locations/hooks/use-is-providers-filter-active.ts | 5 | export function useIsProvidersFilterActive(locationType: LocationType) { | CODE |
| LOW | …graphical-location-in-relay-locations-for-hostnames.ts | 8 | export function useGetIsGeographicalLocationInRelayLocationsForHostnames(hostnames: string[]) { | CODE |
| LOW | …get-is-custom-list-in-relay-locations-for-hostnames.ts | 8 | export function useGetIsCustomListInRelayLocationsForHostnames(hostnames: string[]) { | CODE |
| LOW | …-is-relay-location-in-relay-locations-for-hostnames.ts | 8 | export function useGetIsRelayLocationInRelayLocationsForHostnames(hostnames: string[]) { | CODE |
| LOW | …locations/hooks/use-selected-entry-or-exit-location.ts | 6 | export function useSelectedEntryOrExitLocation( | CODE |
| LOW | …ures/locations/hooks/use-is-ownership-filter-active.ts | 5 | export function useIsOwnershipFilterActive(locationType: LocationType) { | CODE |
| LOW | …s/locations/hooks/use-map-custom-lists-to-locations.ts | 16 | export function useMapCustomListsToLocations( | CODE |
| LOW | …atures/locations/hooks/use-filter-country-locations.ts | 8 | export function useFilterCountryLocations(locationType: LocationType) { | CODE |
| LOW | …atures/locations/hooks/use-relay-locations-discards.ts | 6 | export function useRelayLocationsDiscardsHostnames(locationType: LocationType) { | CODE |
| LOW | …atures/locations/hooks/use-search-country-locations.ts | 6 | export function useSearchCountryLocations( | CODE |
| LOW | …eatures/locations/hooks/use-relay-locations-matches.ts | 6 | export function useRelayLocationsMatchesHostnames(locationType: LocationType) { | CODE |
| LOW | …es/locations/hooks/use-search-custom-list-locations.ts | 6 | export function useSearchCustomListLocations( | CODE |
| LOW | …/features/migration/utils/settings-migration-to-key.ts | 62 | function isSplitFilterMigrationScenario( | CODE |
| LOW | …ures/migration/hooks/use-latest-completed-migration.ts | 5 | export function useLatestCompletedMigration(): SettingsMigration | undefined { | CODE |
| 215 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 19 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 21 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 27 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 30 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 43 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 48 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 57 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 59 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 67 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 69 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 74 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | ci/ios/reboot_phone.sh | 76 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | ci/ios/reboot_phone.sh | 95 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | ci/ios/reboot_phone.sh | 97 | # ------------------------------------------------------------------------------ | COMMENT |
| MEDIUM | mullvad-types/src/constraints/mod.rs | 140 | // ── Struct derive ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | mullvad-types/src/constraints/mod.rs | 163 | // ── Enum derive ─────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | mullvad-daemon/src/tunnel.rs | 234 | let tunnel_ipv4 = data.device.wg_data.addresses.ipv4_address.ip(); | CODE |
| CRITICAL | mullvad-daemon/src/tunnel.rs | 235 | let tunnel_ipv6 = data.device.wg_data.addresses.ipv6_address.ip(); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/select-location/components/header-menu/HeaderMenu.tsx | 77 | <Menu.Option.Item.Icon icon="placeholder" /> | CODE |
| LOW | …/select-location/components/header-menu/HeaderMenu.tsx | 95 | <Menu.Option.Item.Icon icon="placeholder" /> | CODE |
| LOW | …/select-location/components/header-menu/HeaderMenu.tsx | 113 | <Menu.Option.Item.Icon icon="placeholder" /> | CODE |
| LOW | …-location-selector/components/entry-item/EntryItem.tsx | 9 | 'name' | 'placeholder' | 'value' | 'id' | 'type' | CODE |
| LOW | …ct-location-selector/components/exit-item/ExitItem.tsx | 9 | 'name' | 'placeholder' | 'value' | 'id' | 'type' | CODE |
| LOW | …el/components/feature-indicators/FeatureIndicators.tsx | 75 | // To solve this the indicators are first rendered hidden along with a invisible "placeholder" | COMMENT |
| LOW | …llvad-vpn/src/renderer/lib/components/wizard/README.md | 15 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …llvad-vpn/src/renderer/lib/components/wizard/README.md | 15 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …llvad-vpn/src/renderer/lib/components/wizard/README.md | 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …llvad-vpn/src/renderer/lib/components/wizard/README.md | 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …vad-vpn/src/renderer/lib/components/carousel/README.md | 15 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …vad-vpn/src/renderer/lib/components/carousel/README.md | 15 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …/mullvad-vpn/src/renderer/lib/components/icon/Icon.tsx | 7 | icon: keyof typeof icons | 'placeholder'; | CODE |
| LOW | …/mullvad-vpn/src/renderer/lib/components/icon/Icon.tsx | 52 | if (iconProp === 'placeholder') { | CODE |
| LOW | …lvad/mullvadvpn/lib/ui/component/dialog/InputDialog.kt | 31 | message = AnnotatedString("Lorem ipsum"), | CODE |
| LOW | …d/mullvadvpn/feature/account/impl/AccountScreenTest.kt | 113 | private const val DUMMY_DEVICE_NAME = "fake_name" | CODE |
| LOW | …ullvadvpn/feature/account/impl/AccountViewModelTest.kt | 46 | name = "fake_name", | CODE |
| LOW | …ullvadvpn/feature/account/impl/AccountViewModelTest.kt | 128 | private const val DUMMY_DEVICE_NAME = "fake_name" | CODE |
| LOW | …pl/viewlogs/ViewLogsUiStatePreviewParameterProvider.kt | 11 | val text = List(SIZE) { "Lorem ipsum dolor ".repeat(SIZE) } | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | Cargo.toml | 185 | # Easy to read style and opinionated best practices | COMMENT |
| MEDIUM | mullvad-update/src/format/mod.rs | 5 | //! Fundamentally, a version object is a JSON object with a `signed` key and a `signature` key. | COMMENT |
| MEDIUM | test/Cargo.toml | 67 | # Easy to read style and opinionated best practices | COMMENT |
| MEDIUM | ci/ios/test-router/raas/Cargo.toml | 54 | # Easy to read style and opinionated best practices | COMMENT |
| LOW | mullvad-relay-selector/src/relay_selector/relays.rs | 27 | /// # Why not simply use [`WireguardRelay`]? | COMMENT |
| LOW | mullvad-relay-selector/src/relay_selector/relays.rs | 37 | /// # Why not simply use [`WireguardRelay`]? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/test-manager/test_macro/src/lib.rs | 33 | /// ## Create a standard test. | COMMENT |
| MEDIUM | test/test-manager/test_macro/src/lib.rs | 48 | /// ## Create a test with custom parameters | COMMENT |
| MEDIUM | ci/ios/create-vm/install-vanilla-ventura.pkr.hcl | 52 | # Create a Computer Account | COMMENT |
| MEDIUM | .github/workflows/ios-end-to-end-tests.yml | 57 | # Define the set of tests to run based on the event type and input | COMMENT |
| MEDIUM | mullvad-ios/deny.toml | 1 | # This file is for an additional check to prevent GPL-3.0-or-later licensed crates | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test-manager/src/tests/audits/mul_02_002.rs | 35 | // Step 1 - Choose a relay | COMMENT |
| LOW | test/test-manager/src/tests/audits/mul_02_002.rs | 50 | // Step 2 - Start a network monitor snooping the outbound network interface for some | COMMENT |
| LOW | test/test-manager/src/tests/audits/mul_02_002.rs | 62 | // Step 3 - Start the rogue program which will try to leak the unique identifier payload | COMMENT |
| LOW | test/test-manager/src/tests/audits/mul_02_002.rs | 78 | // Step 4 - Finally, connect to a tunnel and assert that no outgoing traffic contains the | COMMENT |
| LOW | mullvad-problem-report/src/lib.rs | 522 | // IMPORTANT: Make sure this implementation stays in sync with `parse_metadata` below. | COMMENT |
| LOW | mullvad-problem-report/src/lib.rs | 542 | // IMPORTANT: Make sure this implementation stays in sync with `write_to` above. | COMMENT |
| LOW | …/mullvad/mullvadvpn/lib/common/util/VpnServiceUtils.kt | 64 | // NOTE: This function will return the current Always-on VPN package's name. In case of either | COMMENT |
| LOW | talpid-tunnel/src/tun_provider/unix.rs | 166 | // NOTE: This function does seemingly have an effect on Linux, despite what the deprecation | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | build.sh | 58 | # Check if we are a building a release. Meaning we are configured to build with optimizations, | COMMENT |
| LOW | ci/verify-locked-down-signatures.sh | 81 | # Check if important file has been removed. | COMMENT |
| LOW | ci/mullvad-browser/download-mullvad-browser.sh | 67 | # Check if the deb package has changed since last time | COMMENT |
| LOW | installer-downloader/build.sh | 332 | # Check if the current commit has a signed tag | COMMENT |
| LOW | dist-assets/linux/before-remove.sh | 11 | # Check if we're running during an upgrade step on Fedora | COMMENT |
| LOW | dist-assets/linux/after-install.sh | 10 | # Check if the system supports a new-enough AppArmor version. | COMMENT |
| LOW | android/scripts/check-empty-strings.sh | 3 | # Check if any string, plural or relay location is empty across all locales. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test-rpc/src/transport.rs | 404 | // TODO: implement without copying | COMMENT |
| LOW | talpid-dbus/src/lib.rs | 4 | #[cfg(feature = "libdbus")] // TODO: implement network_manager using zbus | COMMENT |
| LOW | talpid-wireguard/src/gotatun/conversions.rs | 26 | // TODO: implement zeroize in gotatun | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | desktop/packages/mullvad-vpn/crowdin.yml | 1 | # Usage: | COMMENT |
| LOW | ios/translation/crowdin.yml | 2 | # Usage: | COMMENT |
| LOW | android/scripts/run-instrumented-tests-repeat.sh | 5 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/packages/mullvad-vpn/scripts/fetch-relay-locations.py | 28 | except Exception as e: | CODE |
| MEDIUM | …/packages/mullvad-vpn/scripts/fetch-relay-locations.py | 25 | def extract_relay_translations(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …kages/mullvad-vpn/scripts/integrate-relay-locations.py | 7 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ios/MullvadVPN/BackgroundTask.swift | 16 | When adding new background tasks, don't forget to update `BGTaskSchedulerPermittedIdentifiers` key in `Info.plist` by a | CODE |