Summary v8-goose's prebuilt V8 binaries statically link libc++abi which exports C++ exception handling symbols (, , , , etc.). These override the system's libstdc++ symbols at link time on Linux. Result: any other C++ library in the same process that uses libstdc++'s exception handling (via cxxbridge or similar FFI) hits V8's instead of its own catch handler. The exception cannot propagate across the ABI boundary; fires; process aborts. Reproduction Permagent links both v8-goose (via feature) and kuzu (via spectral-graph for graph storage). On Linux (ubuntu-24.04, glibc 2.39), the test binary aborts during kuzu's which uses cxxbridge. In-process backtrace via test-harness SIGABRT handler: Both libc++abi frames are from V8's tree. The exception originates from kuzu (which uses system libstdc++) but is caught by V8's libc++abi terminate handler. macOS is unaffected because it natively uses libc++ (no ABI mismatch). What we ruled out The feature flag — disabling it does NOT fix the issue, because libc++abi is bundled in the prebuilt V8 binary regardless It is not a kuzu-specific bug — kuzu's own test suite runs 138 instances on the same ubuntu-latest runner without abort. The issue only manifests when V8 is linked in the same process It is not a glibc version issue — the abort is link-time symbol resolution, not runtime glibc behavior Bisect data Proposed fix Make V8's libc++abi exception handling symbols hidden ( on the libc++abi build, or a linker version script restricting exported symbols). This would prevent them from overriding the system's at link time, while preserving V8's internal exception handling. This pattern is used by other large C++ runtimes embedded in Rust crates that need to coexist with other C++ FFI libraries. Workaround for downstream consumers Move conflicting tests/code to a separate binary that doesn't link V8. This is what Permagent has done: https://github.com/make-tuned-unit/permagent-runtime/pull/205 Environment OS: Ubuntu 24.04 (glibc 2.39) Rust: stable (1.91.1) v8-goose: 145.0.2 Other C++ deps in process: kuzu 0.11.3 (via cxxbridge)
I discovered an (accidentally) unsound use of unsafe in . The extern declaration doesn't match the actual signature of the v8 function. I've opened a PR to fix it (#1994), but I'm not sure if an unsolicited PR will get noticed (and you have no CONTRIBUTING.md file to suggest the proper way to engage about stuff like this). I am currently using this method in my project, and I would like to get this UB fixed asap.
This PR adds a panic into when a v8 build is started with a target that v8 does not provide a pre-built archive for and is unset (i.e. the script downloads the archive from this GitHub repo). In this case, the panic message advises to rebuild v8 with . I currently use a hardcoded list of targets for this, but if you have a better solution, please suggest so :) I am also a bit unsure if the placement of the code is appropriate, as the build script is quite expansive, so feel free to also suggest improvements there. Implements the feature discussed in #1877
The static-lib download path in tries Deno first via , passing and : But runs with all permissions implicitly granted and does not register the flags, so it rejects them and exits with an error (the only permission-like flag it accepts is ): As a result the Deno attempt always fails and the download silently falls back to Python/curl. This has been the case for a long time (eval has had implicit all-permissions for years) but went unnoticed because the fallback succeeds. The only visible symptom is a confusing clap error printed to stderr during the build, which has confused users into thinking their build is broken (see denoland/deno#35417). The flags are unnecessary since already has full permissions, so this just drops them. The download script still has and available, which I verified manually.
Repository: denoland/rusty_v8. Description: Rust bindings for the V8 JavaScript engine Stars: 3886, Forks: 405. Primary language: Rust. License: MIT. Homepage: https://crates.io/crates/v8 Topics: rust, v8. Open PRs: 35, open issues: 71. Last activity: 22h ago. Top contributors: piscisaureus, ry, bartlomieju, denobot, devsnek, littledivy, bnoordhuis, github-actions[bot], mmastrac, lucacasonato and others.