diff options
Diffstat (limited to 'extra/cairo/pdf-font-subset-Generate-valid-font-names.patch')
-rw-r--r-- | extra/cairo/pdf-font-subset-Generate-valid-font-names.patch | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/extra/cairo/pdf-font-subset-Generate-valid-font-names.patch b/extra/cairo/pdf-font-subset-Generate-valid-font-names.patch deleted file mode 100644 index d5cfe2f..0000000 --- a/extra/cairo/pdf-font-subset-Generate-valid-font-names.patch +++ /dev/null @@ -1,58 +0,0 @@ -From a3b69a0215fdface0fd5730872a4b3242d979dca Mon Sep 17 00:00:00 2001 -From: Uli Schlachter <psychon@znc.in> -Date: Tue, 9 Feb 2021 16:54:35 +0100 -Subject: [PATCH] pdf font subset: Generate valid font names - -A hash value is encoded in base 26 with upper case letters for font -names. - -Commit ed984146 replaced "numerator = abs (hash);" with "numerator = -hash;" in this code, because hash has type uint32_t and the compiler -warned about taking the absolute value of an unsigned value. However, -abs() is actually defined to take an int argument. Thus, there was some -implicit cast. - -Since numerator has type long, i.e. is signed, it is now actually -possible to get an overflow in the implicit cast and then have a -negative number. The following code is not prepared for this and -produces non-letters when encoding the hash. - -This commit fixes that problem by not using ldiv() and instead using / -and % to directly compute the needed values. This gets rid of the need -to convert to type long. Since now everything works with uint32_t, there -is no more chance for negative numbers messing things up. - -Fixes: https://gitlab.freedesktop.org/cairo/cairo/-/issues/449 -Signed-off-by: Uli Schlachter <psychon@znc.in> ---- - src/cairo-pdf-surface.c | 8 ++------ - 1 file changed, 2 insertions(+), 6 deletions(-) - -diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c -index 6da460878..52c49b6d2 100644 ---- a/src/cairo-pdf-surface.c -+++ b/src/cairo-pdf-surface.c -@@ -5310,18 +5310,14 @@ _create_font_subset_tag (cairo_scaled_font_subset_t *font_subset, - { - uint32_t hash; - int i; -- long numerator; -- ldiv_t d; - - hash = _hash_data ((unsigned char *) font_name, strlen(font_name), 0); - hash = _hash_data ((unsigned char *) (font_subset->glyphs), - font_subset->num_glyphs * sizeof(unsigned long), hash); - -- numerator = hash; - for (i = 0; i < 6; i++) { -- d = ldiv (numerator, 26); -- numerator = d.quot; -- tag[i] = 'A' + d.rem; -+ tag[i] = 'A' + (hash % 26); -+ hash /= 26; - } - tag[i] = 0; - } --- -GitLab - |