Web: geïmporteerde SVG boven 256 KB toont een fout doordat Isolate.run niet bestaat #2789

Closed
opened 2026-11-03 09:40:09 +00:00 by brenno · 2 comments
Owner

Probleem en gebruikersimpact

sanitizeImportedSvgForDisplay (lib/utils/sanitize_svg.dart) saneert een SVG boven kSvgSanitizeInlineMaxBytes (256 KB) via Isolate.run. Het web kent dat niet. Een geïmporteerde SVG van die grootte valt in de browser daarom in de foutweergave van SafeSvgImage, in de dia, de previews, de zoomdialoog en de presentatie. Kleinere SVG's werken wel. Ingevoerd met 7729c6915 (31-10-2026). Het is dezelfde foutklasse als #2764.

Bewijs

Nieuwe toets in test/sanitize_svg_test.dart, in Chrome (flutter test --platform chrome test/sanitize_svg_test.dart) tegen de huidige main:

een SVG boven de inline-drempel wordt ook gesaneerd [E]
  Unsupported operation: dart:isolate is not supported on dart4web

Native is dezelfde toets groen. SafeSvgImage.memory (de webroute) en .file lopen allebei via _cachedSvg → sanitizeImportedSvgForDisplay.

Aanpak

Hetzelfde patroon als ExportService._offload en #2764: kIsWeb → saneren op de main thread, native → Isolate.run. Daarnaast een statische regel in tool/check_conventions.dart: een bestand dat Isolate.run( aanroept, moet een platformpoort noemen. Onder flutter test is kIsWeb altijd false, dus de native suite kan dit niet vangen. Dat is dezelfde reden als bij de FilePicker-regel (#150/#506).

Acceptatie

  • De toets is groen in Chrome en native.
  • Native blijft een SVG boven de drempel buiten de UI-isolate saneren.
  • De conventiepoort weigert een nieuwe ongepoorte Isolate.run.
## Probleem en gebruikersimpact `sanitizeImportedSvgForDisplay` (`lib/utils/sanitize_svg.dart`) saneert een SVG boven `kSvgSanitizeInlineMaxBytes` (256 KB) via `Isolate.run`. Het web kent dat niet. Een geïmporteerde SVG van die grootte valt in de browser daarom in de foutweergave van `SafeSvgImage`, in de dia, de previews, de zoomdialoog en de presentatie. Kleinere SVG's werken wel. Ingevoerd met 7729c6915 (31-10-2026). Het is dezelfde foutklasse als #2764. ## Bewijs Nieuwe toets in `test/sanitize_svg_test.dart`, in Chrome (`flutter test --platform chrome test/sanitize_svg_test.dart`) tegen de huidige `main`: ``` een SVG boven de inline-drempel wordt ook gesaneerd [E] Unsupported operation: dart:isolate is not supported on dart4web ``` Native is dezelfde toets groen. `SafeSvgImage.memory` (de webroute) en `.file` lopen allebei via `_cachedSvg` → `sanitizeImportedSvgForDisplay`. ## Aanpak Hetzelfde patroon als `ExportService._offload` en #2764: `kIsWeb` → saneren op de main thread, native → `Isolate.run`. Daarnaast een statische regel in `tool/check_conventions.dart`: een bestand dat `Isolate.run(` aanroept, moet een platformpoort noemen. Onder `flutter test` is `kIsWeb` altijd false, dus de native suite kan dit niet vangen. Dat is dezelfde reden als bij de FilePicker-regel (#150/#506). ## Acceptatie - [ ] De toets is groen in Chrome en native. - [ ] Native blijft een SVG boven de drempel buiten de UI-isolate saneren. - [ ] De conventiepoort weigert een nieuwe ongepoorte `Isolate.run`.
Author
Owner

Opgepakt in tak fix/web-svg-sanitize. Raakt lib/utils/sanitize_svg.dart, test/sanitize_svg_test.dart, tool/check_conventions.dart (+ toets) en docs/CHECKS.md.

Opgepakt in tak `fix/web-svg-sanitize`. Raakt `lib/utils/sanitize_svg.dart`, `test/sanitize_svg_test.dart`, `tool/check_conventions.dart` (+ toets) en `docs/CHECKS.md`.
Author
Owner

Opgelost in 47559b73d (PR #2790). Op het web saneert sanitizeImportedSvgForDisplay nu inline; native gaat een SVG boven 256 KB zoals voorheen naar een worker. Nieuwe conventieregel: elke Isolate.run in lib/ noemt een platformpoort, zonder basislijn. Rood vóór de fix: de toets in Chrome, en de regel wees precies sanitize_svg.dart:85 aan. make check/check-secrets/sast zijn groen.

Niet meegenomen:

  • Dat native de worker blijft gebruiken, heeft geen eigen toets: de tak is ongewijzigd, maar niet waarneembaar te onderscheiden van inline saneren.
  • De Chrome-toetsen zitten niet in make check; ze staan in docs/CHECKS.md.
Opgelost in 47559b73d (PR #2790). Op het web saneert `sanitizeImportedSvgForDisplay` nu inline; native gaat een SVG boven 256 KB zoals voorheen naar een worker. Nieuwe conventieregel: elke `Isolate.run` in `lib/` noemt een platformpoort, zonder basislijn. Rood vóór de fix: de toets in Chrome, en de regel wees precies `sanitize_svg.dart:85` aan. `make check`/`check-secrets`/`sast` zijn groen. **Niet meegenomen:** - Dat native de worker blijft gebruiken, heeft geen eigen toets: de tak is ongewijzigd, maar niet waarneembaar te onderscheiden van inline saneren. - De Chrome-toetsen zitten niet in `make check`; ze staan in `docs/CHECKS.md`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2789
No description provided.