forked from 1b-agent/opencadstudio-upstream
Review of the image wave (with empirical reproduction against the
vendored image 0.25) found the budget contract did not hold across
formats: the decoder's Limits reserve checks NATIVE bytes-per-pixel,
so a grayscale/RGB JPEG/PNG/BMP over the RGBA budget decoded anyway
and into_rgba8() then ballooned to up to 4x it — the tab death the
budgets exist to prevent. The probed dimensions already prove an
OverBudget image cannot fit, so it is now refused without decoding,
removing all dependence on per-decoder limit fidelity.
Conversely, image's TIFF codec stacks ~3x scratch buffers on top of
the reserve, so an in-budget TIFF (the flagship GIS scenario) was
refused with a self-contradictory note ('400 MB, over the 512 MB
limit'); the decoder allowance for TIFF is now 3x while tier math
stays on the real budget.
Also: the refusal message saturates instead of overflowing on crafted
headers, the image pick only matches the refusal note naming ITS file
(peek, not drain — other references' notes survive for their own
drains), and the Georgian Supplement range ends at U+2D2F (U+2D30.. is
Tifinagh, which ships no font).
Build tooling: the font files missing from dist was a trunk
finalize_dist failure (Windows file-lock during the dist wipe; staging
had them, the exit code was missed) — not a copy-dir skip; it did not
reproduce in two clean cycles. scripts/build-web.sh is now the
canonical wrapper (MSYS_NO_PATHCONV, trunk, font copy + byte
verification that hard-fails), wired into README, Trunk.toml, and the
Pages workflow.
28 lines
991 B
TOML
28 lines
991 B
TOML
# Trunk config for the web (wasm) build of Open CAD Studio (issue #45).
|
|
#
|
|
# Build: sh scripts/build-web.sh (trunk build --release + fonts sync/verify)
|
|
# Dev: trunk serve
|
|
#
|
|
# Requires: rustup target add wasm32-unknown-unknown
|
|
# cargo install trunk wasm-bindgen-cli
|
|
|
|
[build]
|
|
target = "web-app.html"
|
|
dist = "dist/app"
|
|
public_url = "/app/"
|
|
html_output = "index.html"
|
|
# The crate has no Cargo features: the geometry kernel is pure Rust and
|
|
# cross-compiles to wasm, so the web build gets the same solid modelling the
|
|
# native one does.
|
|
|
|
[[hooks]]
|
|
stage = "post_build"
|
|
command = "sh"
|
|
command_arguments = ["scripts/build-web-worker.sh"]
|
|
|
|
[serve]
|
|
# Cross-origin isolation headers enable SharedArrayBuffer, which wasm threads
|
|
# (rayon) need. GitHub Pages cannot set these; a self-hosted server (e.g. the
|
|
# Open-AEC host) can. Without them the app still runs single-threaded.
|
|
headers = { "Cross-Origin-Opener-Policy" = "same-origin", "Cross-Origin-Embedder-Policy" = "require-corp" }
|