summaryrefslogtreecommitdiff
path: root/Resource
diff options
context:
space:
mode:
authorChris Liddell <chris.liddell@artifex.com>2022-10-13 14:55:28 +0100
committerChris Liddell <chris.liddell@artifex.com>2022-10-13 15:10:39 +0100
commit0b74b65ecc0f36d40b8d04a7fa1fa8b5f9d2b3ff (patch)
treedd0c04555f5a7b0b224ec72db3dac2ee4bf0eaba /Resource
parent8b72afb6e22a169be74e1e71331b1b661a72ea21 (diff)
downloadghostpdl-0b74b65ecc0f36d40b8d04a7fa1fa8b5f9d2b3ff.tar.gz
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>
Diffstat (limited to 'Resource')
-rw-r--r--Resource/Init/gs_cidfn.ps23
1 files 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 -