Skip to content

v1.2.1

Choose a tag to compare

@Emasoft Emasoft released this 29 Apr 17:53

Bug fixes

  • Tab leak in shared Chromium mode (fix(puppeteer): Close pages on safeShutdown to prevent tab leak, d332a3a) — safeShutdown(browser) only called browser.disconnect(), leaving tabs open in the shared instance. After ~30-45 leaked tabs Chromium produced "dead" tabs that accept setContent/drawImage but rasterize to a fully-transparent canvas, surfacing as intermittent "Visible bbox is empty" errors under heavy parallel load. Now safeShutdown(browser, page) explicitly closes the page first. Reproducer (75 concurrent subprocesses): 35/75 → 75/75 pass rate.

  • img.decode() defense in canvas rasterizer (SvgVisualBBox.js) — img.decoding='async' allowed onload to fire before the SVG was fully decoded, occasionally producing a blank canvas. Now await img.decode() after onload guarantees full decode before drawImage.

  • Inkscape detection by filesystem path (test(inkscape): Detect installation by filesystem path, not by launching, fbe2390) — inkscape --version cold-start can take 30-60s on systems with many fonts (10k+), causing test files to wrongly skip. Now uses which inkscape then falls back to common platform paths (incl. /Applications/Inkscape.app/Contents/MacOS/inkscape on macOS).

  • yq // false parser bug in release script (fix(release): yq // operator treats false as null, 50f6956) — enabled: false in release_conf.yml was indistinguishable from a missing key.

Internal

  • All 12 sbb-*.cjs CLI tools that open pages were updated to track and close them.
  • lib/puppeteer-utils.cjs#safeShutdown API enhanced to take an optional page parameter (backwards compatible).