Commit d03f93a
fix(moshpit): decide the namespace by the ending, not by a DNS failure
Moshpit resolution inferred "clearnet has no answer for this name" from
ERR_NAME_NOT_RESOLVED. That inference only holds on a resolver that
reports failure honestly, and many do not: an NXDOMAIN-hijacking
resolver answers every nonexistent name with a wildcard host. On such a
connection blue.eggs "resolves", the error never fires, and in the
default mode nothing ever ran — every Moshpit name landed on the
hijacker's page. It was unfixable from inside the browser for as long
as DNS was the signal.
The ending is a better signal and we hold it locally: clearnet can only
answer for an ending that exists on the real internet. So a hostname now
falls into exactly one territory, decided from the hostname alone:
- moshpit — an ending IANA does not delegate. Resolved in BOTH modes,
told clearnetResolves=false, and never waiting on a DNS
error that may never come. This is the case that broke.
- clearnet — a real ending. The default mode returns before any storage
read or registry call, so ordinary browsing costs one Set
lookup. Only the opt-in 'moshpit' mode still consults the
registry, which is what that mode is for.
- reserved — .onion, .local, .test, .internal and friends: dropped in
both modes, never sent to the registry.
- none — not a Moshpit-shaped hostname.
The reserved territory closes a leak rather than saving a request. A v3
onion address is 56 alphanumeric characters plus .onion — exactly two
alphanumeric labels, so parseRegistryName accepted it and every Tor
navigation sent the onion address to the registry. The pit's hosts
deliberately bypass the SOCKS proxy, so that lookup left over clearnet
carrying the address being visited.
This makes the code match what the options page has always claimed:
"Moshpit names always resolve here — clearnet has never heard of those
endings. This setting only decides what happens when both namespaces
answer."
The shared resolution policy (decideResolution and friends) is
untouched, so all three copies still agree and moshpit-drift.test.js
stays green. The routing decision moved out of background.js into
moshpit-routing.js so it can be tested without standing up a service
worker.
scripts/update-tlds.mjs regenerates tld-data.js from IANA (currently
1438 endings, version 2026080300). It is a manual chore, not a build
step: a release should not depend on data.iana.org being up.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>1 parent 4092358 commit d03f93a
7 files changed
Lines changed: 1946 additions & 23 deletions
File tree
- apps/desktop/extensions/ai-sidebar
- scripts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
| 2 | + | |
2 | 3 | | |
3 | 4 | | |
4 | 5 | | |
| |||
305 | 306 | | |
306 | 307 | | |
307 | 308 | | |
308 | | - | |
309 | | - | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
310 | 313 | | |
311 | | - | |
312 | | - | |
313 | | - | |
314 | | - | |
| 314 | + | |
315 | 315 | | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
320 | 330 | | |
321 | 331 | | |
322 | 332 | | |
| |||
327 | 337 | | |
328 | 338 | | |
329 | 339 | | |
330 | | - | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
331 | 343 | | |
332 | 344 | | |
333 | 345 | | |
334 | | - | |
| 346 | + | |
335 | 347 | | |
336 | 348 | | |
337 | 349 | | |
| |||
348 | 360 | | |
349 | 361 | | |
350 | 362 | | |
351 | | - | |
352 | | - | |
353 | | - | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
354 | 367 | | |
355 | 368 | | |
356 | 369 | | |
357 | 370 | | |
358 | 371 | | |
359 | | - | |
360 | | - | |
361 | | - | |
362 | | - | |
363 | | - | |
364 | | - | |
365 | | - | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
366 | 386 | | |
367 | 387 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
Lines changed: 101 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
0 commit comments