You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.1 KiB
88 lines
3.1 KiB
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 |
|
|
|
|