fix(web): saneer grote SVG's zonder Isolate.run, en weiger ongepoorte Isolate.run (#2789) #2790

Merged
brenno merged 1 commit from fix/web-svg-sanitize into main 2026-11-03 10:15:03 +00:00
Owner

Closes #2789

Wat er mis was

sanitizeImportedSvgForDisplay stuurde een SVG boven 256 KB ook in de browser naar Isolate.run. Het web gooit daar bij aanroep; SafeSvgImage (dia, previews, zoomdialoog, presentatie) toonde de foutweergave. Ingevoerd met 7729c6915 (31-10). Dit is dezelfde foutklasse als #2764 (PR #2788).

Wat er verandert

  • lib/utils/sanitize_svg.dart: if (kIsWeb || bytes.length <= drempel) → inline saneren. Native gaat een grote SVG zoals voorheen naar een worker.
  • tool/check_conventions.dart: nieuwe regel. Elke Isolate.run in lib/ noemt een platformpoort in dezelfde methode; de regel hergebruikt _gatedBefore van de FilePicker-regel. Commentaarregels en _io.dart-helften vallen erbuiten. Er is geen basislijn, want de regel landt met nul overtredingen.
  • docs/CHECKS.md: de regel staat in de conventielijst en de SVG-toets in het Chrome-commando.

Toetsen

  • test/sanitize_svg_test.dart: een SVG net boven de drempel komt gesaneerd terug. De toets draait native én in Chrome.
  • Rood vóór de fix: in Chrome Unsupported operation: dart:isolate is not supported on dart4web. De nieuwe regel wees precies lib/utils/sanitize_svg.dart:85 aan, en geen enkele andere (al gepoorte) aanroep.
  • Het gedocumenteerde Chrome-commando (vier bestanden, 33 toetsen) is groen.

Poorten

make check (incl. golden), make check-secrets en make sast zijn groen op deze commit.

Niet bewezen

Dat native een grote SVG nog op de worker saneert, heeft geen eigen toets. Die tak is ongewijzigd, maar er is geen waarneembaar verschil met inline saneren om op te toetsen.

🤖 Generated with Claude Code

Closes #2789 ## Wat er mis was `sanitizeImportedSvgForDisplay` stuurde een SVG boven 256 KB ook in de browser naar `Isolate.run`. Het web gooit daar bij aanroep; `SafeSvgImage` (dia, previews, zoomdialoog, presentatie) toonde de foutweergave. Ingevoerd met 7729c6915 (31-10). Dit is dezelfde foutklasse als #2764 (PR #2788). ## Wat er verandert - `lib/utils/sanitize_svg.dart`: `if (kIsWeb || bytes.length <= drempel)` → inline saneren. Native gaat een grote SVG zoals voorheen naar een worker. - `tool/check_conventions.dart`: nieuwe regel. Elke `Isolate.run` in `lib/` noemt een platformpoort in dezelfde methode; de regel hergebruikt `_gatedBefore` van de FilePicker-regel. Commentaarregels en `_io.dart`-helften vallen erbuiten. Er is geen basislijn, want de regel landt met nul overtredingen. - `docs/CHECKS.md`: de regel staat in de conventielijst en de SVG-toets in het Chrome-commando. ## Toetsen - `test/sanitize_svg_test.dart`: een SVG net boven de drempel komt gesaneerd terug. De toets draait native én in Chrome. - **Rood vóór de fix:** in Chrome `Unsupported operation: dart:isolate is not supported on dart4web`. De nieuwe regel wees precies `lib/utils/sanitize_svg.dart:85` aan, en geen enkele andere (al gepoorte) aanroep. - Het gedocumenteerde Chrome-commando (vier bestanden, 33 toetsen) is groen. ## Poorten `make check` (incl. golden), `make check-secrets` en `make sast` zijn groen op deze commit. ## Niet bewezen Dat native een grote SVG nog op de worker saneert, heeft geen eigen toets. Die tak is ongewijzigd, maar er is geen waarneembaar verschil met inline saneren om op te toetsen. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
`sanitizeImportedSvgForDisplay` stuurde een SVG boven 256 KB ook in de browser
naar `Isolate.run`. Het web gooit daar bij aanroep; `SafeSvgImage` toonde de
foutweergave. Op het web saneert hij nu alles op de main thread, native gaat
een grote SVG zoals voorheen naar een worker.

Dit is dezelfde foutklasse als #2764. De native suite kan hem niet zien
(`kIsWeb` is daar false), dus vangt een statische regel in
check_conventions hem voortaan: elke `Isolate.run` in `lib/` noemt een
platformpoort in dezelfde methode (hetzelfde venster als de FilePicker-regel).
Commentaarregels en `_io.dart`-helften vallen erbuiten. Zonder basislijn: de
regel landt met nul overtredingen.

Rood vóór de fix: de nieuwe toets in sanitize_svg_test.dart viel in Chrome
("dart:isolate is not supported on dart4web") en de regel wees precies
lib/utils/sanitize_svg.dart:85 aan.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
brenno merged commit 2915127e45 into main 2026-11-03 10:15:03 +00:00
brenno deleted branch fix/web-svg-sanitize 2026-11-03 10:15:03 +00:00
Sign in to join this conversation.
No description provided.