Summary
Running the full test/js/node/http directory in one process aborts with SIGSEGV → abort (exit 134) partway through. Reproduces on both home-debug and home-release-safe. It is a heap-corruption crash: the faulting frame is a BoringSSL cert allocation during a TLS client connect, but that allocation is the victim — an earlier (non-TLS) test corrupts the heap, and the next TLS SSL_new trips over it.
Repro
cd /tmp/bun-pinned # bun 1.3.14 pin worktree
home-release-safe test test/js/node/http
# → exits 134, no test summary printed (aborts mid-run)Faulting backtrace (from the macOS crash report)
libsystem_c.dylib abort
home-debug debug.handleSegfault (SIGSEGV handler)
bssl::New<bssl::CERT, bssl::SSL_X509_METHOD const*&>(...)
bssl::ssl_cert_dup(bssl::CERT*)
SSL_new
us_internal_ssl_attach
us_socket_group_connect_resolved_dns
us_socket_group_connect
uws_sys.SocketGroup.SocketGroup.connect
runtime.socket.socket.NewSocket(true).doConnect (is_ssl = true)
runtime.socket.Listener.connectInner
runtime.node.node_net_binding.doConnectAnalysis
bssl::New<CERT>crashing is the classic signature of prior heap corruption (or a UAF of the SSL_CTX's cert), not a bug inSSL_newitself.- Accumulation-dependent + culprit ≠ victim:
- No single
node/httpfile crashes when run alone. - Neither contiguous half crashes alone; neither quarter of the first half crashes.
- The 4 TLS-connecting files (
node-http-agent-tls-options,node-https-checkServerIdentity,node-http-with-ws,node-http.test.ts) run together are clean (exit 1). - ⇒ the corrupting file is a non-TLS test; the victim is a later TLS connect. They must run in the same process for the crash to surface.
- No single
- The
SSLContextCacherefcounting (getOrCreateups the ref on cache hits; ex-data free callback tombstones entries) and the Cus_socket_group_connectasync path (us_internal_ssl_ctx_up_refat context.c) both look correct on inspection, so the corruption likely originates outside the TLS path.
Confirmed NOT a regression
Reproduces with the recent allocator commit (55e731ca6) reverted, i.e. it predates the current session's work.
Suggested next step
Root-causing a distant-victim heap corruption needs an ASan build (-fsanitize=address) to catch the corrupting write at its source, or MIMALLOC_GUARDED_SAMPLE_RATE/secure-mode mimalloc to guard-page allocations. Plain release/debug mimalloc here has no double-free/overflow detection (debug level 0, secure level 0).