/work/workdir/UnpackedTarball/harfbuzz/src/hb-sanitize.hh
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright © 2007,2008,2009,2010 Red Hat, Inc. |
3 | | * Copyright © 2012,2018 Google, Inc. |
4 | | * |
5 | | * This is part of HarfBuzz, a text shaping library. |
6 | | * |
7 | | * Permission is hereby granted, without written agreement and without |
8 | | * license or royalty fees, to use, copy, modify, and distribute this |
9 | | * software and its documentation for any purpose, provided that the |
10 | | * above copyright notice and the following two paragraphs appear in |
11 | | * all copies of this software. |
12 | | * |
13 | | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR |
14 | | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES |
15 | | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN |
16 | | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
17 | | * DAMAGE. |
18 | | * |
19 | | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
20 | | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
21 | | * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS |
22 | | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO |
23 | | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
24 | | * |
25 | | * Red Hat Author(s): Behdad Esfahbod |
26 | | * Google Author(s): Behdad Esfahbod |
27 | | */ |
28 | | |
29 | | #ifndef HB_SANITIZE_HH |
30 | | #define HB_SANITIZE_HH |
31 | | |
32 | | #include "hb.hh" |
33 | | #include "hb-blob.hh" |
34 | | #include "hb-dispatch.hh" |
35 | | |
36 | | |
37 | | /* |
38 | | * Sanitize |
39 | | * |
40 | | * |
41 | | * === Introduction === |
42 | | * |
43 | | * The sanitize machinery is at the core of our zero-cost font loading. We |
44 | | * mmap() font file into memory and create a blob out of it. Font subtables |
45 | | * are returned as a readonly sub-blob of the main font blob. These table |
46 | | * blobs are then sanitized before use, to ensure invalid memory access does |
47 | | * not happen. The toplevel sanitize API use is like, eg. to load the 'head' |
48 | | * table: |
49 | | * |
50 | | * hb_blob_t *head_blob = hb_sanitize_context_t ().reference_table<OT::head> (face); |
51 | | * |
52 | | * The blob then can be converted to a head table struct with: |
53 | | * |
54 | | * const head *head_table = head_blob->as<head> (); |
55 | | * |
56 | | * What the reference_table does is, to call hb_face_reference_table() to load |
57 | | * the table blob, sanitize it and return either the sanitized blob, or empty |
58 | | * blob if sanitization failed. The blob->as() function returns the null |
59 | | * object of its template type argument if the blob is empty. Otherwise, it |
60 | | * just casts the blob contents to the desired type. |
61 | | * |
62 | | * Sanitizing a blob of data with a type T works as follows (with minor |
63 | | * simplification): |
64 | | * |
65 | | * - Cast blob content to T*, call sanitize() method of it, |
66 | | * - If sanitize succeeded, return blob. |
67 | | * - Otherwise, if blob is not writable, try making it writable, |
68 | | * or copy if cannot be made writable in-place, |
69 | | * - Call sanitize() again. Return blob if sanitize succeeded. |
70 | | * - Return empty blob otherwise. |
71 | | * |
72 | | * |
73 | | * === The sanitize() contract === |
74 | | * |
75 | | * The sanitize() method of each object type shall return `true` if it's safe to |
76 | | * call other methods of the object, and `false` otherwise. |
77 | | * |
78 | | * Note that what sanitize() checks for might align with what the specification |
79 | | * describes as valid table data, but does not have to be. In particular, we |
80 | | * do NOT want to be pedantic and concern ourselves with validity checks that |
81 | | * are irrelevant to our use of the table. On the contrary, we want to be |
82 | | * lenient with error handling and accept invalid data to the extent that it |
83 | | * does not impose extra burden on us. |
84 | | * |
85 | | * Based on the sanitize contract, one can see that what we check for depends |
86 | | * on how we use the data in other table methods. Ie. if other table methods |
87 | | * assume that offsets do NOT point out of the table data block, then that's |
88 | | * something sanitize() must check for (GSUB/GPOS/GDEF/etc work this way). On |
89 | | * the other hand, if other methods do such checks themselves, then sanitize() |
90 | | * does not have to bother with them (glyf/local work this way). The choice |
91 | | * depends on the table structure and sanitize() performance. For example, to |
92 | | * check glyf/loca offsets in sanitize() would cost O(num-glyphs). We try hard |
93 | | * to avoid such costs during font loading. By postponing such checks to the |
94 | | * actual glyph loading, we reduce the sanitize cost to O(1) and total runtime |
95 | | * cost to O(used-glyphs). As such, this is preferred. |
96 | | * |
97 | | * The same argument can be made re GSUB/GPOS/GDEF, but there, the table |
98 | | * structure is so complicated that by checking all offsets at sanitize() time, |
99 | | * we make the code much simpler in other methods, as offsets and referenced |
100 | | * objects do not need to be validated at each use site. |
101 | | */ |
102 | | |
103 | | /* This limits sanitizing time on really broken fonts. */ |
104 | | #ifndef HB_SANITIZE_MAX_EDITS |
105 | 0 | #define HB_SANITIZE_MAX_EDITS 32 |
106 | | #endif |
107 | | #ifndef HB_SANITIZE_MAX_OPS_FACTOR |
108 | | #define HB_SANITIZE_MAX_OPS_FACTOR 64 |
109 | | #endif |
110 | | #ifndef HB_SANITIZE_MAX_OPS_MIN |
111 | 104M | #define HB_SANITIZE_MAX_OPS_MIN 16384 |
112 | | #endif |
113 | | #ifndef HB_SANITIZE_MAX_OPS_MAX |
114 | 128M | #define HB_SANITIZE_MAX_OPS_MAX 0x3FFFFFFF |
115 | | #endif |
116 | | #ifndef HB_SANITIZE_MAX_SUBTABLES |
117 | 2.62k | #define HB_SANITIZE_MAX_SUBTABLES 0x4000 |
118 | | #endif |
119 | | |
120 | | struct hb_sanitize_context_t : |
121 | | hb_dispatch_context_t<hb_sanitize_context_t, bool, HB_DEBUG_SANITIZE> |
122 | | { |
123 | | hb_sanitize_context_t () : |
124 | 104M | start (nullptr), end (nullptr), |
125 | 104M | length (0), |
126 | 104M | max_ops (0), max_subtables (0), |
127 | 104M | recursion_depth (0), |
128 | 104M | writable (false), edit_count (0), |
129 | 104M | blob (nullptr), |
130 | 104M | num_glyphs (65536), |
131 | 104M | num_glyphs_set (false), |
132 | 104M | lazy_some_gpos (false) {} |
133 | | |
134 | 0 | const char *get_name () { return "SANITIZE"; } |
135 | | template <typename T, typename F> |
136 | | bool may_dispatch (const T *obj HB_UNUSED, const F *format) |
137 | 4.54k | { |
138 | 4.54k | return format->sanitize (this) && |
139 | 4.54k | hb_barrier (); |
140 | 4.54k | } bool hb_sanitize_context_t::may_dispatch<OT::Layout::GSUB_impl::SingleSubst, OT::IntType<unsigned short, 2u> >(OT::Layout::GSUB_impl::SingleSubst const*, OT::IntType<unsigned short, 2u> const*) Line | Count | Source | 137 | 138 | { | 138 | 138 | return format->sanitize (this) && | 139 | 138 | hb_barrier (); | 140 | 138 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Layout::GSUB_impl::MultipleSubst, OT::IntType<unsigned short, 2u> >(OT::Layout::GSUB_impl::MultipleSubst const*, OT::IntType<unsigned short, 2u> const*) Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Layout::GSUB_impl::AlternateSubst, OT::IntType<unsigned short, 2u> >(OT::Layout::GSUB_impl::AlternateSubst const*, OT::IntType<unsigned short, 2u> const*) bool hb_sanitize_context_t::may_dispatch<OT::Layout::GSUB_impl::LigatureSubst, OT::IntType<unsigned short, 2u> >(OT::Layout::GSUB_impl::LigatureSubst const*, OT::IntType<unsigned short, 2u> const*) Line | Count | Source | 137 | 240 | { | 138 | 240 | return format->sanitize (this) && | 139 | 240 | hb_barrier (); | 140 | 240 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Context, OT::IntType<unsigned short, 2u> >(OT::Context const*, OT::IntType<unsigned short, 2u> const*) bool hb_sanitize_context_t::may_dispatch<OT::ChainContext, OT::IntType<unsigned short, 2u> >(OT::ChainContext const*, OT::IntType<unsigned short, 2u> const*) Line | Count | Source | 137 | 2.46k | { | 138 | 2.46k | return format->sanitize (this) && | 139 | 2.46k | hb_barrier (); | 140 | 2.46k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Extension<OT::Layout::GSUB_impl::ExtensionSubst>, OT::IntType<unsigned short, 2u> >(OT::Extension<OT::Layout::GSUB_impl::ExtensionSubst> const*, OT::IntType<unsigned short, 2u> const*) Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst>, OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst> >(OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst> const*, OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst> const*) Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Layout::GSUB_impl::ReverseChainSingleSubst, OT::IntType<unsigned short, 2u> >(OT::Layout::GSUB_impl::ReverseChainSingleSubst const*, OT::IntType<unsigned short, 2u> const*) bool hb_sanitize_context_t::may_dispatch<OT::Layout::GPOS_impl::SinglePos, OT::IntType<unsigned short, 2u> >(OT::Layout::GPOS_impl::SinglePos const*, OT::IntType<unsigned short, 2u> const*) Line | Count | Source | 137 | 180 | { | 138 | 180 | return format->sanitize (this) && | 139 | 180 | hb_barrier (); | 140 | 180 | } |
bool hb_sanitize_context_t::may_dispatch<OT::Layout::GPOS_impl::PairPos, OT::IntType<unsigned short, 2u> >(OT::Layout::GPOS_impl::PairPos const*, OT::IntType<unsigned short, 2u> const*) Line | Count | Source | 137 | 180 | { | 138 | 180 | return format->sanitize (this) && | 139 | 180 | hb_barrier (); | 140 | 180 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Layout::GPOS_impl::CursivePos, OT::IntType<unsigned short, 2u> >(OT::Layout::GPOS_impl::CursivePos const*, OT::IntType<unsigned short, 2u> const*) bool hb_sanitize_context_t::may_dispatch<OT::Layout::GPOS_impl::MarkBasePos, OT::IntType<unsigned short, 2u> >(OT::Layout::GPOS_impl::MarkBasePos const*, OT::IntType<unsigned short, 2u> const*) Line | Count | Source | 137 | 1.23k | { | 138 | 1.23k | return format->sanitize (this) && | 139 | 1.23k | hb_barrier (); | 140 | 1.23k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Layout::GPOS_impl::MarkLigPos, OT::IntType<unsigned short, 2u> >(OT::Layout::GPOS_impl::MarkLigPos const*, OT::IntType<unsigned short, 2u> const*) bool hb_sanitize_context_t::may_dispatch<OT::Layout::GPOS_impl::MarkMarkPos, OT::IntType<unsigned short, 2u> >(OT::Layout::GPOS_impl::MarkMarkPos const*, OT::IntType<unsigned short, 2u> const*) Line | Count | Source | 137 | 120 | { | 138 | 120 | return format->sanitize (this) && | 139 | 120 | hb_barrier (); | 140 | 120 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Extension<OT::Layout::GPOS_impl::ExtensionPos>, OT::IntType<unsigned short, 2u> >(OT::Extension<OT::Layout::GPOS_impl::ExtensionPos> const*, OT::IntType<unsigned short, 2u> const*) Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::ExtensionFormat1<OT::Layout::GPOS_impl::ExtensionPos>, OT::ExtensionFormat1<OT::Layout::GPOS_impl::ExtensionPos> >(OT::ExtensionFormat1<OT::Layout::GPOS_impl::ExtensionPos> const*, OT::ExtensionFormat1<OT::Layout::GPOS_impl::ExtensionPos> const*) Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::Paint, OT::IntType<unsigned char, 1u> >(OT::Paint const*, OT::IntType<unsigned char, 1u> const*) Unexecuted instantiation: bool hb_sanitize_context_t::may_dispatch<OT::ClipBox, OT::IntType<unsigned char, 1u> >(OT::ClipBox const*, OT::IntType<unsigned char, 1u> const*) |
141 | 0 | static return_t default_return_value () { return true; } |
142 | 0 | static return_t no_dispatch_return_value () { return false; } |
143 | 0 | bool stop_sublookup_iteration (const return_t r) const { return !r; } |
144 | | |
145 | | bool visit_subtables (unsigned count) |
146 | 2.62k | { |
147 | 2.62k | max_subtables += count; |
148 | 2.62k | return max_subtables < HB_SANITIZE_MAX_SUBTABLES; |
149 | 2.62k | } |
150 | | |
151 | | private: |
152 | | template <typename T, typename ...Ts> auto |
153 | | _dispatch (const T &obj, hb_priority<1>, Ts&&... ds) HB_AUTO_RETURN |
154 | | ( obj.sanitize (this, std::forward<Ts> (ds)...) ) |
155 | | template <typename T, typename ...Ts> auto |
156 | | _dispatch (const T &obj, hb_priority<0>, Ts&&... ds) HB_AUTO_RETURN |
157 | | ( obj.dispatch (this, std::forward<Ts> (ds)...) ) |
158 | | public: |
159 | | template <typename T, typename ...Ts> auto |
160 | | dispatch (const T &obj, Ts&&... ds) HB_AUTO_RETURN |
161 | | ( _dispatch (obj, hb_prioritize, std::forward<Ts> (ds)...) ) |
162 | | |
163 | 67.3M | hb_sanitize_context_t (hb_blob_t *b) : hb_sanitize_context_t () |
164 | 67.3M | { |
165 | 67.3M | init (b); |
166 | | |
167 | 67.3M | if (blob) |
168 | 67.3M | start_processing (); |
169 | 67.3M | } |
170 | | |
171 | | ~hb_sanitize_context_t () |
172 | 104M | { |
173 | 104M | if (blob) |
174 | 67.3M | end_processing (); |
175 | 104M | } |
176 | | |
177 | | void init (hb_blob_t *b) |
178 | 104M | { |
179 | 104M | this->blob = hb_blob_reference (b); |
180 | 104M | this->writable = false; |
181 | 104M | } |
182 | | |
183 | | void set_num_glyphs (unsigned int num_glyphs_) |
184 | 37.1M | { |
185 | 37.1M | num_glyphs = num_glyphs_; |
186 | 37.1M | num_glyphs_set = true; |
187 | 37.1M | } |
188 | 0 | unsigned int get_num_glyphs () { return num_glyphs; } |
189 | | |
190 | 23.7M | void set_max_ops (int max_ops_) { max_ops = max_ops_; } |
191 | | |
192 | | template <typename T> |
193 | | void set_object (const T *obj) |
194 | 2.46M | { |
195 | 2.46M | reset_object (); |
196 | | |
197 | 2.46M | if (!obj) return; |
198 | | |
199 | 0 | const char *obj_start = (const char *) obj; |
200 | 0 | if (unlikely (obj_start < this->start || this->end <= obj_start)) |
201 | 0 | { |
202 | 0 | this->start = this->end = nullptr; |
203 | 0 | this->length = 0; |
204 | 0 | } |
205 | 0 | else |
206 | 0 | { |
207 | 0 | this->start = obj_start; |
208 | 0 | this->end = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ()); |
209 | 0 | this->length = this->end - this->start; |
210 | 0 | } |
211 | 0 | } Unexecuted instantiation: void hb_sanitize_context_t::set_object<AAT::KerxSubTable>(AAT::KerxSubTable const*) void hb_sanitize_context_t::set_object<OT::KernSubTable<OT::KernOTSubTableHeader> >(OT::KernSubTable<OT::KernOTSubTableHeader> const*) Line | Count | Source | 194 | 2.46M | { | 195 | 2.46M | reset_object (); | 196 | | | 197 | 2.46M | if (!obj) return; | 198 | | | 199 | 0 | const char *obj_start = (const char *) obj; | 200 | 0 | if (unlikely (obj_start < this->start || this->end <= obj_start)) | 201 | 0 | { | 202 | 0 | this->start = this->end = nullptr; | 203 | 0 | this->length = 0; | 204 | 0 | } | 205 | 0 | else | 206 | 0 | { | 207 | 0 | this->start = obj_start; | 208 | 0 | this->end = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ()); | 209 | 0 | this->length = this->end - this->start; | 210 | 0 | } | 211 | 0 | } |
Unexecuted instantiation: void hb_sanitize_context_t::set_object<OT::KernSubTable<OT::KernAATSubTableHeader> >(OT::KernSubTable<OT::KernAATSubTableHeader> const*) |
212 | | |
213 | | void reset_object () |
214 | 109M | { |
215 | 109M | this->start = this->blob->data; |
216 | 109M | this->end = this->start + this->blob->length; |
217 | 109M | this->length = this->end - this->start; |
218 | 109M | assert (this->start <= this->end); /* Must not overflow. */ |
219 | 109M | } |
220 | | |
221 | | void start_processing () |
222 | 104M | { |
223 | 104M | reset_object (); |
224 | 104M | unsigned m; |
225 | 104M | if (unlikely (hb_unsigned_mul_overflows (this->end - this->start, HB_SANITIZE_MAX_OPS_FACTOR, &m))) |
226 | 0 | this->max_ops = HB_SANITIZE_MAX_OPS_MAX; |
227 | 104M | else |
228 | 104M | this->max_ops = hb_clamp (m, |
229 | 104M | (unsigned) HB_SANITIZE_MAX_OPS_MIN, |
230 | 104M | (unsigned) HB_SANITIZE_MAX_OPS_MAX); |
231 | 104M | this->edit_count = 0; |
232 | 104M | this->debug_depth = 0; |
233 | 104M | this->recursion_depth = 0; |
234 | | |
235 | 104M | DEBUG_MSG_LEVEL (SANITIZE, start, 0, +1, |
236 | 104M | "start [%p..%p] (%lu bytes)", |
237 | 104M | this->start, this->end, |
238 | 104M | (unsigned long) (this->end - this->start)); |
239 | 104M | } |
240 | | |
241 | | void end_processing () |
242 | 104M | { |
243 | 104M | DEBUG_MSG_LEVEL (SANITIZE, this->start, 0, -1, |
244 | 104M | "end [%p..%p] %u edit requests", |
245 | 104M | this->start, this->end, this->edit_count); |
246 | | |
247 | 104M | hb_blob_destroy (this->blob); |
248 | 104M | this->blob = nullptr; |
249 | 104M | this->start = this->end = nullptr; |
250 | 104M | this->length = 0; |
251 | 104M | } |
252 | | |
253 | 0 | unsigned get_edit_count () { return edit_count; } |
254 | | |
255 | | |
256 | | bool check_ops(unsigned count) |
257 | 240 | { |
258 | | /* Avoid underflow */ |
259 | 240 | if (unlikely (this->max_ops < 0 || count >= (unsigned) this->max_ops)) |
260 | 0 | { |
261 | 0 | this->max_ops = -1; |
262 | 0 | return false; |
263 | 0 | } |
264 | 240 | this->max_ops -= (int) count; |
265 | 240 | return true; |
266 | 240 | } |
267 | | |
268 | | #ifndef HB_OPTIMIZE_SIZE |
269 | | HB_ALWAYS_INLINE |
270 | | #endif |
271 | | bool check_range (const void *base, |
272 | | unsigned int len) const |
273 | 56.0k | { |
274 | 56.0k | const char *p = (const char *) base; |
275 | 56.0k | bool ok = (uintptr_t) (p - this->start) <= this->length && |
276 | 56.0k | (unsigned int) (this->end - p) >= len && |
277 | 56.0k | ((this->max_ops -= len) > 0); |
278 | | |
279 | 56.0k | DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0, |
280 | 56.0k | "check_range [%p..%p]" |
281 | 56.0k | " (%u bytes) in [%p..%p] -> %s", |
282 | 56.0k | p, p + len, len, |
283 | 56.0k | this->start, this->end, |
284 | 56.0k | ok ? "OK" : "OUT-OF-RANGE"); |
285 | | |
286 | 56.0k | return likely (ok); |
287 | 56.0k | } |
288 | | #ifndef HB_OPTIMIZE_SIZE |
289 | | HB_ALWAYS_INLINE |
290 | | #endif |
291 | | bool check_range_fast (const void *base, |
292 | | unsigned int len) const |
293 | 0 | { |
294 | 0 | const char *p = (const char *) base; |
295 | 0 | bool ok = ((uintptr_t) (p - this->start) <= this->length && |
296 | 0 | (unsigned int) (this->end - p) >= len); |
297 | 0 |
|
298 | 0 | DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0, |
299 | 0 | "check_range_fast [%p..%p]" |
300 | 0 | " (%u bytes) in [%p..%p] -> %s", |
301 | 0 | p, p + len, len, |
302 | 0 | this->start, this->end, |
303 | 0 | ok ? "OK" : "OUT-OF-RANGE"); |
304 | 0 |
|
305 | 0 | return likely (ok); |
306 | 0 | } |
307 | | |
308 | | #ifndef HB_OPTIMIZE_SIZE |
309 | | HB_ALWAYS_INLINE |
310 | | #endif |
311 | | bool check_point (const void *base) const |
312 | 462k | { |
313 | 462k | const char *p = (const char *) base; |
314 | 462k | bool ok = (uintptr_t) (p - this->start) <= this->length; |
315 | | |
316 | 462k | DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0, |
317 | 462k | "check_point [%p]" |
318 | 462k | " in [%p..%p] -> %s", |
319 | 462k | p, |
320 | 462k | this->start, this->end, |
321 | 462k | ok ? "OK" : "OUT-OF-RANGE"); |
322 | | |
323 | 462k | return likely (ok); |
324 | 462k | } |
325 | | |
326 | | template <typename T> |
327 | | bool check_range (const T *base, |
328 | | unsigned int a, |
329 | | unsigned int b) const |
330 | 10.9k | { |
331 | 10.9k | unsigned m; |
332 | 10.9k | return !hb_unsigned_mul_overflows (a, b, &m) && |
333 | 10.9k | this->check_range (base, m); |
334 | 10.9k | } Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::VarRegionAxis>(OT::VarRegionAxis const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_range<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*, unsigned int, unsigned int) const Line | Count | Source | 330 | 270 | { | 331 | 270 | unsigned m; | 332 | 270 | return !hb_unsigned_mul_overflows (a, b, &m) && | 333 | 270 | this->check_range (base, m); | 334 | 270 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::LookupRecord>(OT::LookupRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Feature>(AAT::Feature const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_range<OT::IntType<unsigned short, 2u> >(OT::IntType<unsigned short, 2u> const*, unsigned int, unsigned int) const Line | Count | Source | 330 | 60 | { | 331 | 60 | unsigned m; | 332 | 60 | return !hb_unsigned_mul_overflows (a, b, &m) && | 333 | 60 | this->check_range (base, m); | 334 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Entry<void> >(AAT::Entry<void> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Entry<AAT::ContextualSubtable<AAT::ExtendedTypes>::EntryData> >(AAT::Entry<AAT::ContextualSubtable<AAT::ExtendedTypes>::EntryData> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Entry<AAT::LigatureEntry<true>::EntryData> >(AAT::Entry<AAT::LigatureEntry<true>::EntryData> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Entry<AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData> >(AAT::Entry<AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::UnsizedArrayOf<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, void, false> > >(OT::UnsizedArrayOf<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, void, false> > const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Entry<AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData> >(AAT::Entry<AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Entry<AAT::InsertionSubtable<AAT::ObsoleteTypes>::EntryData> >(AAT::Entry<AAT::InsertionSubtable<AAT::ObsoleteTypes>::EntryData> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Entry<AAT::Format1Entry<true>::EntryData> >(AAT::Entry<AAT::Format1Entry<true>::EntryData> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::Entry<AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader>::EntryData> >(AAT::Entry<AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader>::EntryData> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::IntType<unsigned int, 4u> >(OT::IntType<unsigned int, 4u> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::HBFixed<OT::IntType<int, 4u>, 16u> >(OT::HBFixed<OT::IntType<int, 4u>, 16u> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::TrackTableEntry>(AAT::TrackTableEntry const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::FeatureName>(AAT::FeatureName const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::SettingName>(AAT::SettingName const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::AnchorMatrix, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::AnchorMatrix, true> const*, unsigned int, unsigned int) const Line | Count | Source | 330 | 1.35k | { | 331 | 1.35k | unsigned m; | 332 | 1.35k | return !hb_unsigned_mul_overflows (a, b, &m) && | 333 | 1.35k | this->check_range (base, m); | 334 | 1.35k | } |
bool hb_sanitize_context_t::check_range<OT::Layout::GPOS_impl::PairValueRecord<OT::Layout::SmallTypes> >(OT::Layout::GPOS_impl::PairValueRecord<OT::Layout::SmallTypes> const*, unsigned int, unsigned int) const Line | Count | Source | 330 | 9.29k | { | 331 | 9.29k | unsigned m; | 332 | 9.29k | return !hb_unsigned_mul_overflows (a, b, &m) && | 333 | 9.29k | this->check_range (base, m); | 334 | 9.29k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<void>(void const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::AxisValueRecord>(OT::AxisValueRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::StatAxisRecord>(OT::StatAxisRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::ResourceRecord>(OT::ResourceRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::AxisRecord>(OT::AxisRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::InstanceRecord>(OT::InstanceRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::Index>(OT::Index const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::BaseGlyphRecord>(OT::BaseGlyphRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::LayerRecord>(OT::LayerRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::IndexSubtableRecord>(OT::IndexSubtableRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::Offset<OT::IntType<unsigned int, 4u>, true> >(OT::Offset<OT::IntType<unsigned int, 4u>, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::Offset<OT::IntType<unsigned short, 2u>, true> >(OT::Offset<OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::SBIXGlyph, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::SBIXGlyph, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::HBFixed<OT::IntType<short, 2u>, 14u> >(OT::HBFixed<OT::IntType<short, 2u>, 14u> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<unsigned char>(unsigned char const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_range<OT::NameRecord>(OT::NameRecord const*, unsigned int, unsigned int) const Line | Count | Source | 330 | 18 | { | 331 | 18 | unsigned m; | 332 | 18 | return !hb_unsigned_mul_overflows (a, b, &m) && | 333 | 18 | this->check_range (base, m); | 334 | 18 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const |
335 | | |
336 | | template <typename T> |
337 | | bool check_range (const T *base, |
338 | | unsigned int a, |
339 | | unsigned int b, |
340 | | unsigned int c) const |
341 | 0 | { |
342 | 0 | unsigned m; |
343 | 0 | return !hb_unsigned_mul_overflows (a, b, &m) && |
344 | 0 | this->check_range (base, m, c); |
345 | 0 | } Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*, unsigned int, unsigned int, unsigned int) const |
346 | | |
347 | | template <typename T> |
348 | | HB_ALWAYS_INLINE |
349 | | bool check_array_sized (const T *base, unsigned int len, unsigned len_size) const |
350 | 44.7k | { |
351 | 44.7k | if (len_size >= 4) |
352 | 120 | { |
353 | 120 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) |
354 | 0 | return false; |
355 | 120 | } |
356 | 44.6k | else |
357 | 44.6k | len = len * hb_static_size (T); |
358 | 44.7k | return this->check_range (base, len); |
359 | 44.7k | } bool hb_sanitize_context_t::check_array_sized<OT::IntType<unsigned short, 2u> >(OT::IntType<unsigned short, 2u> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 60 | { | 351 | 60 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 60 | else | 357 | 60 | len = len * hb_static_size (T); | 358 | 60 | return this->check_range (base, len); | 359 | 60 | } |
bool hb_sanitize_context_t::check_array_sized<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes> >(OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 2.91k | { | 351 | 2.91k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 2.91k | else | 357 | 2.91k | len = len * hb_static_size (T); | 358 | 2.91k | return this->check_range (base, len); | 359 | 2.91k | } |
bool hb_sanitize_context_t::check_array_sized<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 19.6k | { | 351 | 19.6k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 19.6k | else | 357 | 19.6k | len = len * hb_static_size (T); | 358 | 19.6k | return this->check_range (base, len); | 359 | 19.6k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 60 | { | 351 | 60 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 60 | else | 357 | 60 | len = len * hb_static_size (T); | 358 | 60 | return this->check_range (base, len); | 359 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<OT::Record<OT::Script> >(OT::Record<OT::Script> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 120 | { | 351 | 120 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 120 | else | 357 | 120 | len = len * hb_static_size (T); | 358 | 120 | return this->check_range (base, len); | 359 | 120 | } |
bool hb_sanitize_context_t::check_array_sized<OT::Index>(OT::Index const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 1.71k | { | 351 | 1.71k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 1.71k | else | 357 | 1.71k | len = len * hb_static_size (T); | 358 | 1.71k | return this->check_range (base, len); | 359 | 1.71k | } |
bool hb_sanitize_context_t::check_array_sized<OT::Record<OT::LangSys> >(OT::Record<OT::LangSys> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 840 | { | 351 | 840 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 840 | else | 357 | 840 | len = len * hb_static_size (T); | 358 | 840 | return this->check_range (base, len); | 359 | 840 | } |
bool hb_sanitize_context_t::check_array_sized<OT::Record<OT::Feature> >(OT::Record<OT::Feature> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 120 | { | 351 | 120 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 120 | else | 357 | 120 | len = len * hb_static_size (T); | 358 | 120 | return this->check_range (base, len); | 359 | 120 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::IntType<unsigned int, 3u> >(OT::IntType<unsigned int, 3u> const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 60 | { | 351 | 60 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 60 | else | 357 | 60 | len = len * hb_static_size (T); | 358 | 60 | return this->check_range (base, len); | 359 | 60 | } |
bool hb_sanitize_context_t::check_array_sized<OT::Offset<OT::IntType<unsigned short, 2u>, true> >(OT::Offset<OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 2.62k | { | 351 | 2.62k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 2.62k | else | 357 | 2.62k | len = len * hb_static_size (T); | 358 | 2.62k | return this->check_range (base, len); | 359 | 2.62k | } |
bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 438 | { | 351 | 438 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 438 | else | 357 | 438 | len = len * hb_static_size (T); | 358 | 438 | return this->check_range (base, len); | 359 | 438 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 240 | { | 351 | 240 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 240 | else | 357 | 240 | len = len * hb_static_size (T); | 358 | 240 | return this->check_range (base, len); | 359 | 240 | } |
bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 2.16k | { | 351 | 2.16k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 2.16k | else | 357 | 2.16k | len = len * hb_static_size (T); | 358 | 2.16k | return this->check_range (base, len); | 359 | 2.16k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<OT::LookupRecord>(OT::LookupRecord const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 2.46k | { | 351 | 2.46k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 2.46k | else | 357 | 2.46k | len = len * hb_static_size (T); | 358 | 2.46k | return this->check_range (base, len); | 359 | 2.46k | } |
bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 7.38k | { | 351 | 7.38k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 7.38k | else | 357 | 7.38k | len = len * hb_static_size (T); | 358 | 7.38k | return this->check_range (base, len); | 359 | 7.38k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::FeatureVariationRecord>(OT::FeatureVariationRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 3u>, void, true> >(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 3u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::FeatureTableSubstitutionRecord>(OT::FeatureTableSubstitutionRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<AAT::FTStringRange>(AAT::FTStringRange const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<AAT::KernPair>(AAT::KernPair const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 60 | { | 351 | 60 | if (len_size >= 4) | 352 | 60 | { | 353 | 60 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 60 | } | 356 | 0 | else | 357 | 0 | len = len * hb_static_size (T); | 358 | 60 | return this->check_range (base, len); | 359 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<AAT::Anchor>(AAT::Anchor const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::SparseVariationRegion, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::SparseVariationRegion, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::SparseVarRegionAxis>(OT::SparseVarRegionAxis const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::MultiVarData, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::MultiVarData, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<AAT::WidthDeltaPair>(AAT::WidthDeltaPair const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::Layout::GPOS_impl::EntryExitRecord>(OT::Layout::GPOS_impl::EntryExitRecord const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<OT::Layout::GPOS_impl::MarkRecord>(OT::Layout::GPOS_impl::MarkRecord const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 1.35k | { | 351 | 1.35k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 1.35k | else | 357 | 1.35k | len = len * hb_static_size (T); | 358 | 1.35k | return this->check_range (base, len); | 359 | 1.35k | } |
bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 2.19k | { | 351 | 2.19k | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 2.19k | else | 357 | 2.19k | len = len * hb_static_size (T); | 358 | 2.19k | return this->check_range (base, len); | 359 | 2.19k | } |
bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 180 | { | 351 | 180 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 180 | else | 357 | 180 | len = len * hb_static_size (T); | 358 | 180 | return this->check_range (base, len); | 359 | 180 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 60 | { | 351 | 60 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 60 | else | 357 | 60 | len = len * hb_static_size (T); | 358 | 60 | return this->check_range (base, len); | 359 | 60 | } |
bool hb_sanitize_context_t::check_array_sized<OT::TableRecord>(OT::TableRecord const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 60 | { | 351 | 60 | if (len_size >= 4) | 352 | 60 | { | 353 | 60 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 60 | } | 356 | 0 | else | 357 | 0 | len = len * hb_static_size (T); | 358 | 60 | return this->check_range (base, len); | 359 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::ResourceTypeRecord>(OT::ResourceTypeRecord const*, unsigned int, unsigned int) const bool hb_sanitize_context_t::check_array_sized<OT::EncodingRecord>(OT::EncodingRecord const*, unsigned int, unsigned int) const Line | Count | Source | 350 | 60 | { | 351 | 60 | if (len_size >= 4) | 352 | 0 | { | 353 | 0 | if (unlikely (hb_unsigned_mul_overflows (len, hb_static_size (T), &len))) | 354 | 0 | return false; | 355 | 0 | } | 356 | 60 | else | 357 | 60 | len = len * hb_static_size (T); | 358 | 60 | return this->check_range (base, len); | 359 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::CmapSubtableLongGroup>(OT::CmapSubtableLongGroup const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::VariationSelectorRecord>(OT::VariationSelectorRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::UnicodeValueRange>(OT::UnicodeValueRange const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::UVSMapping>(OT::UVSMapping const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::AxisValueMap>(OT::AxisValueMap const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::BaseGlyphPaintRecord>(OT::BaseGlyphPaintRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::NoVariable<OT::ColorStop> >(OT::NoVariable<OT::ColorStop> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::Variable<OT::ColorStop> >(OT::Variable<OT::ColorStop> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::ClipRecord>(OT::ClipRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::SVGDocumentIndexEntry>(OT::SVGDocumentIndexEntry const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::BitmapSizeTable>(OT::BitmapSizeTable const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<CFF::FDSelect3_4_Range<OT::IntType<unsigned short, 2u>, OT::IntType<unsigned char, 1u> > >(CFF::FDSelect3_4_Range<OT::IntType<unsigned short, 2u>, OT::IntType<unsigned char, 1u> > const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<CFF::Encoding1_Range>(CFF::Encoding1_Range const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<CFF::SuppEncoding>(CFF::SuppEncoding const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<CFF::FDSelect3_4_Range<OT::IntType<unsigned int, 4u>, OT::IntType<unsigned short, 2u> > >(CFF::FDSelect3_4_Range<OT::IntType<unsigned int, 4u>, OT::IntType<unsigned short, 2u> > const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::DataMap>(OT::DataMap const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::VertOriginMetric>(OT::VertOriginMetric const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::Tag>(OT::Tag const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::BaseScriptRecord>(OT::BaseScriptRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::FeatMinMaxRecord>(OT::FeatMinMaxRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::BaseLangSysRecord>(OT::BaseLangSysRecord const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::Record<OT::JstfLangSys> >(OT::Record<OT::JstfLangSys> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::Record<OT::JstfScript> >(OT::Record<OT::JstfScript> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array_sized<OT::GaspRange>(OT::GaspRange const*, unsigned int, unsigned int) const |
360 | | |
361 | | template <typename T> |
362 | | bool check_array (const T *base, unsigned int len) const |
363 | 1.63k | { |
364 | 1.63k | return this->check_range (base, len, hb_static_size (T)); |
365 | 1.63k | } Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::VarRegionAxis>(OT::VarRegionAxis const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::LookupRecord>(OT::LookupRecord const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Feature>(AAT::Feature const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::IntType<unsigned short, 2u> >(OT::IntType<unsigned short, 2u> const*, unsigned int) const bool hb_sanitize_context_t::check_array<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*, unsigned int) const Line | Count | Source | 363 | 270 | { | 364 | 270 | return this->check_range (base, len, hb_static_size (T)); | 365 | 270 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Entry<void> >(AAT::Entry<void> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::ContextualSubtable<AAT::ExtendedTypes>::EntryData> >(AAT::Entry<AAT::ContextualSubtable<AAT::ExtendedTypes>::EntryData> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::LigatureEntry<true>::EntryData> >(AAT::Entry<AAT::LigatureEntry<true>::EntryData> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData> >(AAT::Entry<AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::UnsizedArrayOf<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, void, false> > >(OT::UnsizedArrayOf<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, void, false> > const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData> >(AAT::Entry<AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::InsertionSubtable<AAT::ObsoleteTypes>::EntryData> >(AAT::Entry<AAT::InsertionSubtable<AAT::ObsoleteTypes>::EntryData> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::Format1Entry<true>::EntryData> >(AAT::Entry<AAT::Format1Entry<true>::EntryData> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader>::EntryData> >(AAT::Entry<AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader>::EntryData> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::IntType<unsigned int, 4u> >(OT::IntType<unsigned int, 4u> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::HBFixed<OT::IntType<int, 4u>, 16u> >(OT::HBFixed<OT::IntType<int, 4u>, 16u> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::TrackTableEntry>(AAT::TrackTableEntry const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::FeatureName>(AAT::FeatureName const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::SettingName>(AAT::SettingName const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int) const bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::AnchorMatrix, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::AnchorMatrix, true> const*, unsigned int) const Line | Count | Source | 363 | 1.35k | { | 364 | 1.35k | return this->check_range (base, len, hb_static_size (T)); | 365 | 1.35k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::AxisValueRecord>(OT::AxisValueRecord const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::StatAxisRecord>(OT::StatAxisRecord const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::ResourceRecord>(OT::ResourceRecord const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::AxisRecord>(OT::AxisRecord const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::Index>(OT::Index const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::BaseGlyphRecord>(OT::BaseGlyphRecord const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::LayerRecord>(OT::LayerRecord const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::IndexSubtableRecord>(OT::IndexSubtableRecord const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::Offset<OT::IntType<unsigned int, 4u>, true> >(OT::Offset<OT::IntType<unsigned int, 4u>, true> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::Offset<OT::IntType<unsigned short, 2u>, true> >(OT::Offset<OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::SBIXGlyph, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::SBIXGlyph, OT::IntType<unsigned int, 4u>, void, true> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::HBFixed<OT::IntType<short, 2u>, 14u> >(OT::HBFixed<OT::IntType<short, 2u>, 14u> const*, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<unsigned char>(unsigned char const*, unsigned int) const bool hb_sanitize_context_t::check_array<OT::NameRecord>(OT::NameRecord const*, unsigned int) const Line | Count | Source | 363 | 18 | { | 364 | 18 | return this->check_range (base, len, hb_static_size (T)); | 365 | 18 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int) const |
366 | | |
367 | | template <typename T> |
368 | | bool check_array (const T *base, |
369 | | unsigned int a, |
370 | | unsigned int b) const |
371 | 0 | { |
372 | 0 | return this->check_range (base, hb_static_size (T), a, b); |
373 | 0 | } Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int, unsigned int) const Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*, unsigned int, unsigned int) const |
374 | | |
375 | | bool check_start_recursion (int max_depth) |
376 | 0 | { |
377 | 0 | if (unlikely (recursion_depth >= max_depth)) return false; |
378 | 0 | return ++recursion_depth; |
379 | 0 | } |
380 | | |
381 | | bool end_recursion (bool result) |
382 | 0 | { |
383 | 0 | recursion_depth--; |
384 | 0 | return result; |
385 | 0 | } |
386 | | |
387 | | template <typename Type> |
388 | | #ifndef HB_OPTIMIZE_SIZE |
389 | | HB_ALWAYS_INLINE |
390 | | #endif |
391 | | bool check_struct (const Type *obj) const |
392 | 462k | { |
393 | 462k | if (sizeof (uintptr_t) == sizeof (uint32_t)) |
394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); |
395 | 462k | else |
396 | 462k | return likely (this->check_point ((const char *) obj + obj->min_size)); |
397 | 462k | } bool hb_sanitize_context_t::check_struct<OT::FixedVersion<OT::IntType<unsigned short, 2u> > >(OT::FixedVersion<OT::IntType<unsigned short, 2u> > const*) const Line | Count | Source | 392 | 240 | { | 393 | 240 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 240 | else | 396 | 240 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 240 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
bool hb_sanitize_context_t::check_struct<OT::IntType<unsigned short, 2u> >(OT::IntType<unsigned short, 2u> const*) const Line | Count | Source | 392 | 172k | { | 393 | 172k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 172k | else | 396 | 172k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 172k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ClassDefFormat1_3<OT::Layout::SmallTypes> >(OT::ClassDefFormat1_3<OT::Layout::SmallTypes> const*) const bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AttachList, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::AttachList, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 11.2k | { | 393 | 11.2k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 11.2k | else | 396 | 11.2k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 11.2k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, void, true> const*) const bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CaretValueFormat1>(OT::CaretValueFormat1 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CaretValueFormat2>(OT::CaretValueFormat2 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CaretValueFormat3>(OT::CaretValueFormat3 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::HintingDevice>(OT::HintingDevice const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VariationDevice>(OT::VariationDevice const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ItemVariationStore, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::ItemVariationStore, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ItemVariationStore>(OT::ItemVariationStore const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::VarRegionList, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::VarRegionList, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VarRegionList>(OT::VarRegionList const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VarData>(OT::VarData const*) const bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
bool hb_sanitize_context_t::check_struct<OT::Record<OT::Script> >(OT::Record<OT::Script> const*) const Line | Count | Source | 392 | 840 | { | 393 | 840 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 840 | else | 396 | 840 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 840 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Script, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Script, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 840 | { | 393 | 840 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 840 | else | 396 | 840 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 840 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LangSys, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::LangSys, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 1.03k | { | 393 | 1.03k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 1.03k | else | 396 | 1.03k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 1.03k | } |
bool hb_sanitize_context_t::check_struct<OT::LangSys>(OT::LangSys const*) const Line | Count | Source | 392 | 1.03k | { | 393 | 1.03k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 1.03k | else | 396 | 1.03k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 1.03k | } |
bool hb_sanitize_context_t::check_struct<OT::Record<OT::LangSys> >(OT::Record<OT::LangSys> const*) const Line | Count | Source | 392 | 192 | { | 393 | 192 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 192 | else | 396 | 192 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 192 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
bool hb_sanitize_context_t::check_struct<OT::Record<OT::Feature> >(OT::Record<OT::Feature> const*) const Line | Count | Source | 392 | 678 | { | 393 | 678 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 678 | else | 396 | 678 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 678 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Feature, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Feature, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 678 | { | 393 | 678 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 678 | else | 396 | 678 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 678 | } |
bool hb_sanitize_context_t::check_struct<OT::Feature>(OT::Feature const*) const Line | Count | Source | 392 | 678 | { | 393 | 678 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 678 | else | 396 | 678 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 678 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::FeatureParamsSize>(OT::FeatureParamsSize const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::FeatureParamsStylisticSet>(OT::FeatureParamsStylisticSet const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::FeatureParamsCharacterVariants>(OT::FeatureParamsCharacterVariants const*) const bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 438 | { | 393 | 438 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 438 | else | 396 | 438 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 438 | } |
bool hb_sanitize_context_t::check_struct<OT::Lookup>(OT::Lookup const*) const Line | Count | Source | 392 | 2.62k | { | 393 | 2.62k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 2.62k | else | 396 | 2.62k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 2.62k | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 438 | { | 393 | 438 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 438 | else | 396 | 438 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 438 | } |
bool hb_sanitize_context_t::check_struct<OT::Layout::GSUB_impl::SingleSubstFormat1_3<OT::Layout::SmallTypes> >(OT::Layout::GSUB_impl::SingleSubstFormat1_3<OT::Layout::SmallTypes> const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 2.16k | { | 393 | 2.16k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 2.16k | else | 396 | 2.16k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 2.16k | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 11.0k | { | 393 | 11.0k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 11.0k | else | 396 | 11.0k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 11.0k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Rule<OT::Layout::SmallTypes> >(OT::Rule<OT::Layout::SmallTypes> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ContextFormat3>(OT::ContextFormat3 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst> >(OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::FeatureVariations, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::FeatureVariations, OT::IntType<unsigned int, 4u>, void, true> const*) const bool hb_sanitize_context_t::check_struct<OT::IntType<unsigned int, 4u> >(OT::IntType<unsigned int, 4u> const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ConditionSet, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::ConditionSet, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ConditionAxisRange>(OT::ConditionAxisRange const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ConditionValue>(OT::ConditionValue const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 3u>, void, true> >(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 3u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::FeatureTableSubstitution, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::FeatureTableSubstitution, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::FeatureTableSubstitutionRecord>(OT::FeatureTableSubstitutionRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Feature, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::Feature, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ExtendedTypes, void> >(AAT::StateTable<AAT::ExtendedTypes, void> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VarSizedBinSearchHeader>(OT::VarSizedBinSearchHeader const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::IntType<unsigned short, 2u> > >(AAT::LookupSegmentArray<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::IntType<unsigned short, 2u> > >(AAT::LookupFormat8<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat10<OT::IntType<unsigned short, 2u> > >(AAT::LookupFormat10<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ExtendedTypes, AAT::ContextualSubtable<AAT::ExtendedTypes>::EntryData> >(AAT::StateTable<AAT::ExtendedTypes, AAT::ContextualSubtable<AAT::ExtendedTypes>::EntryData> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false>, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false>, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::HBGlyphID16> >(AAT::LookupSegmentArray<OT::HBGlyphID16> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::HBGlyphID16> >(AAT::LookupFormat8<OT::HBGlyphID16> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat10<OT::HBGlyphID16> >(AAT::LookupFormat10<OT::HBGlyphID16> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LigatureSubtable<AAT::ExtendedTypes> >(AAT::LigatureSubtable<AAT::ExtendedTypes> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ExtendedTypes, AAT::LigatureEntry<true>::EntryData> >(AAT::StateTable<AAT::ExtendedTypes, AAT::LigatureEntry<true>::EntryData> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::InsertionSubtable<AAT::ExtendedTypes> >(AAT::InsertionSubtable<AAT::ExtendedTypes> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ExtendedTypes, AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData> >(AAT::StateTable<AAT::ExtendedTypes, AAT::InsertionSubtable<AAT::ExtendedTypes>::EntryData> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::ltag>(AAT::ltag const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::FTStringRange>(AAT::FTStringRange const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ObsoleteTypes, void> >(AAT::StateTable<AAT::ObsoleteTypes, void> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::ClassTable<OT::IntType<unsigned char, 1u> > >(AAT::ClassTable<OT::IntType<unsigned char, 1u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ObsoleteTypes, AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData> >(AAT::StateTable<AAT::ObsoleteTypes, AAT::ContextualSubtable<AAT::ObsoleteTypes>::EntryData> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false>, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false>, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LigatureSubtable<AAT::ObsoleteTypes> >(AAT::LigatureSubtable<AAT::ObsoleteTypes> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::InsertionSubtable<AAT::ObsoleteTypes> >(AAT::InsertionSubtable<AAT::ObsoleteTypes> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ObsoleteTypes, AAT::InsertionSubtable<AAT::ObsoleteTypes>::EntryData> >(AAT::StateTable<AAT::ObsoleteTypes, AAT::InsertionSubtable<AAT::ObsoleteTypes>::EntryData> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableHeader>(AAT::KerxSubTableHeader const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BinSearchHeader<OT::IntType<unsigned int, 4u> > >(OT::BinSearchHeader<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat1<AAT::KerxSubTableHeader> >(AAT::KerxSubTableFormat1<AAT::KerxSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ExtendedTypes, AAT::Format1Entry<true>::EntryData> >(AAT::StateTable<AAT::ExtendedTypes, AAT::Format1Entry<true>::EntryData> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat2<AAT::KerxSubTableHeader> >(AAT::KerxSubTableFormat2<AAT::KerxSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader> >(AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ExtendedTypes, AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader>::EntryData> >(AAT::StateTable<AAT::ExtendedTypes, AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader>::EntryData> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat6<AAT::KerxSubTableHeader> >(AAT::KerxSubTableFormat6<AAT::KerxSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::IntType<unsigned int, 4u> > >(AAT::LookupSegmentArray<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::IntType<unsigned int, 4u> > >(AAT::LookupFormat8<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat10<OT::IntType<unsigned int, 4u> > >(AAT::LookupFormat10<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::ankr>(AAT::ankr const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentSingle<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> > >(AAT::LookupSegmentSingle<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> > >(AAT::LookupSegmentArray<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSingle<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> > >(AAT::LookupSingle<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> > >(AAT::LookupFormat8<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::IntType<int, 4u> >(OT::IntType<int, 4u> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::trak>(AAT::trak const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::TrackData, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<AAT::TrackData, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::TrackData>(AAT::TrackData const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<int, 4u>, 16u> >, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<int, 4u>, 16u> >, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::TrackTableEntry>(AAT::TrackTableEntry const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::feat>(AAT::feat const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::FeatureName>(AAT::FeatureName const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::LONGDATETIME>(OT::LONGDATETIME const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes> >(OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::IntType<unsigned int, 3u> >(OT::IntType<unsigned int, 3u> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VarRegionAxis>(OT::VarRegionAxis const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::SparseVarRegionAxis>(OT::SparseVarRegionAxis const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::SparseVariationRegion, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::SparseVariationRegion, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CFFIndex<OT::IntType<unsigned int, 4u> > >(OT::CFFIndex<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::MultiItemVariationStore>(OT::MultiItemVariationStore const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::SparseVarRegionList, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::SparseVarRegionList, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MultiVarData, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::MultiVarData, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::DeltaSetIndexMapFormat01<OT::IntType<unsigned short, 2u> > >(OT::DeltaSetIndexMapFormat01<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::DeltaSetIndexMapFormat01<OT::IntType<unsigned int, 4u> > >(OT::DeltaSetIndexMapFormat01<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::Entry<void> >(AAT::Entry<void> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::Anchor>(AAT::Anchor const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::BaselineTableFormat0Part>(AAT::BaselineTableFormat0Part const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::BaselineTableFormat1Part>(AAT::BaselineTableFormat1Part const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentSingle<OT::IntType<unsigned short, 2u> > >(AAT::LookupSegmentSingle<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSingle<OT::IntType<unsigned short, 2u> > >(AAT::LookupSingle<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::BaselineTableFormat2Part>(AAT::BaselineTableFormat2Part const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::BaselineTableFormat3Part>(AAT::BaselineTableFormat3Part const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::bsln>(AAT::bsln const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::SettingName>(AAT::SettingName const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::Feature>(AAT::Feature const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentSingle<OT::HBGlyphID16> >(AAT::LookupSegmentSingle<OT::HBGlyphID16> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSingle<OT::HBGlyphID16> >(AAT::LookupSingle<OT::HBGlyphID16> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::ActionSubrecordHeader>(AAT::ActionSubrecordHeader const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::DecompositionAction>(AAT::DecompositionAction const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::UnconditionalAddGlyphAction>(AAT::UnconditionalAddGlyphAction const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::ConditionalAddGlyphAction>(AAT::ConditionalAddGlyphAction const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::DuctileGlyphAction>(AAT::DuctileGlyphAction const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::RepeatedAddGlyphAction>(AAT::RepeatedAddGlyphAction const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::ActionSubrecord>(AAT::ActionSubrecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::PostcompensationActionChain>(AAT::PostcompensationActionChain const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::WidthDeltaPair>(AAT::WidthDeltaPair const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::JustificationCategory>(AAT::JustificationCategory const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::JustificationHeader>(AAT::JustificationHeader const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::JustificationCategory, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<AAT::JustificationCategory, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::PostcompensationActionChain, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<AAT::PostcompensationActionChain, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentSingle<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> > >(AAT::LookupSegmentSingle<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> > >(AAT::LookupSegmentArray<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSingle<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> > >(AAT::LookupSingle<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> > >(AAT::LookupFormat8<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::just>(AAT::just const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::JustificationHeader, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<AAT::JustificationHeader, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::LookupRecord>(OT::LookupRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::ValueBase, true> >(OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::ValueBase, true> const*) const bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::SinglePosFormat1>(OT::Layout::GPOS_impl::SinglePosFormat1 const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::SinglePosFormat2>(OT::Layout::GPOS_impl::SinglePosFormat2 const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::AnchorFormat1>(OT::Layout::GPOS_impl::AnchorFormat1 const*) const Line | Count | Source | 392 | 100k | { | 393 | 100k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 100k | else | 396 | 100k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 100k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::AnchorFormat2>(OT::Layout::GPOS_impl::AnchorFormat2 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::AnchorFormat3>(OT::Layout::GPOS_impl::AnchorFormat3 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::CursivePosFormat1, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::CursivePosFormat1, true> const*) const bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::AnchorMatrix>(OT::Layout::GPOS_impl::AnchorMatrix const*) const Line | Count | Source | 392 | 1.35k | { | 393 | 1.35k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 1.35k | else | 396 | 1.35k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 1.35k | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::AnchorMatrix, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::AnchorMatrix, true> const*) const Line | Count | Source | 392 | 79.4k | { | 393 | 79.4k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 79.4k | else | 396 | 79.4k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 79.4k | } |
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::MarkRecord>(OT::Layout::GPOS_impl::MarkRecord const*) const Line | Count | Source | 392 | 21.2k | { | 393 | 21.2k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 21.2k | else | 396 | 21.2k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 21.2k | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 21.2k | { | 393 | 21.2k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 21.2k | else | 396 | 21.2k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 21.2k | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 4.11k | { | 393 | 4.11k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 4.11k | else | 396 | 4.11k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 4.11k | } |
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::SmallTypes> >(OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::SmallTypes> const*) const Line | Count | Source | 392 | 180 | { | 393 | 180 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 180 | else | 396 | 180 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 180 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 9.29k | { | 393 | 9.29k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 9.29k | else | 396 | 9.29k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 9.29k | } |
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes> >(OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes> const*) const Line | Count | Source | 392 | 9.29k | { | 393 | 9.29k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 9.29k | else | 396 | 9.29k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 9.29k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::SmallTypes> >(OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::SmallTypes> const*) const bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes> >(OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::SmallTypes> const*) const Line | Count | Source | 392 | 1.23k | { | 393 | 1.23k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 1.23k | else | 396 | 1.23k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 1.23k | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 1.35k | { | 393 | 1.35k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 1.35k | else | 396 | 1.35k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 1.35k | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 1.35k | { | 393 | 1.35k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 1.35k | else | 396 | 1.35k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 1.35k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::SmallTypes> >(OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::SmallTypes> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned short, 2u>, void, true> const*) const bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::SmallTypes> >(OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::SmallTypes> const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ExtensionFormat1<OT::Layout::GPOS_impl::ExtensionPos> >(OT::ExtensionFormat1<OT::Layout::GPOS_impl::ExtensionPos> const*) const bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, void, true> const*) const Line | Count | Source | 392 | 2.19k | { | 393 | 2.19k | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 2.19k | else | 396 | 2.19k | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 2.19k | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KernPair>(AAT::KernPair const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentSingle<OT::IntType<unsigned int, 4u> > >(AAT::LookupSegmentSingle<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSingle<OT::IntType<unsigned int, 4u> > >(AAT::LookupSingle<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::StatAxisRecord>(OT::StatAxisRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::AxisValueFormat1>(OT::AxisValueFormat1 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::AxisValueFormat2>(OT::AxisValueFormat2 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::AxisValueFormat3>(OT::AxisValueFormat3 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::AxisValueRecord>(OT::AxisValueRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::AxisValueFormat4>(OT::AxisValueFormat4 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::AxisValue>(OT::AxisValue const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::STAT>(OT::STAT const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::StatAxisRecord>, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::StatAxisRecord>, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AxisValueOffsetArray, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<OT::AxisValueOffsetArray, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, void, true> const*) const bool hb_sanitize_context_t::check_struct<OT::OpenTypeOffsetTable>(OT::OpenTypeOffsetTable const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::BinSearchHeader<OT::IntType<unsigned short, 2u> > >(OT::BinSearchHeader<OT::IntType<unsigned short, 2u> > const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ResourceForkHeader>(OT::ResourceForkHeader const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ResourceMap, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<OT::ResourceMap, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ResourceMap>(OT::ResourceMap const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ArrayOfM1<OT::ResourceTypeRecord, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::ArrayOfM1<OT::ResourceTypeRecord, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ResourceTypeRecord>(OT::ResourceTypeRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::ResourceRecord>, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::ResourceRecord>, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ResourceRecord>(OT::ResourceRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ArrayOf<OT::IntType<unsigned char, 1u>, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 3u>, void, false> >(OT::OffsetTo<OT::ArrayOf<OT::IntType<unsigned char, 1u>, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 3u>, void, false> const*) const bool hb_sanitize_context_t::check_struct<OT::cmap>(OT::cmap const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::EncodingRecord>(OT::EncodingRecord const*) const Line | Count | Source | 392 | 180 | { | 393 | 180 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 180 | else | 396 | 180 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 180 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::CmapSubtable, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::CmapSubtable, OT::IntType<unsigned int, 4u>, void, true> const*) const Line | Count | Source | 392 | 180 | { | 393 | 180 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 180 | else | 396 | 180 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 180 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CmapSubtableFormat0>(OT::CmapSubtableFormat0 const*) const bool hb_sanitize_context_t::check_struct<OT::CmapSubtableFormat4>(OT::CmapSubtableFormat4 const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
bool hb_sanitize_context_t::check_struct<OT::CmapSubtableTrimmed<OT::IntType<unsigned short, 2u> > >(OT::CmapSubtableTrimmed<OT::IntType<unsigned short, 2u> > const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CmapSubtableTrimmed<OT::IntType<unsigned int, 4u> > >(OT::CmapSubtableTrimmed<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat12> >(OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat12> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat13> >(OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat13> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CmapSubtableFormat14>(OT::CmapSubtableFormat14 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VariationSelectorRecord>(OT::VariationSelectorRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::DefaultUVS, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::DefaultUVS, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::NonDefaultUVS, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::NonDefaultUVS, OT::IntType<unsigned int, 4u>, void, true> const*) const bool hb_sanitize_context_t::check_struct<OT::OS2>(OT::OS2 const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::OS2V1Tail>(OT::OS2V1Tail const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::OS2V2Tail>(OT::OS2V2Tail const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OS2V5Tail>(OT::OS2V5Tail const*) const bool hb_sanitize_context_t::check_struct<OT::head>(OT::head const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::TableRecord>(OT::TableRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VariationValueRecord>(OT::VariationValueRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::MVAR>(OT::MVAR const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ItemVariationStore, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::ItemVariationStore, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CmapSubtableLongGroup>(OT::CmapSubtableLongGroup const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::UnicodeValueRange>(OT::UnicodeValueRange const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::UVSMapping>(OT::UVSMapping const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::fvar>(OT::fvar const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::avar>(OT::avar const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::DeltaSetIndexMap, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::DeltaSetIndexMap, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::AxisValueMap>(OT::AxisValueMap const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::InstanceRecord>(OT::InstanceRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::AxisRecord>(OT::AxisRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CPAL>(OT::CPAL const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CPALV1Tail>(OT::CPALV1Tail const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::COLR>(OT::COLR const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseGlyphList, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::BaseGlyphList, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseGlyphPaintRecord>(OT::BaseGlyphPaintRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintColrLayers>(OT::PaintColrLayers const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintSolid> >(OT::NoVariable<OT::PaintSolid> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintSolid>(OT::PaintSolid const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintSolid> >(OT::Variable<OT::PaintSolid> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintLinearGradient<OT::NoVariable> > >(OT::NoVariable<OT::PaintLinearGradient<OT::NoVariable> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintLinearGradient<OT::NoVariable> >(OT::PaintLinearGradient<OT::NoVariable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ColorLine<OT::NoVariable>, OT::IntType<unsigned int, 3u>, void, true> >(OT::OffsetTo<OT::ColorLine<OT::NoVariable>, OT::IntType<unsigned int, 3u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ColorLine<OT::NoVariable> >(OT::ColorLine<OT::NoVariable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintLinearGradient<OT::Variable> > >(OT::Variable<OT::PaintLinearGradient<OT::Variable> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintLinearGradient<OT::Variable> >(OT::PaintLinearGradient<OT::Variable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ColorLine<OT::Variable>, OT::IntType<unsigned int, 3u>, void, true> >(OT::OffsetTo<OT::ColorLine<OT::Variable>, OT::IntType<unsigned int, 3u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ColorLine<OT::Variable> >(OT::ColorLine<OT::Variable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintRadialGradient<OT::NoVariable> > >(OT::NoVariable<OT::PaintRadialGradient<OT::NoVariable> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintRadialGradient<OT::NoVariable> >(OT::PaintRadialGradient<OT::NoVariable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintRadialGradient<OT::Variable> > >(OT::Variable<OT::PaintRadialGradient<OT::Variable> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintRadialGradient<OT::Variable> >(OT::PaintRadialGradient<OT::Variable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintSweepGradient<OT::NoVariable> > >(OT::NoVariable<OT::PaintSweepGradient<OT::NoVariable> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintSweepGradient<OT::NoVariable> >(OT::PaintSweepGradient<OT::NoVariable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintSweepGradient<OT::Variable> > >(OT::Variable<OT::PaintSweepGradient<OT::Variable> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintSweepGradient<OT::Variable> >(OT::PaintSweepGradient<OT::Variable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintGlyph>(OT::PaintGlyph const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 3u>, void, true> >(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 3u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintColrGlyph>(OT::PaintColrGlyph const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintTransform<OT::NoVariable> >(OT::PaintTransform<OT::NoVariable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::NoVariable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, void, true> >(OT::OffsetTo<OT::NoVariable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::Affine2x3> >(OT::NoVariable<OT::Affine2x3> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Affine2x3>(OT::Affine2x3 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintTransform<OT::Variable> >(OT::PaintTransform<OT::Variable> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Variable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, void, true> >(OT::OffsetTo<OT::Variable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::Affine2x3> >(OT::Variable<OT::Affine2x3> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintTranslate> >(OT::NoVariable<OT::PaintTranslate> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintTranslate>(OT::PaintTranslate const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintTranslate> >(OT::Variable<OT::PaintTranslate> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintScale> >(OT::NoVariable<OT::PaintScale> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintScale>(OT::PaintScale const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintScale> >(OT::Variable<OT::PaintScale> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintScaleAroundCenter> >(OT::NoVariable<OT::PaintScaleAroundCenter> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintScaleAroundCenter>(OT::PaintScaleAroundCenter const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintScaleAroundCenter> >(OT::Variable<OT::PaintScaleAroundCenter> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintScaleUniform> >(OT::NoVariable<OT::PaintScaleUniform> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintScaleUniform>(OT::PaintScaleUniform const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintScaleUniform> >(OT::Variable<OT::PaintScaleUniform> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintScaleUniformAroundCenter> >(OT::NoVariable<OT::PaintScaleUniformAroundCenter> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintScaleUniformAroundCenter>(OT::PaintScaleUniformAroundCenter const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintScaleUniformAroundCenter> >(OT::Variable<OT::PaintScaleUniformAroundCenter> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintRotate> >(OT::NoVariable<OT::PaintRotate> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintRotate>(OT::PaintRotate const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintRotate> >(OT::Variable<OT::PaintRotate> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintRotateAroundCenter> >(OT::NoVariable<OT::PaintRotateAroundCenter> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintRotateAroundCenter>(OT::PaintRotateAroundCenter const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintRotateAroundCenter> >(OT::Variable<OT::PaintRotateAroundCenter> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintSkew> >(OT::NoVariable<OT::PaintSkew> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintSkew>(OT::PaintSkew const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintSkew> >(OT::Variable<OT::PaintSkew> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintSkewAroundCenter> >(OT::NoVariable<OT::PaintSkewAroundCenter> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintSkewAroundCenter>(OT::PaintSkewAroundCenter const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintSkewAroundCenter> >(OT::Variable<OT::PaintSkewAroundCenter> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::PaintComposite>(OT::PaintComposite const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LayerList, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::LayerList, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ClipList, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::ClipList, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ClipList>(OT::ClipList const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ClipRecord>(OT::ClipRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ClipBox, OT::IntType<unsigned int, 3u>, void, true> >(OT::OffsetTo<OT::ClipBox, OT::IntType<unsigned int, 3u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ClipBoxFormat1>(OT::ClipBoxFormat1 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::ClipBoxFormat1> >(OT::Variable<OT::ClipBoxFormat1> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::SVG>(OT::SVG const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CBLC>(OT::CBLC const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BitmapSizeTable>(OT::BitmapSizeTable const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::IndexSubtableArray, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<OT::IndexSubtableArray, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::IndexSubtableRecord>(OT::IndexSubtableRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::IndexSubtable, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::IndexSubtable, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::IndexSubtableHeader>(OT::IndexSubtableHeader const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::IndexSubtableFormat1Or3<OT::IntType<unsigned int, 4u> > >(OT::IndexSubtableFormat1Or3<OT::IntType<unsigned int, 4u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::IndexSubtableFormat1Or3<OT::IntType<unsigned short, 2u> > >(OT::IndexSubtableFormat1Or3<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::SBitLineMetrics>(OT::SBitLineMetrics const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CBDT>(OT::CBDT const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::sbix>(OT::sbix const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, void, true> >(OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::SBIXStrike>(OT::SBIXStrike const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::SmallGlyphMetrics>(OT::SmallGlyphMetrics const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::LayerRecord>(OT::LayerRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseGlyphRecord>(OT::BaseGlyphRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ColorStop>(OT::ColorStop const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::ColorStop> >(OT::NoVariable<OT::ColorStop> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::ColorStop> >(OT::Variable<OT::ColorStop> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::SVGDocumentIndexEntry>(OT::SVGDocumentIndexEntry const*) const bool hb_sanitize_context_t::check_struct<OT::maxpV1Tail>(OT::maxpV1Tail const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::maxp>(OT::maxp const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
bool hb_sanitize_context_t::check_struct<OT::_hea<OT::hhea> >(OT::_hea<OT::hhea> const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::_hea<OT::vhea> >(OT::_hea<OT::vhea> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::gvar_GVAR<OT::IntType<unsigned short, 2u>, 1735811442u> >(OT::gvar_GVAR<OT::IntType<unsigned short, 2u>, 1735811442u> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short, 2u>, 14u> >, OT::IntType<unsigned int, 4u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short, 2u>, 14u> >, OT::IntType<unsigned int, 4u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::gvar_GVAR<OT::IntType<unsigned int, 3u>, 1196835154u> >(OT::gvar_GVAR<OT::IntType<unsigned int, 3u>, 1196835154u> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::FDSelect0>(CFF::FDSelect0 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::FDSelect>(CFF::FDSelect const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::FDSelect3_4<OT::IntType<unsigned short, 2u>, OT::IntType<unsigned char, 1u> > >(CFF::FDSelect3_4<OT::IntType<unsigned short, 2u>, OT::IntType<unsigned char, 1u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::FDSelect3_4_Range<OT::IntType<unsigned short, 2u>, OT::IntType<unsigned char, 1u> > >(CFF::FDSelect3_4_Range<OT::IntType<unsigned short, 2u>, OT::IntType<unsigned char, 1u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::Encoding1_Range>(CFF::Encoding1_Range const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::SuppEncoding>(CFF::SuppEncoding const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::Encoding>(CFF::Encoding const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::Charset>(CFF::Charset const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::Charset_Range<OT::IntType<unsigned char, 1u> > >(CFF::Charset_Range<OT::IntType<unsigned char, 1u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::Charset_Range<OT::IntType<unsigned short, 2u> > >(CFF::Charset_Range<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::cff1>(OT::cff1 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::CFFIndex<OT::IntType<unsigned short, 2u> > >(OT::CFFIndex<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::CFF2FDSelect>(CFF::CFF2FDSelect const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::FDSelect3_4<OT::IntType<unsigned int, 4u>, OT::IntType<unsigned short, 2u> > >(CFF::FDSelect3_4<OT::IntType<unsigned int, 4u>, OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::FDSelect3_4_Range<OT::IntType<unsigned int, 4u>, OT::IntType<unsigned short, 2u> > >(CFF::FDSelect3_4_Range<OT::IntType<unsigned int, 4u>, OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<CFF::CFF2ItemVariationStore>(CFF::CFF2ItemVariationStore const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::cff2>(OT::cff2 const*) const bool hb_sanitize_context_t::check_struct<OT::KernOTSubTableHeader>(OT::KernOTSubTableHeader const*) const Line | Count | Source | 392 | 120 | { | 393 | 120 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 120 | else | 396 | 120 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 120 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::KernAATSubTableHeader>(OT::KernAATSubTableHeader const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat1<OT::KernOTSubTableHeader> >(AAT::KerxSubTableFormat1<OT::KernOTSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat2<OT::KernOTSubTableHeader> >(AAT::KerxSubTableFormat2<OT::KernOTSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::ClassTable<OT::IntType<unsigned short, 2u> > >(AAT::ClassTable<OT::IntType<unsigned short, 2u> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::KernSubTableFormat3<OT::KernOTSubTableHeader> >(OT::KernSubTableFormat3<OT::KernOTSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat1<OT::KernAATSubTableHeader> >(AAT::KerxSubTableFormat1<OT::KernAATSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat2<OT::KernAATSubTableHeader> >(AAT::KerxSubTableFormat2<OT::KernAATSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::KernSubTableFormat3<OT::KernAATSubTableHeader> >(OT::KernSubTableFormat3<OT::KernAATSubTableHeader> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::DataMap>(OT::DataMap const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::meta>(OT::meta const*) const bool hb_sanitize_context_t::check_struct<OT::NameRecord>(OT::NameRecord const*) const Line | Count | Source | 392 | 270 | { | 393 | 270 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 270 | else | 396 | 270 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 270 | } |
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Line | Count | Source | 392 | 270 | { | 393 | 270 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 270 | else | 396 | 270 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 270 | } |
bool hb_sanitize_context_t::check_struct<OT::name>(OT::name const*) const Line | Count | Source | 392 | 9 | { | 393 | 9 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 9 | else | 396 | 9 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 9 | } |
bool hb_sanitize_context_t::check_struct<OT::post>(OT::post const*) const Line | Count | Source | 392 | 60 | { | 393 | 60 | if (sizeof (uintptr_t) == sizeof (uint32_t)) | 394 | 0 | return likely (this->check_range_fast (obj, obj->min_size)); | 395 | 60 | else | 396 | 60 | return likely (this->check_point ((const char *) obj + obj->min_size)); | 397 | 60 | } |
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VORG>(OT::VORG const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VertOriginMetric>(OT::VertOriginMetric const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BASE>(OT::BASE const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Axis, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::Axis, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Axis>(OT::Axis const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::SortedArrayOf<OT::Tag, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::SortedArrayOf<OT::Tag, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseScriptList, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::BaseScriptList, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseScriptList>(OT::BaseScriptList const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseScriptRecord>(OT::BaseScriptRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseScript, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::BaseScript, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseScript>(OT::BaseScript const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseValues, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::BaseValues, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseValues>(OT::BaseValues const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseCoordFormat1>(OT::BaseCoordFormat1 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseCoordFormat2>(OT::BaseCoordFormat2 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseCoordFormat3>(OT::BaseCoordFormat3 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MinMax, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::MinMax, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::MinMax>(OT::MinMax const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::FeatMinMaxRecord>(OT::FeatMinMaxRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseLangSysRecord>(OT::BaseLangSysRecord const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::JstfPriority>(OT::JstfPriority const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::IndexArray, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::IndexArray, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::SortedArrayOf<OT::HBGlyphID16, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::SortedArrayOf<OT::HBGlyphID16, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::JstfLangSys, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::JstfLangSys, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Record<OT::JstfLangSys> >(OT::Record<OT::JstfLangSys> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Record<OT::JstfScript> >(OT::Record<OT::JstfScript> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::JstfScript, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<OT::JstfScript, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::OpticalBounds>(AAT::OpticalBounds const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::opbdFormat0>(AAT::opbdFormat0 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> >(OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentSingle<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> > >(AAT::LookupSegmentSingle<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> > >(AAT::LookupSegmentArray<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> >, OT::IntType<unsigned short, 2u>, void, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> >, OT::IntType<unsigned short, 2u>, void, false> const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSingle<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> > >(AAT::LookupSingle<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> > >(AAT::LookupFormat8<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> > const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::opbdFormat1>(AAT::opbdFormat1 const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::opbd>(AAT::opbd const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::GaspRange>(OT::GaspRange const*) const Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::gasp>(OT::gasp const*) const |
398 | | |
399 | | bool may_edit (const void *base, unsigned int len) |
400 | 0 | { |
401 | 0 | if (this->edit_count >= HB_SANITIZE_MAX_EDITS) |
402 | 0 | return false; |
403 | | |
404 | 0 | const char *p = (const char *) base; |
405 | 0 | this->edit_count++; |
406 | |
|
407 | 0 | DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0, |
408 | 0 | "may_edit(%u) [%p..%p] (%u bytes) in [%p..%p] -> %s", |
409 | 0 | this->edit_count, |
410 | 0 | p, p + len, len, |
411 | 0 | this->start, this->end, |
412 | 0 | this->writable ? "GRANTED" : "DENIED"); |
413 | |
|
414 | 0 | return this->writable; |
415 | 0 | } |
416 | | |
417 | | template <typename Type, typename ValueType> |
418 | | bool try_set (const Type *obj, const ValueType &v) |
419 | 0 | { |
420 | 0 | if (this->may_edit (obj, hb_static_size (Type))) |
421 | 0 | { |
422 | 0 | * const_cast<Type *> (obj) = v; |
423 | 0 | return true; |
424 | 0 | } |
425 | 0 | return false; |
426 | 0 | } Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AttachList, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::AttachList, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::VarRegionList, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::VarRegionList, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ItemVariationStore, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::ItemVariationStore, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LangSys, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::LangSys, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Script, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Script, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, void, true>, unsigned int>(OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, void, true> const*, unsigned int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Feature, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Feature, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 3u>, void, true>, int>(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 3u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ConditionSet, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::ConditionSet, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Feature, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::Feature, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::FeatureTableSubstitution, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::FeatureTableSubstitution, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::FeatureVariations, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::FeatureVariations, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::TrackData, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<AAT::TrackData, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::SparseVariationRegion, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::SparseVariationRegion, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::SparseVarRegionList, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::SparseVarRegionList, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MultiVarData, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::MultiVarData, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false>, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, void, false>, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false>, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, void, false>, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::JustificationCategory, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<AAT::JustificationCategory, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::PostcompensationActionChain, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<AAT::PostcompensationActionChain, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, true> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::JustificationHeader, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<AAT::JustificationHeader, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::ValueBase, true>, int>(OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::ValueBase, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::CursivePosFormat1, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::CursivePosFormat1, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::AnchorMatrix, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, OT::Layout::GPOS_impl::AnchorMatrix, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::StatAxisRecord>, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::StatAxisRecord>, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AxisValueOffsetArray, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<OT::AxisValueOffsetArray, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<short, 2u> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<int, 4u>, 16u> >, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<int, 4u>, 16u> >, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::IntType<unsigned short, 2u>, unsigned short>(OT::IntType<unsigned short, 2u> const*, unsigned short const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::DefaultUVS, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::DefaultUVS, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::NonDefaultUVS, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::NonDefaultUVS, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::CmapSubtable, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::CmapSubtable, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ArrayOf<OT::IntType<unsigned char, 1u>, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 3u>, void, false>, int>(OT::OffsetTo<OT::ArrayOf<OT::IntType<unsigned char, 1u>, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 3u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::ResourceRecord>, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::ResourceRecord>, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ArrayOfM1<OT::ResourceTypeRecord, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::ArrayOfM1<OT::ResourceTypeRecord, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ResourceMap, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<OT::ResourceMap, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ItemVariationStore, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::ItemVariationStore, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::DeltaSetIndexMap, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::DeltaSetIndexMap, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ColorLine<OT::NoVariable>, OT::IntType<unsigned int, 3u>, void, true>, int>(OT::OffsetTo<OT::ColorLine<OT::NoVariable>, OT::IntType<unsigned int, 3u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ColorLine<OT::Variable>, OT::IntType<unsigned int, 3u>, void, true>, int>(OT::OffsetTo<OT::ColorLine<OT::Variable>, OT::IntType<unsigned int, 3u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 3u>, void, true>, int>(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 3u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::NoVariable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, void, true>, int>(OT::OffsetTo<OT::NoVariable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Variable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, void, true>, int>(OT::OffsetTo<OT::Variable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseGlyphList, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::BaseGlyphList, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LayerList, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::LayerList, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ClipBox, OT::IntType<unsigned int, 3u>, void, true>, int>(OT::OffsetTo<OT::ClipBox, OT::IntType<unsigned int, 3u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ClipList, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::ClipList, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::IndexSubtable, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::IndexSubtable, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, void, true>, int>(OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::IndexSubtableArray, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<OT::IndexSubtableArray, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short, 2u>, 14u> >, OT::IntType<unsigned int, 4u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short, 2u>, 14u> >, OT::IntType<unsigned int, 4u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::SortedArrayOf<OT::Tag, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::SortedArrayOf<OT::Tag, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseValues, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::BaseValues, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MinMax, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::MinMax, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseScript, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::BaseScript, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseScriptList, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::BaseScriptList, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Axis, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::Axis, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::IndexArray, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::IndexArray, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::SortedArrayOf<OT::HBGlyphID16, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::SortedArrayOf<OT::HBGlyphID16, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::JstfLangSys, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::JstfLangSys, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::JstfScript, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<OT::JstfScript, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true>, int>(OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> const*, int const&) Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> >, OT::IntType<unsigned short, 2u>, void, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, void, true> >, OT::IntType<unsigned short, 2u>, void, false> const*, int const&) |
427 | | |
428 | | template <typename Type> |
429 | | hb_blob_t *sanitize_blob (hb_blob_t *blob) |
430 | 13.4M | { |
431 | 13.4M | bool sane; |
432 | | |
433 | 13.4M | init (blob); |
434 | | |
435 | 13.4M | retry: |
436 | 13.4M | DEBUG_MSG_FUNC (SANITIZE, start, "start"); |
437 | | |
438 | 13.4M | start_processing (); |
439 | | |
440 | 13.4M | if (unlikely (!start)) |
441 | 6.71M | { |
442 | 6.71M | end_processing (); |
443 | 6.71M | return blob; |
444 | 6.71M | } |
445 | | |
446 | 6.71M | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); |
447 | | |
448 | 6.71M | sane = t->sanitize (this); |
449 | 6.71M | if (sane) |
450 | 6.71M | { |
451 | 6.71M | if (edit_count) |
452 | 0 | { |
453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); |
454 | | |
455 | | /* sanitize again to ensure no toe-stepping */ |
456 | 0 | edit_count = 0; |
457 | 0 | sane = t->sanitize (this); |
458 | 0 | if (edit_count) { |
459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); |
460 | 0 | sane = false; |
461 | 0 | } |
462 | 0 | } |
463 | 6.71M | } |
464 | 0 | else |
465 | 0 | { |
466 | 0 | if (edit_count && !writable) { |
467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); |
468 | 0 | end = start + blob->length; |
469 | |
|
470 | 0 | if (start) |
471 | 0 | { |
472 | 0 | writable = true; |
473 | | /* ok, we made it writable by relocating. try again */ |
474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); |
475 | 0 | goto retry; |
476 | 0 | } |
477 | 0 | } |
478 | 0 | } |
479 | | |
480 | 6.71M | end_processing (); |
481 | | |
482 | 6.71M | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); |
483 | 6.71M | if (sane) |
484 | 6.71M | { |
485 | 6.71M | hb_blob_make_immutable (blob); |
486 | 6.71M | return blob; |
487 | 6.71M | } |
488 | 0 | else |
489 | 0 | { |
490 | 0 | hb_blob_destroy (blob); |
491 | 0 | return hb_blob_get_empty (); |
492 | 0 | } |
493 | 6.71M | } hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::GDEF>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::Layout::GSUB>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::morx>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::ltag>(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::mort>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::kerx>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::ankr>(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::trak>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::feat>(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::Layout::GPOS>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::STAT>(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::OpenTypeFontFile>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cmap>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::OS2>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::MVAR>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::fvar>(hb_blob_t*) Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::avar>(hb_blob_t*) Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CPAL>(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::COLR>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::SVG>(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CBLC>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CBDT>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::sbix>(hb_blob_t*) Line | Count | Source | 430 | 6.71M | { | 431 | 6.71M | bool sane; | 432 | | | 433 | 6.71M | init (blob); | 434 | | | 435 | 6.71M | retry: | 436 | 6.71M | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 6.71M | start_processing (); | 439 | | | 440 | 6.71M | if (unlikely (!start)) | 441 | 6.71M | { | 442 | 6.71M | end_processing (); | 443 | 6.71M | return blob; | 444 | 6.71M | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hmtxvmtx<OT::hmtx, OT::hhea, OT::HVAR> >(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::HVAR>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hhea>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::vhea>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::maxp>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hmtxvmtx<OT::vmtx, OT::vhea, OT::VVAR> >(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::VVAR>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::gvar_GVAR<OT::IntType<unsigned short, 2u>, 1735811442u> >(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::gvar_GVAR<OT::IntType<unsigned int, 3u>, 1196835154u> >(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::head>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::loca>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::glyf>(hb_blob_t*) Line | Count | Source | 430 | 6.71M | { | 431 | 6.71M | bool sane; | 432 | | | 433 | 6.71M | init (blob); | 434 | | | 435 | 6.71M | retry: | 436 | 6.71M | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 6.71M | start_processing (); | 439 | | | 440 | 6.71M | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 6.71M | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 6.71M | sane = t->sanitize (this); | 449 | 6.71M | if (sane) | 450 | 6.71M | { | 451 | 6.71M | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 6.71M | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 6.71M | end_processing (); | 481 | | | 482 | 6.71M | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 6.71M | if (sane) | 484 | 6.71M | { | 485 | 6.71M | hb_blob_make_immutable (blob); | 486 | 6.71M | return blob; | 487 | 6.71M | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 6.71M | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cff1>(hb_blob_t*) Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cff2>(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::kern>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::meta>(hb_blob_t*) hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::name>(hb_blob_t*) Line | Count | Source | 430 | 9 | { | 431 | 9 | bool sane; | 432 | | | 433 | 9 | init (blob); | 434 | | | 435 | 9 | retry: | 436 | 9 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 9 | start_processing (); | 439 | | | 440 | 9 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 9 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 9 | sane = t->sanitize (this); | 449 | 9 | if (sane) | 450 | 9 | { | 451 | 9 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 9 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 9 | end_processing (); | 481 | | | 482 | 9 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 9 | if (sane) | 484 | 9 | { | 485 | 9 | hb_blob_make_immutable (blob); | 486 | 9 | return blob; | 487 | 9 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 9 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::post>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 0 | { | 442 | 0 | end_processing (); | 443 | 0 | return blob; | 444 | 0 | } | 445 | | | 446 | 60 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | | | 448 | 60 | sane = t->sanitize (this); | 449 | 60 | if (sane) | 450 | 60 | { | 451 | 60 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 60 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 60 | end_processing (); | 481 | | | 482 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 60 | if (sane) | 484 | 60 | { | 485 | 60 | hb_blob_make_immutable (blob); | 486 | 60 | return blob; | 487 | 60 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 60 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::VORG>(hb_blob_t*) Line | Count | Source | 430 | 9 | { | 431 | 9 | bool sane; | 432 | | | 433 | 9 | init (blob); | 434 | | | 435 | 9 | retry: | 436 | 9 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 9 | start_processing (); | 439 | | | 440 | 9 | if (unlikely (!start)) | 441 | 9 | { | 442 | 9 | end_processing (); | 443 | 9 | return blob; | 444 | 9 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::BASE>(hb_blob_t*) Line | Count | Source | 430 | 60 | { | 431 | 60 | bool sane; | 432 | | | 433 | 60 | init (blob); | 434 | | | 435 | 60 | retry: | 436 | 60 | DEBUG_MSG_FUNC (SANITIZE, start, "start"); | 437 | | | 438 | 60 | start_processing (); | 439 | | | 440 | 60 | if (unlikely (!start)) | 441 | 60 | { | 442 | 60 | end_processing (); | 443 | 60 | return blob; | 444 | 60 | } | 445 | | | 446 | 0 | Type *t = reinterpret_cast<Type *> (const_cast<char *> (start)); | 447 | |
| 448 | 0 | sane = t->sanitize (this); | 449 | 0 | if (sane) | 450 | 0 | { | 451 | 0 | if (edit_count) | 452 | 0 | { | 453 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count); | 454 | | | 455 | | /* sanitize again to ensure no toe-stepping */ | 456 | 0 | edit_count = 0; | 457 | 0 | sane = t->sanitize (this); | 458 | 0 | if (edit_count) { | 459 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); | 460 | 0 | sane = false; | 461 | 0 | } | 462 | 0 | } | 463 | 0 | } | 464 | 0 | else | 465 | 0 | { | 466 | 0 | if (edit_count && !writable) { | 467 | 0 | start = hb_blob_get_data_writable (blob, nullptr); | 468 | 0 | end = start + blob->length; | 469 | |
| 470 | 0 | if (start) | 471 | 0 | { | 472 | 0 | writable = true; | 473 | | /* ok, we made it writable by relocating. try again */ | 474 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, "retry"); | 475 | 0 | goto retry; | 476 | 0 | } | 477 | 0 | } | 478 | 0 | } | 479 | | | 480 | 0 | end_processing (); | 481 | |
| 482 | 0 | DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED"); | 483 | 0 | if (sane) | 484 | 0 | { | 485 | 0 | hb_blob_make_immutable (blob); | 486 | 0 | return blob; | 487 | 0 | } | 488 | 0 | else | 489 | 0 | { | 490 | 0 | hb_blob_destroy (blob); | 491 | 0 | return hb_blob_get_empty (); | 492 | 0 | } | 493 | 0 | } |
|
494 | | |
495 | | template <typename Type> |
496 | | hb_blob_t *reference_table (const hb_face_t *face, hb_tag_t tableTag = Type::tableTag) |
497 | 13.4M | { |
498 | 13.4M | if (!num_glyphs_set) |
499 | 13.4M | set_num_glyphs (hb_face_get_glyph_count (face)); |
500 | 13.4M | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); |
501 | 13.4M | } hb_blob_t* hb_sanitize_context_t::reference_table<OT::GDEF>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::Layout::GSUB>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::morx>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<AAT::ltag>(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<AAT::mort>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::kerx>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<AAT::ankr>(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<AAT::trak>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<AAT::feat>(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<OT::Layout::GPOS>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::STAT>(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<OT::cmap>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::OS2>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::MVAR>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::fvar>(hb_face_t const*, unsigned int) Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::avar>(hb_face_t const*, unsigned int) Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::CPAL>(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<OT::COLR>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::SVG>(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<OT::CBLC>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::CBDT>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::sbix>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 6.71M | { | 498 | 6.71M | if (!num_glyphs_set) | 499 | 6.71M | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 6.71M | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 6.71M | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::hmtxvmtx<OT::hmtx, OT::hhea, OT::HVAR> >(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::HVAR>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::hhea>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::vhea>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::maxp>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::hmtxvmtx<OT::vmtx, OT::vhea, OT::VVAR> >(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::VVAR>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::gvar_GVAR<OT::IntType<unsigned short, 2u>, 1735811442u> >(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::gvar_GVAR<OT::IntType<unsigned int, 3u>, 1196835154u> >(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<OT::head>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::loca>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::glyf>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 6.71M | { | 498 | 6.71M | if (!num_glyphs_set) | 499 | 6.71M | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 6.71M | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 6.71M | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::cff1>(hb_face_t const*, unsigned int) Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::cff2>(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<OT::kern>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
Unexecuted instantiation: hb_blob_t* hb_sanitize_context_t::reference_table<OT::meta>(hb_face_t const*, unsigned int) hb_blob_t* hb_sanitize_context_t::reference_table<OT::name>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 9 | { | 498 | 9 | if (!num_glyphs_set) | 499 | 9 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 9 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 9 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::post>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 60 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::VORG>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 9 | { | 498 | 9 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 9 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 9 | } |
hb_blob_t* hb_sanitize_context_t::reference_table<OT::BASE>(hb_face_t const*, unsigned int) Line | Count | Source | 497 | 60 | { | 498 | 60 | if (!num_glyphs_set) | 499 | 0 | set_num_glyphs (hb_face_get_glyph_count (face)); | 500 | 60 | return sanitize_blob<Type> (hb_face_reference_table (face, tableTag)); | 501 | 60 | } |
|
502 | | |
503 | | const char *start, *end; |
504 | | unsigned length; |
505 | | mutable int max_ops, max_subtables; |
506 | | private: |
507 | | int recursion_depth; |
508 | | bool writable; |
509 | | unsigned int edit_count; |
510 | | hb_blob_t *blob; |
511 | | unsigned int num_glyphs; |
512 | | bool num_glyphs_set; |
513 | | public: |
514 | | bool lazy_some_gpos; |
515 | | }; |
516 | | |
517 | | struct hb_sanitize_with_object_t |
518 | | { |
519 | | template <typename T> |
520 | 2.46M | hb_sanitize_with_object_t (hb_sanitize_context_t *c, const T& obj) : c (c) |
521 | 2.46M | { c->set_object (obj); } Unexecuted instantiation: hb_sanitize_with_object_t::hb_sanitize_with_object_t<AAT::KerxSubTable const*>(hb_sanitize_context_t*, AAT::KerxSubTable const* const&) hb_sanitize_with_object_t::hb_sanitize_with_object_t<OT::KernSubTable<OT::KernOTSubTableHeader> const*>(hb_sanitize_context_t*, OT::KernSubTable<OT::KernOTSubTableHeader> const* const&) Line | Count | Source | 520 | 2.46M | hb_sanitize_with_object_t (hb_sanitize_context_t *c, const T& obj) : c (c) | 521 | 2.46M | { c->set_object (obj); } |
Unexecuted instantiation: hb_sanitize_with_object_t::hb_sanitize_with_object_t<OT::KernSubTable<OT::KernAATSubTableHeader> const*>(hb_sanitize_context_t*, OT::KernSubTable<OT::KernAATSubTableHeader> const* const&) |
522 | | ~hb_sanitize_with_object_t () |
523 | 2.46M | { c->reset_object (); } |
524 | | |
525 | | private: |
526 | | hb_sanitize_context_t *c; |
527 | | }; |
528 | | |
529 | | |
530 | | #endif /* HB_SANITIZE_HH */ |