diff options
author | Chris Liddell <chris.liddell@artifex.com> | 2022-10-13 14:55:28 +0100 |
---|---|---|
committer | Chris Liddell <chris.liddell@artifex.com> | 2022-10-13 15:10:39 +0100 |
commit | 0b74b65ecc0f36d40b8d04a7fa1fa8b5f9d2b3ff (patch) | |
tree | dd0c04555f5a7b0b224ec72db3dac2ee4bf0eaba /Resource | |
parent | 8b72afb6e22a169be74e1e71331b1b661a72ea21 (diff) | |
download | ghostpdl-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.ps | 23 |
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 - |