PDF-export loopt oneindig rond bij een tabelrij die hoger is dan een blad #1798
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#1798
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?
Wat is het probleem?
Een documentexport naar PDF loopt oneindig rond wanneer één tabelcel zoveel tekst bevat dat de rij hoger wordt dan een bladzijde. De export voltooit nooit; het proces blijft op ~140% CPU draaien. In een release-build is er geen enkele rem.
Hoe te reproduceren
Gemeten op 26-08-2026:
flutter_testerdraaide tien minuten op 126–140% CPU zonder te voltooien, bij herhaling.Het is niet onze tabel
Vastgesteld door dezelfde invoer met een kale
pw.Tablete draaien in plaats van deOrphanSafeTableuit #1790: het hangt identiek. De oorzaak ligt dus inpackage:pdfzelf, niet in de weesbescherming.Waar het vandaan komt
multi_page.dart:MultiPagebiedt een spannende widget de resterende ruimte aan;Tableplaatst rijen tot er één niet meer past. Past de éérste rij al niet — omdat ze hoger is dan een heel blad — dan wordt er niets geplaatst,MultiPagebegint een nieuw blad, en daar gebeurt precies hetzelfde.De bewaking die dit zou moeten vangen staat in een
assert(multi_page.dartregel 294):Een
assertverdwijnt in een release-build. In debug krijg je een uitzondering na twintig bladen; in de uitgeleverde app krijgt de gebruiker een bevroren venster.Waarom dit ertoe doet
Dit is geen exotische invoer. Eén lange alinea in een tabelcel is in een rapport heel gewoon — een toelichting, een citaat, een opsomming van bevindingen in één cel. De gebruiker ziet geen fout en geen voortgang: het programma reageert niet meer, en er is niets dat vertelt welke tabel het is.
Richtingen
maxPagesverlagen helpt niet — de bewaking zit in eenasserten doet in release niets. Een eigen teller om de export heen zou wel werken.asserthalen en er een echte uitzondering van maken.DavBfr/dart_pdf,lib/src/widgets/multi_page.dart.Route 1 is de enige die de gebruiker nu beschermt. Een bevroren venster is de slechtste uitkomst van alle drie.
Opgepakt. Tak
fix/export-hang-1798.Eerst de grens bepalen: is het de hóógte van de rij, of de combinatie van veel tekst in een smalle kolom? Ik toets met per-toets time-outs zodat een hang faalt in plaats van te blijven staan.
Opgelost in PR #1800.
Een tabel met een rij die hoger is dan een blad gaat nu als losse blokken de stroom in: per rij elke cel op een eigen regel, met de kolomkop ervoor. De inhoud blijft volledig; alleen de uitlijning naast elkaar gaat verloren, en die was bij een cel van een halve bladzijde toch geen leeshulp meer.
Twee dingen die een ronde kostten, voor wie hier later komt:
Timeoutin een toets vuurt niet, want de isolate geeft nooit terug. De grens is daarom met een pure functie bepaald in plaats van met een renderproef.MultiPagestaat mag breken. De eerste terugvalvorm zat in eenpw.Column; die plaatst zijn kinderen heel, waardoor de hang terugkwam in een andere vorm.Let op bij onderhoud: de regressietoets hangt als de bescherming stukgaat, in plaats van te falen — om dezelfde reden. Dat staat als waarschuwing in de toets zelf.
De upstream-oorzaak blijft bestaan: de bewaking in
multi_page.dartstaat in eenasserten doet in een release-build niets. Wij lopen er nu omheen; een upstream-melding blijft zinvol.