fix(import): toon & in geïmporteerde titels, niet & (#1299) #1301

Merged
brenno merged 1 commit from fix/odp-amp-title-1299 into main 2026-08-06 10:26:54 +00:00
Owner

Summary

  • Een & in een geïmporteerde slidetitel (pptx/odp/key) verscheen in de Flutter-preview letterlijk als & in plaats van & (#1299).
  • Oorzaak: de import-sanitizer escaped && (#876, bewust — veilig voor het .md en de HTML-export), maar parseInlineRuns (de Flutter-weergave) decodeerde het niet terug.
  • Fix: decodeer de named HTML-entities (&amp;/&lt;/&gt;/&quot;) in de weergave-runs. Numerieke entities (&#60;) blijven staan — anders wordt een bron-&#60; alsnog < en dat is juist de evasie die #876 blokkeert. Code-spans slaan de decode over zodat `&amp;` letterlijk blijft.
  • Het .md-bestandsformaat en de opslag veranderen niet; de HTML-export was al goed. Puur een weergavefix.

Bewaker

Deze wijziging raakt niets uit het bewaker-rijtje (bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer, publieke belofte) — het is puur de Flutter-weergave. Het #876-beveiligingsmodel blijft intact: het .md bevat nog steeds &amp;, numerieke entities worden niet gedecodeerd. Bewaker-stap daarom expliciet overgeslagen.

Test plan

  • test/inline_markdown_test.dart — named entities decoderen, numeriek blijft staan, code-span laat &amp; staan
  • test/escape_display_test.dart — volledige rondgang sanitize → display levert de oorspronkelijke & op
  • make check groen (8725 tests, 87,2% coverage, per-file floor OK)
  • make check-secrets — gitleaks + trufflehog schoon
  • make sast — semgrep 0 findings

Closes #1299

Generated with Devin

## Summary - Een `&` in een geïmporteerde slidetitel (pptx/odp/key) verscheen in de Flutter-preview letterlijk als `&amp;` in plaats van `&` (#1299). - Oorzaak: de import-sanitizer escaped `&` → `&amp;` (#876, bewust — veilig voor het `.md` en de HTML-export), maar `parseInlineRuns` (de Flutter-weergave) decodeerde het niet terug. - Fix: decodeer de named HTML-entities (`&amp;`/`&lt;`/`&gt;`/`&quot;`) in de weergave-runs. Numerieke entities (`&#60;`) blijven staan — anders wordt een bron-`&#60;` alsnog `<` en dat is juist de evasie die #876 blokkeert. Code-spans slaan de decode over zodat `` `&amp;` `` letterlijk blijft. - Het `.md`-bestandsformaat en de opslag veranderen niet; de HTML-export was al goed. Puur een weergavefix. ## Bewaker Deze wijziging raakt niets uit het bewaker-rijtje (bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer, publieke belofte) — het is puur de Flutter-weergave. Het #876-beveiligingsmodel blijft intact: het `.md` bevat nog steeds `&amp;`, numerieke entities worden niet gedecodeerd. Bewaker-stap daarom expliciet overgeslagen. ## Test plan - [x] `test/inline_markdown_test.dart` — named entities decoderen, numeriek blijft staan, code-span laat `&amp;` staan - [x] `test/escape_display_test.dart` — volledige rondgang sanitize → display levert de oorspronkelijke `&` op - [x] `make check` groen (8725 tests, 87,2% coverage, per-file floor OK) - [x] `make check-secrets` — gitleaks + trufflehog schoon - [x] `make sast` — semgrep 0 findings Closes #1299 Generated with [Devin](https://devin.ai)
fix(import): toon & in geïmporteerde titels, niet &amp; (#1299)
All checks were successful
scans / scans (pull_request) Successful in 1m50s
static-gate / static-gate (pull_request) Successful in 4m57s
bedb79b4ed
Geïmporteerde tekst (pptx/odp/key) wordt aan de importgrens HTML-escaped
(#876): `&` → `&amp;`. Dat is correct in het `.md` en de HTML-export
decodeert het weer, maar de Flutter-preview rendert titels via
`parseInlineRuns`, die `&amp;` liet staan — dus toonde de editor letterlijk
`&amp;` in plaats van `&`.

Decodeer de named entities (`&amp;`/`&lt;`/`&gt;`/`&quot;`) in de
weergave-runs. Alleen named, nooit numeriek: een bron-`&#60;` is door de
sanitizer `&amp;#60;` geworden en mag niet als `<` terugkomen — dat is juist
de evasie die #876 blokkeert. Code-spans slaan de decode over zodat
`` `&amp;` `` letterlijk blijft. Het `.md`-formaat en de opslag veranderen
niet; de HTML-export was al goed.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit ecdc8b5cc8 into main 2026-08-06 10:26:54 +00:00
Sign in to join this conversation.
No description provided.