From 2738a707afe7a3f0f6daf95c0f50d326cda2a288 Mon Sep 17 00:00:00 2001 From: Caleb Hearon Date: Wed, 25 Jun 2025 21:41:16 -0400 Subject: [PATCH 1/2] fix resurface crash with png, svg canvases Regressed in 3dca82adc782239fb2191f041fbae69591ba0aa7 This was originally added in cfc6dfd714772af87e814a687230ae16b4690182, but I don't think that assessment is right at least for the current bug: cairo_destroy, called after the backend's SetWidth, still holds a reference to the surface and calls the closure (presumably for leading or something?). I can't get it to happen consistently enough to write a test, sadly. Fixes #2520 --- src/backend/PdfBackend.cc | 1 + src/backend/SvgBackend.cc | 1 + 2 files changed, 2 insertions(+) diff --git a/src/backend/PdfBackend.cc b/src/backend/PdfBackend.cc index 5c1e8fa5b..4eb46168c 100644 --- a/src/backend/PdfBackend.cc +++ b/src/backend/PdfBackend.cc @@ -22,6 +22,7 @@ cairo_surface_t* PdfBackend::ensureSurface() { void PdfBackend::destroySurface() { if (surface) { + cairo_surface_finish(surface); cairo_surface_destroy(surface); surface = nullptr; assert(_closure); diff --git a/src/backend/SvgBackend.cc b/src/backend/SvgBackend.cc index f4bf2b9c3..475c07dea 100644 --- a/src/backend/SvgBackend.cc +++ b/src/backend/SvgBackend.cc @@ -26,6 +26,7 @@ cairo_surface_t* SvgBackend::ensureSurface() { void SvgBackend::destroySurface() { if (surface) { + cairo_surface_finish(surface); cairo_surface_destroy(surface); surface = nullptr; assert(_closure); From a862af8040c03593bd9376fe2464a73867a0924d Mon Sep 17 00:00:00 2001 From: Caleb Hearon Date: Wed, 25 Jun 2025 22:43:14 -0400 Subject: [PATCH 2/2] 3.1.2 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 341358def..98cba4534 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ project adheres to [Semantic Versioning](http://semver.org/). ### Added ### Fixed +3.1.2 +================== +### Fixed +* Fix crash when setting width/height on PDF, SVG canvas (#2520) + 3.1.1 ================== ### Fixed diff --git a/package.json b/package.json index bf4eaaf9b..5ad174990 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "canvas", "description": "Canvas graphics API backed by Cairo", - "version": "3.1.1", + "version": "3.1.2", "author": "TJ Holowaychuk ", "main": "index.js", "browser": "browser.js",