/src/ghostpdl/pdf/pdf_fontps.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* Copyright (C) 2020-2022 Artifex Software, Inc. |
2 | | All Rights Reserved. |
3 | | |
4 | | This software is provided AS-IS with no warranty, either express or |
5 | | implied. |
6 | | |
7 | | This software is distributed under license and may not be copied, |
8 | | modified or distributed except as expressly authorized under the terms |
9 | | of the license contained in the file LICENSE in this distribution. |
10 | | |
11 | | Refer to licensing information at http://www.artifex.com or contact |
12 | | Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato, |
13 | | CA 94945, U.S.A., +1(415)492-9861, for further information. |
14 | | */ |
15 | | |
16 | | /* common code for Postscript-type font handling */ |
17 | | |
18 | | #ifndef PDF_FONTPS_H |
19 | | #define PDF_FONTPS_H |
20 | | |
21 | | #include "gxfont1.h" /* for gs_font_type1_s */ |
22 | | |
23 | | typedef enum |
24 | | { |
25 | | PDF_PS_OBJ_NULL, |
26 | | PDF_PS_OBJ_INTEGER, |
27 | | PDF_PS_OBJ_FLOAT, |
28 | | PDF_PS_OBJ_STRING, |
29 | | PDF_PS_OBJ_NAME, |
30 | | PDF_PS_OBJ_ARRAY, |
31 | | PDF_PS_OBJ_MARK, |
32 | | PDF_PS_OBJ_TRUE, |
33 | | PDF_PS_OBJ_FALSE, |
34 | | PDF_PS_OBJ_ARR_MARK, |
35 | | PDF_PS_OBJ_DICT_MARK, |
36 | | PDF_PS_OBJ_STACK_TOP, |
37 | | PDF_PS_OBJ_STACK_BOTTOM |
38 | | } pdf_ps_obj_type; |
39 | | |
40 | | typedef struct pdf_ps_stack_object_s pdf_ps_stack_object_t; |
41 | | |
42 | | struct pdf_ps_stack_object_s |
43 | | { |
44 | | pdf_ps_obj_type type; |
45 | | int size; |
46 | | union v { |
47 | | int i; |
48 | | float f; |
49 | | byte *string; |
50 | | byte *name; |
51 | | pdf_ps_stack_object_t *arr; |
52 | | } val; |
53 | | }; |
54 | | |
55 | | /* The maximum size of a set of a single "block" is 100 "items" |
56 | | the worst of which is cid ranges which take three objects |
57 | | (lo character code, hi character, low cid) for each item. |
58 | | Thus we need an available stack depth of up to 300 objects. |
59 | | Allowing for possible bad behaviour, 350 seems like a safe |
60 | | size. There are stack limit guard entries at the top and bottom |
61 | | */ |
62 | | typedef struct pdf_ps_ctx_s pdf_ps_ctx_t; |
63 | | |
64 | 944k | #define PDF_PS_OPER_NAME_AND_LEN(s) (const byte *)s, sizeof(s) - 1 |
65 | | |
66 | | typedef struct { |
67 | | const byte *opname; |
68 | | const int opnamelen; |
69 | | int (*oper)(gs_memory_t *mem, pdf_ps_ctx_t *stack, byte *buf, byte *bufend); |
70 | | } pdf_ps_oper_list_t; |
71 | | |
72 | 1.50M | #define PDF_PS_STACK_SIZE 360 |
73 | 148M | #define PDF_PS_STACK_GUARDS 1 |
74 | 911k | #define PDF_PS_STACK_GROW_SIZE PDF_PS_STACK_SIZE + 2 * PDF_PS_STACK_GUARDS |
75 | 510k | #define PDF_PS_STACK_MAX PDF_PS_STACK_SIZE * 16 /* Arbitrary value.... */ |
76 | | struct pdf_ps_ctx_s |
77 | | { |
78 | | pdf_context *pdfi_ctx; |
79 | | pdf_ps_stack_object_t *cur; /* current top of the stack */ |
80 | | pdf_ps_stack_object_t *toplim; /* the upper limit of the stack */ |
81 | | pdf_ps_stack_object_t *stack; |
82 | | pdf_ps_oper_list_t *ops; |
83 | | void *client_data; |
84 | | }; |
85 | | |
86 | | |
87 | | typedef struct { |
88 | | union { |
89 | | pdf_font_type1 t1; |
90 | | pdf_cidfont_type0 cidt0; |
91 | | } u; |
92 | | union { |
93 | | gs_font_type1 gst1; |
94 | | } gsu; |
95 | | } ps_font_interp_private; |
96 | | |
97 | | |
98 | | int pdfi_read_ps_font(pdf_context *ctx, pdf_dict *font_dict, byte *fbuf, int fbuflen, ps_font_interp_private *ps_font_priv); |
99 | | |
100 | | int pdfi_pscript_stack_init(pdf_context *pdfi_ctx, pdf_ps_oper_list_t *ops, void *client_data, pdf_ps_ctx_t *s); |
101 | | void pdfi_pscript_stack_finit(pdf_ps_ctx_t *s); |
102 | | int pdfi_pscript_interpret(pdf_ps_ctx_t *cs, byte *pspdfbuf, int64_t buflen); |
103 | | |
104 | | /* Begin default operator functions */ |
105 | | int ps_pdf_null_oper_func(gs_memory_t *mem, pdf_ps_ctx_t *stack, byte *buf, byte *bufend); |
106 | | int clear_stack_oper_func(gs_memory_t *mem, pdf_ps_ctx_t *s, byte *buf, byte *bufend); |
107 | | int pdf_ps_pop_oper_func(gs_memory_t *mem, pdf_ps_ctx_t *s, byte *buf, byte *bufend); |
108 | | int pdf_ps_pop_and_pushmark_func(gs_memory_t *mem, pdf_ps_ctx_t *stack, byte *buf, byte *bufend); |
109 | | /* End default operator functions */ |
110 | | |
111 | | static inline void pdf_ps_make_null(pdf_ps_stack_object_t *obj) |
112 | 214M | { |
113 | 214M | obj->type = PDF_PS_OBJ_NULL; |
114 | 214M | obj->size = 0; |
115 | 214M | memset(&obj->val, 0x00, sizeof(obj->val)); |
116 | 214M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_null Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_null pdf_fontps.c:pdf_ps_make_null Line | Count | Source | 112 | 205M | { | 113 | 205M | obj->type = PDF_PS_OBJ_NULL; | 114 | 205M | obj->size = 0; | 115 | 205M | memset(&obj->val, 0x00, sizeof(obj->val)); | 116 | 205M | } |
pdf_cmap.c:pdf_ps_make_null Line | Count | Source | 112 | 8.99M | { | 113 | 8.99M | obj->type = PDF_PS_OBJ_NULL; | 114 | 8.99M | obj->size = 0; | 115 | 8.99M | memset(&obj->val, 0x00, sizeof(obj->val)); | 116 | 8.99M | } |
|
117 | | static inline void pdf_ps_make_array_mark(pdf_ps_stack_object_t *obj) |
118 | 816k | { |
119 | 816k | obj->type = PDF_PS_OBJ_ARR_MARK; |
120 | 816k | obj->size = 0; |
121 | 816k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_array_mark Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_array_mark pdf_fontps.c:pdf_ps_make_array_mark Line | Count | Source | 118 | 816k | { | 119 | 816k | obj->type = PDF_PS_OBJ_ARR_MARK; | 120 | 816k | obj->size = 0; | 121 | 816k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_make_array_mark |
122 | | static inline void pdf_ps_make_dict_mark(pdf_ps_stack_object_t *obj) |
123 | 97.9k | { |
124 | 97.9k | obj->type = PDF_PS_OBJ_DICT_MARK; |
125 | 97.9k | obj->size = 0; |
126 | 97.9k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_dict_mark Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_dict_mark pdf_fontps.c:pdf_ps_make_dict_mark Line | Count | Source | 123 | 97.9k | { | 124 | 97.9k | obj->type = PDF_PS_OBJ_DICT_MARK; | 125 | 97.9k | obj->size = 0; | 126 | 97.9k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_make_dict_mark |
127 | | static inline void pdf_ps_make_mark(pdf_ps_stack_object_t *obj) |
128 | 63.6k | { |
129 | 63.6k | obj->type = PDF_PS_OBJ_MARK; |
130 | 63.6k | obj->size = 0; |
131 | 63.6k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_mark Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_mark pdf_fontps.c:pdf_ps_make_mark Line | Count | Source | 128 | 63.6k | { | 129 | 63.6k | obj->type = PDF_PS_OBJ_MARK; | 130 | 63.6k | obj->size = 0; | 131 | 63.6k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_make_mark |
132 | | static inline void pdf_ps_make_int(pdf_ps_stack_object_t *obj, int val) |
133 | 23.7M | { |
134 | 23.7M | obj->type = PDF_PS_OBJ_INTEGER; |
135 | 23.7M | obj->size = 0; |
136 | 23.7M | obj->val.i = val; |
137 | 23.7M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_int Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_int pdf_fontps.c:pdf_ps_make_int Line | Count | Source | 133 | 22.5M | { | 134 | 22.5M | obj->type = PDF_PS_OBJ_INTEGER; | 135 | 22.5M | obj->size = 0; | 136 | 22.5M | obj->val.i = val; | 137 | 22.5M | } |
pdf_cmap.c:pdf_ps_make_int Line | Count | Source | 133 | 1.17M | { | 134 | 1.17M | obj->type = PDF_PS_OBJ_INTEGER; | 135 | 1.17M | obj->size = 0; | 136 | 1.17M | obj->val.i = val; | 137 | 1.17M | } |
|
138 | | static inline void pdf_ps_make_float(pdf_ps_stack_object_t *obj, float fval) |
139 | 197k | { |
140 | 197k | obj->type = PDF_PS_OBJ_FLOAT; |
141 | 197k | obj->size = 0; |
142 | 197k | obj->val.f = fval; |
143 | 197k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_float Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_float pdf_fontps.c:pdf_ps_make_float Line | Count | Source | 139 | 197k | { | 140 | 197k | obj->type = PDF_PS_OBJ_FLOAT; | 141 | 197k | obj->size = 0; | 142 | 197k | obj->val.f = fval; | 143 | 197k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_make_float |
144 | | static inline void pdf_ps_make_string(pdf_ps_stack_object_t *obj, byte *str, int len) |
145 | 6.99M | { |
146 | 6.99M | obj->type = PDF_PS_OBJ_STRING; |
147 | 6.99M | obj->size = len; |
148 | 6.99M | obj->val.string = str; |
149 | 6.99M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_string Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_string pdf_fontps.c:pdf_ps_make_string Line | Count | Source | 145 | 6.99M | { | 146 | 6.99M | obj->type = PDF_PS_OBJ_STRING; | 147 | 6.99M | obj->size = len; | 148 | 6.99M | obj->val.string = str; | 149 | 6.99M | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_make_string |
150 | | static inline void pdf_ps_make_name(pdf_ps_stack_object_t *obj, byte *nm, int len) |
151 | 19.7M | { |
152 | 19.7M | obj->type = PDF_PS_OBJ_NAME; |
153 | 19.7M | obj->size = len; |
154 | 19.7M | obj->val.name = nm; |
155 | 19.7M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_name Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_name pdf_fontps.c:pdf_ps_make_name Line | Count | Source | 151 | 19.7M | { | 152 | 19.7M | obj->type = PDF_PS_OBJ_NAME; | 153 | 19.7M | obj->size = len; | 154 | 19.7M | obj->val.name = nm; | 155 | 19.7M | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_make_name |
156 | | static inline void pdf_ps_make_array(pdf_ps_stack_object_t *obj, pdf_ps_stack_object_t *obj2, int len) |
157 | 940k | { |
158 | 940k | obj->type = PDF_PS_OBJ_ARRAY; |
159 | 940k | obj->size = len; |
160 | 940k | obj->val.arr = obj2; |
161 | 940k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_array Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_array pdf_fontps.c:pdf_ps_make_array Line | Count | Source | 157 | 865k | { | 158 | 865k | obj->type = PDF_PS_OBJ_ARRAY; | 159 | 865k | obj->size = len; | 160 | 865k | obj->val.arr = obj2; | 161 | 865k | } |
pdf_cmap.c:pdf_ps_make_array Line | Count | Source | 157 | 74.5k | { | 158 | 74.5k | obj->type = PDF_PS_OBJ_ARRAY; | 159 | 74.5k | obj->size = len; | 160 | 74.5k | obj->val.arr = obj2; | 161 | 74.5k | } |
|
162 | | static inline void pdf_ps_make_boolean(pdf_ps_stack_object_t *obj, bool b) |
163 | 49.1k | { |
164 | 49.1k | obj->type = b ? PDF_PS_OBJ_TRUE : PDF_PS_OBJ_FALSE; |
165 | 49.1k | obj->size = 0; |
166 | 49.1k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_make_boolean Unexecuted instantiation: pdf_font1C.c:pdf_ps_make_boolean pdf_fontps.c:pdf_ps_make_boolean Line | Count | Source | 163 | 49.1k | { | 164 | 49.1k | obj->type = b ? PDF_PS_OBJ_TRUE : PDF_PS_OBJ_FALSE; | 165 | 49.1k | obj->size = 0; | 166 | 49.1k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_make_boolean |
167 | | |
168 | | static inline bool pdf_ps_obj_has_type(pdf_ps_stack_object_t *o, pdf_ps_obj_type t) |
169 | 302M | { |
170 | 302M | return o->type == t; |
171 | 302M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_obj_has_type Unexecuted instantiation: pdf_font1C.c:pdf_ps_obj_has_type pdf_fontps.c:pdf_ps_obj_has_type Line | Count | Source | 169 | 266M | { | 170 | 266M | return o->type == t; | 171 | 266M | } |
pdf_cmap.c:pdf_ps_obj_has_type Line | Count | Source | 169 | 36.7M | { | 170 | 36.7M | return o->type == t; | 171 | 36.7M | } |
|
172 | | |
173 | | /* The stack can grow, but doesn't shrink, just gets destroyed |
174 | | when we're done interpreting |
175 | | */ |
176 | | static inline int pdf_ps_stack_push(pdf_ps_ctx_t *s) |
177 | 49.7M | { |
178 | | /* Extending the stack pretty inefficient, but it shouldn't happen often |
179 | | for valid files |
180 | | */ |
181 | 49.7M | if (s->cur + 1 >= s->toplim - 1) { |
182 | 510k | int i, currsize = s->toplim - s->stack; |
183 | 510k | int newsize = currsize + PDF_PS_STACK_GROW_SIZE; |
184 | 510k | int newsizebytes = newsize * sizeof(pdf_ps_stack_object_t); |
185 | 510k | pdf_ps_stack_object_t *nstack; |
186 | | |
187 | 510k | if (newsize < PDF_PS_STACK_MAX) { |
188 | 401k | nstack = (pdf_ps_stack_object_t *)gs_alloc_bytes(s->pdfi_ctx->memory, newsizebytes, "pdf_ps_stack_push(nstack)"); |
189 | 401k | if (nstack != NULL) { |
190 | 401k | memcpy(nstack, s->stack, (currsize - 1) * sizeof(pdf_ps_stack_object_t)); |
191 | | |
192 | 802k | for (i = 0; i < PDF_PS_STACK_GUARDS; i++) |
193 | 401k | nstack[newsize - PDF_PS_STACK_GUARDS + i].type = PDF_PS_OBJ_STACK_TOP; |
194 | | |
195 | 146M | for (i = currsize - 2; i < newsize - PDF_PS_STACK_GUARDS; i++) { |
196 | 145M | pdf_ps_make_null(&(nstack[i])); |
197 | 145M | } |
198 | | |
199 | 401k | gs_free_object(s->pdfi_ctx->memory, s->stack, "pdf_ps_stack_push(s->stack)"); |
200 | 401k | s->stack = nstack; |
201 | 401k | s->cur = s->stack + currsize - 1; |
202 | 401k | s->toplim = s->stack + newsize - PDF_PS_STACK_GROW_SIZE; |
203 | 401k | } |
204 | 0 | else { |
205 | 0 | return_error(gs_error_VMerror); |
206 | 0 | } |
207 | 401k | } |
208 | 510k | } |
209 | 49.7M | s->cur++; |
210 | 49.7M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_TOP)) |
211 | 302 | return_error(gs_error_pdf_stackoverflow); |
212 | 49.7M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_BOTTOM)) |
213 | 0 | return_error(gs_error_stackunderflow); |
214 | 49.7M | return 0; |
215 | 49.7M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push pdf_fontps.c:pdf_ps_stack_push Line | Count | Source | 177 | 49.7M | { | 178 | | /* Extending the stack pretty inefficient, but it shouldn't happen often | 179 | | for valid files | 180 | | */ | 181 | 49.7M | if (s->cur + 1 >= s->toplim - 1) { | 182 | 510k | int i, currsize = s->toplim - s->stack; | 183 | 510k | int newsize = currsize + PDF_PS_STACK_GROW_SIZE; | 184 | 510k | int newsizebytes = newsize * sizeof(pdf_ps_stack_object_t); | 185 | 510k | pdf_ps_stack_object_t *nstack; | 186 | | | 187 | 510k | if (newsize < PDF_PS_STACK_MAX) { | 188 | 401k | nstack = (pdf_ps_stack_object_t *)gs_alloc_bytes(s->pdfi_ctx->memory, newsizebytes, "pdf_ps_stack_push(nstack)"); | 189 | 401k | if (nstack != NULL) { | 190 | 401k | memcpy(nstack, s->stack, (currsize - 1) * sizeof(pdf_ps_stack_object_t)); | 191 | | | 192 | 802k | for (i = 0; i < PDF_PS_STACK_GUARDS; i++) | 193 | 401k | nstack[newsize - PDF_PS_STACK_GUARDS + i].type = PDF_PS_OBJ_STACK_TOP; | 194 | | | 195 | 146M | for (i = currsize - 2; i < newsize - PDF_PS_STACK_GUARDS; i++) { | 196 | 145M | pdf_ps_make_null(&(nstack[i])); | 197 | 145M | } | 198 | | | 199 | 401k | gs_free_object(s->pdfi_ctx->memory, s->stack, "pdf_ps_stack_push(s->stack)"); | 200 | 401k | s->stack = nstack; | 201 | 401k | s->cur = s->stack + currsize - 1; | 202 | 401k | s->toplim = s->stack + newsize - PDF_PS_STACK_GROW_SIZE; | 203 | 401k | } | 204 | 0 | else { | 205 | 0 | return_error(gs_error_VMerror); | 206 | 0 | } | 207 | 401k | } | 208 | 510k | } | 209 | 49.7M | s->cur++; | 210 | 49.7M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_TOP)) | 211 | 302 | return_error(gs_error_pdf_stackoverflow); | 212 | 49.7M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_BOTTOM)) | 213 | 0 | return_error(gs_error_stackunderflow); | 214 | 49.7M | return 0; | 215 | 49.7M | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push |
216 | | |
217 | | static inline void pdf_ps_free_array_contents(pdf_ps_ctx_t *s, pdf_ps_stack_object_t *o) |
218 | 936k | { |
219 | 936k | int i; |
220 | 4.19M | for (i = 0; i < o->size; i++) { |
221 | 3.26M | if (pdf_ps_obj_has_type(&o->val.arr[i], PDF_PS_OBJ_ARRAY)) { |
222 | 376k | pdf_ps_stack_object_t *po = o->val.arr[i].val.arr; |
223 | 376k | pdf_ps_free_array_contents(s, &o->val.arr[i]); |
224 | 376k | gs_free_object(s->pdfi_ctx->memory, po, "pdf_ps_free_array_contents"); |
225 | 376k | } |
226 | 3.26M | pdf_ps_make_null(&o->val.arr[i]); |
227 | 3.26M | } |
228 | 936k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_free_array_contents Unexecuted instantiation: pdf_font1C.c:pdf_ps_free_array_contents pdf_fontps.c:pdf_ps_free_array_contents Line | Count | Source | 218 | 854k | { | 219 | 854k | int i; | 220 | 3.95M | for (i = 0; i < o->size; i++) { | 221 | 3.10M | if (pdf_ps_obj_has_type(&o->val.arr[i], PDF_PS_OBJ_ARRAY)) { | 222 | 376k | pdf_ps_stack_object_t *po = o->val.arr[i].val.arr; | 223 | 376k | pdf_ps_free_array_contents(s, &o->val.arr[i]); | 224 | 376k | gs_free_object(s->pdfi_ctx->memory, po, "pdf_ps_free_array_contents"); | 225 | 376k | } | 226 | 3.10M | pdf_ps_make_null(&o->val.arr[i]); | 227 | 3.10M | } | 228 | 854k | } |
pdf_cmap.c:pdf_ps_free_array_contents Line | Count | Source | 218 | 82.6k | { | 219 | 82.6k | int i; | 220 | 240k | for (i = 0; i < o->size; i++) { | 221 | 158k | if (pdf_ps_obj_has_type(&o->val.arr[i], PDF_PS_OBJ_ARRAY)) { | 222 | 0 | pdf_ps_stack_object_t *po = o->val.arr[i].val.arr; | 223 | 0 | pdf_ps_free_array_contents(s, &o->val.arr[i]); | 224 | 0 | gs_free_object(s->pdfi_ctx->memory, po, "pdf_ps_free_array_contents"); | 225 | 0 | } | 226 | 158k | pdf_ps_make_null(&o->val.arr[i]); | 227 | 158k | } | 228 | 82.6k | } |
|
229 | | |
230 | | static inline int pdf_ps_stack_pop(pdf_ps_ctx_t *s, unsigned int n) |
231 | 21.3M | { |
232 | 21.3M | int n2 = n > s->cur - &(s->stack[0]) ? s->cur - &(s->stack[0]) : n; |
233 | 71.5M | while(n2--) { |
234 | | /* We only have one dimensional arrays to worry about */ |
235 | 50.1M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_ARRAY)) { |
236 | 559k | pdf_ps_free_array_contents(s, s->cur); |
237 | 559k | gs_free_object(s->pdfi_ctx->memory, s->cur->val.arr, "pdf_ps_stack_pop(s->cur->val.arr)"); |
238 | 559k | } |
239 | 50.1M | pdf_ps_make_null(s->cur); |
240 | 50.1M | s->cur--; |
241 | 50.1M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_TOP)) |
242 | 0 | return_error(gs_error_pdf_stackoverflow); |
243 | 50.1M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_BOTTOM)) |
244 | 4.08k | return_error(gs_error_stackunderflow); |
245 | 50.1M | } |
246 | 21.3M | return 0; |
247 | 21.3M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_pop Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_pop pdf_fontps.c:pdf_ps_stack_pop Line | Count | Source | 231 | 21.2M | { | 232 | 21.2M | int n2 = n > s->cur - &(s->stack[0]) ? s->cur - &(s->stack[0]) : n; | 233 | 62.5M | while(n2--) { | 234 | | /* We only have one dimensional arrays to worry about */ | 235 | 41.3M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_ARRAY)) { | 236 | 477k | pdf_ps_free_array_contents(s, s->cur); | 237 | 477k | gs_free_object(s->pdfi_ctx->memory, s->cur->val.arr, "pdf_ps_stack_pop(s->cur->val.arr)"); | 238 | 477k | } | 239 | 41.3M | pdf_ps_make_null(s->cur); | 240 | 41.3M | s->cur--; | 241 | 41.3M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_TOP)) | 242 | 0 | return_error(gs_error_pdf_stackoverflow); | 243 | 41.3M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_BOTTOM)) | 244 | 3.99k | return_error(gs_error_stackunderflow); | 245 | 41.3M | } | 246 | 21.2M | return 0; | 247 | 21.2M | } |
pdf_cmap.c:pdf_ps_stack_pop Line | Count | Source | 231 | 155k | { | 232 | 155k | int n2 = n > s->cur - &(s->stack[0]) ? s->cur - &(s->stack[0]) : n; | 233 | 8.99M | while(n2--) { | 234 | | /* We only have one dimensional arrays to worry about */ | 235 | 8.83M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_ARRAY)) { | 236 | 82.6k | pdf_ps_free_array_contents(s, s->cur); | 237 | 82.6k | gs_free_object(s->pdfi_ctx->memory, s->cur->val.arr, "pdf_ps_stack_pop(s->cur->val.arr)"); | 238 | 82.6k | } | 239 | 8.83M | pdf_ps_make_null(s->cur); | 240 | 8.83M | s->cur--; | 241 | 8.83M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_TOP)) | 242 | 0 | return_error(gs_error_pdf_stackoverflow); | 243 | 8.83M | if (pdf_ps_obj_has_type(s->cur, PDF_PS_OBJ_STACK_BOTTOM)) | 244 | 86 | return_error(gs_error_stackunderflow); | 245 | 8.83M | } | 246 | 155k | return 0; | 247 | 155k | } |
|
248 | | |
249 | | static inline int pdf_ps_stack_push_arr_mark(pdf_ps_ctx_t *s) |
250 | 816k | { |
251 | 816k | int code = pdf_ps_stack_push(s); |
252 | 816k | if (code < 0) return code; |
253 | | |
254 | 816k | pdf_ps_make_array_mark(s->cur); |
255 | 816k | return 0; |
256 | 816k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_arr_mark Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_arr_mark pdf_fontps.c:pdf_ps_stack_push_arr_mark Line | Count | Source | 250 | 816k | { | 251 | 816k | int code = pdf_ps_stack_push(s); | 252 | 816k | if (code < 0) return code; | 253 | | | 254 | 816k | pdf_ps_make_array_mark(s->cur); | 255 | 816k | return 0; | 256 | 816k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_arr_mark |
257 | | |
258 | | static inline int pdf_ps_stack_push_dict_mark(pdf_ps_ctx_t *s) |
259 | 97.9k | { |
260 | 97.9k | int code = pdf_ps_stack_push(s); |
261 | 97.9k | if (code < 0) return code; |
262 | | |
263 | 97.9k | pdf_ps_make_dict_mark(s->cur); |
264 | 97.9k | return 0; |
265 | 97.9k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_dict_mark Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_dict_mark pdf_fontps.c:pdf_ps_stack_push_dict_mark Line | Count | Source | 259 | 97.9k | { | 260 | 97.9k | int code = pdf_ps_stack_push(s); | 261 | 97.9k | if (code < 0) return code; | 262 | | | 263 | 97.9k | pdf_ps_make_dict_mark(s->cur); | 264 | 97.9k | return 0; | 265 | 97.9k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_dict_mark |
266 | | |
267 | | static inline int pdf_ps_stack_push_mark(pdf_ps_ctx_t *s) |
268 | 63.6k | { |
269 | 63.6k | int code = pdf_ps_stack_push(s); |
270 | 63.6k | if (code < 0) return code; |
271 | | |
272 | 63.6k | pdf_ps_make_mark(s->cur); |
273 | 63.6k | return 0; |
274 | 63.6k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_mark Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_mark pdf_fontps.c:pdf_ps_stack_push_mark Line | Count | Source | 268 | 63.6k | { | 269 | 63.6k | int code = pdf_ps_stack_push(s); | 270 | 63.6k | if (code < 0) return code; | 271 | | | 272 | 63.6k | pdf_ps_make_mark(s->cur); | 273 | 63.6k | return 0; | 274 | 63.6k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_mark |
275 | | |
276 | | static inline int pdf_ps_stack_push_int(pdf_ps_ctx_t *s, int i) |
277 | 22.5M | { |
278 | 22.5M | int code = pdf_ps_stack_push(s); |
279 | 22.5M | if (code < 0) return code; |
280 | | |
281 | 22.5M | pdf_ps_make_int(s->cur, i); |
282 | 22.5M | return 0; |
283 | 22.5M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_int Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_int pdf_fontps.c:pdf_ps_stack_push_int Line | Count | Source | 277 | 22.5M | { | 278 | 22.5M | int code = pdf_ps_stack_push(s); | 279 | 22.5M | if (code < 0) return code; | 280 | | | 281 | 22.5M | pdf_ps_make_int(s->cur, i); | 282 | 22.5M | return 0; | 283 | 22.5M | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_int |
284 | | |
285 | | static inline int pdf_ps_stack_push_float(pdf_ps_ctx_t *s, float f) |
286 | 197k | { |
287 | 197k | int code = pdf_ps_stack_push(s); |
288 | 197k | if (code < 0) return code; |
289 | | |
290 | 197k | pdf_ps_make_float(s->cur, f); |
291 | 197k | return 0; |
292 | 197k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_float Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_float pdf_fontps.c:pdf_ps_stack_push_float Line | Count | Source | 286 | 197k | { | 287 | 197k | int code = pdf_ps_stack_push(s); | 288 | 197k | if (code < 0) return code; | 289 | | | 290 | 197k | pdf_ps_make_float(s->cur, f); | 291 | 197k | return 0; | 292 | 197k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_float |
293 | | |
294 | | static inline int pdf_ps_stack_push_string(pdf_ps_ctx_t *s, byte *str, int len) |
295 | 6.99M | { |
296 | 6.99M | int code = pdf_ps_stack_push(s); |
297 | 6.99M | if (code < 0) return code; |
298 | | |
299 | 6.99M | pdf_ps_make_string(s->cur, str, len); |
300 | 6.99M | return 0; |
301 | 6.99M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_string Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_string pdf_fontps.c:pdf_ps_stack_push_string Line | Count | Source | 295 | 6.99M | { | 296 | 6.99M | int code = pdf_ps_stack_push(s); | 297 | 6.99M | if (code < 0) return code; | 298 | | | 299 | 6.99M | pdf_ps_make_string(s->cur, str, len); | 300 | 6.99M | return 0; | 301 | 6.99M | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_string |
302 | | |
303 | | static inline int pdf_ps_stack_push_name(pdf_ps_ctx_t *s, byte *nm, int len) |
304 | 18.1M | { |
305 | 18.1M | int code = pdf_ps_stack_push(s); |
306 | 18.1M | if (code < 0) return code; |
307 | | |
308 | 18.1M | pdf_ps_make_name(s->cur, nm, len); |
309 | 18.1M | return 0; |
310 | 18.1M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_name Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_name pdf_fontps.c:pdf_ps_stack_push_name Line | Count | Source | 304 | 18.1M | { | 305 | 18.1M | int code = pdf_ps_stack_push(s); | 306 | 18.1M | if (code < 0) return code; | 307 | | | 308 | 18.1M | pdf_ps_make_name(s->cur, nm, len); | 309 | 18.1M | return 0; | 310 | 18.1M | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_name |
311 | | |
312 | | static inline int pdf_ps_stack_push_array(pdf_ps_ctx_t *s, pdf_ps_stack_object_t *a, int len) |
313 | 865k | { |
314 | 865k | int code = pdf_ps_stack_push(s); |
315 | 865k | if (code < 0) return code; |
316 | | |
317 | 865k | pdf_ps_make_array(s->cur, a, len); |
318 | 865k | return 0; |
319 | 865k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_array Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_array pdf_fontps.c:pdf_ps_stack_push_array Line | Count | Source | 313 | 865k | { | 314 | 865k | int code = pdf_ps_stack_push(s); | 315 | 865k | if (code < 0) return code; | 316 | | | 317 | 865k | pdf_ps_make_array(s->cur, a, len); | 318 | 865k | return 0; | 319 | 865k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_array |
320 | | |
321 | | static inline int pdf_ps_stack_push_boolean(pdf_ps_ctx_t *s, bool b) |
322 | 49.1k | { |
323 | 49.1k | int code = pdf_ps_stack_push(s); |
324 | 49.1k | if (code < 0) return code; |
325 | | |
326 | 49.1k | pdf_ps_make_boolean(s->cur, b); |
327 | 49.1k | return 0; |
328 | 49.1k | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_push_boolean Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_push_boolean pdf_fontps.c:pdf_ps_stack_push_boolean Line | Count | Source | 322 | 49.1k | { | 323 | 49.1k | int code = pdf_ps_stack_push(s); | 324 | 49.1k | if (code < 0) return code; | 325 | | | 326 | 49.1k | pdf_ps_make_boolean(s->cur, b); | 327 | 49.1k | return 0; | 328 | 49.1k | } |
Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_push_boolean |
329 | | |
330 | | static inline pdf_ps_obj_type pdf_ps_stack_obj_type(pdf_ps_ctx_t *s) |
331 | 0 | { |
332 | 0 | return s->cur->type; |
333 | 0 | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_obj_type Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_obj_type Unexecuted instantiation: pdf_fontps.c:pdf_ps_stack_obj_type Unexecuted instantiation: pdf_cmap.c:pdf_ps_stack_obj_type |
334 | | |
335 | | static inline int pdf_ps_stack_count_to_mark(pdf_ps_ctx_t *s, pdf_ps_obj_type mtype) |
336 | 1.03M | { |
337 | 1.03M | int i = gs_error_stackunderflow, depth = s->cur - &(s->stack[0]) + 1; |
338 | 14.3M | for (i = 0; i < depth; i++) { |
339 | 14.3M | if (s->cur[-i].type == PDF_PS_OBJ_STACK_BOTTOM) { |
340 | 78.1k | i = gs_note_error(gs_error_unmatchedmark); |
341 | 78.1k | break; |
342 | 78.1k | } |
343 | 14.2M | if (s->cur[-i].type == mtype) |
344 | 958k | break; |
345 | 14.2M | } |
346 | 1.03M | return i; |
347 | 1.03M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_count_to_mark Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_count_to_mark pdf_fontps.c:pdf_ps_stack_count_to_mark Line | Count | Source | 336 | 956k | { | 337 | 956k | int i = gs_error_stackunderflow, depth = s->cur - &(s->stack[0]) + 1; | 338 | 3.30M | for (i = 0; i < depth; i++) { | 339 | 3.30M | if (s->cur[-i].type == PDF_PS_OBJ_STACK_BOTTOM) { | 340 | 78.0k | i = gs_note_error(gs_error_unmatchedmark); | 341 | 78.0k | break; | 342 | 78.0k | } | 343 | 3.22M | if (s->cur[-i].type == mtype) | 344 | 878k | break; | 345 | 3.22M | } | 346 | 956k | return i; | 347 | 956k | } |
pdf_cmap.c:pdf_ps_stack_count_to_mark Line | Count | Source | 336 | 80.3k | { | 337 | 80.3k | int i = gs_error_stackunderflow, depth = s->cur - &(s->stack[0]) + 1; | 338 | 11.0M | for (i = 0; i < depth; i++) { | 339 | 11.0M | if (s->cur[-i].type == PDF_PS_OBJ_STACK_BOTTOM) { | 340 | 102 | i = gs_note_error(gs_error_unmatchedmark); | 341 | 102 | break; | 342 | 102 | } | 343 | 11.0M | if (s->cur[-i].type == mtype) | 344 | 80.2k | break; | 345 | 11.0M | } | 346 | 80.3k | return i; | 347 | 80.3k | } |
|
348 | | |
349 | | static inline int pdf_ps_stack_count(pdf_ps_ctx_t *s) |
350 | 18.2M | { |
351 | 18.2M | return s->cur - &(s->stack[1]); |
352 | 18.2M | } Unexecuted instantiation: pdf_font1.c:pdf_ps_stack_count Unexecuted instantiation: pdf_font1C.c:pdf_ps_stack_count pdf_fontps.c:pdf_ps_stack_count Line | Count | Source | 350 | 18.1M | { | 351 | 18.1M | return s->cur - &(s->stack[1]); | 352 | 18.1M | } |
pdf_cmap.c:pdf_ps_stack_count Line | Count | Source | 350 | 92.3k | { | 351 | 92.3k | return s->cur - &(s->stack[1]); | 352 | 92.3k | } |
|
353 | | |
354 | | #endif |