Ongeldige geometry-frontmatter kan de documentlayout laten vastlopen of crashen #1681
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#1681
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
geometry en opgeslagen PageMargins accepteren negatieve, niet-eindige en buitensporige getallen zonder semantische validatie. Marges die samen breder/hoger zijn dan het papier leveren een negatieve contentbreedte/-hoogte op; die waarden bereiken Flutter-layoutconstraints en pagineringsberekeningen.
Reproductie
Verwacht
Alle geometriewaarden zijn eindig en niet-negatief; de overblijvende tekstmaat heeft een veilige minimumwaarde. Ongeldige frontmatter valt terug op defaults met een begrijpelijke melding.
Technische aanwijzing
lib/services/document_page_setup.dart:_parseGeometry en PageMargins.fromId gebruiken double.tryParse zonder bereikcontrole. paged_document_view.dart berekent de resulterende dimensies rechtstreeks.
Gevonden bij audit van commit
d439638c6b.Triage: accepted — en het label
securityerbijBevestigd tegen
main(e93ef205c)._parseGeometry(lib/services/document_page_setup.dart) gebruiktdouble.tryParsezonder bereikcontrole. Dart parseert óókNaN,Infinityen-Infinity, en negatieve getallen komen er gewoon doorheen.PageMargins.fromId(lib/models/page_size.dart) doet hetzelfde voor de opgeslagen waarde.PagedDocumentViewrekent er rechtstreeks mee:_contentWidthPxen_contentHeightPxworden negatief ofNaNen gaan zo naarPositioned(width:)enSizedBox.documentPageOffsetsvangt alleenpageHeight <= 0af;NaN <= 0is onwaar, dus die poort laatNaNdoor.Waarom
security. Deze frontmatter komt uit een bestand dat van iemand anders kan komen, en het gevolg is een vastlopende of crashende app bij het openen. Dat is dezelfde klasse als de invoerharding van #1643/#1696, en hoort dus vóór de gewone bugs in de volgorde. Geen datalek, wel beschikbaarheid op onvertrouwde invoer.Oplossingsrichting
Valideren aan de grens, niet bij het tekenen:
_parseGeometryenPageMargins.fromId: weiger niet-eindige waarden (isFinite) en negatieve waarden, en weiger een margeset die minder dan een minimum tekstvlak overlaat (voorstel: 20 mm breed én hoog). Val terug op de standaardwaarden._contentWidthPx/_contentHeightPx. Die waarden komen namelijk óók uit de instellingen en uit de pagina-opmaakdialoog, en die wegen lopen niet langs de parser.Regressietest (verplicht)
test/document_page_setup_test.dart:geometrymetNaN,Infinity, negatief, enleft+right > paperwidth→ standaardmarges, en de melding komt.takeException()null) en levert minstens één leesbaar vel.Kosten
Twee bestanden plus een klem, één nieuwe
l10n.d('…')⇒ 31 vertalingen. Halve dag.Prioriteit
Hoog: sorteert op
securitybovenaan deze reeks.