RepoJournal
Node.js

@nodejs

The Node.js runtime - every backend team's CVE source of truth

Keep up with Node.js in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

One email a day. Unsubscribe in one click.

Pick a date

Topics: JavaScript Full archive →

The Wire · Showcase

SQLITE GARBAGE COLLECTION BUG AND FFI REENTRANCY HAZARDS DEMAND IMMEDIATE PATCHES

By RepoJournal · Filed · About Node.js

Node.js shipped critical fixes overnight for a use-after-free vulnerability in SQLite callbacks and a string buffer corruption bug in Fast FFI reentrant calls that could crash production systems.

The SQLite fix [1] addresses a catastrophic memory safety issue: when sqlite3_exec() or sqlite3changeset_apply() invoke JavaScript callbacks, the DatabaseSync object could be garbage-collected mid-call if user code dropped all references to it, leaving only a dangling C++ pointer. A BaseObjectPtr guard now keeps the database alive for the duration of the call. In parallel, the FFI layer shipped a reentrant call fix [2] that rewrites how temporary string buffers are cached. Previously, buffers were cached per library and argument index, so a reentrant callback making another FFI call at the same index would corrupt or overwrite storage still in use by the outer call. The fix scopes the cache by FFI wrapper and call depth, giving each reentrant invocation separate string storage. Both vulnerabilities are low-level crashes waiting to happen in production code that chains callbacks or uses FFI in event-driven patterns. On the QUIC front, Tim Perry's session emit deferral [3] ensures servers don't fire session events until after the TLS ClientHello is fully processed, preventing exposure to invalid handshakes and guaranteeing servername and alpnProtocol are available synchronously on the event. Undici hardened its cache directive parser [4] after a crash-on-parse issue was discovered with mixed qualified and unqualified private directives [5], and added content-length validation for blob bodies and partial content mismatches [6]. Documentation got a correction: dnsPromises.lookup's verbatim default was still listed as false in the docs despite flipping to true in v17 [7].

One email a day. Unsubscribe in one click.

Action items

References

  1. [1] sqlite: fix use-after-free in Exec() and ApplyChangeset() nodejs/node
  2. [2] ffi: preserve strings during reentrant calls ↗ nodejs/node
  3. [3] quic: defer server session emit until TLS ClientHello is processed nodejs/node
  4. [4] fix(cache): harden cache directive parsing nodejs/undici
  5. [5] test: cover crash on mixed unqualified and qualified private cache directives nodejs/undici
  6. [6] fix(retry): reject partial content length mismatch nodejs/undici
  7. [7] doc: fix dnsPromises.lookup verbatim default nodejs/node

Quick answers

What shipped in Node.js on July 24, 2026?
Node.js shipped critical fixes overnight for a use-after-free vulnerability in SQLite callbacks and a string buffer corruption bug in Fast FFI reentrant calls that could crash production systems. In total, 27 commits and 15 pull requests landed.
Who contributed to Node.js on July 24, 2026?
6 developers shipped this update, including GitHub Actions, Tim Perry, Matteo Collina, trivikr, Shivam S, and Ulises Gascon.
What were the notable Node.js updates?
sqlite: fix use-after-free in Exec() and ApplyChangeset(), ffi: preserve strings during reentrant calls, and quic: defer server session emit until TLS ClientHello is processed.

More from @nodejs

Daily updates, in your inbox

Follow Node.js

Keep up with Node.js in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

or

One email a day. Unsubscribe in one click. Read a past issue →

Elsewhere on the wire

Want every project, not just this one?