[PATCH] gnu: cairo: Add patch to fix regression when writing PDFs with fonts

  • Done
  • quality assurance status badge
Details
3 participants
  • Liliana Marie Prikler
  • Maxim Cournoyer
  • Remco van 't Veer
Owner
unassigned
Submitted by
Remco van 't Veer
Severity
normal

Debbugs page

R
R
Remco van 't Veer wrote on 10 Mar 09:15 -0700
(address . guix-patches@gnu.org)(name . Remco van 't Veer)(address . remco@remworks.net)
0c2940ccdd7385f152c922af72bebad2f8d03a49.1741623346.git.remco@remworks.net
Applied patch fixes out of memory errors when writing PDFs with fonts
in xournalpp and others. See also:


* gnu/local.mk: Register patch.
* gnu/packages/gtk.scm (cairo): Add patch.
* gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs: Add patch.

Change-Id: Id6475d0ddb27208486bf41e18de72d116da110fb
---
gnu/local.mk | 3 +-
gnu/packages/gtk.scm | 2 ++
...cairo-cff-dont-fail-if-no-local-subs.patch | 34 +++++++++++++++++++
3 files changed, 38 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch

Toggle diff (85 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 880af09168..f26c79b3e1 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -48,7 +48,7 @@
# Copyright © 2021 Andrew Tropin <andrew@trop.in>
# Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
# Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
-# Copyright © 2022, 2024 Remco van 't Veer <remco@remworks.net>
+# Copyright © 2022, 2024, 2025 Remco van 't Veer <remco@remworks.net>
# Copyright © 2022, 2024 Artyom V. Poptsov <poptsov.artyom@gmail.com>
# Copyright © 2022, 2023 John Kehayias <john.kehayias@protonmail.com>
# Copyright © 2022 muradm <mail@muradm.net>
@@ -1069,6 +1069,7 @@ dist_patch_DATA = \
%D%/packages/patches/busybox-add-missing-sha-NI-guard.patch \
%D%/packages/patches/c2rust-ast-exporter-local-search.patch \
%D%/packages/patches/cadical-add-shared-library.patch \
+ %D%/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch \
%D%/packages/patches/calibre-no-updates-dialog.patch \
%D%/packages/patches/calibre-remove-test-sqlite.patch \
%D%/packages/patches/calibre-remove-test-unrar.patch \
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 846103ff9e..f2b3f19897 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -38,6 +38,7 @@
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2024 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2025 Florian Pelz <pelzflorian@pelzflorian.de>
+;;; Copyright © 2025 Remco van 't Veer <remco@remworks.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -178,6 +179,7 @@ (define cairo
(uri
(string-append "https://cairographics.org/releases/cairo-"
version ".tar.xz"))
+ (patches (search-patches "cairo-cff-dont-fail-if-no-local-subs.patch"))
(sha256
(base32 "0nnli5cghygbl9bvlbjls7nspnrrzx1y1pbd7p649s154js9nax6"))))
(build-system meson-build-system)
diff --git a/gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch b/gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch
new file mode 100644
index 0000000000..ed1056a0c8
--- /dev/null
+++ b/gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch
@@ -0,0 +1,34 @@
+From f19e2fe080ddcfce93c8234a919fd882f3d63362 Mon Sep 17 00:00:00 2001
+From: Adrian Johnson <ajohnson@redneon.com>
+Date: Fri, 13 Sep 2024 06:28:39 +0930
+Subject: [PATCH] cff: Don't fail if no local subs
+
+Fixes: #870
+---
+ src/cairo-cff-subset.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/src/cairo-cff-subset.c b/src/cairo-cff-subset.c
+index 076cb2b0a..8a7de0065 100644
+--- a/src/cairo-cff-subset.c
++++ b/src/cairo-cff-subset.c
+@@ -952,9 +952,13 @@ cairo_cff_font_read_private_dict (cairo_cff_font_t *font,
+ decode_number (operand, nominal_width);
+
+ num_subs = _cairo_array_num_elements (local_sub_index);
+- *local_subs_used = _cairo_calloc_ab (num_subs, sizeof (cairo_bool_t));
+- if (unlikely (*local_subs_used == NULL))
+- return _cairo_error (CAIRO_STATUS_NO_MEMORY);
++ if (num_subs > 0) {
++ *local_subs_used = _cairo_calloc_ab (num_subs, sizeof (cairo_bool_t));
++ if (unlikely (*local_subs_used == NULL))
++ return _cairo_error (CAIRO_STATUS_NO_MEMORY);
++ } else {
++ *local_subs_used = NULL;
++ }
+
+ if (num_subs < 1240)
+ *local_sub_bias = 107;
+--
+GitLab
+

base-commit: d0510dcd824e1b3fda62a8841e792581d7b8de8d
--
2.48.1
L
L
Liliana Marie Prikler wrote on 10 Mar 12:00 -0700
478ada27a9cb4bc518697d56945b5fb81aa25bbc.camel@gmail.com
Am Montag, dem 10.03.2025 um 17:15 +0100 schrieb Remco van 't Veer:
Toggle quote (12 lines)
> Applied patch fixes out of memory errors when writing PDFs with fonts
> in xournalpp and others.  See also:
>
>   https://gitlab.freedesktop.org/cairo/cairo/-/issues/870
>
> * gnu/local.mk: Register patch.
> * gnu/packages/gtk.scm (cairo): Add patch.
> * gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs: Add
> patch.
>
> Change-Id: Id6475d0ddb27208486bf41e18de72d116da110fb
> ---
Out of curiosity, how many packages do you need to rebuild with this
patch? It could well be that you'd need to use a graft.

Cheers
R
R
Remco van 't Veer wrote on 10 Mar 13:07 -0700
(name . Liliana Marie Prikler)(address . liliana.prikler@gmail.com)
87ldtcfy3n.fsf@remworks.net
Hi,

2025/03/10, Liliana Marie Prikler:

Toggle quote (16 lines)
> Am Montag, dem 10.03.2025 um 17:15 +0100 schrieb Remco van 't Veer:
>> Applied patch fixes out of memory errors when writing PDFs with fonts
>> in xournalpp and others.  See also:
>>
>>   https://gitlab.freedesktop.org/cairo/cairo/-/issues/870
>>
>> * gnu/local.mk: Register patch.
>> * gnu/packages/gtk.scm (cairo): Add patch.
>> * gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs: Add
>> patch.
>>
>> Change-Id: Id6475d0ddb27208486bf41e18de72d116da110fb
>> ---
> Out of curiosity, how many packages do you need to rebuild with this
> patch? It could well be that you'd need to use a graft.

Yes you a probably right because I sent this patch after Ludo shooed me
away when I made a PR on codeberg

$ ./pre-inst-env guix refresh -l -e '(@@ (gnu packages gtk) cairo)' | wc -w
4279

Would you like me to make a v2 and use a graft?

Cheers,
Remco
L
L
Liliana Marie Prikler wrote on 10 Mar 13:25 -0700
(name . Remco van 't Veer)(address . remco@remworks.net)
147ec35543ca7bafacad24267729f52cf451e3c0.camel@gmail.com
Am Montag, dem 10.03.2025 um 21:07 +0100 schrieb Remco van 't Veer:
Toggle quote (5 lines)
>   $ ./pre-inst-env guix refresh -l -e '(@@ (gnu packages gtk) cairo)'
> | wc -w
>   4279
>
> Would you like me to make a v2 and use a graft?
Yes, please do. We can ungraft it later on core-packages-team, gnome-
team, or a dedicated ungrafting branch.

Cheers
R
R
Remco van 't Veer wrote on 10 Mar 13:29 -0700
[PATCH v2] gnu: cairo: Add patch to fix regression when writing PDFs with fonts
(address . 76922@debbugs.gnu.org)(name . Remco van 't Veer)(address . remco@remworks.net)
dd428fda99674f95147a34e172d04f74514aa0f2.1741638557.git.remco@remworks.net
Applied patch fixes out of memory errors when writing PDFs with fonts
in xournalpp and others. See also:


* gnu/local.mk: Register patch.
* gnu/packages/gtk.scm (cairo): Add patch.
* gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs: Add patch.
---
gnu/local.mk | 3 +-
gnu/packages/gtk.scm | 9 +++++
...cairo-cff-dont-fail-if-no-local-subs.patch | 34 +++++++++++++++++++
3 files changed, 45 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch

Toggle diff (99 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 880af09168..f26c79b3e1 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -48,7 +48,7 @@
# Copyright © 2021 Andrew Tropin <andrew@trop.in>
# Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
# Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
-# Copyright © 2022, 2024 Remco van 't Veer <remco@remworks.net>
+# Copyright © 2022, 2024, 2025 Remco van 't Veer <remco@remworks.net>
# Copyright © 2022, 2024 Artyom V. Poptsov <poptsov.artyom@gmail.com>
# Copyright © 2022, 2023 John Kehayias <john.kehayias@protonmail.com>
# Copyright © 2022 muradm <mail@muradm.net>
@@ -1069,6 +1069,7 @@ dist_patch_DATA = \
%D%/packages/patches/busybox-add-missing-sha-NI-guard.patch \
%D%/packages/patches/c2rust-ast-exporter-local-search.patch \
%D%/packages/patches/cadical-add-shared-library.patch \
+ %D%/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch \
%D%/packages/patches/calibre-no-updates-dialog.patch \
%D%/packages/patches/calibre-remove-test-sqlite.patch \
%D%/packages/patches/calibre-remove-test-unrar.patch \
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 846103ff9e..09b1566e95 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -38,6 +38,7 @@
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2024 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2025 Florian Pelz <pelzflorian@pelzflorian.de>
+;;; Copyright © 2025 Remco van 't Veer <remco@remworks.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -172,6 +173,7 @@ (define cairo
(package
(name "cairo")
(version "1.18.2")
+ (replacement cairo-fixed)
(source
(origin
(method url-fetch)
@@ -238,6 +240,13 @@ (define cairo
;; Hide and have cairo-with-documentation public.
(properties '((hidden? . #t)))))
+(define cairo-fixed
+ (package
+ (inherit cairo)
+ (source (origin
+ (inherit (package-source cairo))
+ (patches (search-patches "cairo-cff-dont-fail-if-no-local-subs.patch"))))))
+
(define-public cairo-with-documentation
;; cairo's docs must be built in a separate package since it requires
;; gtk-doc, which in turn depends on cairo.
diff --git a/gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch b/gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch
new file mode 100644
index 0000000000..ed1056a0c8
--- /dev/null
+++ b/gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs.patch
@@ -0,0 +1,34 @@
+From f19e2fe080ddcfce93c8234a919fd882f3d63362 Mon Sep 17 00:00:00 2001
+From: Adrian Johnson <ajohnson@redneon.com>
+Date: Fri, 13 Sep 2024 06:28:39 +0930
+Subject: [PATCH] cff: Don't fail if no local subs
+
+Fixes: #870
+---
+ src/cairo-cff-subset.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/src/cairo-cff-subset.c b/src/cairo-cff-subset.c
+index 076cb2b0a..8a7de0065 100644
+--- a/src/cairo-cff-subset.c
++++ b/src/cairo-cff-subset.c
+@@ -952,9 +952,13 @@ cairo_cff_font_read_private_dict (cairo_cff_font_t *font,
+ decode_number (operand, nominal_width);
+
+ num_subs = _cairo_array_num_elements (local_sub_index);
+- *local_subs_used = _cairo_calloc_ab (num_subs, sizeof (cairo_bool_t));
+- if (unlikely (*local_subs_used == NULL))
+- return _cairo_error (CAIRO_STATUS_NO_MEMORY);
++ if (num_subs > 0) {
++ *local_subs_used = _cairo_calloc_ab (num_subs, sizeof (cairo_bool_t));
++ if (unlikely (*local_subs_used == NULL))
++ return _cairo_error (CAIRO_STATUS_NO_MEMORY);
++ } else {
++ *local_subs_used = NULL;
++ }
+
+ if (num_subs < 1240)
+ *local_sub_bias = 107;
+--
+GitLab
+

base-commit: d0510dcd824e1b3fda62a8841e792581d7b8de8d
--
2.48.1
M
M
Maxim Cournoyer wrote on 11 Mar 17:25 -0700
Re: [bug#76922] [PATCH] gnu: cairo: Add patch to fix regression when writing PDFs with fonts
(name . Liliana Marie Prikler)(address . liliana.prikler@gmail.com)
87ldtbf62d.fsf@gmail.com
Hi,

Liliana Marie Prikler <liliana.prikler@gmail.com> writes:

Toggle quote (16 lines)
> Am Montag, dem 10.03.2025 um 17:15 +0100 schrieb Remco van 't Veer:
>> Applied patch fixes out of memory errors when writing PDFs with fonts
>> in xournalpp and others.  See also:
>>
>>   https://gitlab.freedesktop.org/cairo/cairo/-/issues/870
>>
>> * gnu/local.mk: Register patch.
>> * gnu/packages/gtk.scm (cairo): Add patch.
>> * gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs: Add
>> patch.
>>
>> Change-Id: Id6475d0ddb27208486bf41e18de72d116da110fb
>> ---
> Out of curiosity, how many packages do you need to rebuild with this
> patch? It could well be that you'd need to use a graft.

Too many (15k). I've hit that problem too. I'd suggest grafting to
1.18.4 directly instead of carrying patches.

--
Thanks,
Maxim
M
M
Maxim Cournoyer wrote on 11 Mar 17:28 -0700
Re: [bug#76922] [PATCH v2] gnu: cairo: Add patch to fix regression when writing PDFs with fonts
(name . Remco van 't Veer)(address . remco@remworks.net)
87h63zf5x3.fsf@gmail.com
Hi,

Remco van 't Veer <remco@remworks.net> writes:

Toggle quote (9 lines)
> Applied patch fixes out of memory errors when writing PDFs with fonts
> in xournalpp and others. See also:
>
> https://gitlab.freedesktop.org/cairo/cairo/-/issues/870
>
> * gnu/local.mk: Register patch.
> * gnu/packages/gtk.scm (cairo): Add patch.
> * gnu/packages/patches/cairo-cff-dont-fail-if-no-local-subs: Add patch.

I've hit that bug too, it's an annoying one! Thanks for looking into
it. Your patch is fine, but I think we could also graft directly to
1.18.4 since it's a patch version bump and should be compatible with the
1.18.2 we have, per semver.

Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>

--
Thanks,
Maxim
R
R
Remco van 't Veer wrote on 12 Mar 02:39 -0700
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
874izyfuzv.fsf@remworks.net
Hi,

2025/03/12, Maxim Cournoyer:

Toggle quote (5 lines)
> I've hit that bug too, it's an annoying one! Thanks for looking into
> it. Your patch is fine, but I think we could also graft directly to
> 1.18.4 since it's a patch version bump and should be compatible with the
> 1.18.2 we have, per semver.

Oh yes, that can work too. Just tried grafting with 1.18.4 and it does
fix this problem in xournalpp. I'm not sure if it introduces others but
it seems okay.. I'll make a v3.

Cheers,
Remco
R
R
Remco van 't Veer wrote on 12 Mar 02:41 -0700
[PATCH v3] gnu: cairo: Fix regression writing PDFs with fonts via graft.
(address . 76922@debbugs.gnu.org)(name . Remco van 't Veer)(address . remco@remworks.net)
441811aaba7347e1763b9d7f89eadc35b3b3f6a0.1741772497.git.remco@remworks.net
Fix out of memory errors when writing PDFs with fonts embedded in
xournalpp and others. See also:


* gnu/packages/gtk.scm (cairo)[replacement]: New field pointing to cairo-1.18.4.
* gnu/packages/gtk.scm (cairo-1.18.4): Add package.

Change-Id: I6efa5a3acdf39fe78e558173f896f3a6abbc5c27
---
gnu/packages/gtk.scm | 15 +++++++++++++++
1 file changed, 15 insertions(+)

Toggle diff (44 lines)
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 846103ff9e..4d49246206 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -38,6 +38,7 @@
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2024 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2025 Florian Pelz <pelzflorian@pelzflorian.de>
+;;; Copyright © 2025 Remco van 't Veer <remco@remworks.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -172,6 +173,7 @@ (define cairo
(package
(name "cairo")
(version "1.18.2")
+ (replacement cairo-1.18.4)
(source
(origin
(method url-fetch)
@@ -238,6 +240,19 @@ (define cairo
;; Hide and have cairo-with-documentation public.
(properties '((hidden? . #t)))))
+(define cairo-1.18.4
+ (package
+ (inherit cairo)
+ (version "1.18.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "https://cairographics.org/releases/cairo-"
+ version ".tar.xz"))
+ (sha256
+ (base32 "1jrcqfcna0358aqrk7rnys1hwq6k36ilr9r62bg26j3fi8hdhpj4"))))))
+
(define-public cairo-with-documentation
;; cairo's docs must be built in a separate package since it requires
;; gtk-doc, which in turn depends on cairo.

base-commit: d0510dcd824e1b3fda62a8841e792581d7b8de8d
--
2.48.1
M
M
Maxim Cournoyer wrote on 12 Mar 18:18 -0700
Re: bug#76922: [PATCH] gnu: cairo: Add patch to fix regression when writing PDFs with fonts
(name . Remco van 't Veer)(address . remco@remworks.net)
87o6y5enjj.fsf_-_@gmail.com
Hi,

Remco van 't Veer <remco@remworks.net> writes:

Toggle quote (50 lines)
> Fix out of memory errors when writing PDFs with fonts embedded in
> xournalpp and others. See also:
>
> https://gitlab.freedesktop.org/cairo/cairo/-/issues/870
>
> * gnu/packages/gtk.scm (cairo)[replacement]: New field pointing to cairo-1.18.4.
> * gnu/packages/gtk.scm (cairo-1.18.4): Add package.
>
> Change-Id: I6efa5a3acdf39fe78e558173f896f3a6abbc5c27
> ---
> gnu/packages/gtk.scm | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
> index 846103ff9e..4d49246206 100644
> --- a/gnu/packages/gtk.scm
> +++ b/gnu/packages/gtk.scm
> @@ -38,6 +38,7 @@
> ;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
> ;;; Copyright © 2024 John Kehayias <john.kehayias@protonmail.com>
> ;;; Copyright © 2025 Florian Pelz <pelzflorian@pelzflorian.de>
> +;;; Copyright © 2025 Remco van 't Veer <remco@remworks.net>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -172,6 +173,7 @@ (define cairo
> (package
> (name "cairo")
> (version "1.18.2")
> + (replacement cairo-1.18.4)
> (source
> (origin
> (method url-fetch)
> @@ -238,6 +240,19 @@ (define cairo
> ;; Hide and have cairo-with-documentation public.
> (properties '((hidden? . #t)))))
>
> +(define cairo-1.18.4
> + (package
> + (inherit cairo)
> + (version "1.18.4")
> + (source
> + (origin
> + (method url-fetch)
> + (uri
> + (string-append "https://cairographics.org/releases/cairo-"
> + version ".tar.xz"))
> + (sha256
> + (base32 "1jrcqfcna0358aqrk7rnys1hwq6k36ilr9r62bg26j3fi8hdhpj4"))))))

I've added a comment to remember this can be removed after ungrafting,
tested it worked with xournalpp to export an annotated PDF, and pushed
to the master branch.

Thank you :-)

--
Thanks,
Maxim
Closed
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 76922@patchwise.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 76922
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch