Commit Graph
93 Commits
Author SHA1 Message Date
Eric Kaden f86bd71979 Merge remote-tracking branch 'upstream/main' into fix/xfa-runtime-highlight
# Conflicts:
#	crates/engine/src/js.rs
#	crates/js/src/xfa/globals.rs
#	crates/ui-egui/src/workflows/js_ui.rs
2026-10-28 17:59:16 -04:00
Eric Kaden 21f6c29d3e M6: form script messages keep their title, icon and buttons, and every one is shown (#4293, #4294) (#4306)
* M6: form script messages keep their title, icon and buttons, and every one is shown (#4293, #4294)

* M6: a form script message waits for a notice the toast already shows

* M6: form script messages past the queue's room are counted and reported

* M6: a sentence break in the merged parity note

* M6: an object that names no parameter is a message's text, as a String object or a caught error

* M6: the count of left-out script messages is said again if another notice replaces it before its time

* M6: a full stop between two sentences of the FormCalc parity note

* chore: re-run CI (a frame-budget timing test missed on a shared runner)
2026-10-28 17:46:11 -04:00
Eric Kaden 9ea7b59da1 Merge remote-tracking branch 'upstream/main' into fix/xfa-runtime-highlight 2026-10-28 01:42:43 -04:00
Dylan M. Taylor ef894ae6b8 Fix platform-gated imports for Windows and wasm builds 2026-10-28 00:14:57 +00:00
Dylan M. Taylor a0598816d2 Refactor js for strict Clippy checks 2026-10-27 23:12:51 +00:00
Eric Kaden fd9a76e3ce Merge remote-tracking branch 'upstream/main' into fix/xfa-runtime-highlight
# Conflicts:
#	crates/automation/src/a11y.rs
#	crates/engine/src/edit.rs
#	crates/engine/src/session.rs
#	crates/js/src/lib.rs
#	crates/js/src/xfa.rs
#	crates/ui-egui/src/lib.rs
2026-10-26 22:25:06 -04:00
aiongg f022ef0671 style: cargo fmt on moved files 2026-10-27 00:34:32 +00:00
aiongg 8e50dcd0a3 refactor(js): split xfa.rs into xfa/
New modules: model, host, nodes, instances, globals, run.
2026-10-26 22:18:50 +00:00
aiongg 68aa5313c2 refactor(js): split formcalc.rs into formcalc/
New modules: lexer, ast, parser, value, access, eval, dates, words, builtins.
2026-10-26 22:18:50 +00:00
aiongg 1c5873cfb5 refactor(js): split lib.rs into model, host, document, format, globals, run
New modules: model.rs, host.rs, document.rs, format.rs, globals.rs, run.rs. Old crate:: paths keep working through use aliases in lib.rs.
2026-10-26 22:18:50 +00:00
Eric Kaden a8b4a2b325 M12: a dropped runtimeHighlight request leaves the setting as it was, and the page-number scan gathers the fields once 2026-10-25 13:52:46 -04:00
Eric Kaden 972850d305 Merge remote-tracking branch 'upstream/main' into fix/xfa-runtime-highlight
# Conflicts:
#	crates/engine/src/lib.rs
#	crates/engine/src/xfa.rs
#	crates/xfa/src/lib.rs
#	parity/acrobat-features.toml
2026-10-25 11:06:27 -04:00
.CooCoo 0db7d57619 Tests: XFA calculation tests no longer fail when the machine is busy (#4535)
Five XFA tests failed at random on a busy machine. The scripts of an
opening or a change share a 3 s wall-clock budget (a click's share 5 s),
each script has 1 s or 3 s, and the engine has 10 s to start; under load
the tests went past one of them, and the scripts they check were skipped
or did not start.

Session::with_xfa_time_scale (and Automation::with_xfa_time_scale)
multiplies each of these limits for a test; the default stays 1. The
script session counts the engine threads it starts on the calling thread
(xfa_session::engines_started).

The hundreds-of-calculations tests run with the limits raised, and the
engine's test now checks that opening starts one engine and a change one
more. A new test sets the factor to 0 and checks that the budget skips
all 210 calculations and says so. Three more tests that failed the same
way under load run with the limits raised.
2026-10-25 10:02:00 -04:00
NetterSilverandClaude Haiku 5.5 538eb1624b Fix FormCalc Round overflowing to infinity for large values (#4508)
Found while testing crates/js/src/formcalc.rs:2114-2119

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-25 10:00:02 -04:00
NetterSilverandClaude Haiku 5.5 4f9b16fa14 Reject '+' as a hex digit in FormCalc url Decode escapes (#4586)
Found while testing crates/js/src/formcalc.rs:2280-2284

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-25 09:59:59 -04:00
Eric Kaden e0eb1eff01 M6: a script's field-highlight change reaches the next edit of a batch, and is kept only when its request is 2026-10-24 14:50:22 -04:00
Eric Kaden a90f764a8e M6: app.runtimeHighlight asks once, for the setting a script ends with, under the request cap 2026-10-24 09:21:03 -04:00
Eric Kaden 22e20b04fb Merge remote-tracking branch 'upstream/main' into fix/xfa-runtime-highlight
# Conflicts:
#	crates/automation/src/a11y.rs
#	crates/engine/src/js.rs
#	crates/engine/src/tests.rs
#	crates/js/src/lib.rs
#	crates/js/src/tests.rs
#	crates/js/src/xfa.rs
#	crates/ui-egui/src/js_ui.rs
#	crates/xfa/src/tests.rs
2026-10-24 09:07:18 -04:00
aiongg 06959df890 Integration: execMenuItem requests go through the request cap (#3580)
A script looping on app.execMenuItem could queue unlimited requests; they now follow the same count and byte limits as other requests.
2026-10-24 08:15:46 +00:00
aiongg f017ca3b78 Merge PR #3580: M6: form buttons show the side panels (app.execMenuItem)
crates/js/src/lib.rs: module doc app/util list has execMenuItem and scand; install() doc comment from main.
crates/js/src/tests.rs, crates/engine/src/tests.rs: both sides' appended tests kept.
parity/acrobat-features.toml: js notes: execMenuItem wording plus scand wording.
2026-10-24 06:23:47 +00:00
aiongg 5990381c9c Merge PR #3549: M6: util.scand reads dates as another viewer does 2026-10-24 06:22:59 +00:00
aiongg 3f622963f0 Merge PR #4299: Omit minus sign when FormCalc Format() rounds to zero 2026-10-24 06:22:56 +00:00
aiongg c24e90b59c Merge PR #3985: M6: a document script that throws no longer stops the form's other scripts (#3940)
crates/automation/src/tools.rs: js_run description: both sides' wording merged.
2026-10-24 06:22:15 +00:00
a047c6ba09 chore: resolve SonarCloud maintainability issues (#4356)
* chore: resolve SonarCloud maintainability issues

* fix(packaging): use verify_sha256 helper function

* style: cargo fmt

* fix: restore wildcard imports and fix method-reference type errors

Revert the glob-import expansions (they missed SomIndices and left unused
imports), revert char::is_ascii_digit where the iterator yields char by
value, and pass the content slice to prune_doomed_xobjects as &[Vec<u8>].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Keep XObject decodability check without binding content in interp

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Dylan Taylor <dylan@craftmaker.dev>
2026-10-23 23:28:18 -04:00
NetterSilverandClaude Haiku 5.5 afcc54fddc Omit minus sign when FormCalc Format() rounds to zero
Found while testing crates/js/src/formcalc.rs:2328-2330 ("format" number-picture branch, `if num < 0.0 { text = format!("-{text}") }`)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 20:53:02 +02:00
Eric Kaden fec98811ce Merge remote-tracking branch 'upstream/main' into fix/xfa-runtime-highlight
# Conflicts:
#	crates/engine/src/js.rs
#	crates/js/src/lib.rs
#	crates/js/src/tests.rs
2026-10-23 10:43:35 -04:00
Eric Kaden 44b7e0a40f Merge remote-tracking branch 'upstream/main' into fix/exec-menu-attachments
# Conflicts:
#	crates/js/src/lib.rs
#	crates/js/src/tests.rs
#	parity/acrobat-features.toml
2026-10-23 10:43:34 -04:00
Eric Kaden c141c94c06 Merge remote-tracking branch 'upstream/main' into fix/util-scand
# Conflicts:
#	crates/js/src/lib.rs
#	crates/js/src/tests.rs
#	parity/acrobat-features.toml
2026-10-23 10:27:32 -04:00
mtlcl410andClaude Opus 5.5 994ce63099 M6: a document script's error is told apart by where it came from, not its wording (#3940)
Review follow-up on #3985: JsOutput deduplicated document-script errors by
their text (document script N: ...), so a field script that threw the
same words was dropped by append, and a document script's error was
dropped by absorb when a field script had already reported that text.
JsOutput now records which errors came from document scripts
(doc_errors) and deduplicates only those; pdfcraft_js::is_doc_error,
which guessed from the wording, is removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0175FWj4xFhMhSH3UpMU8DSC
2026-10-23 22:25:57 +08:00
mtlcl410andClaude Opus 5.5 a7afaacbb9 M6: merged script output reports a document script's error once too (#3940)
Review on #3985 (benandez): JsOutput::absorb reported a failing document script once, but append
added every error again, so merging two outputs repeated it. pdfcraft_js now says whether an
error is a document script's (is_doc_error, next to the doc_error format), and append skips one
already reported; each field script error is still its own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:25:57 +08:00
mtlcl410andClaude Opus 5.5 a8beb90ccf M6: a document script refused before running is skipped and reported too (#3940)
CodeRabbit on #3985: a document script over the size or nesting limit made `run`
return before any script ran, so the field script failed as before. It is now
skipped (never evaluated, as the limits require), reported in its place in
doc_errors, and the other scripts and the field script still run. The field
script's own limits still refuse it outright.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:25:57 +08:00
mtlcl410andClaude Opus 5.5 77db1bd27f M6: parity note for document scripts that throw (#3940)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:25:57 +08:00
mtlcl410andClaude Opus 5.5 e76ebb9ea3 M6: a document script that throws no longer stops the form's other scripts (#3940)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:25:57 +08:00
Eric Kaden 8f292c66ae M6: scripts see xfa_version, and xfa_installed in XFA forms (#4142) 2026-10-23 10:19:09 -04:00
NetterSilverandClaude Haiku 5.5 3ee6a83e09 Accept long unit names in FormCalc UnitValue (#4116)
Found while testing crates/js/src/formcalc.rs:2526-2532 (UnitValue per_in table; UnitType at :2510-2516)

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 10:18:55 -04:00
NetterSilverandClaude Haiku 5.5 c32c2ce09f Fix FormCalc Str() printing small negative numbers as "-0" (#4108)
Found while testing crates/js/src/formcalc.rs:716-720 (fixed), used by Str at :2216

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-23 10:18:45 -04:00
Eric Kaden 8f82bfccec Merge remote-tracking branch 'upstream/main' into fix/exec-menu-attachments
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-22 23:09:22 -04:00
Eric Kaden e89d1ca963 Merge remote-tracking branch 'upstream/main' into fix/xfa-runtime-highlight
# Conflicts:
#	crates/xfa/src/tests.rs
2026-10-22 22:01:12 -04:00
aiongg d67c4b3059 fix(js): an XFA value past the effect cap leaves the field unchanged 2026-10-22 21:41:50 +00:00
aiongg e541151389 fix(js): XFA presence and access change the snapshot only when their effect is kept 2026-10-22 21:41:01 +00:00
aiongg fd2e13f332 M8: XFA instance changes reserve their effect before changing the snapshot 2026-10-22 21:35:52 +00:00
aiongg 2ece498ffc fix(js): charge both copies of a written XFA value before keeping either
set_value charged the snapshot's copy, changed the field, then charged the
effect's copy in push. When only the first fit, the effect was dropped while
later reads in the script saw the new value. Both copies are charged at once
before the field changes.
2026-10-22 20:21:21 +00:00
Eric Kaden 6c0fd0f353 Merge remote-tracking branch 'upstream/main' into fix/util-scand
# Conflicts:
#	crates/js/src/lib.rs
2026-10-22 13:23:32 -04:00
aiongg 72fd2a1b24 fix(js): bound the text an XFA script's effects and values hold
The XFA script host capped the number of effects but not their size: URLs,
focus targets and resetData lists were kept whole, a resetData list kept
every repeated name, and values written to fields were each cut but not
counted together. A loop repeating one long script-built string kept a copy
per effect or field. URLs, focus targets and reset names are cut to a
message's length, reset lists name each field once, and every effect,
console line and value written charges a byte budget for the run; past it
they are left out and noted. FormCalc charges an assignment to many fields
once per field copied.
2026-10-22 17:22:50 +00:00
aiongg a5cfc3eec4 fix(js): cap a form script's alerts, console lines and requests
The AcroForm script host kept every alert, console line and request a
script made, each as long as the script made it. A loop printing a long
script-built string held a copy per iteration. The host applies the XFA
host's limits: message and console counts, the effect count for requests,
each message, URL and field name cut to a line, and a byte budget across
all of them, with a closing console line saying how many were left out.
2026-10-22 17:22:50 +00:00
aiongg 2e9b247f3f fix(js): read printd literals in linear time
util.printd measured the run of identical characters at every position of
the format, literals included, but copied a literal one character at a time.
A format with a long stretch of one literal character rescanned the rest of
that stretch at every step: quadratic work from one script-built string.
Only the date letters are read as runs now.
2026-10-22 17:22:50 +00:00
aiongg a525cf1d42 fix(js): refuse code compiled from strings that skipped the script checks
eval and the Function constructors compiled code built at run time, which never
passed the size and nesting checks a script passes before it runs, so a short
form script could hand boa's recursive parser a deeply nested string and
overflow the stack. Form scripts now refuse to compile code from strings. XFA
scripts, which the runner itself starts through eval, hold such code to the
same checks as the script.
2026-10-22 13:18:26 -04:00
Eric Kaden ae69aea627 M6: doc comments on every Panel variant 2026-10-22 09:22:27 -04:00
Eric Kaden 6b48a54091 M6: doc comments on the functions next to the runtimeHighlight change 2026-10-22 03:23:40 -04:00
Eric Kaden 11787f8767 Merge remote-tracking branch 'upstream/main' into fix/xfa-runtime-highlight
# Conflicts:
#	crates/engine/src/js.rs
#	crates/engine/src/tests.rs
#	crates/engine/src/xfa.rs
#	crates/js/src/tests.rs
#	crates/xfa/src/fixtures.rs
#	crates/xfa/src/tests.rs
#	parity/acrobat-features.toml
2026-10-22 03:22:45 -04:00