Skip to content

fix(pdfjs): voorkom vastlopen op ongeldige Type 4-tokens (#839) - #840

Closed
oscar981-op wants to merge 2 commits into
OpenAEC-Foundation:mainfrom
oscar981-op:fix/tauri-postscript-progress-839
Closed

oscar981-op wants to merge 2 commits into
OpenAEC-Foundation:mainfrom
oscar981-op:fix/tauri-postscript-progress-839

Conversation

@oscar981-op

@oscar981-op oscar981-op commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Integrated with maintainer review fixes via #862 (upstream main cdda6a0). The original tested branch is retained as reference; do not merge it again.

Closes #839

Een PDF met een Type 4-functie zoals { pop + 0 0 } laat de PostScript-lexer van de gepinde PDF.js 6.4.299 op dezelfde invoerpositie staan. De echte legacy-worker blijft daardoor hangen bij het opbouwen van de shading-operatorlijst. Deze PR neemt de gerichte voortgangsfix uit Mozilla PDF.js #22365 (e7aa97b49) over, zonder andere wijzigingen uit een nieuwe PDF.js-versie.

De Vite-plugin past alleen de twee bekende lexermethoden aan: ongeldige tokens schuiven één teken door; oneindige getallen verbruiken hun volledige token en leveren nul. Bij een afwijkende pakketversie of gewijzigde bron stopt de bouw met een gerichte fout, zodat een toekomstige dependency-update opnieuw wordt beoordeeld. De ongewijzigde dependency blijft op 6.4.299 vastgezet; node_modules wordt niet aangepast.

De editor en zelfstandige afdrukwachtrij gebruiken dezelfde gepatchte worker. In dev wordt deze via de bestaande same-origin workerroute geserveerd. In productie wordt de gepatchte inhoud vóór het berekenen van de asset-hash uitgegeven, zodat een gecachte kwetsbare worker niet dezelfde URL houdt. De bestaande Chrome-91-transformatie en polyfills blijven toegepast. Versies zijn volgens de repository-instructies gesynchroniseerd naar 2026.44.9.

Validatie:

  • Zelfgemaakte minimale shading-PDF, zonder externe fixtures of gebruikersdocumenten. De ongepatchte echte worker bereikt de operatorlijst en overschrijdt de subprocessdeadline; het testproces beëindigt hem.
  • Negen nieuwe regressietests: patchherkenning/idempotentie, weigeren van gewijzigde bron, begrensde hangreproductie, ongeldige tekens/getallen/operators, geldige functie en lexer-voortgang. Volledige unitsuite: 5.586 geslaagd, 18 overgeslagen, nul fouten.
  • Headless Chromium met de PDF.js-module en worker-URL van de app: +, -, 1e999, foo en @ renderen af. Geldige rode gradiënt blijft pixelgelijk aan de originele worker. Annuleren, opnieuw renderen en heropenen slagen.
  • TypeScript, Vite-productiebouw en 40 versie-/releaseconfiguratietests geslaagd.
  • De laatste productiebouw bevat precies één gedeelde worker (pdf.worker-BVja31PW.js). Alle zes PDF-fixtures door die daadwerkelijk uitgegeven én getranspileerde worker uitgevoerd onder een deadline; geslaagd. Deze controle vond ook de aparte workerroute van de afdrukwachtrij, die is meegenomen.
  • git diff --check schoon.

Herhalen vanuit open-pdf-studio:

  • node --test scripts/pdfjs-postscript-progress.test.mjs
  • node scripts/postscript-browser-e2e.mjs <geïsoleerde-vite-url>
  • Na vite build: node scripts/postscript-build-check.mjs

Beperking: getest met de echte PDF.js-worker in Node en Chromium; geen live native WebView getest. Er wordt geen probleem of fix in PDFium geclaimd. De repro is beperkt tot Type 4-parservoortgang, niet tot algemene resourcebegrenzing voor willekeurige PDF's.

Bijgewerkt op upstream main 139a3198f na merge van #841. Alleen versievelden conflicteerden. Op de nieuwe head opnieuw geslaagd: browserregressie, TypeScript, Vite, 55 gerichte PDF.js-/oude-WebView-/release-/versietests en alle zes fixtures tegen de daadwerkelijk uitgegeven worker. De volledige unitsuite hierboven betreft de oorspronkelijke fix; de volledige upstream-CI is inmiddels ook op de nieuwe head geslaagd.

Actuele head: 620d1176555a1cb097acb31f8aa37b570802474d. Alle upstream-controles zijn geslaagd: Windows, Linux, macOS, render-regression en hosted-csp. De installercontrole is voltooid: Android, webbundel en MCPB geslaagd; desktopjobs geblokkeerd door de bekende fork-configuratie (Azure-endpoint, updater-privésleutel en Apple-certificaatimport). Dit is geen uitspraak over organisatiecredentials of gepubliceerde upstream-installers.

Blijft concept in afwachting van succesvolle installerondertekening en verplichte review. Het huidige account heeft geen upstream-mergerecht. Fork-release v2026.44.9 blijft concept; niets gepubliceerd.

Status na upstream release #844: main 846a2a67f veroorzaakt 23 conflicten in 16 versie-/releasebestanden. Een read-only mergecontrole bevestigt dat alle conflicthunks uitsluitend versienummers betreffen; de functionele wijzigingen mergen zonder conflict. De vermelde groene CI geldt voor de bestaande PR-head, niet voor een combinatie met deze nieuwe main. Versies worden opnieuw afgestemd zodra de installer-/reviewblokkades zijn opgelost of inhoudelijke review een nieuwe push nodig maakt.

@DutchSailor DutchSailor mentioned this pull request Oct 29, 2026
@DutchSailor

Copy link
Copy Markdown
Collaborator

Thank you @oscar981-op! This is released in 2026.44.4 as one squashed commit with you as the author (merged through #862).

Review fix on top: the hang test checks lexer progress directly instead of waiting for a timeout. The build fails loudly if the patched code is not found.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Prevent PDF.js Type 4 PostScript parsing hangs on malformed tokens

2 participants