Sophie

Sophie

distrib > Mageia > 9 > armv7hl > media > core-release-src > by-pkgid > d3fc76fe325ca661cb5adbf012153e1c > files > 7

ghostscript-10.00.0-6.mga9.src.rpm

From 610cf851fbbe1fc342f40429b1b0da9d9d7daebc Mon Sep 17 00:00:00 2001
From: Chris Liddell <chris.liddell@artifex.com>
Date: Mon, 3 Oct 2022 15:24:33 +0100
Subject: [PATCH 127/155] Bug 705939: Fix BaseEncoding logic for fonts flagged
 symbolic

For a font encoding defined in a PDF dictionary (i.e. with a Differences array)
for a symbolic font, we were ignoring the BaseEncoding entry, and opting to use
the font's native encoding.

In fact, we should always use the BaseEncoding if it exists, and fall back to
the native encoding only if BaseEncoding isn't specified.

With non-symbolic fonts, we fall back to StandardEncoding in the absence of a
BaseEncoding entry
---
 pdf/pdf_font.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/pdf/pdf_font.c b/pdf/pdf_font.c
index 7c922c835..e4a3cb857 100644
--- a/pdf/pdf_font.c
+++ b/pdf/pdf_font.c
@@ -1558,8 +1558,18 @@ int pdfi_create_Encoding(pdf_context *ctx, pdf_obj *pdf_Encoding, pdf_obj *font_
             pdf_array *a = NULL;
             pdf_obj *o = NULL;
             int offset = 0;
+            bool b_e_known;
 
-            if (font_Encoding != NULL && pdfi_type_of(font_Encoding) == PDF_ARRAY) {
+            if (pdfi_type_of(pdf_Encoding) == PDF_DICT) {
+                code = pdfi_dict_known(ctx, (pdf_dict *)pdf_Encoding, "BaseEncoding", &b_e_known);
+                if (code < 0)
+                    b_e_known = false;
+            }
+            else {
+                b_e_known = false;
+            }
+
+            if (b_e_known == false && font_Encoding != NULL && pdfi_type_of(font_Encoding) == PDF_ARRAY) {
                 pdf_array *fenc = (pdf_array *)font_Encoding;
                 for (i = 0; i < pdfi_array_size(fenc) && code >= 0; i++) {
                     code = pdfi_array_get(ctx, fenc, (uint64_t)i, &o);
-- 
2.30.4