Extensiecontrole is hoofdlettergevoelig op de deck-, stijlprofiel- en zegelroute #1700
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#1700
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 controle "heeft dit pad de juiste extensie al?" is op elke opslaan- en exportroute hoofdlettergevoelig. Wie
Deck.MDkiest, krijgtDeck.MD.md. Zichtbaar op case-preserving bestandssystemen, en het levert dubbele extensies en verkeerde bestandskoppelingen op.#1659 dekt de twee documentroutes. Dit issue dekt de drie andere plekken waar hetzelfde patroon staat, zodat de klasse in één keer weg is in plaats van half.
Reproductie
Presentatie.MDin. Uitkomst:Presentatie.MD.md..OCIDECKSTYLE. Uitkomst: extensie er nog eens achter.verzoek.TSQin. Uitkomst:verzoek.TSQ.tsq.Verwacht
Bekende extensies worden hoofdletterongevoelig herkend en niet dubbel toegevoegd — op élke route, niet alleen bij het document.
Technische aanwijzing
Drie plekken met hetzelfde patroon, geen van drieën gedekt door #1659:
lib/services/file_service.dart—saveDeckAsDetailed:result.endsWith('.md') ? result : '$result.md'lib/services/file/file_service_style_profile.dart—dest.endsWith('.$ext') ? dest : '$dest.$ext'lib/widgets/dialogs/seal_timestamp_dialog.dart—path!.endsWith('.tsq') ? path : '$path.tsq'De twee uit #1659, ter volledigheid:
lib/services/file/file_service_open.dart(document Opslaan als) enlib/widgets/document_editor_screen.dart(documentexport).WebDAV en S3 doen het al goed: die vergelijken op
lowerName.Oplossingsrichting
Eén gedeelde helper —
String withExtension(String path, String ext)inlib/utils/— die vergelijkt viap.extension(path).toLowerCase()en de extensie alleen toevoegt als hij er niet al staat. Alle vijf de plekken (de drie hier plus de twee uit #1659) gaan erlangs; dan kan er geen zesde ontstaan die het weer zelf doet.p.extensionin plaats vanendsWithvangt bovendien een tweede rafel in dezelfde regels: een gekozen pad zónder extensie maar mét een punt in een mapnaam wordt nu verkeerd gelezen.Doe #1659 en dit in één pas. Vijf plekken die één helper krijgen is één wijziging; twee losse rondes langs dezelfde regels is werk voor niets.
Aangrenzende regel, niet dit issue
saveDeckAsDetailedbouwt zijn voorgestelde naam metRegExp(r'[^\w\s-]'). Dat is dezelfde ASCII-only-\wdie in #1675 aan de documentkant staat: een deck met de titelRésuméheetRsum.md, en een Chinese titel wordt leeg. Het is een andere fout in dezelfde functie — hoort bij #1675 (die vraagt al om te kijken of de deck-kant een tweede kopie heeft; die is dit), niet hier. Wie hier komt, doet ze allebei in één aanraking.Regressietest
Servicetests met een kiezer die
Presentatie.MD,profiel.OCIDECKSTYLEenverzoek.TSQteruggeeft ⇒ pad ongewijzigd. Plus een unittest op de helper zelf: extensie ontbreekt, extensie in kleine letters, extensie in hoofdletters, punt in de mapnaam maar niet in de bestandsnaam.Kosten
Klein: één helper (let op de registratieketen bij een nieuw bestand in
lib/utils/—SOURCE_MAPplus dekking), vijf aanroepplekken, een handvol tests. Geen l10n.Gevonden bij de triage van #1659 (22-08-2026), geverifieerd tegen
main(e93ef205c).