Document opslaan/exporteren verdubbelt extensies met hoofdletters #1659
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#1659
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 extensiecontrole is hoofdlettergevoelig. Een gebruiker die NAME.MD kiest bij Opslaan als krijgt NAME.MD.md; Report.PDF bij export wordt Report.PDF.pdf. Dit is zichtbaar op case-preserving platformen en kan verwarring of verkeerde bestandsassociaties geven.
Reproductie
Verwacht
Bekende extensies worden hoofdletterongevoelig herkend en niet dubbel toegevoegd.
Technische aanwijzing
lib/services/file/file_service_open.dart:_writeDocumentToPicked en lib/widgets/document_editor_screen.dart:_pickDocumentExportPath gebruiken case-sensitive endsWith.
Gevonden bij audit van commit
d439638c6b.Triage: accepted
Bevestigd tegen
main(e93ef205c).lib/services/file/file_service_open.dart—dest.endsWith('.md') ? dest : '$dest.md'.lib/widgets/document_editor_screen.dart—dest.endsWith('.$ext') ? dest : '$dest.$ext'.Beide hoofdlettergevoelig, dus
Document.MDwordtDocument.MD.mdenRapport.PDFwordtRapport.PDF.pdf.Oplossingsrichting
Op beide plekken vergelijken via
p.extension(dest).toLowerCase()in plaats vanendsWith. Dat vangt en passant een tweede rafel in dezelfde regel: een gekozen pad zónder extensie maar mét een punt in een mapnaam wordt nu ook verkeerd gelezen.Doe in dezelfde pas de deck-kant mee —
saveDeckAs/pakketexport gebruiken hetzelfde patroon; als daar hetzelfde staat, hoort het in één wijziging, niet in een tweede issue dat over een half jaar nog open staat.Regressietest (verplicht)
test/document_new_and_save_as_test.dart(of de dichtstbijzijnde file-service-test) met een kiezer dieDocument.MDteruggeeft → pad ongewijzigd; idemRapport.PDFlangs_pickDocumentExportPath.Kosten
Klein: twee regels plus tests. Geen l10n.
Prioriteit
Laag-middel. Geen dataverlies, wel verwarring en verkeerde bestandskoppelingen op case-preserving systemen.
De drie plekken buiten de documentmodus staan nu apart: #1700 (deck Opslaan als, stijlprofielexport, zegel-tijdstempelverzoek). Voorstel daar is één gedeelde
withExtension-helper voor alle vijf de plekken; doe dit issue en #1700 in één pas.