Coverage Report

Created: 2025-07-07 10:01

/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 */