chore(deps): bump sha2 from 0.10.9 to 0.11.0 - #31
Open
dependabot[bot] wants to merge 1 commit into
Open
Conversation
Bumps [sha2](https://github.com/RustCrypto/hashes) from 0.10.9 to 0.11.0. - [Commits](RustCrypto/hashes@sha2-v0.10.9...sha2-v0.11.0) --- updated-dependencies: - dependency-name: sha2 dependency-version: 0.11.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Author
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
yfedoseev
added a commit
that referenced
this pull request
Jul 27, 2026
…ency + security refresh (#33, #32) Reusing a Page across navigations grew V8's live heap by ~10 MB per page without ceiling, and — as this work uncovered — was also silently corrupting render output. Every reaper the engine had was wired only to Page::drop, which a pool by definition never reaches, and several bootstrap-JS registries are scoped to the JsRuntime rather than to the document. Sources of retention, all previously unpruned on reuse: event_bootstrap.js _objListeners window-keyed; window is never collected _nodeListeners strong Map, never pruned at all dom_bootstrap.js _nodeCache, _scrollState, _moObservers, _appendedIframes, _frameRegistry window_bootstrap.js _customElementsRegistry, _whenDefinedPromises globalThis page-assigned properties, and on* handler VALUES New JS reset hooks (__cancelAllListeners, __resetDomRegistries, __resetCustomElements, __resetPageGlobals) bundled behind a public Page::reset_for_reuse(). PagePool::acquire and the CDP protocol server — which had the identical bug on Page.navigate — now call it. Three correctness bugs fall out of the same fix. _nodeListeners and the node wrapper cache are keyed by nodeId, and node IDs restart at zero when replace_dom swaps the document, so the previous page's handler for node 42 fired on the new page's node 42. Re-define()ing a custom element name the previous page had registered was a silent no-op. And __keepLongTimersRefed stayed set after a challenge page, pinning long timers thereafter. on* handlers needed value-level treatment: they already exist as own properties at bootstrap, so a key-set diff cannot see `window.onscroll = fn`. Values are snapshotted at baseline and restored, which clears page assignments while preserving the engine's own window.onerror instrumentation. Live heap, after a forced full GC, 25 warm reuses of a document retaining ~1 MB behind a window listener: without reset (0.1.0 behaviour) 1,040,662 B / reuse with reset (this change) 468 B / reuse Beyond memory: on main, the second site through the pool renders a 9-byte body. Reproduced on two unrelated real sites — hackernews (9 -> 34,772 B) and the areyouheadless detection probe (9 -> 164 B, matching cold-path output). canary.yml could not catch this because it only exercises the cold path. Adds Page::v8_heap_used_bytes() / collect_garbage() so operators can verify pool health, and examples/canvas_fp_probe.rs to guard canvas fingerprint stability across dependency bumps. Dependencies (closes #32, supersedes #22-#31): deno_core 0.404, taffy 0.12, sha1/sha2 0.11, adblock 0.13, skia-safe 0.99, tokio-tungstenite 0.30, webpki-root-certs 1.0, brotli 8, base64 0.23, glow 0.18, chrono, http2, five SHA-pinned CI actions, plus cargo update. png HELD at 0.17: 0.18 emits a 9,646-byte canvas data URL where 0.17 emits 17,502 — a different fingerprint on every page. deno_core HELD at 0.404: 0.408 aborts (SIGABRT) during V8 isolate construction in Linux debug builds. Security — cargo audit 2 vulnerabilities -> 0: quinn-proto 0.11.14 -> 0.11.16 RUSTSEC-2026-0185 (remote memory exhaustion, in the HTTP/3 path) crossbeam-epoch 0.9.18 -> 0.9.20 RUSTSEC-2026-0204 anyhow 1.0.102 -> 1.0.104 RUSTSEC-2026-0190 Also fixes the DCO workflow, which could never pass: `git log --pretty=full` indents the body four spaces, so its `^Signed-off-by:` anchor never matched. Regression tested main -> HEAD on 15 open and 15 protected/anti-bot sites, both engine paths: zero regressions, pool 11/15 -> 12/15 on the open corpus. browserleaks/canvas, creepjs and pixelscan byte-identical on both paths. adblock 0.13 API port by Ran-Mewo (SilvR-AI/browser_oxide fork), with thanks. Reported by DemonMartin. Closes #33 Closes #32 Signed-off-by: Yury Fedoseev <yfedoseev@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps sha2 from 0.10.9 to 0.11.0.
Commits
ffe0939Release sha2 0.11.0 (#806)8991b65Use the standard order of the[package]section fields (#807)3d2bc57sha2: refactor backends (#802)faa55fbsha3: bumpkeccakto v0.2 (#803)d3e6489sha3 v0.11.0-rc.9 (#801)bbf6f51sha2: tweak backend docs (#800)155dbbfsha3: add default value for theDSgeneric parameter onTurboShake128/256...ed514f2Use published version ofkeccakv0.2 (#799)702bcd8Migrate to closure-basedkeccak(#796)827c043sha3 v0.11.0-rc.8 (#794)You can trigger a rebase of this PR by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)