DOCX/ODT-export: codeblok lekt _Ctx.codeBlock op de visitor-stack, inline code daarna wordt een blok #2095
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2095
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Probleem
Een met OciDeck gemaakt document dat een (mermaid-)codeblok bevat, gevolgd door alinea's met inline code (enkele backticks), produceert een ongeldig .docx-bestand dat niet te openen is.
Oorzaak
In
markdown_to_docx.dartenmarkdown_to_odt.dartreturnt_visitCodevoor een codeblokfalseuitvisitElementBefore. Demarkdown-package roept daardoorvisitElementAftervoor dat<code>-element niet meer aan (ast.dart:107). Toch pushte_visitCode_Ctx.codeBlockBodyop de stack. Die placeholder wordt nooit meer weggehaald, waardoorpre'svisitElementAfterper ongeluk_Ctx.codeBlockBodypopt in plaats van_Ctx.codeBlock. Na het eerste codeblok blijft_Ctx.codeBlockpermanent op de stack staan, dus_inCodeBlockis voor altijdtrue.Gevolg: élke volgende inline
`code`wordt als een blok-level PreformattedText-alinea gerenderd, genest in de alinea die al open was. Die alinea sluit nooit meer →</w:body>mismatch → ongeldig .docx.Repro
foo
Oplossing
Push geen
_Ctx.codeBlockBodymeer (het was dood: nooit gelezen, nooit opgeruimd). Daardoor poptpre'svisitElementAftercorrect_Ctx.codeBlocken blijft de stack schoon. De enum-waardecodeBlockBodyen de dode branch invisitElementAfterzijn verwijderd.Dezelfde bug bestond in de ODT-converter; LaTeX en EPUB hadden hem niet (die returnen
trueuit_visitCode).Reële impact
Het document
Information-Security-Policy-2.0-concept.docx(met een mermaid-blok op regel 163 en inline code op regels 460, 495, 520) was niet te openen.