mirror of
https://github.com/daijro/camoufox.git
synced 2026-10-05 00:00:20 +00:00
fix: remove the glyph-spacing seed from the browser and the launcher
anti-font-fingerprinting.patch added a seeded amount to every glyph advance, so that text widths differed per context. No real machine produces those widths: the same font on the same OS measures the same everywhere. So the noise was itself a fingerprint, measured in #779 at +1 px per ~100 glyphs plus fractional deltas on every measureText. #779 defaulted the seed to 0 and kept it as an opt-in, but an opt-in whose only effect is to become detectable is not worth carrying. Removed: - The browser side: - FontSpacingSeedManager and window.setFontSpacingSeed; - the HarfBuzz hook; - the plumbing that existed only to carry the context id down to the shaper: the userContextId on gfxTextRun, gfxShapedWord and the word-cache key, and the extra MakeTextRun argument in nsTextFrame, nsFontMetrics, MathML and canvas. The font group keeps its userContextId, which font-list-spoofing.patch uses to apply the per-context font list. Text is now shaped exactly as stock Firefox shapes it. - The fonts:spacing_seed key. The launcher had been sending 0 on every launch, plus a setFontSpacingSeed(0) call in every context's init script. - tests/patches/config-overrides.py, which tested only the spacing override. A pythonlib test now covers config_overrides with another key. timezone-spoofing, webrtc-ip-spoofing and window-setter-seal change only in context lines and the setter seal list. Every patch applies cleanly to a fresh tree, and the result builds. The settled decision is recorded as no-glyph-spacing-noise, with an automated check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
86a20c73b7
commit
676fb3f7c1
@@ -178,3 +178,19 @@ def test_fingerprint_preset_off_never_draws_a_preset(off):
|
||||
checked with `is not None`, so False drew a random bundled preset."""
|
||||
with mock.patch.object(utils, "get_random_preset", side_effect=AssertionError("preset drawn")):
|
||||
launch(fingerprint_preset=off)
|
||||
|
||||
|
||||
def test_no_glyph_spacing_seed_is_generated():
|
||||
"""Glyph-spacing noise moved every measured text width off what the same
|
||||
font gives on a real machine, so it was itself a fingerprint; the feature
|
||||
is gone from the browser, and the launcher sends nothing for it."""
|
||||
assert "fonts:spacing_seed" not in launch()
|
||||
context = fp.generate_context_fingerprint(os="linux")
|
||||
assert "fonts:spacing_seed" not in context["config"]
|
||||
assert "setFontSpacingSeed" not in context["init_script"]
|
||||
|
||||
|
||||
def test_config_overrides_reach_the_config_and_the_init_script():
|
||||
context = fp.generate_context_fingerprint(os="linux", config_overrides={"audio:seed": 7})
|
||||
assert context["config"]["audio:seed"] == 7
|
||||
assert "setAudioFingerprintSeed(7)" in context["init_script"]
|
||||
|
||||
Reference in New Issue
Block a user