🦊 Anti-detect browser
This report summarizes scanner evidence for daijro/camoufox, a Python project with 12,463 GitHub stars. SynthScan examined 142,215 lines of code across 364 source files, recording 1373 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 14.9 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 950 finding(s).
Are imports declared and package/API names verified? 98 finding(s).
Are wrappers, guards, and repeated structures necessary? 947 finding(s).
Which changes need focused human review? 1373 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 1373 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 |
|---|---|---|---|---|
| MEDIUM | python/tests/test_voices.py | 109 | # ── Fail-closed voice configuration (daijro/camoufox#731) ──────────────────── | COMMENT |
| MEDIUM⚡ | python/tests/test_font_distribution.py | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_font_distribution.py | 76 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_font_distribution.py | 118 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_font_distribution.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_font_distribution.py | 222 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | python/tests/test_font_distribution.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_font_distribution.py | 249 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | python/tests/test_font_distribution.py | 251 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/pw_camoufox_plugin.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/pw_camoufox_plugin.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/pw_camoufox_plugin.py | 124 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/pw_camoufox_plugin.py | 126 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/pw_camoufox_plugin.py | 158 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/pw_camoufox_plugin.py | 160 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/pw_camoufox_plugin.py | 214 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/pw_camoufox_plugin.py | 216 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/release.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/release.py | 72 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/release.py | 259 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/release.py | 261 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/release.py | 356 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/release.py | 358 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/release.py | 397 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/release.py | 399 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_pytest.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_pytest.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 100 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 102 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 364 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 366 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 417 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 419 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 654 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 656 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/run_sundial.py | 787 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | ci/_util.py | 42 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | ci/_util.py | 44 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_util.py | 94 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_util.py | 96 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_util.py | 158 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_util.py | 160 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_util.py | 197 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_util.py | 199 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_util.py | 212 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/_util.py | 214 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 20 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 22 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 134 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 136 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 158 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 160 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 324 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 326 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 352 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 354 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 393 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 395 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 434 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ci/tribal-rules.yml | 436 | # ------------------------------------------------------------------------- | COMMENT |
| 162 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/tests/test_voices.py | 27 | def test_non_empty_for_every_os(target_os): | CODE |
| LOW | python/tests/test_voices.py | 33 | def test_entries_are_full_objects(target_os): | CODE |
| LOW | python/tests/test_voices.py | 48 | def test_windows_display_language_pack(): | CODE |
| LOW⚡ | python/tests/test_voices.py | 69 | def test_prefix_and_lang_suffix(self): | CODE |
| LOW⚡ | python/tests/test_voices.py | 74 | def test_spaces_escaped_punctuation_intact(self): | CODE |
| LOW⚡ | python/tests/test_voices.py | 82 | def test_normalize_preset_voices_converts_strings(): | CODE |
| LOW | python/tests/test_voices.py | 93 | def test_normalize_preset_voices_passes_through_objects(): | CODE |
| LOW | python/tests/test_voices.py | 105 | def test_unknown_os_falls_back_to_macos(): | CODE |
| LOW⚡ | python/tests/test_voices.py | 136 | def test_block_flag_is_pinned_by_default(): | CODE |
| LOW⚡ | python/tests/test_voices.py | 142 | def test_caller_can_override_the_block_flag(): | CODE |
| LOW⚡ | python/tests/test_voices.py | 147 | def test_voice_generation_failure_fails_closed(monkeypatch): | CODE |
| LOW | python/tests/test_voices.py | 172 | def test_validate_voices_rejects_unusable_shapes(value): | CODE |
| LOW | python/tests/test_voices.py | 192 | def test_validate_voices_accepts_usable_shapes(value): | CODE |
| LOW | python/tests/test_launch_geometry.py | 67 | def test_fingerprint_is_not_shrunk_to_the_xvfb(self): | CODE |
| LOW | python/tests/test_launch_geometry.py | 75 | def test_screen_dimensions_stay_valid(self): | CODE |
| LOW⚡ | python/tests/test_launch_geometry.py | 103 | def test_generated_geometry_never_exceeds_the_display(self, attempt): | CODE |
| LOW⚡ | python/tests/test_launch_geometry.py | 111 | def test_geometry_stays_internally_consistent(self): | CODE |
| LOW⚡ | python/tests/test_launch_geometry.py | 120 | def test_unprobeable_display_is_not_clamped(self): | CODE |
| LOW | python/tests/test_launch_geometry.py | 140 | def test_inner_dimensions_are_never_spoofed(self): | CODE |
| LOW | python/tests/test_shipped_data.py | 31 | def test_every_bundled_preset_is_coherent_as_stored(filename): | CODE |
| LOW | python/tests/test_shipped_data.py | 46 | def test_every_preset_gpu_has_webgl_data(filename): | CODE |
| LOW | python/tests/test_geoip_sources.py | 23 | def test_source_serves_a_current_build(name, tmp_path, monkeypatch): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 47 | def test_every_spelling_of_one_gpu_reduces_to_one_bucket(renderer): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 54 | def test_angle_vendor_field_does_not_decide_the_bucket(): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 63 | def test_angle_vulkan_form_is_unwrapped(): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 73 | def test_discrete_gpu_rejected_on_a_netbook_screen(renderer): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 80 | def test_discrete_gpu_accepted_on_any_real_laptop_panel(width, height): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 87 | def test_the_floor_is_an_area_not_a_per_axis_bound(): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 95 | def test_discrete_gpu_rejected_on_netbook_panels(width, height): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 99 | def test_integrated_parts_are_not_floored(): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 107 | def test_apple_silicon_is_not_pinned_to_retina(): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 114 | def test_raw_model_names_are_out_of_scope(): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 123 | def test_missing_values_are_not_constrained(): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 140 | def test_software_renderers_are_unconstrained(renderer): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 146 | def test_hardware_is_not_mistaken_for_software(monkeypatch): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 152 | def test_sampled_gpu_is_coherent_with_the_screen(target_os): | CODE |
| LOW⚡ | python/tests/test_webgl_screen_consistency.py | 161 | def test_screen_floor_lifts_netbook_geometry(): | CODE |
| LOW | python/tests/test_webgl_screen_consistency.py | 176 | def test_screen_floor_leaves_an_adequate_screen_alone(): | CODE |
| LOW | python/tests/test_webgl_screen_consistency.py | 188 | def test_screen_floor_is_a_no_op_without_screen_values(): | CODE |
| LOW | python/tests/test_webgl_screen_consistency.py | 198 | def test_context_fingerprints_get_the_same_treatment(target_os): | CODE |
| LOW | python/tests/test_webgl_screen_consistency.py | 214 | def test_preset_screens_are_never_lifted(): | CODE |
| LOW | python/tests/test_proxy_geo.py | 71 | def test_lookup_goes_through_the_proxy_with_its_credentials(api, server, expected): | CODE |
| LOW | python/tests/test_proxy_geo.py | 80 | def test_credentials_with_url_delimiters_survive_the_proxy_url(api): | CODE |
| LOW | python/tests/test_proxy_geo.py | 99 | def test_a_failed_lookup_raises_instead_of_launching_without_the_values(api, failure): | CODE |
| LOW | python/tests/test_proxy_geo.py | 106 | def test_no_lookup_when_both_values_are_given(api): | CODE |
| LOW | python/tests/test_virtdisplay.py | 59 | def test_single_launch_returns_valid_display_and_kill_terminates_xvfb(tracked): | CODE |
| LOW | python/tests/test_virtdisplay.py | 73 | def test_get_is_idempotent_within_one_virtual_display(tracked): | CODE |
| LOW | python/tests/test_virtdisplay.py | 80 | def test_concurrent_reservations_all_get_unique_displays(tracked): | CODE |
| LOW | python/tests/test_virtdisplay.py | 112 | def test_released_display_numbers_can_be_reused_on_the_next_launch(tracked): | CODE |
| LOW⚡ | python/tests/test_geoip_config.py | 34 | def test_implicit_deprecated_source_moves_to_default(cache): | CODE |
| LOW⚡ | python/tests/test_geoip_config.py | 40 | def test_explicit_deprecated_source_is_kept(cache): | CODE |
| LOW⚡ | python/tests/test_geoip_config.py | 45 | def test_save_records_explicit_choice(cache): | CODE |
| LOW⚡ | python/tests/test_geoip_config.py | 53 | def test_refresh_keeps_an_explicit_choice(cache, monkeypatch): | CODE |
| LOW⚡ | python/tests/test_geoip_config.py | 62 | def test_deprecated_source_warns(): | CODE |
| LOW⚡ | python/tests/test_geoip_config.py | 91 | def test_needs_update_reads_the_build_date(cache, monkeypatch, checked, built, stale): | CODE |
| LOW⚡ | python/tests/test_geoip_config.py | 97 | def test_missing_database_needs_update(): | CODE |
| LOW⚡ | python/tests/test_geoip_config.py | 102 | def test_the_database_takes_its_directory_permissions_not_the_staging_files(cache, monkeypatch): | CODE |
| LOW | python/tests/test_preset_appversion.py | 60 | def test_app_version_follows_the_preset_platform(platform, user_agent, expected): | CODE |
| LOW | python/tests/test_preset_appversion.py | 67 | def test_app_version_agrees_with_the_user_agent(): | CODE |
| LOW | python/tests/test_preset_appversion.py | 84 | def test_a_preset_that_carries_its_own_app_version_follows_its_user_agent(): | CODE |
| 560 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | python/tests/test_voices.py | 7 | cd python && python -m pytest tests/test_voices.py -v | STRING |
| HIGH | python/tests/test_launch_geometry.py | 5 | cd python && python -m pytest tests/test_launch_geometry.py -v | STRING |
| HIGH | python/tests/test_webgl_screen_consistency.py | 5 | cd python && python -m pytest tests/test_webgl_screen_consistency.py -v | STRING |
| HIGH | python/tests/test_virtdisplay.py | 7 | cd python && python -m pytest tests/test_virtdisplay.py -v | STRING |
| HIGH | python/tests/test_preset_appversion.py | 5 | cd python && python -m pytest tests/test_preset_appversion.py -v | STRING |
| HIGH | python/tests/test_display.py | 9 | cd python && python -m pytest tests/test_display.py -v | STRING |
| HIGH | python/tests/test_host_rendering.py | 5 | cd python && python -m pytest tests/test_host_rendering.py -v | STRING |
| HIGH | python/tests/test_config_schema.py | 22 | cd python && python -m pytest tests/test_config_schema.py -v | STRING |
| HIGH⚡ | python/tests/test_browser_pin.py | 49 | @pytest.mark.parametrize("content", ["{}", '{"tag": null}', "", "not json"]) | CODE |
| HIGH | python/tests/test_server.py | 14 | cd python && python -m pytest tests/test_server.py -v | STRING |
| HIGH | python/tests/test_addons.py | 11 | cd python && python -m pytest tests/test_addons.py -v | STRING |
| HIGH | python/tests/test_fingerprint_fixes.py | 5 | cd python && python -m pytest tests/test_fingerprint_fixes.py -v | STRING |
| HIGH | python/src/camoufox/host_rendering.py | 32 | # requestAdapter() to null, as on a machine whose GPU Firefox blocks. | COMMENT |
| HIGH | python/src/camoufox/host_rendering.py | 45 | const info = gl && gl.getExtension('WEBGL_debug_renderer_info'); | CODE |
| HIGH | python/src/camoufox/host_rendering.py | 48 | : null; | CODE |
| HIGH | python/src/camoufox/host_rendering.py | 68 | contradict the claimed GPU, so requestAdapter() returns null, as Windows | STRING |
| HIGH | ci/run_prepare.py | 4 | `make setup-minimal && make dir && make mozbootstrap` is the front half of every | STRING |
| HIGH | browser/tests/native/test_tribal_rules.py | 611 | assert "!availFromResolution && ScreenDimensionManager::GetDimensions" in added, why | CODE |
| HIGH | browser/tests/native/test_contexts_vs_browsers.py | 233 | const within = (p, ms) => Promise.race([p, new Promise(r => setTimeout(() => r(null), ms))]); | CODE |
| HIGH | browser/tests/native/test_contexts_vs_browsers.py | 249 | fp.webglVendor = dbg && gl.getParameter(dbg.UNMASKED_VENDOR_WEBGL); | CODE |
| HIGH | browser/tests/native/test_contexts_vs_browsers.py | 250 | fp.webglRenderer = dbg && gl.getParameter(dbg.UNMASKED_RENDERER_WEBGL); | CODE |
| HIGH | browser/tests/native/test_contexts_vs_browsers.py | 305 | result = await page.evaluate("document.documentElement.dataset.fingerprint || null") | CODE |
| HIGH | …r/tests/playwright/patches/contentaccessible-parity.py | 67 | setTimeout(() => res(null), 5000); | CODE |
| HIGH | browser/tests/playwright/patches/stock-parity-probes.py | 50 | wheel.push({dy: e.deltaY, mode: e.deltaMode, wd: e.wheelDeltaY}); | CODE |
| HIGH | browser/tests/playwright/patches/stock-parity-probes.py | 112 | pc.onicecandidate = e => { if (e.candidate) cands.push(e.candidate.candidate); }; | CODE |
| HIGH | browser/tests/playwright/patches/stock-parity-probes.py | 121 | (await pc.getStats()).forEach((v, k) => out.statIds.push(String(k))); | CODE |
| HIGH | browser/tests/playwright/patches/stock-parity-probes.py | 162 | for (let r = 0; r < ROUNDS; r++) { ta.push(time(a)); tb.push(time(b)); } | CODE |
| HIGH | browser/tests/playwright/patches/main-world-eval.py | 82 | ("array", "[1, 'two', null]", [1, "two", None]), | STRING |
| HIGH | browser/tests/playwright/patches/worker-config-reads.py | 39 | const code = 'postMessage((' + read.toString() + ')())'; | CODE |
| HIGH | browser/tests/playwright/patches/webrtc-context-ip.py | 47 | if (ended) srflx.push('after end-of-candidates: ' + e.candidate.candidate); | CODE |
| HIGH | browser/tests/playwright/patches/webrtc-context-ip.py | 49 | if (m && !ended) srflx.push(m[1]); | CODE |
| HIGH⚡ | …er/tests/playwright/patches/fingerprint-setter-seal.py | 80 | if (n in window) visible.push(n); | CODE |
| HIGH⚡ | …er/tests/playwright/patches/fingerprint-setter-seal.py | 81 | if (typeof window[n] === 'function') callable.push(n); | CODE |
| HIGH⚡ | …er/tests/playwright/patches/fingerprint-setter-seal.py | 84 | for (var k in window) if (names.indexOf(k) !== -1) enumerated.push(k); | CODE |
| HIGH | …er/tests/playwright/patches/visible-automation-cues.py | 34 | out.push({ | CODE |
| HIGH | …er/tests/playwright/patches/visible-automation-cues.py | 36 | publicIdentities: ids.filter(id => id > 0 && ContextualIdentityService.getPublicIdentityFromId(id)), | CODE |
| HIGH | …owser/tests/playwright/patches/baseline-protections.py | 74 | webgpu: navigator.gpu ? [true, (await navigator.gpu.requestAdapter()) !== null] : [false, false], | CODE |
| HIGH | browser/tests/playwright/patches/webgl-live-state.py | 25 | if (!gl) return null; | CODE |
| HIGH | …owser/tests/playwright/patches/spoofed-voice-speaks.py | 46 | events.push([type, Math.round(performance.now() - t0)]); | CODE |
| HIGH⚡ | browser/tests/playwright/patches/webgl-renderer-pair.py | 37 | if (!gl) return null; | CODE |
| HIGH⚡ | browser/tests/playwright/patches/webgl-renderer-pair.py | 40 | ext && gl.getParameter(ext.UNMASKED_VENDOR_WEBGL), | CODE |
| HIGH⚡ | browser/tests/playwright/patches/webgl-renderer-pair.py | 41 | ext && gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)]; | CODE |
| HIGH⚡ | browser/tests/playwright/patches/webgl-renderer-pair.py | 50 | const src = 'const read = ' + read.toString() + | CODE |
| HIGH | browser/tests/playwright/patches/humanize-pacing.py | 42 | addEventListener("mousemove", () => moves.push(performance.now())); | CODE |
| HIGH | browser/tests/playwright/patches/stock-gpu-parity.py | 74 | if (!c) return null; | CODE |
| HIGH | browser/tests/playwright/patches/stock-gpu-parity.py | 81 | if (value === null || typeof value !== 'object' || ArrayBuffer.isView(value)) | CODE |
| HIGH | browser/tests/playwright/patches/trusted-events.py | 69 | target: e.target.id || e.target.tagName, | CODE |
| HIGH | browser/tests/playwright/patches/trusted-events.py | 75 | if (e.target instanceof Element) window.log.push(desc(e)); | CODE |
| HIGH | …/tests/playwright/patches/humanize-mouse-trajectory.py | 55 | addEventListener("mousemove", e => moves.push([e.clientX, e.clientY, performance.now()])); | CODE |
| HIGH | …owser/tests/playwright/patches/popup-blocker-parity.py | 45 | let opened = null; | CODE |
| HIGH | browser/tests/build-tester/scripts/runner.py | 49 | "() => { const n = document.getElementById(%r); return n ? n.textContent : null; }" % _RESULTS_NODE | CODE |
| HIGH | browser/tests/build-tester/scripts/runner.py | 167 | hardwareConcurrency: navigator.hardwareConcurrency || 0, | CODE |
| HIGH | browser/tests/build-tester/scripts/runner.py | 288 | " Run: pip install playwright && python -m playwright install firefox\n" | CODE |
| HIGH | browser/scripts/patch.py | 40 | run('git reset --hard unpatched && ./mach clobber && git clean -fdx') | CODE |
| HIGH | browser/scripts/cursor-demo.py | 25 | addEventListener("mousemove", e => moves.push([e.clientX, e.clientY, performance.now()])); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/src/camoufox/webgl.py | 41 | # Windows 11 host exposes it on WebGL2 (MAX_VIEWS_OVR=4, headless and headed), | COMMENT |
| LOW | python/src/camoufox/fpgen.yml | 1 | # Mappings of fpgen fingerprints to Camoufox config properties. | COMMENT |
| LOW | python/src/camoufox/coherence.py | 41 | APPLE_SILICON_CORES = frozenset(LAUNCHER_CONSTANTS['appleSiliconCores']) | COMMENT |
| LOW | python/src/camoufox/coherence.py | 61 | # contacts. Measured 5 on the Windows laptop. This is a RANGE rather than a list | COMMENT |
| LOW | python/src/camoufox/coherence.py | 81 | COMMENT | |
| LOW | python/src/camoufox/__version__.py | 21 | # declares it in its manifest.json (ci/release.py reads it from here), and | COMMENT |
| LOW | python/src/camoufox/repos.yml | 41 | # GeoIP database repositories | COMMENT |
| LOW | python/src/camoufox/utils.py | 121 | browser bundle: the bundle is commonly baked into an image as root and run | COMMENT |
| LOW | python/src/camoufox/utils.py | 1181 | if not _user_set_screen_window: | COMMENT |
| LOW | python/src/camoufox/utils.py | 1201 | COMMENT | |
| LOW | python/src/camoufox/utils.py | 1241 | FallbackWarning.warn( | COMMENT |
| LOW | python/src/camoufox/utils.py | 1261 | # Windows to the version the identity's font draw presents | COMMENT |
| LOW | python/src/camoufox/utils.py | 1281 | # Measured 2026-09-15, 32px canvas `serif`, U+0870: .notdef 19.0 with async | COMMENT |
| LOW | python/src/camoufox/utils.py | 1301 | firefox_user_prefs.setdefault(_QUOTA_FIXED_LIMIT_PREF, _quota_limit_kb) | COMMENT |
| LOW | python/src/camoufox/utils.py | 1421 | requested = 'en-US' | COMMENT |
| LOW | ci/sundial.yml | 1 | # Scope and thresholds for the stealth check. | COMMENT |
| LOW | ci/sundial.yml | 21 | # While this was false the job was not scheduled, the credential never reached a | COMMENT |
| LOW | ci/build-tester.yml | 21 | - Canvas Noise | COMMENT |
| LOW | ci/run_playwright.py | 61 | # async suite's pytest-asyncio loop break each other in one process ("Runner.run() | COMMENT |
| LOW | ci/run_playwright.py | 81 | COMMENT | |
| LOW | ci/run_playwright.py | 301 | failing = {t for t, o in part.items() if o in (results.FAIL, results.ERROR)} | COMMENT |
| LOW | ci/tribal-rules.yml | 1 | # Decisions this repository has already made, and the evidence for each. | COMMENT |
| LOW | ci/skiplist.yml | 1 | # Upstream Playwright tests Camoufox cannot pass by design. | COMMENT |
| LOW | ci/skiplist.yml | 21 | # worse than leaving them bare. | COMMENT |
| LOW | ci/skiplist.yml | 41 | # browser/additions/juggler/input/MouseDispatch.js: real trajectories, real | COMMENT |
| LOW | ci/skiplist.yml | 201 | the first proxied navigation of the module's shared browser. | COMMENT |
| LOW | typescript/src/utils.ts | 321 | function generateFontconfig( | COMMENT |
| LOW | browser/settings/camoufox.cfg | 1 | // ================================================================= | COMMENT |
| LOW | browser/settings/camoufox.cfg | 21 | COMMENT | |
| LOW | browser/settings/camoufox.cfg | 41 | // * default_address_only: only emit the default route address, no | COMMENT |
| LOW | browser/settings/camoufox.cfg | 241 | // Speculative loading stays at Firefox's defaults. `<link rel=prefetch>` is | COMMENT |
| LOW | browser/settings/camoufox.cfg | 261 | // real browser: 0 is a zero-false-positive automation tell that any page script | COMMENT |
| LOW | browser/settings/camoufox.cfg | 301 | // ------- | COMMENT |
| LOW | browser/settings/camoufox.cfg | 321 | // issue we can povide custom '@mozilla.org/ipc/processselector;1' | COMMENT |
| LOW | browser/settings/camoufox.cfg | 341 | COMMENT | |
| LOW | browser/settings/camoufox.cfg | 361 | // grants no user activation and is invisible to page script. | COMMENT |
| LOW | browser/settings/camoufox.cfg | 401 | COMMENT | |
| LOW | browser/settings/camoufox.cfg | 501 | COMMENT | |
| LOW | browser/additions/juggler/TargetRegistry.js | 21 | // the drag path's juggler-drag-finalized and dragover waits, and the | COMMENT |
| LOW | browser/additions/juggler/TargetRegistry.js | 261 | // In persistent mode, window might be opened long ago and might be | COMMENT |
| LOW | browser/additions/juggler/TargetRegistry.js | 981 | COMMENT | |
| LOW | browser/additions/juggler/NetworkObserver.js | 121 | this.navigationId = redirectedFrom.navigationId; | COMMENT |
| LOW | browser/additions/juggler/NetworkObserver.js | 821 | COMMENT | |
| LOW | …owser/additions/juggler/pipe/nsRemoteDebuggingPipe.cpp | 1 | /* This Source Code Form is subject to the terms of the Mozilla Public | COMMENT |
| LOW | browser/additions/juggler/input/CursorTrajectory.js | 101 | [fromX, fromY], [toX, toY], {frequency: kFrequencyHz, seed}); | COMMENT |
| LOW | browser/additions/juggler/input/CursorTrajectory.js | 121 | // natural duration, and `scale` stays exact. Only the resampling differs. | COMMENT |
| LOW | browser/additions/juggler/input/MouseDispatch.js | 81 | // | COMMENT |
| LOW | browser/additions/juggler/content/Runtime.js | 81 | // page's real global is deliberately not one of them. The wire format is the | COMMENT |
| LOW | browser/additions/juggler/content/Runtime.js | 281 | if (result && typeof result.then === 'function') | COMMENT |
| LOW | browser/additions/juggler/content/Runtime.js | 681 | COMMENT | |
| LOW | browser/additions/juggler/content/Runtime.js | 721 | } | COMMENT |
| LOW | browser/additions/juggler/content/FrameTree.js | 601 | // evaluates -- silently reads undefined (#628 follow-up). | COMMENT |
| LOW | browser/additions/juggler/content/FrameTree.js | 661 | // _masterSandbox was added only the navigation path (_onGlobalObjectCleared) | COMMENT |
| LOW | browser/additions/juggler/content/FrameTree.js | 701 | COMMENT | |
| LOW | browser/additions/juggler/protocol/PageHandler.js | 541 | // Camoufox: measured AFTER the await above, synchronously before the | COMMENT |
| LOW | browser/additions/juggler/protocol/PageHandler.js | 621 | // the juggler-mouse-event-hit-renderer notification never fires and the | COMMENT |
| LOW | browser/additions/juggler/protocol/PageHandler.js | 681 | COMMENT | |
| LOW | …r/additions/juggler/screencast/nsScreencastService.cpp | 1 | /* This Source Code Form is subject to the terms of the Mozilla Public | COMMENT |
| LOW | …/additions/juggler/screencast/HeadlessWindowCapturer.h | 1 | /* This Source Code Form is subject to the terms of the Mozilla Public | COMMENT |
| LOW | browser/additions/camoucfg/json.hpp | 21 | #include <algorithm> // all_of, find, for_each | COMMENT |
| 180 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | python/tests/test_virtdisplay.py | 42 | except Exception: | CODE |
| HIGH | python/src/camoufox/server.py | 107 | except OSError: | CODE |
| HIGH | python/src/camoufox/fpgen_model.py | 171 | except OSError: | CODE |
| HIGH | python/src/camoufox/cpu_affinity.py | 36 | except OSError: | CODE |
| HIGH | python/src/camoufox/cpu_affinity.py | 95 | except OSError: | CODE |
| HIGH | python/src/camoufox/multiversion.py | 440 | except ValueError: | CODE |
| HIGH | python/src/camoufox/multiversion.py | 41 | except orjson.JSONDecodeError: | CODE |
| HIGH | python/src/camoufox/multiversion.py | 70 | except orjson.JSONDecodeError: | CODE |
| HIGH | python/src/camoufox/virtdisplay.py | 174 | except Exception: | CODE |
| HIGH | python/src/camoufox/virtdisplay.py | 185 | except OSError: | CODE |
| HIGH | python/src/camoufox/locales.py | 122 | except UnknownTerritory: | CODE |
| HIGH | python/src/camoufox/locales.py | 133 | except UnknownLanguage: | CODE |
| HIGH | browser/tests/native/conftest.py | 209 | except self._psutil.Error: | CODE |
| HIGH | browser/tests/native/test_crash_recovery.py | 234 | except psutil_mod.NoSuchProcess: | CODE |
| HIGH | browser/tests/native/test_crash_recovery.py | 654 | except BaseException: | CODE |
| HIGH | browser/tests/native/test_crash_recovery.py | 80 | except BaseException: | CODE |
| HIGH | browser/tests/native/test_crash_recovery.py | 371 | except BaseException: | CODE |
| HIGH | browser/tests/native/test_crash_recovery.py | 463 | except BaseException: | CODE |
| HIGH | browser/tests/native/test_crash_recovery.py | 622 | except BaseException: | CODE |
| HIGH | browser/tests/native/test_crash_recovery.py | 415 | except Exception: | CODE |
| HIGH | browser/tests/native/test_tribal_rules.py | 176 | except Exception: | CODE |
| HIGH | browser/tests/native/test_no_leaks.py | 140 | except BaseException: | CODE |
| HIGH | browser/tests/native/test_no_leaks.py | 312 | except OSError: | CODE |
| HIGH | browser/tests/playwright/patches/input-ack-backstop.py | 98 | except Exception: | CODE |
| HIGH | browser/tests/service/run_tests.py | 188 | except Exception: | CODE |
| HIGH | browser/tests/build-tester/scripts/runner.py | 210 | except Exception: | CODE |
| HIGH | browser/tests/build-tester/scripts/runner.py | 203 | except Exception: | CODE |
| HIGH | browser/tests/build-tester/scripts/runner.py | 376 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/tests/test_virtdisplay.py | 42 | except Exception: | CODE |
| LOW | python/scripts/clean-fingerprint-data.py | 56 | except Exception as exc: # a row too malformed to convert is itself a defect | CODE |
| LOW | python/src/camoufox/geolocation.py | 222 | except Exception as e: | CODE |
| LOW | python/src/camoufox/geolocation.py | 273 | except Exception: | CODE |
| LOW | python/src/camoufox/cpu_affinity.py | 138 | except Exception: | CODE |
| LOW | python/src/camoufox/cpu_affinity.py | 153 | except Exception: | CODE |
| LOW | python/src/camoufox/multiversion.py | 410 | except Exception as e: | CODE |
| MEDIUM | python/src/camoufox/multiversion.py | 411 | rprint(f"Error: {e}", fg="red") | CODE |
| LOW | python/src/camoufox/addons.py | 94 | except Exception as e: | CODE |
| LOW | python/src/camoufox/virtdisplay.py | 174 | except Exception: | CODE |
| LOW | python/src/camoufox/pkgman.py | 156 | except Exception: | CODE |
| LOW | python/src/camoufox/pkgman.py | 415 | except Exception: | CODE |
| LOW | python/src/camoufox/pkgman.py | 665 | except Exception as e: | CODE |
| LOW | python/src/camoufox/pkgman.py | 765 | except Exception as e: | CODE |
| LOW | python/src/camoufox/display.py | 56 | except Exception: | CODE |
| LOW | python/src/camoufox/display.py | 77 | except Exception: | CODE |
| LOW | python/src/camoufox/utils.py | 234 | except Exception: | CODE |
| LOW | python/src/camoufox/utils.py | 604 | except Exception: | CODE |
| LOW | python/src/camoufox/fingerprints.py | 1746 | except Exception as exc: # fpgen.exceptions.InvalidConstraints | CODE |
| LOW | python/src/camoufox/__main__.py | 122 | except Exception: | CODE |
| LOW | python/src/camoufox/__main__.py | 176 | except Exception as e: | CODE |
| LOW | python/src/camoufox/__main__.py | 354 | except Exception as e: | CODE |
| MEDIUM | python/src/camoufox/__main__.py | 360 | rprint(f"Error: {msg}", fg="red") | CODE |
| LOW | ci/run_sundial.py | 288 | except Exception: # noqa: BLE001 -- absence is not an error here | CODE |
| LOW | ci/run_sundial.py | 331 | except Exception as exc: # noqa: BLE001 -- reported below if the form fails too | CODE |
| LOW | ci/run_sundial.py | 339 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | ci/run_sundial.py | 754 | except Exception as exc: # noqa: BLE001 - never fail the scan on input | CODE |
| LOW | ci/run_sundial.py | 917 | except Exception as exc: # noqa: BLE001 -- any failure here is a gate failure | CODE |
| LOW | ci/versions.py | 80 | except Exception: | CODE |
| LOW | ci/versions.py | 99 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | typescript/scripts/golden/launch_golden.py | 493 | except Exception as exc: # recorded, not raised | CODE |
| LOW⚡ | typescript/scripts/golden/identity_golden.py | 94 | except Exception as exc: # noqa: BLE001 | CODE |
| MEDIUM | typescript/scripts/golden/identity_golden.py | 91 | def err(fn): | CODE |
| LOW | browser/tests/native/_chaos.py | 147 | except Exception: | CODE |
| LOW⚡ | browser/tests/native/test_crash_recovery.py | 415 | except Exception: | CODE |
| LOW | browser/tests/native/test_tribal_rules.py | 176 | except Exception: | CODE |
| LOW | browser/tests/native/test_no_leaks.py | 228 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | browser/tests/native/test_no_leaks.py | 259 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | browser/tests/native/test_no_leaks.py | 294 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | browser/tests/native/test_contexts_vs_browsers.py | 59 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …r/tests/playwright/patches/contentaccessible-parity.py | 224 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | browser/tests/playwright/patches/main-world-eval.py | 109 | except Exception as exc: # noqa: BLE001 - the message is the point | STRING |
| LOW | browser/tests/playwright/patches/main-world-eval.py | 140 | except Exception as exc: # noqa: BLE001 | STRING |
| LOW | browser/tests/playwright/patches/main-world-eval.py | 175 | except Exception as exc: # noqa: BLE001 | STRING |
| LOW | browser/tests/playwright/patches/main-world-eval.py | 188 | except Exception as exc: # noqa: BLE001 | STRING |
| LOW | browser/tests/playwright/patches/worker-config-reads.py | 133 | except Exception as exc: | CODE |
| LOW | browser/tests/playwright/patches/input-ack-backstop.py | 98 | except Exception: | CODE |
| LOW | browser/tests/playwright/patches/addons-install-once.py | 80 | except Exception as exc: | CODE |
| LOW | …owser/tests/playwright/patches/popup-blocker-parity.py | 93 | except Exception as exc: # noqa: BLE001 - reported, not raised | CODE |
| LOW | browser/tests/service/run_tests.py | 131 | except Exception as e: | CODE |
| LOW | browser/tests/service/run_tests.py | 177 | except Exception as e: | CODE |
| LOW⚡ | browser/tests/service/run_tests.py | 188 | except Exception: | CODE |
| LOW⚡ | browser/tests/service/run_tests.py | 191 | except Exception as e: | CODE |
| LOW | browser/tests/service/_proxies.py | 58 | except Exception: | CODE |
| LOW⚡ | browser/tests/build-tester/scripts/runner.py | 203 | except Exception: | CODE |
| LOW⚡ | browser/tests/build-tester/scripts/runner.py | 210 | except Exception: | CODE |
| LOW⚡ | browser/tests/build-tester/scripts/runner.py | 371 | except Exception as e: | CODE |
| LOW⚡ | browser/tests/build-tester/scripts/runner.py | 376 | except Exception: | CODE |
| LOW | browser/tests/build-tester/scripts/runner.py | 113 | except Exception as e: | CODE |
| LOW | browser/tests/build-tester/scripts/runner.py | 153 | except Exception as e: | CODE |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/tests/test_fpgen_model.py | 94 | CODE | |
| LOW | python/scripts/clean-fingerprint-data.py | 66 | CODE | |
| LOW | python/src/camoufox/geolocation.py | 164 | CODE | |
| LOW | python/src/camoufox/multiversion.py | 214 | CODE | |
| LOW | python/src/camoufox/multiversion.py | 263 | CODE | |
| LOW | python/src/camoufox/multiversion.py | 336 | CODE | |
| LOW | python/src/camoufox/virtdisplay.py | 90 | CODE | |
| LOW | python/src/camoufox/pkgman.py | 865 | CODE | |
| LOW | python/src/camoufox/pkgman.py | 982 | CODE | |
| LOW | python/src/camoufox/pkgman.py | 1085 | CODE | |
| LOW | python/src/camoufox/pkgman.py | 651 | CODE | |
| LOW | python/src/camoufox/utils.py | 353 | CODE | |
| LOW | python/src/camoufox/utils.py | 868 | CODE | |
| LOW | python/src/camoufox/fingerprints.py | 266 | CODE | |
| LOW | python/src/camoufox/fingerprints.py | 417 | CODE | |
| LOW | python/src/camoufox/fingerprints.py | 533 | CODE | |
| LOW | python/src/camoufox/__main__.py | 79 | CODE | |
| LOW | python/src/camoufox/__main__.py | 268 | CODE | |
| LOW | python/src/camoufox/__main__.py | 368 | CODE | |
| LOW | python/src/camoufox/__main__.py | 471 | CODE | |
| LOW | python/src/camoufox/__main__.py | 749 | CODE | |
| LOW | ci/pw_camoufox_plugin.py | 103 | CODE | |
| LOW | ci/run_typescript.py | 36 | CODE | |
| LOW | ci/release.py | 280 | CODE | |
| LOW | ci/_pytest.py | 94 | CODE | |
| LOW | ci/summarize.py | 62 | CODE | |
| LOW | ci/summarize.py | 164 | CODE | |
| LOW | ci/run_sundial.py | 422 | CODE | |
| LOW | ci/run_sundial.py | 513 | CODE | |
| LOW | ci/run_sundial.py | 566 | CODE | |
| LOW | ci/run_build_tester.py | 83 | CODE | |
| LOW | ci/run_build_tester.py | 123 | CODE | |
| LOW | ci/run_build_tester.py | 144 | CODE | |
| LOW | ci/versions.py | 126 | CODE | |
| LOW | ci/tests/test_ci.py | 846 | CODE | |
| LOW | ci/tests/test_ci.py | 2718 | CODE | |
| LOW | ci/tests/test_ci.py | 2953 | CODE | |
| LOW | typescript/scripts/golden/identity_golden.py | 131 | CODE | |
| LOW | typescript/scripts/golden/identity_golden.py | 251 | CODE | |
| LOW | typescript/scripts/golden/identity_golden.py | 437 | CODE | |
| LOW | typescript/scripts/golden/identity_golden.py | 621 | CODE | |
| LOW | typescript/scripts/e2e/python_probe.py | 47 | CODE | |
| LOW | browser/tests/native/conftest.py | 123 | CODE | |
| LOW | browser/tests/native/conftest.py | 198 | CODE | |
| LOW | …er/tests/playwright/patches/media-devices-coherence.py | 56 | CODE | |
| LOW | browser/tests/playwright/patches/addons-install-once.py | 58 | CODE | |
| LOW | browser/tests/service/run_tests.py | 51 | CODE | |
| LOW | browser/tests/build-tester/scripts/runner.py | 82 | CODE | |
| LOW | browser/tests/build-tester/scripts/runner.py | 216 | CODE | |
| LOW | browser/tests/build-tester/scripts/grading.py | 23 | CODE | |
| LOW | browser/tests/build-tester/scripts/grading.py | 36 | CODE | |
| LOW | browser/tests/build-tester/scripts/certificate.py | 85 | CODE | |
| LOW | browser/tests/build-tester/scripts/certificate.py | 110 | CODE | |
| LOW | browser/scripts/package.py | 68 | CODE | |
| LOW | browser/scripts/patch.py | 50 | CODE | |
| LOW | browser/scripts/patch.py | 90 | CODE | |
| LOW | browser/scripts/inject-locales.py | 36 | CODE | |
| LOW | browser/scripts/inject-locales.py | 72 | CODE | |
| LOW | browser/scripts/gen-fonts-json.py | 156 | CODE | |
| LOW | browser/scripts/gen-fonts-json.py | 203 | CODE | |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/tests/test_launch_geometry.py | 8 | CODE | |
| LOW | python/src/camoufox/geolocation.py | 21 | CODE | |
| LOW | python/src/camoufox/multiversion.py | 14 | CODE | |
| LOW | python/src/camoufox/__init__.py | 1 | CODE | |
| LOW | python/src/camoufox/__init__.py | 2 | CODE | |
| LOW | python/src/camoufox/__init__.py | 2 | CODE | |
| LOW | python/src/camoufox/__init__.py | 2 | CODE | |
| LOW | python/src/camoufox/__init__.py | 3 | CODE | |
| LOW | python/src/camoufox/__init__.py | 3 | CODE | |
| LOW | python/src/camoufox/__init__.py | 3 | CODE | |
| LOW | python/src/camoufox/__init__.py | 4 | CODE | |
| LOW | python/src/camoufox/pkgman.py | 11 | CODE | |
| LOW | ci/pw_camoufox_plugin.py | 43 | CODE | |
| LOW | ci/run_typescript.py | 21 | CODE | |
| LOW | ci/release.py | 33 | CODE | |
| LOW | ci/suite.py | 20 | CODE | |
| LOW | ci/results.py | 22 | CODE | |
| LOW | ci/run_patch_guards.py | 24 | CODE | |
| LOW | ci/run_pythonlib.py | 12 | CODE | |
| LOW | ci/_pytest.py | 11 | CODE | |
| LOW | ci/summarize.py | 29 | CODE | |
| LOW | ci/run_playwright.py | 36 | CODE | |
| LOW | ci/run_native.py | 21 | CODE | |
| LOW | ci/run_sundial.py | 31 | CODE | |
| LOW | ci/_util.py | 7 | CODE | |
| LOW | ci/run_build_tester.py | 14 | CODE | |
| LOW | ci/run_skiplist_audit.py | 37 | CODE | |
| LOW | ci/run_install.py | 24 | CODE | |
| LOW | ci/versions.py | 24 | CODE | |
| LOW | ci/run_build.py | 14 | CODE | |
| LOW | ci/run_prepare.py | 27 | CODE | |
| LOW | ci/browser_inputs.py | 50 | CODE | |
| LOW | ci/tests/test_ci.py | 17 | CODE | |
| LOW | ci/tests/test_ci.py | 2698 | CODE | |
| LOW | typescript/scripts/golden/identity_golden.py | 27 | CODE | |
| LOW | browser/tests/native/conftest.py | 15 | CODE | |
| LOW | browser/tests/native/_chaos.py | 26 | CODE | |
| LOW | browser/tests/native/test_crash_recovery.py | 26 | CODE | |
| LOW | browser/tests/native/test_memory_growth.py | 42 | CODE | |
| LOW | browser/tests/native/test_tribal_rules.py | 17 | CODE | |
| LOW | browser/tests/native/test_no_leaks.py | 17 | CODE | |
| LOW | browser/tests/native/test_contexts_vs_browsers.py | 32 | CODE | |
| LOW | browser/tests/native/_churn.py | 18 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ci/sundial.yml | 4 | # that runs on every pull request; the auto-update harness (which is not part of | COMMENT |
| MEDIUM | ci/build-tester.yml | 4 | # every pull request, and the auto-update harness (not part of this repository) | COMMENT |
| MEDIUM | ci/run_sundial.py | 1009 | # baseline is the auto-update harness's job, outside this repository. | COMMENT |
| MEDIUM⚡ | ci/_util.py | 34 | # Kept under the old name so harness code and existing call sites read the same. | COMMENT |
| MEDIUM | browser/tests/playwright/patches/worker-config-reads.py | 48 | # timed out -- the harness failing, not the browser. | COMMENT |
| MEDIUM | browser/tests/playwright/patches/worker-config-reads.py | 110 | # with no workers, a harness error that would hide the race. | COMMENT |
| MEDIUM | browser/tests/playwright/patches/worker-config-reads.py | 135 | # timeout) is the harness, not the race, and is reported as such. | COMMENT |
| MEDIUM | browser/tests/build-tester/scripts/runner.py | 398 | # The auto-update harness grades this run per check rather than by reading | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/patch-upgrading-guide.md | 80 | ### Step 1: Bump the Version and Find the Broken Patches | COMMENT |
| LOW | docs/patch-upgrading-guide.md | 92 | ### Step 2: Set Up One Patch | COMMENT |
| LOW | docs/patch-upgrading-guide.md | 115 | ### Step 3: Analyze Each Reject File | COMMENT |
| LOW⚡ | docs/patch-upgrading-guide.md | 128 | ### Step 4: Locate the Correct Position in Firefox Code | COMMENT |
| LOW⚡ | docs/patch-upgrading-guide.md | 136 | ### Step 5: Apply Changes Manually | COMMENT |
| LOW⚡ | docs/patch-upgrading-guide.md | 140 | ### Step 6: Remove Reject Files | COMMENT |
| LOW⚡ | docs/patch-upgrading-guide.md | 149 | ### Step 7: Write the Updated Patch | COMMENT |
| LOW⚡ | docs/patch-upgrading-guide.md | 158 | ### Step 8: Verify | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/src/camoufox/multiversion.py | 300 | def set_active(relative_path: str) -> None: | CODE |
| LOW | python/src/camoufox/__init__.py | 6 | __all__ = [ | CODE |
| LOW | python/src/camoufox/utils.py | 448 | def update_fonts(config: Dict[str, Any], target_os: str) -> None: | CODE |
| LOW | python/src/camoufox/utils.py | 506 | def set_into(target: Dict[str, Any], key: str, value: Any) -> None: | CODE |
| LOW | python/src/camoufox/host_rendering.py | 62 | def set_webgpu(prefs: Dict[str, Any], target_os: str, gpu: Gpu, host: Optional[Gpu]) -> None: | CODE |
| LOW | python/src/camoufox/fingerprints.py | 868 | def set_media_devices_defaults(config: Dict[str, Any], salt: int = 0) -> None: | CODE |
| LOW | python/src/camoufox/fingerprints.py | 1222 | def _set_app_version(config: Dict[str, Any]) -> None: | CODE |
| LOW | ci/_util.py | 69 | def set_output(name: str, value: str) -> None: | CODE |
| LOW | browser/scripts/_mixin.py | 105 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/src/camoufox/addons.py | 78 | # Check if the addon is already extracted. A bare directory is not | COMMENT |
| LOW | python/src/camoufox/__main__.py | 377 | # Check if latest for this channel is already installed | COMMENT |
| LOW | python/src/camoufox/__main__.py | 965 | # Check if installed version is the latest in its own channel | COMMENT |
| LOW | browser/scripts/patch.py | 226 | # Check if the folder exists | COMMENT |
| LOW | browser/scripts/copy-additions.sh | 6 | # Check if correct number of arguments are provided | COMMENT |
| LOW | browser/scripts/generate-assets-car.sh | 13 | # Check if running on macOS | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | python/src/camoufox/addons.py | 55 | # Create a temporary file to store the downloaded zip | COMMENT |
| MEDIUM | browser/scripts/patch.py | 63 | # Create the base mozconfig file | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/src/camoufox/utils.py | 868 | CODE | |
| LOW | python/src/camoufox/fingerprints.py | 1427 | CODE |