Documentafbeeldingen met haakjes of spaties in de bestemming worden verkeerd geparseerd #1657
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#1657
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
De eigen Markdown-afbeeldingsparser stopt de bestemming bij de eerste sluitende haak en kapt vervolgens op de eerste whitespace af. Geldige of veelvoorkomende bronnen zoals images/figure (1).png en angle-bracket destinations worden daardoor niet als het bedoelde beeld geladen. De paginaweergave gebruikt dezelfde regex en herkent zulke beelden ook niet voor asynchrone hermeting.
Reproductie
Verwacht
De afbeelding wordt volgens de ondersteunde Markdown-syntaxis geparseerd en telt mee voor paginering.
Technische aanwijzing
_imageLinePattern is ^![([^]])](([^)]))$ in document_markdown_blocks.dart en paged_document_view.dart; _parseImageLine neemt de bron tot de eerste whitespace.
Gevonden bij audit van commit
d439638c6b.Triage: accepted
Bevestigd tegen
main(e93ef205c)._imageLinePattern = RegExp(r'^!\[([^\]]*)\]\(([^)]*)\)$')staat twee keer los in de boom:lib/widgets/reader/parts/document_markdown_blocks.dartenlib/widgets/reader/paged_document_view.dart._parseImageLine(document_markdown_blocks.dart) kapt de bestemming bovendien af op de eerste witruimte.Uitkomst:
.png)matcht helemaal niet — de groep stopt bij de eerste), waarna$faalt. CommonMark staat gebalanceerde haakjes in een kale bestemming wél toe.levert bron<mijnop.Oplossingsrichting
Eén gedeelde ontleder in
lib/utils/, door beide bestanden geïmporteerd. Dat de regex nu twee keer bestaat is precies hoe ze uit elkaar kunnen lopen; dit is het moment om dat op te heffen.De ontleder is een kleine handgeschreven scanner, geen regex — haakjes tellen kan een regex niet. Hij dekt wat wij ondersteunen:
<…>-bestemming (alles tot de sluitende>, spaties toegestaan);\(,\)en\<;"titel"/'titel'/(titel)ná de bestemming, die niet in het pad hoort.Regressietest (verplicht)
Nieuwe unittest op de ontleder:
figure (1).png,<mijn bestand.png>,pad\(1\).png, bestemming met titel, en de bestaande gevallen als vangnet. Plus intest/paged_document_view_test.dartdat zo'n afbeelding als beeldblok telt voor de hermeting.Kosten
Nieuw bestand in
lib/utils/— let op de registratieketen:SOURCE_MAP-regel plus dekking, anders valtmake check(zieCI static-gate). Twee aanroepers omzetten. Halve dag.Prioriteit
Middel: het beeld verdwijnt stil, en het pagina-einde klopt daarna precies één beeldhoogte niet.