summaryrefslogtreecommitdiff
path: root/ghostscript-9.54.0-Deal-with-different-VM-modes-during-CIDFont-loading.patch
diff options
context:
space:
mode:
Diffstat (limited to 'ghostscript-9.54.0-Deal-with-different-VM-modes-during-CIDFont-loading.patch')
-rw-r--r--ghostscript-9.54.0-Deal-with-different-VM-modes-during-CIDFont-loading.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/ghostscript-9.54.0-Deal-with-different-VM-modes-during-CIDFont-loading.patch b/ghostscript-9.54.0-Deal-with-different-VM-modes-during-CIDFont-loading.patch
new file mode 100644
index 0000000..180193a
--- /dev/null
+++ b/ghostscript-9.54.0-Deal-with-different-VM-modes-during-CIDFont-loading.patch
@@ -0,0 +1,88 @@
+From 0b74b65ecc0f36d40b8d04a7fa1fa8b5f9d2b3ff Mon Sep 17 00:00:00 2001
+From: Chris Liddell <chris.liddell@artifex.com>
+Date: Thu, 13 Oct 2022 14:55:28 +0100
+Subject: [PATCH] Deal with different VM modes during CIDFont loading
+
+To help differentiate between a substituted CIDFont and an embedded one, a
+change was made to store the file path in the CIDFont dictionary. That change
+failed to account for the possibility that the file object and the CIDFont
+dictionary may not be in compatible VM modes.
+
+This adds code to ensure that the string holding the path is in a suitable VM
+mode to be stored into the dictionary.
+
+Reported by Richard Lescak <rlescak@redhat.com>
+---
+ Resource/Init/gs_cidfn.ps | 23 +++++++++++++++++++----
+ 1 file changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/Resource/Init/gs_cidfn.ps b/Resource/Init/gs_cidfn.ps
+index 870a2e11c..fa050ed7a 100644
+--- a/Resource/Init/gs_cidfn.ps
++++ b/Resource/Init/gs_cidfn.ps
+@@ -1,4 +1,4 @@
+-% Copyright (C) 2001-2021 Artifex Software, Inc.
++% Copyright (C) 2001-2022 Artifex Software, Inc.
+ % All Rights Reserved.
+ %
+ % This software is provided AS-IS with no warranty, either express or
+@@ -36,6 +36,17 @@
+
+ 30 dict begin
+
++/.gcompatstringcopy % <string> <global> .gcompatstringcopy <string>
++{
++ dup 2 index gcheck eq
++ { pop }
++ {
++ currentglobal 3 1 roll setglobal
++ dup length string copy
++ exch setglobal
++ } ifelse
++} bind def
++
+ % The key in .cidfonttypes is the CIDFontType value;
+ % the value is a procedure that takes a font name and the CIDFont dictionary
+ % and replaces the latter with a real font.
+@@ -58,7 +69,7 @@ dup 0 {
+ end
+ } if
+ 1 index exch .buildfont9
+- .currentresourcefile dup type /filetype eq { //.filename {1 index exch /ResourcePath exch put} if }{ pop} ifelse
++ .currentresourcefile dup type /filetype eq { //.filename {1 index gcheck //.gcompatstringcopy exec 1 index exch /ResourcePath exch put} if }{ pop} ifelse
+ exch pop
+ } put % Don't bind it here, because gs_fapi.ps redefines .buildfont9
+
+@@ -138,10 +149,11 @@ dup 0 {
+
+ % ------ CIDFontType 1 (FontType 10) ------ %
+
++
+ dup 1 {
+ 10 //.checkfonttype exec pop
+ 1 index exch .buildfont10
+- .currentresourcefile dup type /filetype eq { //.filename {1 index exch /ResourcePath exch put} if }{ pop} ifelse
++ .currentresourcefile dup type /filetype eq { //.filename {1 index gcheck //.gcompatstringcopy exec 1 index exch /ResourcePath exch put} if }{ pop} ifelse
+ exch pop
+ } put % Don't bind it here because gs_fapi.ps redefines .buildfont10
+
+@@ -150,12 +162,15 @@ dup 1 {
+ dup 2 {
+ 11 //.checkfonttype exec pop
+ 1 index exch .buildfont11
+- .currentresourcefile dup type /filetype eq { //.filename {1 index exch /ResourcePath exch put} if }{ pop} ifelse
++ .currentresourcefile dup type /filetype eq { //.filename {1 index gcheck //.gcompatstringcopy exec 1 index exch /ResourcePath exch put} if }{ pop} ifelse
+ exch pop
+ } put % Don't bind it here because gs_fapi.ps redefines .buildfont11
+
++currentdict /.gcompatstringcopy .undef
++
+ pop % .cidfonttypes
+
++
+ % ---------------- Reading CIDFontType 0 files ---------------- %
+
+ /StartData { % <(Binary)|(Hex)> <datalength> StartData -
+--
+2.37.3
+