Coverage Report

Created: 2024-06-09 08:56

/src/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
6.17M
#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
20.5M
#define HB_SANITIZE_MAX_OPS_MIN 16384
112
#endif
113
#ifndef HB_SANITIZE_MAX_OPS_MAX
114
21.0M
#define HB_SANITIZE_MAX_OPS_MAX 0x3FFFFFFF
115
#endif
116
#ifndef HB_SANITIZE_MAX_SUBTABLES
117
4.89M
#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
  start (nullptr), end (nullptr),
125
  max_ops (0), max_subtables (0),
126
        recursion_depth (0),
127
  writable (false), edit_count (0),
128
  blob (nullptr),
129
  num_glyphs (65536),
130
19.2M
  num_glyphs_set (false) {}
131
132
0
  const char *get_name () { return "SANITIZE"; }
133
  template <typename T, typename F>
134
  bool may_dispatch (const T *obj HB_UNUSED, const F *format)
135
116M
  { return format->sanitize (this); }
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
135
34.4M
  { return format->sanitize (this); }
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
135
4.81M
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
2.83M
  { return format->sanitize (this); }
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
135
3.01M
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
2.41M
  { return format->sanitize (this); }
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
135
3.39M
  { return format->sanitize (this); }
bool hb_sanitize_context_t::may_dispatch<OT::Context, OT::IntType<unsigned short, 2u> >(OT::Context const*, OT::IntType<unsigned short, 2u> const*)
Line
Count
Source
135
3.95M
  { return format->sanitize (this); }
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
135
3.44M
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
1.27M
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
83.5k
  { return format->sanitize (this); }
bool hb_sanitize_context_t::may_dispatch<OT::Paint, OT::IntType<unsigned char, 1u> >(OT::Paint const*, OT::IntType<unsigned char, 1u> const*)
Line
Count
Source
135
8.07M
  { return format->sanitize (this); }
bool hb_sanitize_context_t::may_dispatch<OT::ClipBox, OT::IntType<unsigned char, 1u> >(OT::ClipBox const*, OT::IntType<unsigned char, 1u> const*)
Line
Count
Source
135
78.5k
  { return format->sanitize (this); }
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
135
36.0M
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
4.14M
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
1.79M
  { return format->sanitize (this); }
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
135
2.12M
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
2.51M
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
269k
  { return format->sanitize (this); }
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*)
Line
Count
Source
135
2.08M
  { return format->sanitize (this); }
136
234M
  static return_t default_return_value () { return true; }
137
1.52M
  static return_t no_dispatch_return_value () { return false; }
138
0
  bool stop_sublookup_iteration (const return_t r) const { return !r; }
139
140
  bool visit_subtables (unsigned count)
141
4.89M
  {
142
4.89M
    max_subtables += count;
143
4.89M
    return max_subtables < HB_SANITIZE_MAX_SUBTABLES;
144
4.89M
  }
145
146
  private:
147
  template <typename T, typename ...Ts> auto
148
  _dispatch (const T &obj, hb_priority<1>, Ts&&... ds) HB_AUTO_RETURN
149
  ( obj.sanitize (this, std::forward<Ts> (ds)...) )
150
  template <typename T, typename ...Ts> auto
151
  _dispatch (const T &obj, hb_priority<0>, Ts&&... ds) HB_AUTO_RETURN
152
  ( obj.dispatch (this, std::forward<Ts> (ds)...) )
153
  public:
154
  template <typename T, typename ...Ts> auto
155
  dispatch (const T &obj, Ts&&... ds) HB_AUTO_RETURN
156
  ( _dispatch (obj, hb_prioritize, std::forward<Ts> (ds)...) )
157
158
159
  void init (hb_blob_t *b)
160
20.1M
  {
161
20.1M
    this->blob = hb_blob_reference (b);
162
20.1M
    this->writable = false;
163
20.1M
  }
164
165
  void set_num_glyphs (unsigned int num_glyphs_)
166
18.7M
  {
167
18.7M
    num_glyphs = num_glyphs_;
168
18.7M
    num_glyphs_set = true;
169
18.7M
  }
170
7.80M
  unsigned int get_num_glyphs () { return num_glyphs; }
171
172
557k
  void set_max_ops (int max_ops_) { max_ops = max_ops_; }
173
174
  template <typename T>
175
  void set_object (const T *obj)
176
1.04M
  {
177
1.04M
    reset_object ();
178
179
1.04M
    if (!obj) return;
180
181
852k
    const char *obj_start = (const char *) obj;
182
852k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
852k
    else
185
852k
    {
186
852k
      this->start = obj_start;
187
852k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
852k
    }
189
852k
  }
void hb_sanitize_context_t::set_object<AAT::ChainSubtable<AAT::ExtendedTypes> >(AAT::ChainSubtable<AAT::ExtendedTypes> const*)
Line
Count
Source
176
320k
  {
177
320k
    reset_object ();
178
179
320k
    if (!obj) return;
180
181
320k
    const char *obj_start = (const char *) obj;
182
320k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
320k
    else
185
320k
    {
186
320k
      this->start = obj_start;
187
320k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
320k
    }
189
320k
  }
void hb_sanitize_context_t::set_object<AAT::ChainSubtable<AAT::ObsoleteTypes> >(AAT::ChainSubtable<AAT::ObsoleteTypes> const*)
Line
Count
Source
176
307k
  {
177
307k
    reset_object ();
178
179
307k
    if (!obj) return;
180
181
307k
    const char *obj_start = (const char *) obj;
182
307k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
307k
    else
185
307k
    {
186
307k
      this->start = obj_start;
187
307k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
307k
    }
189
307k
  }
void hb_sanitize_context_t::set_object<AAT::KerxSubTable>(AAT::KerxSubTable const*)
Line
Count
Source
176
155k
  {
177
155k
    reset_object ();
178
179
155k
    if (!obj) return;
180
181
41.2k
    const char *obj_start = (const char *) obj;
182
41.2k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
41.2k
    else
185
41.2k
    {
186
41.2k
      this->start = obj_start;
187
41.2k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
41.2k
    }
189
41.2k
  }
void hb_sanitize_context_t::set_object<OT::KernSubTable<OT::KernOTSubTableHeader> >(OT::KernSubTable<OT::KernOTSubTableHeader> const*)
Line
Count
Source
176
178k
  {
177
178k
    reset_object ();
178
179
178k
    if (!obj) return;
180
181
138k
    const char *obj_start = (const char *) obj;
182
138k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
138k
    else
185
138k
    {
186
138k
      this->start = obj_start;
187
138k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
138k
    }
189
138k
  }
void hb_sanitize_context_t::set_object<OT::KernSubTable<OT::KernAATSubTableHeader> >(OT::KernSubTable<OT::KernAATSubTableHeader> const*)
Line
Count
Source
176
81.5k
  {
177
81.5k
    reset_object ();
178
179
81.5k
    if (!obj) return;
180
181
44.1k
    const char *obj_start = (const char *) obj;
182
44.1k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
44.1k
    else
185
44.1k
    {
186
44.1k
      this->start = obj_start;
187
44.1k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
44.1k
    }
189
44.1k
  }
190
191
  void reset_object ()
192
22.6M
  {
193
22.6M
    this->start = this->blob->data;
194
22.6M
    this->end = this->start + this->blob->length;
195
22.6M
    assert (this->start <= this->end); /* Must not overflow. */
196
22.6M
  }
197
198
  void start_processing ()
199
20.5M
  {
200
20.5M
    reset_object ();
201
20.5M
    unsigned m;
202
20.5M
    if (unlikely (hb_unsigned_mul_overflows (this->end - this->start, HB_SANITIZE_MAX_OPS_FACTOR, &m)))
203
0
      this->max_ops = HB_SANITIZE_MAX_OPS_MAX;
204
20.5M
    else
205
20.5M
      this->max_ops = hb_clamp (m,
206
20.5M
        (unsigned) HB_SANITIZE_MAX_OPS_MIN,
207
20.5M
        (unsigned) HB_SANITIZE_MAX_OPS_MAX);
208
20.5M
    this->edit_count = 0;
209
20.5M
    this->debug_depth = 0;
210
20.5M
    this->recursion_depth = 0;
211
212
20.5M
    DEBUG_MSG_LEVEL (SANITIZE, start, 0, +1,
213
20.5M
         "start [%p..%p] (%lu bytes)",
214
20.5M
         this->start, this->end,
215
20.5M
         (unsigned long) (this->end - this->start));
216
20.5M
  }
217
218
  void end_processing ()
219
20.9M
  {
220
20.9M
    DEBUG_MSG_LEVEL (SANITIZE, this->start, 0, -1,
221
20.9M
         "end [%p..%p] %u edit requests",
222
20.9M
         this->start, this->end, this->edit_count);
223
224
20.9M
    hb_blob_destroy (this->blob);
225
20.9M
    this->blob = nullptr;
226
20.9M
    this->start = this->end = nullptr;
227
20.9M
  }
228
229
337k
  unsigned get_edit_count () { return edit_count; }
230
231
  bool check_range (const void *base,
232
        unsigned int len) const
233
16.6G
  {
234
16.6G
    const char *p = (const char *) base;
235
16.6G
    bool ok = !len ||
236
16.6G
        (this->start <= p &&
237
16.4G
         p <= this->end &&
238
16.4G
         (unsigned int) (this->end - p) >= len &&
239
16.4G
         (this->max_ops -= len) > 0);
240
241
16.6G
    DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
242
16.6G
         "check_range [%p..%p]"
243
16.6G
         " (%u bytes) in [%p..%p] -> %s",
244
16.6G
         p, p + len, len,
245
16.6G
         this->start, this->end,
246
16.6G
         ok ? "OK" : "OUT-OF-RANGE");
247
248
16.6G
    return likely (ok);
249
16.6G
  }
250
251
  template <typename T>
252
  bool check_range (const T *base,
253
        unsigned int a,
254
        unsigned int b) const
255
369M
  {
256
369M
    unsigned m;
257
369M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
369M
     this->check_range (base, m);
259
369M
  }
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
255
21.6M
  {
256
21.6M
    unsigned m;
257
21.6M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
21.6M
     this->check_range (base, m);
259
21.6M
  }
bool hb_sanitize_context_t::check_range<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes> >(OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes> const*, unsigned int, unsigned int) const
Line
Count
Source
255
2.94M
  {
256
2.94M
    unsigned m;
257
2.94M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.94M
     this->check_range (base, m);
259
2.94M
  }
bool hb_sanitize_context_t::check_range<OT::Layout::Common::RangeRecord<OT::Layout::MediumTypes> >(OT::Layout::Common::RangeRecord<OT::Layout::MediumTypes> const*, unsigned int, unsigned int) const
Line
Count
Source
255
736k
  {
256
736k
    unsigned m;
257
736k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
736k
     this->check_range (base, m);
259
736k
  }
bool hb_sanitize_context_t::check_range<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int, unsigned int) const
Line
Count
Source
255
116M
  {
256
116M
    unsigned m;
257
116M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
116M
     this->check_range (base, m);
259
116M
  }
bool hb_sanitize_context_t::check_range<OT::HBGlyphID24>(OT::HBGlyphID24 const*, unsigned int, unsigned int) const
Line
Count
Source
255
5.03M
  {
256
5.03M
    unsigned m;
257
5.03M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
5.03M
     this->check_range (base, m);
259
5.03M
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
19.0k
  {
256
19.0k
    unsigned m;
257
19.0k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
19.0k
     this->check_range (base, m);
259
19.0k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
25.3k
  {
256
25.3k
    unsigned m;
257
25.3k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
25.3k
     this->check_range (base, m);
259
25.3k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
278k
  {
256
278k
    unsigned m;
257
278k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
278k
     this->check_range (base, m);
259
278k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
8.80k
  {
256
8.80k
    unsigned m;
257
8.80k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
8.80k
     this->check_range (base, m);
259
8.80k
  }
bool hb_sanitize_context_t::check_range<OT::VarRegionAxis>(OT::VarRegionAxis const*, unsigned int, unsigned int) const
Line
Count
Source
255
76.5k
  {
256
76.5k
    unsigned m;
257
76.5k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
76.5k
     this->check_range (base, m);
259
76.5k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
80.2k
  {
256
80.2k
    unsigned m;
257
80.2k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
80.2k
     this->check_range (base, m);
259
80.2k
  }
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
255
11.5M
  {
256
11.5M
    unsigned m;
257
11.5M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
11.5M
     this->check_range (base, m);
259
11.5M
  }
bool hb_sanitize_context_t::check_range<AAT::Feature>(AAT::Feature const*, unsigned int, unsigned int) const
Line
Count
Source
255
91.9k
  {
256
91.9k
    unsigned m;
257
91.9k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
91.9k
     this->check_range (base, m);
259
91.9k
  }
bool hb_sanitize_context_t::check_range<AAT::Entry<void> >(AAT::Entry<void> const*, unsigned int, unsigned int) const
Line
Count
Source
255
54.3k
  {
256
54.3k
    unsigned m;
257
54.3k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
54.3k
     this->check_range (base, m);
259
54.3k
  }
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
Line
Count
Source
255
16.0k
  {
256
16.0k
    unsigned m;
257
16.0k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
16.0k
     this->check_range (base, m);
259
16.0k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false> const*, unsigned int, unsigned int) const
Line
Count
Source
255
8.60k
  {
256
8.60k
    unsigned m;
257
8.60k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
8.60k
     this->check_range (base, m);
259
8.60k
  }
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
Line
Count
Source
255
17.4k
  {
256
17.4k
    unsigned m;
257
17.4k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
17.4k
     this->check_range (base, m);
259
17.4k
  }
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
Line
Count
Source
255
21.6k
  {
256
21.6k
    unsigned m;
257
21.6k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
21.6k
     this->check_range (base, m);
259
21.6k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::FTStringRange>(AAT::FTStringRange const*, unsigned int, unsigned int) const
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
Line
Count
Source
255
11.7k
  {
256
11.7k
    unsigned m;
257
11.7k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
11.7k
     this->check_range (base, m);
259
11.7k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> const*, unsigned int, unsigned int) const
Line
Count
Source
255
6.94k
  {
256
6.94k
    unsigned m;
257
6.94k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
6.94k
     this->check_range (base, m);
259
6.94k
  }
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
Line
Count
Source
255
19.6k
  {
256
19.6k
    unsigned m;
257
19.6k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
19.6k
     this->check_range (base, m);
259
19.6k
  }
bool hb_sanitize_context_t::check_range<AAT::KernPair>(AAT::KernPair const*, unsigned int, unsigned int) const
Line
Count
Source
255
7.90k
  {
256
7.90k
    unsigned m;
257
7.90k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
7.90k
     this->check_range (base, m);
259
7.90k
  }
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
Line
Count
Source
255
3.66k
  {
256
3.66k
    unsigned m;
257
3.66k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
3.66k
     this->check_range (base, m);
259
3.66k
  }
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
Line
Count
Source
255
6.76k
  {
256
6.76k
    unsigned m;
257
6.76k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
6.76k
     this->check_range (base, m);
259
6.76k
  }
bool hb_sanitize_context_t::check_range<OT::IntType<unsigned int, 4u> >(OT::IntType<unsigned int, 4u> const*, unsigned int, unsigned int) const
Line
Count
Source
255
31.8k
  {
256
31.8k
    unsigned m;
257
31.8k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
31.8k
     this->check_range (base, m);
259
31.8k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> const*, unsigned int, unsigned int) const
Line
Count
Source
255
5.06k
  {
256
5.06k
    unsigned m;
257
5.06k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
5.06k
     this->check_range (base, m);
259
5.06k
  }
bool hb_sanitize_context_t::check_range<AAT::Anchor>(AAT::Anchor const*, unsigned int, unsigned int) const
Line
Count
Source
255
53.8k
  {
256
53.8k
    unsigned m;
257
53.8k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
53.8k
     this->check_range (base, m);
259
53.8k
  }
bool hb_sanitize_context_t::check_range<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int, unsigned int) const
Line
Count
Source
255
12.1M
  {
256
12.1M
    unsigned m;
257
12.1M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
12.1M
     this->check_range (base, m);
259
12.1M
  }
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
Line
Count
Source
255
2.81k
  {
256
2.81k
    unsigned m;
257
2.81k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.81k
     this->check_range (base, m);
259
2.81k
  }
bool hb_sanitize_context_t::check_range<AAT::TrackTableEntry>(AAT::TrackTableEntry const*, unsigned int, unsigned int) const
Line
Count
Source
255
2.16k
  {
256
2.16k
    unsigned m;
257
2.16k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.16k
     this->check_range (base, m);
259
2.16k
  }
bool hb_sanitize_context_t::check_range<AAT::FeatureName>(AAT::FeatureName const*, unsigned int, unsigned int) const
Line
Count
Source
255
477
  {
256
477
    unsigned m;
257
477
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
477
     this->check_range (base, m);
259
477
  }
bool hb_sanitize_context_t::check_range<AAT::SettingName>(AAT::SettingName const*, unsigned int, unsigned int) const
Line
Count
Source
255
4.22k
  {
256
4.22k
    unsigned m;
257
4.22k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
4.22k
     this->check_range (base, m);
259
4.22k
  }
bool hb_sanitize_context_t::check_range<OT::IntType<unsigned int, 3u> >(OT::IntType<unsigned int, 3u> const*, unsigned int, unsigned int) const
Line
Count
Source
255
4.46M
  {
256
4.46M
    unsigned m;
257
4.46M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
4.46M
     this->check_range (base, m);
259
4.46M
  }
bool hb_sanitize_context_t::check_range<OT::Index>(OT::Index const*, unsigned int, unsigned int) const
Line
Count
Source
255
57.3M
  {
256
57.3M
    unsigned m;
257
57.3M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
57.3M
     this->check_range (base, m);
259
57.3M
  }
bool hb_sanitize_context_t::check_range<OT::Record<OT::LangSys> >(OT::Record<OT::LangSys> const*, unsigned int, unsigned int) const
Line
Count
Source
255
1.48M
  {
256
1.48M
    unsigned m;
257
1.48M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.48M
     this->check_range (base, m);
259
1.48M
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
28.4k
  {
256
28.4k
    unsigned m;
257
28.4k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
28.4k
     this->check_range (base, m);
259
28.4k
  }
bool hb_sanitize_context_t::check_range<OT::FeatureTableSubstitutionRecord>(OT::FeatureTableSubstitutionRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
12.1k
  {
256
12.1k
    unsigned m;
257
12.1k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
12.1k
     this->check_range (base, m);
259
12.1k
  }
bool hb_sanitize_context_t::check_range<OT::FeatureVariationRecord>(OT::FeatureVariationRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
16.3k
  {
256
16.3k
    unsigned m;
257
16.3k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
16.3k
     this->check_range (base, m);
259
16.3k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<AAT::WidthDeltaPair>(AAT::WidthDeltaPair 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>, true> >(OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
1.64M
  {
256
1.64M
    unsigned m;
257
1.64M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.64M
     this->check_range (base, m);
259
1.64M
  }
bool hb_sanitize_context_t::check_range<OT::LookupRecord>(OT::LookupRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
7.63M
  {
256
7.63M
    unsigned m;
257
7.63M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
7.63M
     this->check_range (base, m);
259
7.63M
  }
bool hb_sanitize_context_t::check_range<OT::Layout::GPOS_impl::EntryExitRecord>(OT::Layout::GPOS_impl::EntryExitRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
161k
  {
256
161k
    unsigned m;
257
161k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
161k
     this->check_range (base, m);
259
161k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
93.0M
  {
256
93.0M
    unsigned m;
257
93.0M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
93.0M
     this->check_range (base, m);
259
93.0M
  }
bool hb_sanitize_context_t::check_range<OT::Layout::GPOS_impl::MarkRecord>(OT::Layout::GPOS_impl::MarkRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
601k
  {
256
601k
    unsigned m;
257
601k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
601k
     this->check_range (base, m);
259
601k
  }
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
Line
Count
Source
255
5.11M
  {
256
5.11M
    unsigned m;
257
5.11M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
5.11M
     this->check_range (base, m);
259
5.11M
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
1.68M
  {
256
1.68M
    unsigned m;
257
1.68M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.68M
     this->check_range (base, m);
259
1.68M
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
327k
  {
256
327k
    unsigned m;
257
327k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
327k
     this->check_range (base, m);
259
327k
  }
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
255
2.25M
  {
256
2.25M
    unsigned m;
257
2.25M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.25M
     this->check_range (base, m);
259
2.25M
  }
bool hb_sanitize_context_t::check_range<void>(void const*, unsigned int, unsigned int) const
Line
Count
Source
255
440k
  {
256
440k
    unsigned m;
257
440k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
440k
     this->check_range (base, m);
259
440k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
70.0k
  {
256
70.0k
    unsigned m;
257
70.0k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
70.0k
     this->check_range (base, m);
259
70.0k
  }
bool hb_sanitize_context_t::check_range<OT::Layout::GPOS_impl::PairValueRecord<OT::Layout::MediumTypes> >(OT::Layout::GPOS_impl::PairValueRecord<OT::Layout::MediumTypes> const*, unsigned int, unsigned int) const
Line
Count
Source
255
93.0k
  {
256
93.0k
    unsigned m;
257
93.0k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
93.0k
     this->check_range (base, m);
259
93.0k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
126k
  {
256
126k
    unsigned m;
257
126k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
126k
     this->check_range (base, m);
259
126k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
542k
  {
256
542k
    unsigned m;
257
542k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
542k
     this->check_range (base, m);
259
542k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
473k
  {
256
473k
    unsigned m;
257
473k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
473k
     this->check_range (base, m);
259
473k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::RuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
94.0k
  {
256
94.0k
    unsigned m;
257
94.0k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
94.0k
     this->check_range (base, m);
259
94.0k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Rule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Rule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
32.2k
  {
256
32.2k
    unsigned m;
257
32.2k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
32.2k
     this->check_range (base, m);
259
32.2k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
140k
  {
256
140k
    unsigned m;
257
140k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
140k
     this->check_range (base, m);
259
140k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
678k
  {
256
678k
    unsigned m;
257
678k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
678k
     this->check_range (base, m);
259
678k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
693k
  {
256
693k
    unsigned m;
257
693k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
693k
     this->check_range (base, m);
259
693k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
96.0k
  {
256
96.0k
    unsigned m;
257
96.0k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
96.0k
     this->check_range (base, m);
259
96.0k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::ChainRule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
52.1k
  {
256
52.1k
    unsigned m;
257
52.1k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
52.1k
     this->check_range (base, m);
259
52.1k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
135k
  {
256
135k
    unsigned m;
257
135k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
135k
     this->check_range (base, m);
259
135k
  }
bool hb_sanitize_context_t::check_range<OT::Record<OT::Script> >(OT::Record<OT::Script> const*, unsigned int, unsigned int) const
Line
Count
Source
255
677k
  {
256
677k
    unsigned m;
257
677k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
677k
     this->check_range (base, m);
259
677k
  }
bool hb_sanitize_context_t::check_range<OT::Record<OT::Feature> >(OT::Record<OT::Feature> const*, unsigned int, unsigned int) const
Line
Count
Source
255
634k
  {
256
634k
    unsigned m;
257
634k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
634k
     this->check_range (base, m);
259
634k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
248k
  {
256
248k
    unsigned m;
257
248k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
248k
     this->check_range (base, m);
259
248k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
1.78k
  {
256
1.78k
    unsigned m;
257
1.78k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.78k
     this->check_range (base, m);
259
1.78k
  }
bool hb_sanitize_context_t::check_range<OT::UnicodeValueRange>(OT::UnicodeValueRange const*, unsigned int, unsigned int) const
Line
Count
Source
255
7.79k
  {
256
7.79k
    unsigned m;
257
7.79k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
7.79k
     this->check_range (base, m);
259
7.79k
  }
bool hb_sanitize_context_t::check_range<OT::UVSMapping>(OT::UVSMapping const*, unsigned int, unsigned int) const
Line
Count
Source
255
25.7k
  {
256
25.7k
    unsigned m;
257
25.7k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
25.7k
     this->check_range (base, m);
259
25.7k
  }
bool hb_sanitize_context_t::check_range<OT::VariationSelectorRecord>(OT::VariationSelectorRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
9.38k
  {
256
9.38k
    unsigned m;
257
9.38k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
9.38k
     this->check_range (base, m);
259
9.38k
  }
bool hb_sanitize_context_t::check_range<OT::CmapSubtableLongGroup>(OT::CmapSubtableLongGroup const*, unsigned int, unsigned int) const
Line
Count
Source
255
102k
  {
256
102k
    unsigned m;
257
102k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
102k
     this->check_range (base, m);
259
102k
  }
bool hb_sanitize_context_t::check_range<OT::EncodingRecord>(OT::EncodingRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
246k
  {
256
246k
    unsigned m;
257
246k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
246k
     this->check_range (base, m);
259
246k
  }
bool hb_sanitize_context_t::check_range<OT::NoVariable<OT::ColorStop> >(OT::NoVariable<OT::ColorStop> const*, unsigned int, unsigned int) const
Line
Count
Source
255
537k
  {
256
537k
    unsigned m;
257
537k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
537k
     this->check_range (base, m);
259
537k
  }
bool hb_sanitize_context_t::check_range<OT::Variable<OT::ColorStop> >(OT::Variable<OT::ColorStop> const*, unsigned int, unsigned int) const
Line
Count
Source
255
629k
  {
256
629k
    unsigned m;
257
629k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
629k
     this->check_range (base, m);
259
629k
  }
bool hb_sanitize_context_t::check_range<OT::ClipRecord>(OT::ClipRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
23.4k
  {
256
23.4k
    unsigned m;
257
23.4k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
23.4k
     this->check_range (base, m);
259
23.4k
  }
bool hb_sanitize_context_t::check_range<OT::BaseGlyphPaintRecord>(OT::BaseGlyphPaintRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
87.8k
  {
256
87.8k
    unsigned m;
257
87.8k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
87.8k
     this->check_range (base, m);
259
87.8k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
56.1k
  {
256
56.1k
    unsigned m;
257
56.1k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
56.1k
     this->check_range (base, m);
259
56.1k
  }
bool hb_sanitize_context_t::check_range<OT::BaseGlyphRecord>(OT::BaseGlyphRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
100k
  {
256
100k
    unsigned m;
257
100k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
100k
     this->check_range (base, m);
259
100k
  }
bool hb_sanitize_context_t::check_range<OT::LayerRecord>(OT::LayerRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
97.8k
  {
256
97.8k
    unsigned m;
257
97.8k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
97.8k
     this->check_range (base, m);
259
97.8k
  }
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
Line
Count
Source
255
18.1k
  {
256
18.1k
    unsigned m;
257
18.1k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
18.1k
     this->check_range (base, m);
259
18.1k
  }
bool hb_sanitize_context_t::check_range<OT::TableRecord>(OT::TableRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
477k
  {
256
477k
    unsigned m;
257
477k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
477k
     this->check_range (base, m);
259
477k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
1.94k
  {
256
1.94k
    unsigned m;
257
1.94k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.94k
     this->check_range (base, m);
259
1.94k
  }
bool hb_sanitize_context_t::check_range<OT::ResourceTypeRecord>(OT::ResourceTypeRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
1.33k
  {
256
1.33k
    unsigned m;
257
1.33k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.33k
     this->check_range (base, m);
259
1.33k
  }
bool hb_sanitize_context_t::check_range<OT::ResourceRecord>(OT::ResourceRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
193k
  {
256
193k
    unsigned m;
257
193k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
193k
     this->check_range (base, m);
259
193k
  }
bool hb_sanitize_context_t::check_range<OT::AxisRecord>(OT::AxisRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
31.5k
  {
256
31.5k
    unsigned m;
257
31.5k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
31.5k
     this->check_range (base, m);
259
31.5k
  }
bool hb_sanitize_context_t::check_range<OT::InstanceRecord>(OT::InstanceRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
31.4k
  {
256
31.4k
    unsigned m;
257
31.4k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
31.4k
     this->check_range (base, m);
259
31.4k
  }
bool hb_sanitize_context_t::check_range<OT::AxisValueMap>(OT::AxisValueMap const*, unsigned int, unsigned int) const
Line
Count
Source
255
107k
  {
256
107k
    unsigned m;
257
107k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
107k
     this->check_range (base, m);
259
107k
  }
bool hb_sanitize_context_t::check_range<OT::SVGDocumentIndexEntry>(OT::SVGDocumentIndexEntry const*, unsigned int, unsigned int) const
Line
Count
Source
255
1.29k
  {
256
1.29k
    unsigned m;
257
1.29k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.29k
     this->check_range (base, m);
259
1.29k
  }
bool hb_sanitize_context_t::check_range<OT::BitmapSizeTable>(OT::BitmapSizeTable const*, unsigned int, unsigned int) const
Line
Count
Source
255
4.91k
  {
256
4.91k
    unsigned m;
257
4.91k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
4.91k
     this->check_range (base, m);
259
4.91k
  }
bool hb_sanitize_context_t::check_range<OT::IndexSubtableRecord>(OT::IndexSubtableRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
14.2k
  {
256
14.2k
    unsigned m;
257
14.2k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
14.2k
     this->check_range (base, m);
259
14.2k
  }
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
Line
Count
Source
255
1.89k
  {
256
1.89k
    unsigned m;
257
1.89k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.89k
     this->check_range (base, m);
259
1.89k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
3.69k
  {
256
3.69k
    unsigned m;
257
3.69k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
3.69k
     this->check_range (base, m);
259
3.69k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::SBIXGlyph, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::SBIXGlyph, OT::IntType<unsigned int, 4u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
9.32k
  {
256
9.32k
    unsigned m;
257
9.32k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
9.32k
     this->check_range (base, m);
259
9.32k
  }
bool hb_sanitize_context_t::check_range<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
Line
Count
Source
255
2.43k
  {
256
2.43k
    unsigned m;
257
2.43k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.43k
     this->check_range (base, m);
259
2.43k
  }
bool hb_sanitize_context_t::check_range<CFF::Encoding1_Range>(CFF::Encoding1_Range const*, unsigned int, unsigned int) const
Line
Count
Source
255
222
  {
256
222
    unsigned m;
257
222
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
222
     this->check_range (base, m);
259
222
  }
bool hb_sanitize_context_t::check_range<CFF::SuppEncoding>(CFF::SuppEncoding const*, unsigned int, unsigned int) const
Line
Count
Source
255
141
  {
256
141
    unsigned m;
257
141
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
141
     this->check_range (base, m);
259
141
  }
bool hb_sanitize_context_t::check_range<unsigned char>(unsigned char const*, unsigned int, unsigned int) const
Line
Count
Source
255
2.61M
  {
256
2.61M
    unsigned m;
257
2.61M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.61M
     this->check_range (base, m);
259
2.61M
  }
bool hb_sanitize_context_t::check_range<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
Line
Count
Source
255
41
  {
256
41
    unsigned m;
257
41
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
41
     this->check_range (base, m);
259
41
  }
bool hb_sanitize_context_t::check_range<OT::DataMap>(OT::DataMap const*, unsigned int, unsigned int) const
Line
Count
Source
255
994
  {
256
994
    unsigned m;
257
994
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
994
     this->check_range (base, m);
259
994
  }
bool hb_sanitize_context_t::check_range<OT::NameRecord>(OT::NameRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
254k
  {
256
254k
    unsigned m;
257
254k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
254k
     this->check_range (base, m);
259
254k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
3.11M
  {
256
3.11M
    unsigned m;
257
3.11M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
3.11M
     this->check_range (base, m);
259
3.11M
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
546k
  {
256
546k
    unsigned m;
257
546k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
546k
     this->check_range (base, m);
259
546k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
133k
  {
256
133k
    unsigned m;
257
133k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
133k
     this->check_range (base, m);
259
133k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
114k
  {
256
114k
    unsigned m;
257
114k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
114k
     this->check_range (base, m);
259
114k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
68.0k
  {
256
68.0k
    unsigned m;
257
68.0k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
68.0k
     this->check_range (base, m);
259
68.0k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
424k
  {
256
424k
    unsigned m;
257
424k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
424k
     this->check_range (base, m);
259
424k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
2.47M
  {
256
2.47M
    unsigned m;
257
2.47M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.47M
     this->check_range (base, m);
259
2.47M
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
106k
  {
256
106k
    unsigned m;
257
106k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
106k
     this->check_range (base, m);
259
106k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
44.1k
  {
256
44.1k
    unsigned m;
257
44.1k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
44.1k
     this->check_range (base, m);
259
44.1k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
363k
  {
256
363k
    unsigned m;
257
363k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
363k
     this->check_range (base, m);
259
363k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
1.93k
  {
256
1.93k
    unsigned m;
257
1.93k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
1.93k
     this->check_range (base, m);
259
1.93k
  }
bool hb_sanitize_context_t::check_range<OT::VertOriginMetric>(OT::VertOriginMetric const*, unsigned int, unsigned int) const
Line
Count
Source
255
2.75k
  {
256
2.75k
    unsigned m;
257
2.75k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.75k
     this->check_range (base, m);
259
2.75k
  }
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>, true> >(OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
bool hb_sanitize_context_t::check_range<OT::Tag>(OT::Tag const*, unsigned int, unsigned int) const
Line
Count
Source
255
19.5k
  {
256
19.5k
    unsigned m;
257
19.5k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
19.5k
     this->check_range (base, m);
259
19.5k
  }
bool hb_sanitize_context_t::check_range<OT::BaseScriptRecord>(OT::BaseScriptRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
18.3k
  {
256
18.3k
    unsigned m;
257
18.3k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
18.3k
     this->check_range (base, m);
259
18.3k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
103k
  {
256
103k
    unsigned m;
257
103k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
103k
     this->check_range (base, m);
259
103k
  }
bool hb_sanitize_context_t::check_range<OT::FeatMinMaxRecord>(OT::FeatMinMaxRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
2.12M
  {
256
2.12M
    unsigned m;
257
2.12M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
2.12M
     this->check_range (base, m);
259
2.12M
  }
bool hb_sanitize_context_t::check_range<OT::BaseLangSysRecord>(OT::BaseLangSysRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
198k
  {
256
198k
    unsigned m;
257
198k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
198k
     this->check_range (base, m);
259
198k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::Record<OT::JstfLangSys> >(OT::Record<OT::JstfLangSys> const*, unsigned int, unsigned int) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::Record<OT::JstfScript> >(OT::Record<OT::JstfScript> const*, unsigned int, unsigned int) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
bool hb_sanitize_context_t::check_range<OT::MathValueRecord>(OT::MathValueRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
361k
  {
256
361k
    unsigned m;
257
361k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
361k
     this->check_range (base, m);
259
361k
  }
bool hb_sanitize_context_t::check_range<OT::MathKernInfoRecord>(OT::MathKernInfoRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
7.43k
  {
256
7.43k
    unsigned m;
257
7.43k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
7.43k
     this->check_range (base, m);
259
7.43k
  }
bool hb_sanitize_context_t::check_range<OT::OffsetTo<OT::MathGlyphConstruction, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathGlyphConstruction, OT::IntType<unsigned short, 2u>, true> const*, unsigned int, unsigned int) const
Line
Count
Source
255
7.04k
  {
256
7.04k
    unsigned m;
257
7.04k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
7.04k
     this->check_range (base, m);
259
7.04k
  }
bool hb_sanitize_context_t::check_range<OT::MathGlyphPartRecord>(OT::MathGlyphPartRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
163k
  {
256
163k
    unsigned m;
257
163k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
163k
     this->check_range (base, m);
259
163k
  }
bool hb_sanitize_context_t::check_range<OT::MathGlyphVariantRecord>(OT::MathGlyphVariantRecord const*, unsigned int, unsigned int) const
Line
Count
Source
255
281k
  {
256
281k
    unsigned m;
257
281k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
258
281k
     this->check_range (base, m);
259
281k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::GaspRange>(OT::GaspRange const*, unsigned int, unsigned int) const
260
261
  template <typename T>
262
  bool check_range (const T *base,
263
        unsigned int a,
264
        unsigned int b,
265
        unsigned int c) const
266
11.9M
  {
267
11.9M
    unsigned m;
268
11.9M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
269
11.9M
     this->check_range (base, m, c);
270
11.9M
  }
bool hb_sanitize_context_t::check_range<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int, unsigned int, unsigned int) const
Line
Count
Source
266
11.2M
  {
267
11.2M
    unsigned m;
268
11.2M
    return !hb_unsigned_mul_overflows (a, b, &m) &&
269
11.2M
     this->check_range (base, m, c);
270
11.2M
  }
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
Line
Count
Source
266
627k
  {
267
627k
    unsigned m;
268
627k
    return !hb_unsigned_mul_overflows (a, b, &m) &&
269
627k
     this->check_range (base, m, c);
270
627k
  }
271
272
  template <typename T>
273
  bool check_array (const T *base, unsigned int len) const
274
353M
  {
275
353M
    return this->check_range (base, len, hb_static_size (T));
276
353M
  }
bool hb_sanitize_context_t::check_array<OT::IntType<unsigned short, 2u> >(OT::IntType<unsigned short, 2u> const*, unsigned int) const
Line
Count
Source
274
20.9M
  {
275
20.9M
    return this->check_range (base, len, hb_static_size (T));
276
20.9M
  }
bool hb_sanitize_context_t::check_array<OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes> >(OT::Layout::Common::RangeRecord<OT::Layout::SmallTypes> const*, unsigned int) const
Line
Count
Source
274
2.94M
  {
275
2.94M
    return this->check_range (base, len, hb_static_size (T));
276
2.94M
  }
bool hb_sanitize_context_t::check_array<OT::Layout::Common::RangeRecord<OT::Layout::MediumTypes> >(OT::Layout::Common::RangeRecord<OT::Layout::MediumTypes> const*, unsigned int) const
Line
Count
Source
274
736k
  {
275
736k
    return this->check_range (base, len, hb_static_size (T));
276
736k
  }
bool hb_sanitize_context_t::check_array<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int) const
Line
Count
Source
274
116M
  {
275
116M
    return this->check_range (base, len, hb_static_size (T));
276
116M
  }
bool hb_sanitize_context_t::check_array<OT::HBGlyphID24>(OT::HBGlyphID24 const*, unsigned int) const
Line
Count
Source
274
5.03M
  {
275
5.03M
    return this->check_range (base, len, hb_static_size (T));
276
5.03M
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
19.0k
  {
275
19.0k
    return this->check_range (base, len, hb_static_size (T));
276
19.0k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
25.3k
  {
275
25.3k
    return this->check_range (base, len, hb_static_size (T));
276
25.3k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
278k
  {
275
278k
    return this->check_range (base, len, hb_static_size (T));
276
278k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, true> const*, unsigned int) const
Line
Count
Source
274
8.80k
  {
275
8.80k
    return this->check_range (base, len, hb_static_size (T));
276
8.80k
  }
bool hb_sanitize_context_t::check_array<OT::VarRegionAxis>(OT::VarRegionAxis const*, unsigned int) const
Line
Count
Source
274
76.5k
  {
275
76.5k
    return this->check_range (base, len, hb_static_size (T));
276
76.5k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, true> const*, unsigned int) const
Line
Count
Source
274
80.2k
  {
275
80.2k
    return this->check_range (base, len, hb_static_size (T));
276
80.2k
  }
bool hb_sanitize_context_t::check_array<AAT::Feature>(AAT::Feature const*, unsigned int) const
Line
Count
Source
274
91.9k
  {
275
91.9k
    return this->check_range (base, len, hb_static_size (T));
276
91.9k
  }
bool hb_sanitize_context_t::check_array<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*, unsigned int) const
Line
Count
Source
274
10.6M
  {
275
10.6M
    return this->check_range (base, len, hb_static_size (T));
276
10.6M
  }
bool hb_sanitize_context_t::check_array<AAT::Entry<void> >(AAT::Entry<void> const*, unsigned int) const
Line
Count
Source
274
54.3k
  {
275
54.3k
    return this->check_range (base, len, hb_static_size (T));
276
54.3k
  }
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
Line
Count
Source
274
16.0k
  {
275
16.0k
    return this->check_range (base, len, hb_static_size (T));
276
16.0k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false> const*, unsigned int) const
Line
Count
Source
274
8.60k
  {
275
8.60k
    return this->check_range (base, len, hb_static_size (T));
276
8.60k
  }
bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::LigatureEntry<true>::EntryData> >(AAT::Entry<AAT::LigatureEntry<true>::EntryData> const*, unsigned int) const
Line
Count
Source
274
17.4k
  {
275
17.4k
    return this->check_range (base, len, hb_static_size (T));
276
17.4k
  }
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
Line
Count
Source
274
21.6k
  {
275
21.6k
    return this->check_range (base, len, hb_static_size (T));
276
21.6k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::FTStringRange>(AAT::FTStringRange const*, unsigned int) const
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
Line
Count
Source
274
11.7k
  {
275
11.7k
    return this->check_range (base, len, hb_static_size (T));
276
11.7k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> const*, unsigned int) const
Line
Count
Source
274
6.94k
  {
275
6.94k
    return this->check_range (base, len, hb_static_size (T));
276
6.94k
  }
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
Line
Count
Source
274
19.6k
  {
275
19.6k
    return this->check_range (base, len, hb_static_size (T));
276
19.6k
  }
bool hb_sanitize_context_t::check_array<AAT::KernPair>(AAT::KernPair const*, unsigned int) const
Line
Count
Source
274
7.90k
  {
275
7.90k
    return this->check_range (base, len, hb_static_size (T));
276
7.90k
  }
bool hb_sanitize_context_t::check_array<AAT::Entry<AAT::Format1Entry<true>::EntryData> >(AAT::Entry<AAT::Format1Entry<true>::EntryData> const*, unsigned int) const
Line
Count
Source
274
3.66k
  {
275
3.66k
    return this->check_range (base, len, hb_static_size (T));
276
3.66k
  }
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
Line
Count
Source
274
6.76k
  {
275
6.76k
    return this->check_range (base, len, hb_static_size (T));
276
6.76k
  }
bool hb_sanitize_context_t::check_array<OT::IntType<unsigned int, 4u> >(OT::IntType<unsigned int, 4u> const*, unsigned int) const
Line
Count
Source
274
31.8k
  {
275
31.8k
    return this->check_range (base, len, hb_static_size (T));
276
31.8k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> const*, unsigned int) const
Line
Count
Source
274
5.06k
  {
275
5.06k
    return this->check_range (base, len, hb_static_size (T));
276
5.06k
  }
bool hb_sanitize_context_t::check_array<AAT::Anchor>(AAT::Anchor const*, unsigned int) const
Line
Count
Source
274
53.8k
  {
275
53.8k
    return this->check_range (base, len, hb_static_size (T));
276
53.8k
  }
bool hb_sanitize_context_t::check_array<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int) const
Line
Count
Source
274
865k
  {
275
865k
    return this->check_range (base, len, hb_static_size (T));
276
865k
  }
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
Line
Count
Source
274
2.81k
  {
275
2.81k
    return this->check_range (base, len, hb_static_size (T));
276
2.81k
  }
bool hb_sanitize_context_t::check_array<AAT::TrackTableEntry>(AAT::TrackTableEntry const*, unsigned int) const
Line
Count
Source
274
2.16k
  {
275
2.16k
    return this->check_range (base, len, hb_static_size (T));
276
2.16k
  }
bool hb_sanitize_context_t::check_array<AAT::FeatureName>(AAT::FeatureName const*, unsigned int) const
Line
Count
Source
274
477
  {
275
477
    return this->check_range (base, len, hb_static_size (T));
276
477
  }
bool hb_sanitize_context_t::check_array<AAT::SettingName>(AAT::SettingName const*, unsigned int) const
Line
Count
Source
274
4.22k
  {
275
4.22k
    return this->check_range (base, len, hb_static_size (T));
276
4.22k
  }
bool hb_sanitize_context_t::check_array<OT::IntType<unsigned int, 3u> >(OT::IntType<unsigned int, 3u> const*, unsigned int) const
Line
Count
Source
274
4.46M
  {
275
4.46M
    return this->check_range (base, len, hb_static_size (T));
276
4.46M
  }
bool hb_sanitize_context_t::check_array<OT::Index>(OT::Index const*, unsigned int) const
Line
Count
Source
274
57.3M
  {
275
57.3M
    return this->check_range (base, len, hb_static_size (T));
276
57.3M
  }
bool hb_sanitize_context_t::check_array<OT::Record<OT::LangSys> >(OT::Record<OT::LangSys> const*, unsigned int) const
Line
Count
Source
274
1.48M
  {
275
1.48M
    return this->check_range (base, len, hb_static_size (T));
276
1.48M
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, true> const*, unsigned int) const
Line
Count
Source
274
28.4k
  {
275
28.4k
    return this->check_range (base, len, hb_static_size (T));
276
28.4k
  }
bool hb_sanitize_context_t::check_array<OT::FeatureTableSubstitutionRecord>(OT::FeatureTableSubstitutionRecord const*, unsigned int) const
Line
Count
Source
274
12.1k
  {
275
12.1k
    return this->check_range (base, len, hb_static_size (T));
276
12.1k
  }
bool hb_sanitize_context_t::check_array<OT::FeatureVariationRecord>(OT::FeatureVariationRecord const*, unsigned int) const
Line
Count
Source
274
16.3k
  {
275
16.3k
    return this->check_range (base, len, hb_static_size (T));
276
16.3k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<AAT::WidthDeltaPair>(AAT::WidthDeltaPair 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>, true> >(OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
1.64M
  {
275
1.64M
    return this->check_range (base, len, hb_static_size (T));
276
1.64M
  }
bool hb_sanitize_context_t::check_array<OT::LookupRecord>(OT::LookupRecord const*, unsigned int) const
Line
Count
Source
274
7.63M
  {
275
7.63M
    return this->check_range (base, len, hb_static_size (T));
276
7.63M
  }
bool hb_sanitize_context_t::check_array<OT::Layout::GPOS_impl::EntryExitRecord>(OT::Layout::GPOS_impl::EntryExitRecord const*, unsigned int) const
Line
Count
Source
274
161k
  {
275
161k
    return this->check_range (base, len, hb_static_size (T));
276
161k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
93.0M
  {
275
93.0M
    return this->check_range (base, len, hb_static_size (T));
276
93.0M
  }
bool hb_sanitize_context_t::check_array<OT::Layout::GPOS_impl::MarkRecord>(OT::Layout::GPOS_impl::MarkRecord const*, unsigned int) const
Line
Count
Source
274
601k
  {
275
601k
    return this->check_range (base, len, hb_static_size (T));
276
601k
  }
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
Line
Count
Source
274
5.11M
  {
275
5.11M
    return this->check_range (base, len, hb_static_size (T));
276
5.11M
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
1.68M
  {
275
1.68M
    return this->check_range (base, len, hb_static_size (T));
276
1.68M
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
327k
  {
275
327k
    return this->check_range (base, len, hb_static_size (T));
276
327k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
70.0k
  {
275
70.0k
    return this->check_range (base, len, hb_static_size (T));
276
70.0k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
126k
  {
275
126k
    return this->check_range (base, len, hb_static_size (T));
276
126k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
542k
  {
275
542k
    return this->check_range (base, len, hb_static_size (T));
276
542k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
473k
  {
275
473k
    return this->check_range (base, len, hb_static_size (T));
276
473k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::RuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
94.0k
  {
275
94.0k
    return this->check_range (base, len, hb_static_size (T));
276
94.0k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Rule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Rule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
32.2k
  {
275
32.2k
    return this->check_range (base, len, hb_static_size (T));
276
32.2k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
140k
  {
275
140k
    return this->check_range (base, len, hb_static_size (T));
276
140k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
678k
  {
275
678k
    return this->check_range (base, len, hb_static_size (T));
276
678k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
693k
  {
275
693k
    return this->check_range (base, len, hb_static_size (T));
276
693k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
96.0k
  {
275
96.0k
    return this->check_range (base, len, hb_static_size (T));
276
96.0k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::ChainRule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
52.1k
  {
275
52.1k
    return this->check_range (base, len, hb_static_size (T));
276
52.1k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
135k
  {
275
135k
    return this->check_range (base, len, hb_static_size (T));
276
135k
  }
bool hb_sanitize_context_t::check_array<OT::Record<OT::Script> >(OT::Record<OT::Script> const*, unsigned int) const
Line
Count
Source
274
677k
  {
275
677k
    return this->check_range (base, len, hb_static_size (T));
276
677k
  }
bool hb_sanitize_context_t::check_array<OT::Record<OT::Feature> >(OT::Record<OT::Feature> const*, unsigned int) const
Line
Count
Source
274
634k
  {
275
634k
    return this->check_range (base, len, hb_static_size (T));
276
634k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
248k
  {
275
248k
    return this->check_range (base, len, hb_static_size (T));
276
248k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
1.78k
  {
275
1.78k
    return this->check_range (base, len, hb_static_size (T));
276
1.78k
  }
bool hb_sanitize_context_t::check_array<OT::UnicodeValueRange>(OT::UnicodeValueRange const*, unsigned int) const
Line
Count
Source
274
7.79k
  {
275
7.79k
    return this->check_range (base, len, hb_static_size (T));
276
7.79k
  }
bool hb_sanitize_context_t::check_array<OT::UVSMapping>(OT::UVSMapping const*, unsigned int) const
Line
Count
Source
274
25.7k
  {
275
25.7k
    return this->check_range (base, len, hb_static_size (T));
276
25.7k
  }
bool hb_sanitize_context_t::check_array<OT::VariationSelectorRecord>(OT::VariationSelectorRecord const*, unsigned int) const
Line
Count
Source
274
9.38k
  {
275
9.38k
    return this->check_range (base, len, hb_static_size (T));
276
9.38k
  }
bool hb_sanitize_context_t::check_array<OT::CmapSubtableLongGroup>(OT::CmapSubtableLongGroup const*, unsigned int) const
Line
Count
Source
274
102k
  {
275
102k
    return this->check_range (base, len, hb_static_size (T));
276
102k
  }
bool hb_sanitize_context_t::check_array<OT::EncodingRecord>(OT::EncodingRecord const*, unsigned int) const
Line
Count
Source
274
246k
  {
275
246k
    return this->check_range (base, len, hb_static_size (T));
276
246k
  }
bool hb_sanitize_context_t::check_array<OT::NoVariable<OT::ColorStop> >(OT::NoVariable<OT::ColorStop> const*, unsigned int) const
Line
Count
Source
274
537k
  {
275
537k
    return this->check_range (base, len, hb_static_size (T));
276
537k
  }
bool hb_sanitize_context_t::check_array<OT::Variable<OT::ColorStop> >(OT::Variable<OT::ColorStop> const*, unsigned int) const
Line
Count
Source
274
629k
  {
275
629k
    return this->check_range (base, len, hb_static_size (T));
276
629k
  }
bool hb_sanitize_context_t::check_array<OT::ClipRecord>(OT::ClipRecord const*, unsigned int) const
Line
Count
Source
274
23.4k
  {
275
23.4k
    return this->check_range (base, len, hb_static_size (T));
276
23.4k
  }
bool hb_sanitize_context_t::check_array<OT::BaseGlyphPaintRecord>(OT::BaseGlyphPaintRecord const*, unsigned int) const
Line
Count
Source
274
87.8k
  {
275
87.8k
    return this->check_range (base, len, hb_static_size (T));
276
87.8k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, true> const*, unsigned int) const
Line
Count
Source
274
56.1k
  {
275
56.1k
    return this->check_range (base, len, hb_static_size (T));
276
56.1k
  }
bool hb_sanitize_context_t::check_array<OT::BaseGlyphRecord>(OT::BaseGlyphRecord const*, unsigned int) const
Line
Count
Source
274
100k
  {
275
100k
    return this->check_range (base, len, hb_static_size (T));
276
100k
  }
bool hb_sanitize_context_t::check_array<OT::LayerRecord>(OT::LayerRecord const*, unsigned int) const
Line
Count
Source
274
97.8k
  {
275
97.8k
    return this->check_range (base, len, hb_static_size (T));
276
97.8k
  }
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
Line
Count
Source
274
18.1k
  {
275
18.1k
    return this->check_range (base, len, hb_static_size (T));
276
18.1k
  }
bool hb_sanitize_context_t::check_array<OT::TableRecord>(OT::TableRecord const*, unsigned int) const
Line
Count
Source
274
477k
  {
275
477k
    return this->check_range (base, len, hb_static_size (T));
276
477k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, true> const*, unsigned int) const
Line
Count
Source
274
1.94k
  {
275
1.94k
    return this->check_range (base, len, hb_static_size (T));
276
1.94k
  }
bool hb_sanitize_context_t::check_array<OT::ResourceTypeRecord>(OT::ResourceTypeRecord const*, unsigned int) const
Line
Count
Source
274
1.33k
  {
275
1.33k
    return this->check_range (base, len, hb_static_size (T));
276
1.33k
  }
bool hb_sanitize_context_t::check_array<OT::ResourceRecord>(OT::ResourceRecord const*, unsigned int) const
Line
Count
Source
274
193k
  {
275
193k
    return this->check_range (base, len, hb_static_size (T));
276
193k
  }
bool hb_sanitize_context_t::check_array<OT::AxisRecord>(OT::AxisRecord const*, unsigned int) const
Line
Count
Source
274
31.5k
  {
275
31.5k
    return this->check_range (base, len, hb_static_size (T));
276
31.5k
  }
bool hb_sanitize_context_t::check_array<OT::AxisValueMap>(OT::AxisValueMap const*, unsigned int) const
Line
Count
Source
274
107k
  {
275
107k
    return this->check_range (base, len, hb_static_size (T));
276
107k
  }
bool hb_sanitize_context_t::check_array<OT::SVGDocumentIndexEntry>(OT::SVGDocumentIndexEntry const*, unsigned int) const
Line
Count
Source
274
1.29k
  {
275
1.29k
    return this->check_range (base, len, hb_static_size (T));
276
1.29k
  }
bool hb_sanitize_context_t::check_array<OT::BitmapSizeTable>(OT::BitmapSizeTable const*, unsigned int) const
Line
Count
Source
274
4.91k
  {
275
4.91k
    return this->check_range (base, len, hb_static_size (T));
276
4.91k
  }
bool hb_sanitize_context_t::check_array<OT::IndexSubtableRecord>(OT::IndexSubtableRecord const*, unsigned int) const
Line
Count
Source
274
14.2k
  {
275
14.2k
    return this->check_range (base, len, hb_static_size (T));
276
14.2k
  }
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
Line
Count
Source
274
1.89k
  {
275
1.89k
    return this->check_range (base, len, hb_static_size (T));
276
1.89k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, true> const*, unsigned int) const
Line
Count
Source
274
3.69k
  {
275
3.69k
    return this->check_range (base, len, hb_static_size (T));
276
3.69k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::SBIXGlyph, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::SBIXGlyph, OT::IntType<unsigned int, 4u>, true> const*, unsigned int) const
Line
Count
Source
274
9.32k
  {
275
9.32k
    return this->check_range (base, len, hb_static_size (T));
276
9.32k
  }
bool hb_sanitize_context_t::check_array<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) const
Line
Count
Source
274
2.43k
  {
275
2.43k
    return this->check_range (base, len, hb_static_size (T));
276
2.43k
  }
bool hb_sanitize_context_t::check_array<CFF::Encoding1_Range>(CFF::Encoding1_Range const*, unsigned int) const
Line
Count
Source
274
222
  {
275
222
    return this->check_range (base, len, hb_static_size (T));
276
222
  }
bool hb_sanitize_context_t::check_array<CFF::SuppEncoding>(CFF::SuppEncoding const*, unsigned int) const
Line
Count
Source
274
141
  {
275
141
    return this->check_range (base, len, hb_static_size (T));
276
141
  }
bool hb_sanitize_context_t::check_array<unsigned char>(unsigned char const*, unsigned int) const
Line
Count
Source
274
2.61M
  {
275
2.61M
    return this->check_range (base, len, hb_static_size (T));
276
2.61M
  }
bool hb_sanitize_context_t::check_array<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) const
Line
Count
Source
274
41
  {
275
41
    return this->check_range (base, len, hb_static_size (T));
276
41
  }
bool hb_sanitize_context_t::check_array<OT::DataMap>(OT::DataMap const*, unsigned int) const
Line
Count
Source
274
994
  {
275
994
    return this->check_range (base, len, hb_static_size (T));
276
994
  }
bool hb_sanitize_context_t::check_array<OT::NameRecord>(OT::NameRecord const*, unsigned int) const
Line
Count
Source
274
254k
  {
275
254k
    return this->check_range (base, len, hb_static_size (T));
276
254k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
3.11M
  {
275
3.11M
    return this->check_range (base, len, hb_static_size (T));
276
3.11M
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
546k
  {
275
546k
    return this->check_range (base, len, hb_static_size (T));
276
546k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
133k
  {
275
133k
    return this->check_range (base, len, hb_static_size (T));
276
133k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
114k
  {
275
114k
    return this->check_range (base, len, hb_static_size (T));
276
114k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
68.0k
  {
275
68.0k
    return this->check_range (base, len, hb_static_size (T));
276
68.0k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
424k
  {
275
424k
    return this->check_range (base, len, hb_static_size (T));
276
424k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
2.47M
  {
275
2.47M
    return this->check_range (base, len, hb_static_size (T));
276
2.47M
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
106k
  {
275
106k
    return this->check_range (base, len, hb_static_size (T));
276
106k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
44.1k
  {
275
44.1k
    return this->check_range (base, len, hb_static_size (T));
276
44.1k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
363k
  {
275
363k
    return this->check_range (base, len, hb_static_size (T));
276
363k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u>, true> const*, unsigned int) const
Line
Count
Source
274
1.93k
  {
275
1.93k
    return this->check_range (base, len, hb_static_size (T));
276
1.93k
  }
bool hb_sanitize_context_t::check_array<OT::VertOriginMetric>(OT::VertOriginMetric const*, unsigned int) const
Line
Count
Source
274
2.75k
  {
275
2.75k
    return this->check_range (base, len, hb_static_size (T));
276
2.75k
  }
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>, true> >(OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
bool hb_sanitize_context_t::check_array<OT::Tag>(OT::Tag const*, unsigned int) const
Line
Count
Source
274
19.5k
  {
275
19.5k
    return this->check_range (base, len, hb_static_size (T));
276
19.5k
  }
bool hb_sanitize_context_t::check_array<OT::BaseScriptRecord>(OT::BaseScriptRecord const*, unsigned int) const
Line
Count
Source
274
18.3k
  {
275
18.3k
    return this->check_range (base, len, hb_static_size (T));
276
18.3k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
103k
  {
275
103k
    return this->check_range (base, len, hb_static_size (T));
276
103k
  }
bool hb_sanitize_context_t::check_array<OT::FeatMinMaxRecord>(OT::FeatMinMaxRecord const*, unsigned int) const
Line
Count
Source
274
2.12M
  {
275
2.12M
    return this->check_range (base, len, hb_static_size (T));
276
2.12M
  }
bool hb_sanitize_context_t::check_array<OT::BaseLangSysRecord>(OT::BaseLangSysRecord const*, unsigned int) const
Line
Count
Source
274
198k
  {
275
198k
    return this->check_range (base, len, hb_static_size (T));
276
198k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::Record<OT::JstfLangSys> >(OT::Record<OT::JstfLangSys> const*, unsigned int) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::Record<OT::JstfScript> >(OT::Record<OT::JstfScript> const*, unsigned int) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
bool hb_sanitize_context_t::check_array<OT::MathValueRecord>(OT::MathValueRecord const*, unsigned int) const
Line
Count
Source
274
361k
  {
275
361k
    return this->check_range (base, len, hb_static_size (T));
276
361k
  }
bool hb_sanitize_context_t::check_array<OT::MathKernInfoRecord>(OT::MathKernInfoRecord const*, unsigned int) const
Line
Count
Source
274
7.43k
  {
275
7.43k
    return this->check_range (base, len, hb_static_size (T));
276
7.43k
  }
bool hb_sanitize_context_t::check_array<OT::OffsetTo<OT::MathGlyphConstruction, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathGlyphConstruction, OT::IntType<unsigned short, 2u>, true> const*, unsigned int) const
Line
Count
Source
274
7.04k
  {
275
7.04k
    return this->check_range (base, len, hb_static_size (T));
276
7.04k
  }
bool hb_sanitize_context_t::check_array<OT::MathGlyphPartRecord>(OT::MathGlyphPartRecord const*, unsigned int) const
Line
Count
Source
274
163k
  {
275
163k
    return this->check_range (base, len, hb_static_size (T));
276
163k
  }
bool hb_sanitize_context_t::check_array<OT::MathGlyphVariantRecord>(OT::MathGlyphVariantRecord const*, unsigned int) const
Line
Count
Source
274
281k
  {
275
281k
    return this->check_range (base, len, hb_static_size (T));
276
281k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::GaspRange>(OT::GaspRange const*, unsigned int) const
277
278
  template <typename T>
279
  bool check_array (const T *base,
280
        unsigned int a,
281
        unsigned int b) const
282
11.9M
  {
283
11.9M
    return this->check_range (base, a, b, hb_static_size (T));
284
11.9M
  }
bool hb_sanitize_context_t::check_array<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int, unsigned int) const
Line
Count
Source
282
11.2M
  {
283
11.2M
    return this->check_range (base, a, b, hb_static_size (T));
284
11.2M
  }
bool hb_sanitize_context_t::check_array<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*, unsigned int, unsigned int) const
Line
Count
Source
282
627k
  {
283
627k
    return this->check_range (base, a, b, hb_static_size (T));
284
627k
  }
285
286
  bool check_start_recursion (int max_depth)
287
8.07M
  {
288
8.07M
    if (unlikely (recursion_depth >= max_depth)) return false;
289
8.07M
    return ++recursion_depth;
290
8.07M
  }
291
292
  bool end_recursion (bool result)
293
8.07M
  {
294
8.07M
    recursion_depth--;
295
8.07M
    return result;
296
8.07M
  }
297
298
  template <typename Type>
299
  bool check_struct (const Type *obj) const
300
16.2G
  { return likely (this->check_range (obj, obj->min_size)); }
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
300
1.35M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
2.14M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IntType<unsigned short, 2u> >(OT::IntType<unsigned short, 2u> const*) const
Line
Count
Source
300
4.81G
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ClassDefFormat1_3<OT::Layout::SmallTypes> >(OT::ClassDefFormat1_3<OT::Layout::SmallTypes> const*) const
Line
Count
Source
300
207k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ClassDefFormat1_3<OT::Layout::MediumTypes> >(OT::ClassDefFormat1_3<OT::Layout::MediumTypes> const*) const
Line
Count
Source
300
49.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IntType<unsigned int, 3u> >(OT::IntType<unsigned int, 3u> const*) const
Line
Count
Source
300
2.82M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AttachList, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::AttachList, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
106k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
102M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
1.00M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
100k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
824k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
1.43G
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CaretValueFormat1>(OT::CaretValueFormat1 const*) const
Line
Count
Source
300
20.2M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CaretValueFormat2>(OT::CaretValueFormat2 const*) const
Line
Count
Source
300
9.26M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CaretValueFormat3>(OT::CaretValueFormat3 const*) const
Line
Count
Source
300
6.78M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
826M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::HintingDevice>(OT::HintingDevice const*) const
Line
Count
Source
300
25.1M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::VariationDevice>(OT::VariationDevice const*) const
Line
Count
Source
300
2.32M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
35.3k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
46.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::VariationStore, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::VariationStore, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
134k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::VariationStore>(OT::VariationStore const*) const
Line
Count
Source
300
112k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::VarRegionList, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::VarRegionList, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
83.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::VarRegionList>(OT::VarRegionList const*) const
Line
Count
Source
300
80.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
219k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::VarData>(OT::VarData const*) const
Line
Count
Source
300
160k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
910k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AttachList, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::AttachList, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
11.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
8.73k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
7.82k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IntType<unsigned int, 4u> >(OT::IntType<unsigned int, 4u> const*) const
Line
Count
Source
300
74.9M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ExtendedTypes, void> >(AAT::StateTable<AAT::ExtendedTypes, void> const*) const
Line
Count
Source
300
5.55k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
52.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::VarSizedBinSearchHeader>(OT::VarSizedBinSearchHeader const*) const
Line
Count
Source
300
33.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::IntType<unsigned short, 2u> > >(AAT::LookupSegmentArray<OT::IntType<unsigned short, 2u> > const*) const
Line
Count
Source
300
6.94k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
6.77k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::IntType<unsigned short, 2u> > >(AAT::LookupFormat8<OT::IntType<unsigned short, 2u> > const*) const
Line
Count
Source
300
11.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupFormat10<OT::IntType<unsigned short, 2u> > >(AAT::LookupFormat10<OT::IntType<unsigned short, 2u> > const*) const
Line
Count
Source
300
868
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
9.11k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false>, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false>, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
8.60k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
11.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::HBGlyphID16> >(AAT::LookupSegmentArray<OT::HBGlyphID16> const*) const
Line
Count
Source
300
2.38k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
2.33k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::HBGlyphID16> >(AAT::LookupFormat8<OT::HBGlyphID16> const*) const
Line
Count
Source
300
6.70k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupFormat10<OT::HBGlyphID16> >(AAT::LookupFormat10<OT::HBGlyphID16> const*) const
Line
Count
Source
300
123
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LigatureSubtable<AAT::ExtendedTypes> >(AAT::LigatureSubtable<AAT::ExtendedTypes> const*) const
Line
Count
Source
300
8.04k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
8.04k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::InsertionSubtable<AAT::ExtendedTypes> >(AAT::InsertionSubtable<AAT::ExtendedTypes> const*) const
Line
Count
Source
300
15.1k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
15.1k
  { return likely (this->check_range (obj, obj->min_size)); }
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
bool hb_sanitize_context_t::check_struct<AAT::StateTable<AAT::ObsoleteTypes, void> >(AAT::StateTable<AAT::ObsoleteTypes, void> const*) const
Line
Count
Source
300
23.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
46.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::ClassTable<OT::IntType<unsigned char, 1u> > >(AAT::ClassTable<OT::IntType<unsigned char, 1u> > const*) const
Line
Count
Source
300
46.7k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
7.57k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false>, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false>, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
6.94k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> const*) const
bool hb_sanitize_context_t::check_struct<AAT::LigatureSubtable<AAT::ObsoleteTypes> >(AAT::LigatureSubtable<AAT::ObsoleteTypes> const*) const
Line
Count
Source
300
5.46k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::InsertionSubtable<AAT::ObsoleteTypes> >(AAT::InsertionSubtable<AAT::ObsoleteTypes> const*) const
Line
Count
Source
300
16.1k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
16.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableHeader>(AAT::KerxSubTableHeader const*) const
Line
Count
Source
300
48.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BinSearchHeader<OT::IntType<unsigned int, 4u> > >(OT::BinSearchHeader<OT::IntType<unsigned int, 4u> > const*) const
Line
Count
Source
300
2.14k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat1<AAT::KerxSubTableHeader> >(AAT::KerxSubTableFormat1<AAT::KerxSubTableHeader> const*) const
Line
Count
Source
300
2.85k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
2.82k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat2<AAT::KerxSubTableHeader> >(AAT::KerxSubTableFormat2<AAT::KerxSubTableHeader> const*) const
Line
Count
Source
300
1.35k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader> >(AAT::KerxSubTableFormat4<AAT::KerxSubTableHeader> const*) const
Line
Count
Source
300
5.38k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
5.35k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat6<AAT::KerxSubTableHeader> >(AAT::KerxSubTableFormat6<AAT::KerxSubTableHeader> const*) const
Line
Count
Source
300
5.15k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
5.87k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::IntType<unsigned int, 4u> > >(AAT::LookupSegmentArray<OT::IntType<unsigned int, 4u> > const*) const
Line
Count
Source
300
4.38k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
4.26k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::IntType<unsigned int, 4u> > >(AAT::LookupFormat8<OT::IntType<unsigned int, 4u> > const*) const
Line
Count
Source
300
408
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::LookupFormat10<OT::IntType<unsigned int, 4u> > >(AAT::LookupFormat10<OT::IntType<unsigned int, 4u> > const*) const
Line
Count
Source
300
947
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::ankr>(AAT::ankr const*) const
Line
Count
Source
300
10.0k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, false> >, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> >, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
8.67k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
55.8k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, false> > >(AAT::LookupSegmentSingle<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> > const*) const
Line
Count
Source
300
5.03k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, false> > >(AAT::LookupSegmentArray<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> > const*) const
Line
Count
Source
300
2.25k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, false> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
2.11k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, false> > >(AAT::LookupSingle<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> > const*) const
Line
Count
Source
300
17.1k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, false> > >(AAT::LookupFormat8<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> > const*) const
Line
Count
Source
300
288
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*) const
Line
Count
Source
300
660k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IntType<int, 4u> >(OT::IntType<int, 4u> const*) const
Line
Count
Source
300
57.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::trak>(AAT::trak const*) const
Line
Count
Source
300
3.56k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::TrackData, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<AAT::TrackData, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
5.14k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::TrackData>(AAT::TrackData const*) const
Line
Count
Source
300
3.15k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<int, 4u>, 16u> >, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<int, 4u>, 16u> >, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
2.81k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::TrackTableEntry>(AAT::TrackTableEntry const*) const
Line
Count
Source
300
555k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<short, 2u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<short, 2u> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
555k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::feat>(AAT::feat const*) const
Line
Count
Source
300
724
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::FeatureName>(AAT::FeatureName const*) const
Line
Count
Source
300
4.22k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::LONGDATETIME>(OT::LONGDATETIME const*) const
bool hb_sanitize_context_t::check_struct<OT::IntType<unsigned char, 1u> >(OT::IntType<unsigned char, 1u> const*) const
Line
Count
Source
300
8.52M
  { return likely (this->check_range (obj, obj->min_size)); }
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<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::Layout::Common::RangeRecord<OT::Layout::MediumTypes> >(OT::Layout::Common::RangeRecord<OT::Layout::MediumTypes> const*) const
bool hb_sanitize_context_t::check_struct<OT::FeatureParamsSize>(OT::FeatureParamsSize const*) const
Line
Count
Source
300
36.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::FeatureParamsStylisticSet>(OT::FeatureParamsStylisticSet const*) const
Line
Count
Source
300
208k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::FeatureParamsCharacterVariants>(OT::FeatureParamsCharacterVariants const*) const
Line
Count
Source
300
70.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Feature>(OT::Feature const*) const
Line
Count
Source
300
5.30M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
2.24M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::LangSys>(OT::LangSys const*) const
Line
Count
Source
300
52.2M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LangSys, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::LangSys, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
1.55G
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Record<OT::LangSys> >(OT::Record<OT::LangSys> const*) const
Line
Count
Source
300
1.55G
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VarRegionAxis>(OT::VarRegionAxis const*) const
bool hb_sanitize_context_t::check_struct<OT::ConditionFormat1>(OT::ConditionFormat1 const*) const
Line
Count
Source
300
9.35k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
254k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::FeatureTableSubstitutionRecord>(OT::FeatureTableSubstitutionRecord const*) const
Line
Count
Source
300
88.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Feature, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Feature, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
88.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ConditionSet, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::ConditionSet, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
94.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::FeatureTableSubstitution, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::FeatureTableSubstitution, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
92.9k
  { return likely (this->check_range (obj, obj->min_size)); }
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::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::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::JustificationHeader>(AAT::JustificationHeader const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::JustificationCategory, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<AAT::JustificationCategory, OT::IntType<unsigned short, 2u>, 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>, true> >(OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, true> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::PostcompensationActionChain, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<AAT::PostcompensationActionChain, OT::IntType<unsigned short, 2u>, 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>, true> > >(AAT::LookupSegmentSingle<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, 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>, true> > >(AAT::LookupSegmentArray<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, 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>, true> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, true> >, OT::IntType<unsigned short, 2u>, 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>, true> > >(AAT::LookupSingle<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, 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>, true> > >(AAT::LookupFormat8<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, 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>, true> >(OT::OffsetTo<AAT::JustificationHeader, OT::IntType<unsigned short, 2u>, true> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::LookupRecord>(OT::LookupRecord const*) const
bool hb_sanitize_context_t::check_struct<OT::ContextFormat3>(OT::ContextFormat3 const*) const
Line
Count
Source
300
95.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::SinglePosFormat1>(OT::Layout::GPOS_impl::SinglePosFormat1 const*) const
Line
Count
Source
300
1.25M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::SinglePosFormat2>(OT::Layout::GPOS_impl::SinglePosFormat2 const*) const
Line
Count
Source
300
601k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::AnchorFormat1>(OT::Layout::GPOS_impl::AnchorFormat1 const*) const
Line
Count
Source
300
88.5M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::AnchorFormat2>(OT::Layout::GPOS_impl::AnchorFormat2 const*) const
Line
Count
Source
300
21.7M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::AnchorFormat3>(OT::Layout::GPOS_impl::AnchorFormat3 const*) const
Line
Count
Source
300
16.6M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
3.66G
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::AnchorMatrix>(OT::Layout::GPOS_impl::AnchorMatrix const*) const
Line
Count
Source
300
93.0M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::MarkRecord>(OT::Layout::GPOS_impl::MarkRecord const*) const
Line
Count
Source
300
614M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Lookup>(OT::Lookup const*) const
Line
Count
Source
300
5.29M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
162M
  { return likely (this->check_range (obj, obj->min_size)); }
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
300
329k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
4.44M
  { return likely (this->check_range (obj, obj->min_size)); }
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
300
2.27M
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
276k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::MediumTypes> >(OT::Layout::GPOS_impl::PairPosFormat1_3<OT::Layout::MediumTypes> const*) const
Line
Count
Source
300
71.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
2.89M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
438k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes> >(OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes> const*) const
Line
Count
Source
300
129k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::MediumTypes> >(OT::Layout::GPOS_impl::PairPosFormat2_4<OT::Layout::MediumTypes> const*) const
Line
Count
Source
300
171k
  { return likely (this->check_range (obj, obj->min_size)); }
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
300
268k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
674k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
170M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::MediumTypes> >(OT::Layout::GPOS_impl::MarkBasePosFormat1_2<OT::Layout::MediumTypes> const*) const
Line
Count
Source
300
163k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
619k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
398k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
163k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
160k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::MediumTypes> >(OT::Layout::GPOS_impl::MarkLigPosFormat1_2<OT::Layout::MediumTypes> const*) const
Line
Count
Source
300
221k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
219k
  { return likely (this->check_range (obj, obj->min_size)); }
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
300
248k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::MediumTypes> >(OT::Layout::GPOS_impl::MarkMarkPosFormat1_2<OT::Layout::MediumTypes> const*) const
Line
Count
Source
300
242k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
1.07M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
5.24M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
338k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Rule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Rule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
3.67M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
395k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
3.95M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
43.2M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
622k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ChainRule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::ChainRule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
9.29M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
475k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ExtensionFormat1<OT::Layout::GPOS_impl::ExtensionPos> >(OT::ExtensionFormat1<OT::Layout::GPOS_impl::ExtensionPos> const*) const
Line
Count
Source
300
83.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
704k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Record<OT::Script> >(OT::Record<OT::Script> const*) const
Line
Count
Source
300
5.42M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Script, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Script, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
5.42M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
658k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Record<OT::Feature> >(OT::Record<OT::Feature> const*) const
Line
Count
Source
300
9.60M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Feature, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Feature, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
9.60M
  { return likely (this->check_range (obj, obj->min_size)); }
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>, true> >(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
259k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
3.02M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::FeatureVariations, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::FeatureVariations, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
42.8k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
16.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
11.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u> >, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u> >, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
5.20k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
35.1k
  { return likely (this->check_range (obj, obj->min_size)); }
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
bool hb_sanitize_context_t::check_struct<OT::maxp>(OT::maxp const*) const
Line
Count
Source
300
245k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::maxpV1Tail>(OT::maxpV1Tail const*) const
Line
Count
Source
300
120k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::head>(OT::head const*) const
Line
Count
Source
300
215k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VariationValueRecord>(OT::VariationValueRecord const*) const
bool hb_sanitize_context_t::check_struct<OT::MVAR>(OT::MVAR const*) const
Line
Count
Source
300
31.3k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::VariationStore, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::VariationStore, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
31.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OS2V1Tail>(OT::OS2V1Tail const*) const
Line
Count
Source
300
183k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OS2V2Tail>(OT::OS2V2Tail const*) const
Line
Count
Source
300
178k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OS2V5Tail>(OT::OS2V5Tail const*) const
Line
Count
Source
300
20.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OS2>(OT::OS2 const*) const
Line
Count
Source
300
196k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CmapSubtableFormat0>(OT::CmapSubtableFormat0 const*) const
Line
Count
Source
300
86.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CmapSubtableFormat4>(OT::CmapSubtableFormat4 const*) const
Line
Count
Source
300
312k
  { return likely (this->check_range (obj, obj->min_size)); }
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
bool hb_sanitize_context_t::check_struct<OT::VariationSelectorRecord>(OT::VariationSelectorRecord const*) const
Line
Count
Source
300
52.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::DefaultUVS, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::DefaultUVS, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
52.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::NonDefaultUVS, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::NonDefaultUVS, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
51.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CmapSubtableFormat14>(OT::CmapSubtableFormat14 const*) const
Line
Count
Source
300
9.49k
  { return likely (this->check_range (obj, obj->min_size)); }
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
300
25.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CmapSubtableTrimmed<OT::IntType<unsigned int, 4u> > >(OT::CmapSubtableTrimmed<OT::IntType<unsigned int, 4u> > const*) const
Line
Count
Source
300
5.86k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat12> >(OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat12> const*) const
Line
Count
Source
300
91.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat13> >(OT::CmapSubtableLongSegmented<OT::CmapSubtableFormat13> const*) const
Line
Count
Source
300
12.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::EncodingRecord>(OT::EncodingRecord const*) const
Line
Count
Source
300
909k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::CmapSubtable, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::CmapSubtable, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
909k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::cmap>(OT::cmap const*) const
Line
Count
Source
300
287k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::DeltaSetIndexMapFormat01<OT::IntType<unsigned short, 2u> > >(OT::DeltaSetIndexMapFormat01<OT::IntType<unsigned short, 2u> > const*) const
Line
Count
Source
300
34.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::DeltaSetIndexMapFormat01<OT::IntType<unsigned int, 4u> > >(OT::DeltaSetIndexMapFormat01<OT::IntType<unsigned int, 4u> > const*) const
Line
Count
Source
300
3.66k
  { return likely (this->check_range (obj, obj->min_size)); }
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
bool hb_sanitize_context_t::check_struct<OT::Affine2x3>(OT::Affine2x3 const*) const
Line
Count
Source
300
44.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintColrLayers>(OT::PaintColrLayers const*) const
Line
Count
Source
300
546k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintSolid>(OT::PaintSolid const*) const
Line
Count
Source
300
957k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintGlyph>(OT::PaintGlyph const*) const
Line
Count
Source
300
2.04M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
3.73M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintSolid> >(OT::NoVariable<OT::PaintSolid> const*) const
Line
Count
Source
300
907k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintSolid> >(OT::Variable<OT::PaintSolid> const*) const
Line
Count
Source
300
50.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintLinearGradient<OT::NoVariable> > >(OT::NoVariable<OT::PaintLinearGradient<OT::NoVariable> > const*) const
Line
Count
Source
300
166k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintLinearGradient<OT::NoVariable> >(OT::PaintLinearGradient<OT::NoVariable> const*) const
Line
Count
Source
300
165k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ColorLine<OT::NoVariable>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ColorLine<OT::NoVariable>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
634k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ColorLine<OT::NoVariable> >(OT::ColorLine<OT::NoVariable> const*) const
Line
Count
Source
300
576k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::ColorStop> >(OT::NoVariable<OT::ColorStop> const*) const
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintLinearGradient<OT::Variable> > >(OT::Variable<OT::PaintLinearGradient<OT::Variable> > const*) const
Line
Count
Source
300
35.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintLinearGradient<OT::Variable> >(OT::PaintLinearGradient<OT::Variable> const*) const
Line
Count
Source
300
35.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ColorLine<OT::Variable>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ColorLine<OT::Variable>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
670k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ColorLine<OT::Variable> >(OT::ColorLine<OT::Variable> const*) const
Line
Count
Source
300
645k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::ColorStop> >(OT::Variable<OT::ColorStop> const*) const
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintRadialGradient<OT::NoVariable> > >(OT::NoVariable<OT::PaintRadialGradient<OT::NoVariable> > const*) const
Line
Count
Source
300
165k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintRadialGradient<OT::NoVariable> >(OT::PaintRadialGradient<OT::NoVariable> const*) const
Line
Count
Source
300
165k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintRadialGradient<OT::Variable> > >(OT::Variable<OT::PaintRadialGradient<OT::Variable> > const*) const
Line
Count
Source
300
50.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintRadialGradient<OT::Variable> >(OT::PaintRadialGradient<OT::Variable> const*) const
Line
Count
Source
300
50.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintSweepGradient<OT::NoVariable> > >(OT::NoVariable<OT::PaintSweepGradient<OT::NoVariable> > const*) const
Line
Count
Source
300
303k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintSweepGradient<OT::NoVariable> >(OT::PaintSweepGradient<OT::NoVariable> const*) const
Line
Count
Source
300
302k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintSweepGradient<OT::Variable> > >(OT::Variable<OT::PaintSweepGradient<OT::Variable> > const*) const
Line
Count
Source
300
584k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintSweepGradient<OT::Variable> >(OT::PaintSweepGradient<OT::Variable> const*) const
Line
Count
Source
300
584k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintTransform<OT::NoVariable> >(OT::PaintTransform<OT::NoVariable> const*) const
Line
Count
Source
300
115k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::NoVariable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::NoVariable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
74.8k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::Affine2x3> >(OT::NoVariable<OT::Affine2x3> const*) const
Line
Count
Source
300
56.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintTransform<OT::Variable> >(OT::PaintTransform<OT::Variable> const*) const
Line
Count
Source
300
31.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Variable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Variable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
31.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::Affine2x3> >(OT::Variable<OT::Affine2x3> const*) const
Line
Count
Source
300
24.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintTranslate> >(OT::NoVariable<OT::PaintTranslate> const*) const
Line
Count
Source
300
38.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintTranslate> >(OT::Variable<OT::PaintTranslate> const*) const
Line
Count
Source
300
47.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintScale> >(OT::NoVariable<OT::PaintScale> const*) const
Line
Count
Source
300
105k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintScale> >(OT::Variable<OT::PaintScale> const*) const
Line
Count
Source
300
20.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintScaleAroundCenter> >(OT::NoVariable<OT::PaintScaleAroundCenter> const*) const
Line
Count
Source
300
18.8k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintScaleAroundCenter> >(OT::Variable<OT::PaintScaleAroundCenter> const*) const
Line
Count
Source
300
27.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintScaleUniform> >(OT::NoVariable<OT::PaintScaleUniform> const*) const
Line
Count
Source
300
18.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintScaleUniform> >(OT::Variable<OT::PaintScaleUniform> const*) const
Line
Count
Source
300
24.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintScaleUniformAroundCenter> >(OT::NoVariable<OT::PaintScaleUniformAroundCenter> const*) const
Line
Count
Source
300
228k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintScaleUniformAroundCenter> >(OT::Variable<OT::PaintScaleUniformAroundCenter> const*) const
Line
Count
Source
300
22.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintRotate> >(OT::NoVariable<OT::PaintRotate> const*) const
Line
Count
Source
300
22.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintRotate> >(OT::Variable<OT::PaintRotate> const*) const
Line
Count
Source
300
16.3k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintRotateAroundCenter> >(OT::NoVariable<OT::PaintRotateAroundCenter> const*) const
Line
Count
Source
300
20.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintRotateAroundCenter> >(OT::Variable<OT::PaintRotateAroundCenter> const*) const
Line
Count
Source
300
28.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintSkew> >(OT::NoVariable<OT::PaintSkew> const*) const
Line
Count
Source
300
15.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintSkew> >(OT::Variable<OT::PaintSkew> const*) const
Line
Count
Source
300
21.8k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::PaintSkewAroundCenter> >(OT::NoVariable<OT::PaintSkewAroundCenter> const*) const
Line
Count
Source
300
24.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintSkewAroundCenter> >(OT::Variable<OT::PaintSkewAroundCenter> const*) const
Line
Count
Source
300
29.3k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintColrGlyph>(OT::PaintColrGlyph const*) const
Line
Count
Source
300
63.8k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintTranslate>(OT::PaintTranslate const*) const
Line
Count
Source
300
84.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintScale>(OT::PaintScale const*) const
Line
Count
Source
300
125k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintScaleAroundCenter>(OT::PaintScaleAroundCenter const*) const
Line
Count
Source
300
46.3k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintScaleUniform>(OT::PaintScaleUniform const*) const
Line
Count
Source
300
42.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintScaleUniformAroundCenter>(OT::PaintScaleUniformAroundCenter const*) const
Line
Count
Source
300
250k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintRotate>(OT::PaintRotate const*) const
Line
Count
Source
300
38.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintRotateAroundCenter>(OT::PaintRotateAroundCenter const*) const
Line
Count
Source
300
48.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintSkew>(OT::PaintSkew const*) const
Line
Count
Source
300
37.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintSkewAroundCenter>(OT::PaintSkewAroundCenter const*) const
Line
Count
Source
300
53.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::PaintComposite>(OT::PaintComposite const*) const
Line
Count
Source
300
410k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ClipBoxFormat1>(OT::ClipBoxFormat1 const*) const
Line
Count
Source
300
39.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ClipRecord>(OT::ClipRecord const*) const
Line
Count
Source
300
116k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ClipBox, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::ClipBox, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
116k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::ClipBoxFormat1> >(OT::Variable<OT::ClipBoxFormat1> const*) const
Line
Count
Source
300
13.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ClipList>(OT::ClipList const*) const
Line
Count
Source
300
34.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseGlyphPaintRecord>(OT::BaseGlyphPaintRecord const*) const
Line
Count
Source
300
2.75M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
4.85M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::COLR>(OT::COLR const*) const
Line
Count
Source
300
101k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseGlyphList, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::BaseGlyphList, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
95.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::LayerList, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::LayerList, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
74.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ClipList, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::ClipList, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
59.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::DeltaSetIndexMap, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::DeltaSetIndexMap, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
159k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::_hea<OT::hhea> >(OT::_hea<OT::hhea> const*) const
Line
Count
Source
300
210k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::_hea<OT::vhea> >(OT::_hea<OT::vhea> const*) const
Line
Count
Source
300
10.8k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::gvar>(OT::gvar const*) const
Line
Count
Source
300
30.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short, 2u>, 14u> >, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short, 2u>, 14u> >, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
18.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OpenTypeOffsetTable>(OT::OpenTypeOffsetTable const*) const
Line
Count
Source
300
486k
  { return likely (this->check_range (obj, obj->min_size)); }
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
300
483k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
42.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ResourceForkHeader>(OT::ResourceForkHeader const*) const
Line
Count
Source
300
1.60k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
3.83k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ResourceMap, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::ResourceMap, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
1.39k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ResourceMap>(OT::ResourceMap const*) const
Line
Count
Source
300
1.39k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::ArrayOfM1<OT::ResourceTypeRecord, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::ArrayOfM1<OT::ResourceTypeRecord, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
1.35k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ResourceTypeRecord>(OT::ResourceTypeRecord const*) const
Line
Count
Source
300
193k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::ResourceRecord>, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::ResourceRecord>, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
193k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ResourceRecord>(OT::ResourceRecord const*) const
Line
Count
Source
300
23.1k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, false> >(OT::OffsetTo<OT::ArrayOf<OT::IntType<unsigned char, 1u>, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 3u>, false> const*) const
Line
Count
Source
300
23.1k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::TableRecord>(OT::TableRecord const*) const
bool hb_sanitize_context_t::check_struct<OT::fvar>(OT::fvar const*) const
Line
Count
Source
300
32.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::avar>(OT::avar const*) const
Line
Count
Source
300
23.1k
  { return likely (this->check_range (obj, obj->min_size)); }
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
bool hb_sanitize_context_t::check_struct<OT::CPAL>(OT::CPAL const*) const
Line
Count
Source
300
21.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CPALV1Tail>(OT::CPALV1Tail const*) const
Line
Count
Source
300
2.24k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::SVG>(OT::SVG const*) const
Line
Count
Source
300
5.30k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CBLC>(OT::CBLC const*) const
Line
Count
Source
300
5.31k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BitmapSizeTable>(OT::BitmapSizeTable const*) const
Line
Count
Source
300
14.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::IndexSubtableArray, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::IndexSubtableArray, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
300
14.2k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IndexSubtableRecord>(OT::IndexSubtableRecord const*) const
Line
Count
Source
300
108k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::IndexSubtable, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::IndexSubtable, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
108k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IndexSubtableHeader>(OT::IndexSubtableHeader const*) const
Line
Count
Source
300
21.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IndexSubtableFormat1Or3<OT::IntType<unsigned int, 4u> > >(OT::IndexSubtableFormat1Or3<OT::IntType<unsigned int, 4u> > const*) const
Line
Count
Source
300
1.89k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::IndexSubtableFormat1Or3<OT::IntType<unsigned short, 2u> > >(OT::IndexSubtableFormat1Or3<OT::IntType<unsigned short, 2u> > const*) const
Line
Count
Source
300
1.82k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::SBitLineMetrics>(OT::SBitLineMetrics const*) const
Line
Count
Source
300
25.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::CBDT>(OT::CBDT const*) const
Line
Count
Source
300
2.39k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::sbix>(OT::sbix const*) const
Line
Count
Source
300
3.81k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, true> >(OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, true> const*) const
Line
Count
Source
300
35.8k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::SBIXStrike>(OT::SBIXStrike const*) const
Line
Count
Source
300
18.1k
  { return likely (this->check_range (obj, obj->min_size)); }
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::SVGDocumentIndexEntry>(OT::SVGDocumentIndexEntry const*) const
bool hb_sanitize_context_t::check_struct<CFF::FDSelect0>(CFF::FDSelect0 const*) const
Line
Count
Source
300
1.75k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::FDSelect>(CFF::FDSelect const*) const
Line
Count
Source
300
4.26k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
2.44k
  { return likely (this->check_range (obj, obj->min_size)); }
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
bool hb_sanitize_context_t::check_struct<CFF::Encoding>(CFF::Encoding const*) const
Line
Count
Source
300
489
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::Charset0>(CFF::Charset0 const*) const
Line
Count
Source
300
13.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::Charset>(CFF::Charset const*) const
Line
Count
Source
300
37.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::Charset1_2<OT::IntType<unsigned char, 1u> > >(CFF::Charset1_2<OT::IntType<unsigned char, 1u> > const*) const
Line
Count
Source
300
22.4k
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
1.15M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::Charset1_2<OT::IntType<unsigned short, 2u> > >(CFF::Charset1_2<OT::IntType<unsigned short, 2u> > const*) const
Line
Count
Source
300
837
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
175k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::cff1>(OT::cff1 const*) const
Line
Count
Source
300
56.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::CFFIndex<OT::IntType<unsigned short, 2u> > >(CFF::CFFIndex<OT::IntType<unsigned short, 2u> > const*) const
Line
Count
Source
300
251k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::CFF2FDSelect>(CFF::CFF2FDSelect const*) const
Line
Count
Source
300
148
  { return likely (this->check_range (obj, obj->min_size)); }
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
Line
Count
Source
300
52
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::CFF2VariationStore>(CFF::CFF2VariationStore const*) const
Line
Count
Source
300
14.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::cff2>(OT::cff2 const*) const
Line
Count
Source
300
49.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<CFF::CFFIndex<OT::IntType<unsigned int, 4u> > >(CFF::CFFIndex<OT::IntType<unsigned int, 4u> > const*) const
Line
Count
Source
300
130k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::KernOTSubTableHeader>(OT::KernOTSubTableHeader const*) const
Line
Count
Source
300
102k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::KernAATSubTableHeader>(OT::KernAATSubTableHeader const*) const
Line
Count
Source
300
15.2k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat1<OT::KernOTSubTableHeader> >(AAT::KerxSubTableFormat1<OT::KernOTSubTableHeader> const*) const
bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat2<OT::KernOTSubTableHeader> >(AAT::KerxSubTableFormat2<OT::KernOTSubTableHeader> const*) const
Line
Count
Source
300
687
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
5.30k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::ClassTable<OT::IntType<unsigned short, 2u> > >(AAT::ClassTable<OT::IntType<unsigned short, 2u> > const*) const
Line
Count
Source
300
5.30k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::KernSubTableFormat3<OT::KernOTSubTableHeader> >(OT::KernSubTableFormat3<OT::KernOTSubTableHeader> const*) const
bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat1<OT::KernAATSubTableHeader> >(AAT::KerxSubTableFormat1<OT::KernAATSubTableHeader> const*) const
Line
Count
Source
300
1.21k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<AAT::KerxSubTableFormat2<OT::KernAATSubTableHeader> >(AAT::KerxSubTableFormat2<OT::KernAATSubTableHeader> const*) const
Line
Count
Source
300
2.07k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::KernSubTableFormat3<OT::KernAATSubTableHeader> >(OT::KernSubTableFormat3<OT::KernAATSubTableHeader> const*) const
Line
Count
Source
300
396
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::DataMap>(OT::DataMap const*) const
Line
Count
Source
300
2.25k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::meta>(OT::meta const*) const
Line
Count
Source
300
3.71k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::NameRecord>(OT::NameRecord const*) const
Line
Count
Source
300
10.5M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, false> const*) const
Line
Count
Source
300
10.5M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::name>(OT::name const*) const
Line
Count
Source
300
183k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::post>(OT::post const*) const
Line
Count
Source
300
164k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
168M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
16.4M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
502k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
3.19M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
811k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
5.76M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
33.0M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
251k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
11.4M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst> >(OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst> const*) const
Line
Count
Source
300
269k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, true> >(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
369k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
4.51M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u> >, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u> >, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
4.92k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u>, true> >(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u>, true> const*) const
Line
Count
Source
300
41.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::VORG>(OT::VORG const*) const
Line
Count
Source
300
7.21k
  { return likely (this->check_range (obj, obj->min_size)); }
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>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::StatAxisRecord>, OT::IntType<unsigned int, 4u>, false> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AxisValueOffsetArray, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::AxisValueOffsetArray, OT::IntType<unsigned int, 4u>, false> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, true> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VertOriginMetric>(OT::VertOriginMetric const*) const
bool hb_sanitize_context_t::check_struct<OT::BASE>(OT::BASE const*) const
Line
Count
Source
300
23.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::Axis, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::Axis, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
31.6k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Axis>(OT::Axis const*) const
Line
Count
Source
300
21.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseScriptList>(OT::BaseScriptList const*) const
Line
Count
Source
300
18.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseScriptRecord>(OT::BaseScriptRecord const*) const
Line
Count
Source
300
744k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseScript, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::BaseScript, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
743k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseScript>(OT::BaseScript const*) const
Line
Count
Source
300
209k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseValues, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::BaseValues, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
202k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseValues>(OT::BaseValues const*) const
Line
Count
Source
300
106k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
10.4M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseCoordFormat1>(OT::BaseCoordFormat1 const*) const
Line
Count
Source
300
113k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseCoordFormat2>(OT::BaseCoordFormat2 const*) const
Line
Count
Source
300
53.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseCoordFormat3>(OT::BaseCoordFormat3 const*) const
Line
Count
Source
300
52.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MinMax, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MinMax, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
46.3M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MinMax>(OT::MinMax const*) const
Line
Count
Source
300
2.13M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::FeatMinMaxRecord>(OT::FeatMinMaxRecord const*) const
Line
Count
Source
300
2.72M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::BaseLangSysRecord>(OT::BaseLangSysRecord const*) const
Line
Count
Source
300
46.1M
  { return likely (this->check_range (obj, obj->min_size)); }
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>, true> >(OT::OffsetTo<OT::IndexArray, OT::IntType<unsigned short, 2u>, true> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, 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>, true> >(OT::OffsetTo<OT::SortedArrayOf<OT::HBGlyphID16, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, true> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::JstfLangSys, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::JstfLangSys, OT::IntType<unsigned short, 2u>, 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>, true> >(OT::OffsetTo<OT::JstfScript, OT::IntType<unsigned short, 2u>, 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>, true> >(OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentSingle<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> > >(AAT::LookupSegmentSingle<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> > const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSegmentArray<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> > >(AAT::LookupSegmentArray<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, 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>, true> >, OT::IntType<unsigned short, 2u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> >, OT::IntType<unsigned short, 2u>, false> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupSingle<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> > >(AAT::LookupSingle<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> > const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<AAT::LookupFormat8<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> > >(AAT::LookupFormat8<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, 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
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathConstants, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathConstants, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
16.5k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathConstants>(OT::MathConstants const*) const
Line
Count
Source
300
15.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathValueRecord>(OT::MathValueRecord const*) const
Line
Count
Source
300
383M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathGlyphInfo, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathGlyphInfo, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
13.8k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathGlyphInfo>(OT::MathGlyphInfo const*) const
Line
Count
Source
300
12.7k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathItalicsCorrectionInfo, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathItalicsCorrectionInfo, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
11.9k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathItalicsCorrectionInfo>(OT::MathItalicsCorrectionInfo const*) const
Line
Count
Source
300
9.83k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathTopAccentAttachment, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathTopAccentAttachment, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
11.0k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathTopAccentAttachment>(OT::MathTopAccentAttachment const*) const
Line
Count
Source
300
9.00k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathKernInfo, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathKernInfo, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
10.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathKernInfo>(OT::MathKernInfo const*) const
Line
Count
Source
300
8.04k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathKern, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathKern, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
917k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathKern>(OT::MathKern const*) const
Line
Count
Source
300
346k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathVariants, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathVariants, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
9.96k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathVariants>(OT::MathVariants const*) const
Line
Count
Source
300
7.50k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathGlyphConstruction, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathGlyphConstruction, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
1.67M
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathGlyphConstruction>(OT::MathGlyphConstruction const*) const
Line
Count
Source
300
286k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::MathGlyphAssembly, OT::IntType<unsigned short, 2u>, true> >(OT::OffsetTo<OT::MathGlyphAssembly, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
300
282k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::MathGlyphAssembly>(OT::MathGlyphAssembly const*) const
Line
Count
Source
300
167k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::MathGlyphVariantRecord>(OT::MathGlyphVariantRecord const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::MathGlyphPartRecord>(OT::MathGlyphPartRecord 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
301
302
  bool may_edit (const void *base, unsigned int len)
303
6.17M
  {
304
6.17M
    if (this->edit_count >= HB_SANITIZE_MAX_EDITS)
305
263k
      return false;
306
307
5.91M
    const char *p = (const char *) base;
308
5.91M
    this->edit_count++;
309
310
5.91M
    DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
311
5.91M
       "may_edit(%u) [%p..%p] (%u bytes) in [%p..%p] -> %s",
312
5.91M
       this->edit_count,
313
5.91M
       p, p + len, len,
314
5.91M
       this->start, this->end,
315
5.91M
       this->writable ? "GRANTED" : "DENIED");
316
317
5.91M
    return this->writable;
318
6.17M
  }
319
320
  template <typename Type, typename ValueType>
321
  bool try_set (const Type *obj, const ValueType &v)
322
6.17M
  {
323
6.17M
    if (this->may_edit (obj, hb_static_size (Type)))
324
4.93M
    {
325
4.93M
      * const_cast<Type *> (obj) = v;
326
4.93M
      return true;
327
4.93M
    }
328
1.23M
    return false;
329
6.17M
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
38.6k
  {
323
38.6k
    if (this->may_edit (obj, hb_static_size (Type)))
324
28.5k
    {
325
28.5k
      * const_cast<Type *> (obj) = v;
326
28.5k
      return true;
327
28.5k
    }
328
10.0k
    return false;
329
38.6k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
140k
  {
323
140k
    if (this->may_edit (obj, hb_static_size (Type)))
324
125k
    {
325
125k
      * const_cast<Type *> (obj) = v;
326
125k
      return true;
327
125k
    }
328
15.3k
    return false;
329
140k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::AttachPoint, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
24.9k
  {
323
24.9k
    if (this->may_edit (obj, hb_static_size (Type)))
324
22.9k
    {
325
22.9k
      * const_cast<Type *> (obj) = v;
326
22.9k
      return true;
327
22.9k
    }
328
1.93k
    return false;
329
24.9k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AttachList, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::AttachList, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
14.3k
  {
323
14.3k
    if (this->may_edit (obj, hb_static_size (Type)))
324
8.31k
    {
325
8.31k
      * const_cast<Type *> (obj) = v;
326
8.31k
      return true;
327
8.31k
    }
328
5.99k
    return false;
329
14.3k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Device, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
164k
  {
323
164k
    if (this->may_edit (obj, hb_static_size (Type)))
324
153k
    {
325
153k
      * const_cast<Type *> (obj) = v;
326
153k
      return true;
327
153k
    }
328
10.9k
    return false;
329
164k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::CaretValue, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
33.2k
  {
323
33.2k
    if (this->may_edit (obj, hb_static_size (Type)))
324
31.5k
    {
325
31.5k
      * const_cast<Type *> (obj) = v;
326
31.5k
      return true;
327
31.5k
    }
328
1.69k
    return false;
329
33.2k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::LigGlyph, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
20.4k
  {
323
20.4k
    if (this->may_edit (obj, hb_static_size (Type)))
324
17.6k
    {
325
17.6k
      * const_cast<Type *> (obj) = v;
326
17.6k
      return true;
327
17.6k
    }
328
2.81k
    return false;
329
20.4k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
15.1k
  {
323
15.1k
    if (this->may_edit (obj, hb_static_size (Type)))
324
8.03k
    {
325
8.03k
      * const_cast<Type *> (obj) = v;
326
8.03k
      return true;
327
8.03k
    }
328
7.13k
    return false;
329
15.1k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
5.84k
  {
323
5.84k
    if (this->may_edit (obj, hb_static_size (Type)))
324
5.46k
    {
325
5.46k
      * const_cast<Type *> (obj) = v;
326
5.46k
      return true;
327
5.46k
    }
328
377
    return false;
329
5.84k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
982
  {
323
982
    if (this->may_edit (obj, hb_static_size (Type)))
324
553
    {
325
553
      * const_cast<Type *> (obj) = v;
326
553
      return true;
327
553
    }
328
429
    return false;
329
982
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::VarRegionList, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::VarRegionList, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
7.10k
  {
323
7.10k
    if (this->may_edit (obj, hb_static_size (Type)))
324
3.62k
    {
325
3.62k
      * const_cast<Type *> (obj) = v;
326
3.62k
      return true;
327
3.62k
    }
328
3.48k
    return false;
329
7.10k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::VarData, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
40.0k
  {
323
40.0k
    if (this->may_edit (obj, hb_static_size (Type)))
324
34.4k
    {
325
34.4k
      * const_cast<Type *> (obj) = v;
326
34.4k
      return true;
327
34.4k
    }
328
5.53k
    return false;
329
40.0k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::VariationStore, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::VariationStore, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
31.7k
  {
323
31.7k
    if (this->may_edit (obj, hb_static_size (Type)))
324
22.0k
    {
325
22.0k
      * const_cast<Type *> (obj) = v;
326
22.0k
      return true;
327
22.0k
    }
328
9.69k
    return false;
329
31.7k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::ClassDef, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
36.7k
  {
323
36.7k
    if (this->may_edit (obj, hb_static_size (Type)))
324
31.0k
    {
325
31.0k
      * const_cast<Type *> (obj) = v;
326
31.0k
      return true;
327
31.0k
    }
328
5.76k
    return false;
329
36.7k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AttachList, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::AttachList, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
5.94k
  {
323
5.94k
    if (this->may_edit (obj, hb_static_size (Type)))
324
3.49k
    {
325
3.49k
      * const_cast<Type *> (obj) = v;
326
3.49k
      return true;
327
3.49k
    }
328
2.45k
    return false;
329
5.94k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::LigCaretList, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
3.76k
  {
323
3.76k
    if (this->may_edit (obj, hb_static_size (Type)))
324
3.33k
    {
325
3.33k
      * const_cast<Type *> (obj) = v;
326
3.33k
      return true;
327
3.33k
    }
328
427
    return false;
329
3.76k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::MarkGlyphSets, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
1.64k
  {
323
1.64k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.55k
    {
325
1.55k
      * const_cast<Type *> (obj) = v;
326
1.55k
      return true;
327
1.55k
    }
328
97
    return false;
329
1.64k
  }
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>, false> >, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<AAT::Lookup<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> >, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
4.89k
  {
323
4.89k
    if (this->may_edit (obj, hb_static_size (Type)))
324
2.20k
    {
325
2.20k
      * const_cast<Type *> (obj) = v;
326
2.20k
      return true;
327
2.20k
    }
328
2.68k
    return false;
329
4.89k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::TrackData, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<AAT::TrackData, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
1.75k
  {
323
1.75k
    if (this->may_edit (obj, hb_static_size (Type)))
324
933
    {
325
933
      * const_cast<Type *> (obj) = v;
326
933
      return true;
327
933
    }
328
820
    return false;
329
1.75k
  }
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>, false>, int>(OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, 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>, false> >, OT::IntType<unsigned short, 2u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::Anchor, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, false> >, OT::IntType<unsigned short, 2u>, 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>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, false> const*, int const&)
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
13.0k
  {
323
13.0k
    if (this->may_edit (obj, hb_static_size (Type)))
324
12.0k
    {
325
12.0k
      * const_cast<Type *> (obj) = v;
326
12.0k
      return true;
327
12.0k
    }
328
1.05k
    return false;
329
13.0k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, true>, unsigned int>(OT::OffsetTo<OT::FeatureParams, OT::IntType<unsigned short, 2u>, true> const*, unsigned int const&)
Line
Count
Source
322
1.71k
  {
323
1.71k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.70k
    {
325
1.70k
      * const_cast<Type *> (obj) = v;
326
1.70k
      return true;
327
1.70k
    }
328
2
    return false;
329
1.71k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LangSys, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::LangSys, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
165k
  {
323
165k
    if (this->may_edit (obj, hb_static_size (Type)))
324
142k
    {
325
142k
      * const_cast<Type *> (obj) = v;
326
142k
      return true;
327
142k
    }
328
22.7k
    return false;
329
165k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::Condition, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
16.2k
  {
323
16.2k
    if (this->may_edit (obj, hb_static_size (Type)))
324
15.4k
    {
325
15.4k
      * const_cast<Type *> (obj) = v;
326
15.4k
      return true;
327
15.4k
    }
328
827
    return false;
329
16.2k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Feature, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::Feature, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
10.9k
  {
323
10.9k
    if (this->may_edit (obj, hb_static_size (Type)))
324
10.5k
    {
325
10.5k
      * const_cast<Type *> (obj) = v;
326
10.5k
      return true;
327
10.5k
    }
328
447
    return false;
329
10.9k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ConditionSet, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::ConditionSet, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
17.1k
  {
323
17.1k
    if (this->may_edit (obj, hb_static_size (Type)))
324
15.6k
    {
325
15.6k
      * const_cast<Type *> (obj) = v;
326
15.6k
      return true;
327
15.6k
    }
328
1.43k
    return false;
329
17.1k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::FeatureTableSubstitution, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::FeatureTableSubstitution, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
23.5k
  {
323
23.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
22.3k
    {
325
22.3k
      * const_cast<Type *> (obj) = v;
326
22.3k
      return true;
327
22.3k
    }
328
1.21k
    return false;
329
23.5k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, false>, int>(OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, false> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false>, int>(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, 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>, false>, OT::IntType<unsigned short, 2u>, false>, int>(OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned short, 2u>, false>, OT::IntType<unsigned short, 2u>, false> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::JustificationCategory, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<AAT::JustificationCategory, OT::IntType<unsigned short, 2u>, 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>, true>, int>(OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::PostcompensationActionChain, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<AAT::PostcompensationActionChain, OT::IntType<unsigned short, 2u>, 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>, true> >, OT::IntType<unsigned short, 2u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<OT::ArrayOf<AAT::WidthDeltaPair, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, true> >, OT::IntType<unsigned short, 2u>, false> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::JustificationHeader, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<AAT::JustificationHeader, OT::IntType<unsigned short, 2u>, true> const*, int const&)
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::Anchor, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
149k
  {
323
149k
    if (this->may_edit (obj, hb_static_size (Type)))
324
139k
    {
325
139k
      * const_cast<Type *> (obj) = v;
326
139k
      return true;
327
139k
    }
328
10.0k
    return false;
329
149k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
75.6k
  {
323
75.6k
    if (this->may_edit (obj, hb_static_size (Type)))
324
67.4k
    {
325
67.4k
      * const_cast<Type *> (obj) = v;
326
67.4k
      return true;
327
67.4k
    }
328
8.16k
    return false;
329
75.6k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
109k
  {
323
109k
    if (this->may_edit (obj, hb_static_size (Type)))
324
95.1k
    {
325
95.1k
      * const_cast<Type *> (obj) = v;
326
95.1k
      return true;
327
95.1k
    }
328
14.1k
    return false;
329
109k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::PairSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
44.3k
  {
323
44.3k
    if (this->may_edit (obj, hb_static_size (Type)))
324
42.2k
    {
325
42.2k
      * const_cast<Type *> (obj) = v;
326
42.2k
      return true;
327
42.2k
    }
328
2.12k
    return false;
329
44.3k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
17.2k
  {
323
17.2k
    if (this->may_edit (obj, hb_static_size (Type)))
324
11.3k
    {
325
11.3k
      * const_cast<Type *> (obj) = v;
326
11.3k
      return true;
327
11.3k
    }
328
5.93k
    return false;
329
17.2k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
38.9k
  {
323
38.9k
    if (this->may_edit (obj, hb_static_size (Type)))
324
34.0k
    {
325
34.0k
      * const_cast<Type *> (obj) = v;
326
34.0k
      return true;
327
34.0k
    }
328
4.90k
    return false;
329
38.9k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::MarkArray, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
17.0k
  {
323
17.0k
    if (this->may_edit (obj, hb_static_size (Type)))
324
15.5k
    {
325
15.5k
      * const_cast<Type *> (obj) = v;
326
15.5k
      return true;
327
15.5k
    }
328
1.47k
    return false;
329
17.0k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::AnchorMatrix, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
12.9k
  {
323
12.9k
    if (this->may_edit (obj, hb_static_size (Type)))
324
12.4k
    {
325
12.4k
      * const_cast<Type *> (obj) = v;
326
12.4k
      return true;
327
12.4k
    }
328
536
    return false;
329
12.9k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
4.87k
  {
323
4.87k
    if (this->may_edit (obj, hb_static_size (Type)))
324
3.41k
    {
325
3.41k
      * const_cast<Type *> (obj) = v;
326
3.41k
      return true;
327
3.41k
    }
328
1.45k
    return false;
329
4.87k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::LigatureArray, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
4.72k
  {
323
4.72k
    if (this->may_edit (obj, hb_static_size (Type)))
324
4.25k
    {
325
4.25k
      * const_cast<Type *> (obj) = v;
326
4.25k
      return true;
327
4.25k
    }
328
473
    return false;
329
4.72k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Rule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
93.2k
  {
323
93.2k
    if (this->may_edit (obj, hb_static_size (Type)))
324
88.7k
    {
325
88.7k
      * const_cast<Type *> (obj) = v;
326
88.7k
      return true;
327
88.7k
    }
328
4.45k
    return false;
329
93.2k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
24.1k
  {
323
24.1k
    if (this->may_edit (obj, hb_static_size (Type)))
324
17.9k
    {
325
17.9k
      * const_cast<Type *> (obj) = v;
326
17.9k
      return true;
327
17.9k
    }
328
6.14k
    return false;
329
24.1k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Rule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Rule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
25.3k
  {
323
25.3k
    if (this->may_edit (obj, hb_static_size (Type)))
324
24.1k
    {
325
24.1k
      * const_cast<Type *> (obj) = v;
326
24.1k
      return true;
327
24.1k
    }
328
1.16k
    return false;
329
25.3k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::RuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
19.1k
  {
323
19.1k
    if (this->may_edit (obj, hb_static_size (Type)))
324
17.1k
    {
325
17.1k
      * const_cast<Type *> (obj) = v;
326
17.1k
      return true;
327
17.1k
    }
328
1.97k
    return false;
329
19.1k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::RuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
18.5k
  {
323
18.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
17.5k
    {
325
17.5k
      * const_cast<Type *> (obj) = v;
326
17.5k
      return true;
327
17.5k
    }
328
942
    return false;
329
18.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::ChainRule<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
156k
  {
323
156k
    if (this->may_edit (obj, hb_static_size (Type)))
324
146k
    {
325
146k
      * const_cast<Type *> (obj) = v;
326
146k
      return true;
327
146k
    }
328
9.56k
    return false;
329
156k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
39.6k
  {
323
39.6k
    if (this->may_edit (obj, hb_static_size (Type)))
324
27.1k
    {
325
27.1k
      * const_cast<Type *> (obj) = v;
326
27.1k
      return true;
327
27.1k
    }
328
12.4k
    return false;
329
39.6k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ChainRule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::ChainRule<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
62.3k
  {
323
62.3k
    if (this->may_edit (obj, hb_static_size (Type)))
324
59.8k
    {
325
59.8k
      * const_cast<Type *> (obj) = v;
326
59.8k
      return true;
327
59.8k
    }
328
2.57k
    return false;
329
62.3k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
42.5k
  {
323
42.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
37.7k
    {
325
37.7k
      * const_cast<Type *> (obj) = v;
326
37.7k
      return true;
327
37.7k
    }
328
4.82k
    return false;
329
42.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::ChainRuleSet<OT::Layout::SmallTypes>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
14.6k
  {
323
14.6k
    if (this->may_edit (obj, hb_static_size (Type)))
324
13.8k
    {
325
13.8k
      * const_cast<Type *> (obj) = v;
326
13.8k
      return true;
327
13.8k
    }
328
794
    return false;
329
14.6k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookupSubTable, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
611k
  {
323
611k
    if (this->may_edit (obj, hb_static_size (Type)))
324
536k
    {
325
536k
      * const_cast<Type *> (obj) = v;
326
536k
      return true;
327
536k
    }
328
75.4k
    return false;
329
611k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Script, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Script, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
87.0k
  {
323
87.0k
    if (this->may_edit (obj, hb_static_size (Type)))
324
52.6k
    {
325
52.6k
      * const_cast<Type *> (obj) = v;
326
52.6k
      return true;
327
52.6k
    }
328
34.4k
    return false;
329
87.0k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
58.7k
  {
323
58.7k
    if (this->may_edit (obj, hb_static_size (Type)))
324
13.2k
    {
325
13.2k
      * const_cast<Type *> (obj) = v;
326
13.2k
      return true;
327
13.2k
    }
328
45.4k
    return false;
329
58.7k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Feature, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Feature, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
150k
  {
323
150k
    if (this->may_edit (obj, hb_static_size (Type)))
324
130k
    {
325
130k
      * const_cast<Type *> (obj) = v;
326
130k
      return true;
327
130k
    }
328
20.4k
    return false;
329
150k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
45.5k
  {
323
45.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
16.9k
    {
325
16.9k
      * const_cast<Type *> (obj) = v;
326
16.9k
      return true;
327
16.9k
    }
328
28.5k
    return false;
329
45.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
283k
  {
323
283k
    if (this->may_edit (obj, hb_static_size (Type)))
324
195k
    {
325
195k
      * const_cast<Type *> (obj) = v;
326
195k
      return true;
327
195k
    }
328
87.7k
    return false;
329
283k
  }
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>, true>, int>(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
97.9k
  {
323
97.9k
    if (this->may_edit (obj, hb_static_size (Type)))
324
8.19k
    {
325
8.19k
      * const_cast<Type *> (obj) = v;
326
8.19k
      return true;
327
8.19k
    }
328
89.7k
    return false;
329
97.9k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::FeatureVariations, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::FeatureVariations, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
15.4k
  {
323
15.4k
    if (this->may_edit (obj, hb_static_size (Type)))
324
11.6k
    {
325
11.6k
      * const_cast<Type *> (obj) = v;
326
11.6k
      return true;
327
11.6k
    }
328
3.81k
    return false;
329
15.4k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::RecordListOfScript, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
8.00k
  {
323
8.00k
    if (this->may_edit (obj, hb_static_size (Type)))
324
3.38k
    {
325
3.38k
      * const_cast<Type *> (obj) = v;
326
3.38k
      return true;
327
3.38k
    }
328
4.62k
    return false;
329
8.00k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::RecordListOf<OT::Feature>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
5.55k
  {
323
5.55k
    if (this->may_edit (obj, hb_static_size (Type)))
324
4.29k
    {
325
4.29k
      * const_cast<Type *> (obj) = v;
326
4.29k
      return true;
327
4.29k
    }
328
1.25k
    return false;
329
5.55k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
11.8k
  {
323
11.8k
    if (this->may_edit (obj, hb_static_size (Type)))
324
11.3k
    {
325
11.3k
      * const_cast<Type *> (obj) = v;
326
11.3k
      return true;
327
11.3k
    }
328
478
    return false;
329
11.8k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u> >, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GPOS_impl::PosLookup, OT::IntType<unsigned int, 3u> >, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
2.07k
  {
323
2.07k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.52k
    {
325
1.52k
      * const_cast<Type *> (obj) = v;
326
1.52k
      return true;
327
1.52k
    }
328
559
    return false;
329
2.07k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned int, 4u>, false>, int>(OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned int, 4u>, false> 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>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned short, 2u>, 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>, false>, int>(OT::OffsetTo<AAT::Lookup<OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 4u>, 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>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<short, 2u> >, OT::IntType<unsigned short, 2u>, 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>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<int, 4u>, 16u> >, OT::IntType<unsigned int, 4u>, false> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false>, int>(OT::OffsetTo<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, 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>, false>, OT::IntType<unsigned int, 4u>, false>, int>(OT::OffsetTo<OT::UnsizedListOfOffset16To<AAT::Lookup<OT::HBGlyphID16>, OT::IntType<unsigned int, 4u>, false>, OT::IntType<unsigned int, 4u>, false> const*, int const&)
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::VariationStore, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::VariationStore, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
7.14k
  {
323
7.14k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.98k
    {
325
1.98k
      * const_cast<Type *> (obj) = v;
326
1.98k
      return true;
327
1.98k
    }
328
5.16k
    return false;
329
7.14k
  }
bool hb_sanitize_context_t::try_set<OT::IntType<unsigned short, 2u>, unsigned short>(OT::IntType<unsigned short, 2u> const*, unsigned short const&)
Line
Count
Source
322
18.2k
  {
323
18.2k
    if (this->may_edit (obj, hb_static_size (Type)))
324
9.82k
    {
325
9.82k
      * const_cast<Type *> (obj) = v;
326
9.82k
      return true;
327
9.82k
    }
328
8.47k
    return false;
329
18.2k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::DefaultUVS, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::DefaultUVS, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
6.98k
  {
323
6.98k
    if (this->may_edit (obj, hb_static_size (Type)))
324
6.18k
    {
325
6.18k
      * const_cast<Type *> (obj) = v;
326
6.18k
      return true;
327
6.18k
    }
328
800
    return false;
329
6.98k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::NonDefaultUVS, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::NonDefaultUVS, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
8.68k
  {
323
8.68k
    if (this->may_edit (obj, hb_static_size (Type)))
324
7.86k
    {
325
7.86k
      * const_cast<Type *> (obj) = v;
326
7.86k
      return true;
327
7.86k
    }
328
823
    return false;
329
8.68k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::CmapSubtable, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::CmapSubtable, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
130k
  {
323
130k
    if (this->may_edit (obj, hb_static_size (Type)))
324
95.5k
    {
325
95.5k
      * const_cast<Type *> (obj) = v;
326
95.5k
      return true;
327
95.5k
    }
328
34.7k
    return false;
329
130k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ColorLine<OT::NoVariable>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::ColorLine<OT::NoVariable>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
53.5k
  {
323
53.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
45.8k
    {
325
45.8k
      * const_cast<Type *> (obj) = v;
326
45.8k
      return true;
327
45.8k
    }
328
7.73k
    return false;
329
53.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ColorLine<OT::Variable>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::ColorLine<OT::Variable>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
19.2k
  {
323
19.2k
    if (this->may_edit (obj, hb_static_size (Type)))
324
17.5k
    {
325
17.5k
      * const_cast<Type *> (obj) = v;
326
17.5k
      return true;
327
17.5k
    }
328
1.65k
    return false;
329
19.2k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::NoVariable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::NoVariable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
31.5k
  {
323
31.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
30.5k
    {
325
30.5k
      * const_cast<Type *> (obj) = v;
326
30.5k
      return true;
327
30.5k
    }
328
1.03k
    return false;
329
31.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Variable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Variable<OT::Affine2x3>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
4.79k
  {
323
4.79k
    if (this->may_edit (obj, hb_static_size (Type)))
324
4.65k
    {
325
4.65k
      * const_cast<Type *> (obj) = v;
326
4.65k
      return true;
327
4.65k
    }
328
141
    return false;
329
4.79k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
163k
  {
323
163k
    if (this->may_edit (obj, hb_static_size (Type)))
324
105k
    {
325
105k
      * const_cast<Type *> (obj) = v;
326
105k
      return true;
327
105k
    }
328
58.4k
    return false;
329
163k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ClipBox, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::ClipBox, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
16.5k
  {
323
16.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
16.1k
    {
325
16.1k
      * const_cast<Type *> (obj) = v;
326
16.1k
      return true;
327
16.1k
    }
328
444
    return false;
329
16.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::Paint, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
359k
  {
323
359k
    if (this->may_edit (obj, hb_static_size (Type)))
324
325k
    {
325
325k
      * const_cast<Type *> (obj) = v;
326
325k
      return true;
327
325k
    }
328
33.6k
    return false;
329
359k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseGlyphList, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::BaseGlyphList, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
21.5k
  {
323
21.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.48k
    {
325
1.48k
      * const_cast<Type *> (obj) = v;
326
1.48k
      return true;
327
1.48k
    }
328
20.0k
    return false;
329
21.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::LayerList, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::LayerList, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
26.2k
  {
323
26.2k
    if (this->may_edit (obj, hb_static_size (Type)))
324
10.3k
    {
325
10.3k
      * const_cast<Type *> (obj) = v;
326
10.3k
      return true;
327
10.3k
    }
328
15.8k
    return false;
329
26.2k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ClipList, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::ClipList, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
25.4k
  {
323
25.4k
    if (this->may_edit (obj, hb_static_size (Type)))
324
24.7k
    {
325
24.7k
      * const_cast<Type *> (obj) = v;
326
24.7k
      return true;
327
24.7k
    }
328
713
    return false;
329
25.4k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::DeltaSetIndexMap, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::DeltaSetIndexMap, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
15.0k
  {
323
15.0k
    if (this->may_edit (obj, hb_static_size (Type)))
324
12.6k
    {
325
12.6k
      * const_cast<Type *> (obj) = v;
326
12.6k
      return true;
327
12.6k
    }
328
2.34k
    return false;
329
15.0k
  }
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>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed<OT::IntType<short, 2u>, 14u> >, OT::IntType<unsigned int, 4u>, false> const*, int const&)
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::OpenTypeOffsetTable, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
10.9k
  {
323
10.9k
    if (this->may_edit (obj, hb_static_size (Type)))
324
10.0k
    {
325
10.0k
      * const_cast<Type *> (obj) = v;
326
10.0k
      return true;
327
10.0k
    }
328
816
    return false;
329
10.9k
  }
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>, false>, int>(OT::OffsetTo<OT::ArrayOf<OT::IntType<unsigned char, 1u>, OT::IntType<unsigned int, 4u> >, OT::IntType<unsigned int, 3u>, false> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::ResourceRecord>, OT::IntType<unsigned short, 2u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::ResourceRecord>, OT::IntType<unsigned short, 2u>, 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>, false>, int>(OT::OffsetTo<OT::ArrayOfM1<OT::ResourceTypeRecord, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, 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 int, 4u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned int, 4u>, false> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::ResourceMap, OT::IntType<unsigned int, 4u>, false>, int>(OT::OffsetTo<OT::ResourceMap, OT::IntType<unsigned int, 4u>, false> const*, int const&)
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::IndexSubtable, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::IndexSubtable, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
8.44k
  {
323
8.44k
    if (this->may_edit (obj, hb_static_size (Type)))
324
7.07k
    {
325
7.07k
      * const_cast<Type *> (obj) = v;
326
7.07k
      return true;
327
7.07k
    }
328
1.37k
    return false;
329
8.44k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, true>, int>(OT::OffsetTo<OT::SBIXStrike, OT::IntType<unsigned int, 4u>, true> const*, int const&)
Line
Count
Source
322
9.62k
  {
323
9.62k
    if (this->may_edit (obj, hb_static_size (Type)))
324
8.68k
    {
325
8.68k
      * const_cast<Type *> (obj) = v;
326
8.68k
      return true;
327
8.68k
    }
328
942
    return false;
329
9.62k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::IndexSubtableArray, OT::IntType<unsigned int, 4u>, false>, int>(OT::OffsetTo<OT::IndexSubtableArray, OT::IntType<unsigned int, 4u>, 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>, false>, int>(OT::OffsetTo<AAT::ClassTable<OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, 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>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::IntType<unsigned char, 1u> >, OT::IntType<unsigned short, 2u>, false> const*, int const&)
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
155k
  {
323
155k
    if (this->may_edit (obj, hb_static_size (Type)))
324
142k
    {
325
142k
      * const_cast<Type *> (obj) = v;
326
142k
      return true;
327
142k
    }
328
13.0k
    return false;
329
155k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::Sequence<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
113k
  {
323
113k
    if (this->may_edit (obj, hb_static_size (Type)))
324
109k
    {
325
109k
      * const_cast<Type *> (obj) = v;
326
109k
      return true;
327
109k
    }
328
3.76k
    return false;
329
113k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
56.3k
  {
323
56.3k
    if (this->may_edit (obj, hb_static_size (Type)))
324
52.2k
    {
325
52.2k
      * const_cast<Type *> (obj) = v;
326
52.2k
      return true;
327
52.2k
    }
328
4.13k
    return false;
329
56.3k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::AlternateSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
26.9k
  {
323
26.9k
    if (this->may_edit (obj, hb_static_size (Type)))
324
25.8k
    {
325
25.8k
      * const_cast<Type *> (obj) = v;
326
25.8k
      return true;
327
25.8k
    }
328
1.16k
    return false;
329
26.9k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
113k
  {
323
113k
    if (this->may_edit (obj, hb_static_size (Type)))
324
102k
    {
325
102k
      * const_cast<Type *> (obj) = v;
326
102k
      return true;
327
102k
    }
328
10.5k
    return false;
329
113k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::SmallTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
26.4k
  {
323
26.4k
    if (this->may_edit (obj, hb_static_size (Type)))
324
14.3k
    {
325
14.3k
      * const_cast<Type *> (obj) = v;
326
14.3k
      return true;
327
14.3k
    }
328
12.1k
    return false;
329
26.4k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::Ligature<OT::Layout::MediumTypes>, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
44.3k
  {
323
44.3k
    if (this->may_edit (obj, hb_static_size (Type)))
324
42.2k
    {
325
42.2k
      * const_cast<Type *> (obj) = v;
326
42.2k
      return true;
327
42.2k
    }
328
2.10k
    return false;
329
44.3k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::LigatureSet<OT::Layout::MediumTypes>, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
33.5k
  {
323
33.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
29.8k
    {
325
29.8k
      * const_cast<Type *> (obj) = v;
326
29.8k
      return true;
327
29.8k
    }
328
3.74k
    return false;
329
33.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookupSubTable, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
786k
  {
323
786k
    if (this->may_edit (obj, hb_static_size (Type)))
324
682k
    {
325
682k
      * const_cast<Type *> (obj) = v;
326
682k
      return true;
327
682k
    }
328
104k
    return false;
329
786k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
386k
  {
323
386k
    if (this->may_edit (obj, hb_static_size (Type)))
324
262k
    {
325
262k
      * const_cast<Type *> (obj) = v;
326
262k
      return true;
327
262k
    }
328
123k
    return false;
329
386k
  }
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>, true>, int>(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
132k
  {
323
132k
    if (this->may_edit (obj, hb_static_size (Type)))
324
7.56k
    {
325
7.56k
      * const_cast<Type *> (obj) = v;
326
7.56k
      return true;
327
7.56k
    }
328
124k
    return false;
329
132k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
11.4k
  {
323
11.4k
    if (this->may_edit (obj, hb_static_size (Type)))
324
11.0k
    {
325
11.0k
      * const_cast<Type *> (obj) = v;
326
11.0k
      return true;
327
11.0k
    }
328
465
    return false;
329
11.4k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u> >, OT::IntType<unsigned int, 3u>, true>, int>(OT::OffsetTo<OT::List16OfOffsetTo<OT::Layout::GSUB_impl::SubstLookup, OT::IntType<unsigned int, 3u> >, OT::IntType<unsigned int, 3u>, true> const*, int const&)
Line
Count
Source
322
1.91k
  {
323
1.91k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.37k
    {
325
1.37k
      * const_cast<Type *> (obj) = v;
326
1.37k
      return true;
327
1.37k
    }
328
544
    return false;
329
1.91k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::StatAxisRecord>, OT::IntType<unsigned int, 4u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::StatAxisRecord>, OT::IntType<unsigned int, 4u>, false> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::AxisValue, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::AxisValueOffsetArray, OT::IntType<unsigned int, 4u>, false>, int>(OT::OffsetTo<OT::AxisValueOffsetArray, OT::IntType<unsigned int, 4u>, false> const*, int const&)
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::BaseCoord, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
52.5k
  {
323
52.5k
    if (this->may_edit (obj, hb_static_size (Type)))
324
49.3k
    {
325
49.3k
      * const_cast<Type *> (obj) = v;
326
49.3k
      return true;
327
49.3k
    }
328
3.17k
    return false;
329
52.5k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseValues, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::BaseValues, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
6.69k
  {
323
6.69k
    if (this->may_edit (obj, hb_static_size (Type)))
324
3.83k
    {
325
3.83k
      * const_cast<Type *> (obj) = v;
326
3.83k
      return true;
327
3.83k
    }
328
2.86k
    return false;
329
6.69k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MinMax, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MinMax, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
13.1k
  {
323
13.1k
    if (this->may_edit (obj, hb_static_size (Type)))
324
11.0k
    {
325
11.0k
      * const_cast<Type *> (obj) = v;
326
11.0k
      return true;
327
11.0k
    }
328
2.07k
    return false;
329
13.1k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::BaseScript, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::BaseScript, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
20.0k
  {
323
20.0k
    if (this->may_edit (obj, hb_static_size (Type)))
324
14.1k
    {
325
14.1k
      * const_cast<Type *> (obj) = v;
326
14.1k
      return true;
327
14.1k
    }
328
5.89k
    return false;
329
20.0k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::Axis, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::Axis, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
9.25k
  {
323
9.25k
    if (this->may_edit (obj, hb_static_size (Type)))
324
2.17k
    {
325
2.17k
      * const_cast<Type *> (obj) = v;
326
2.17k
      return true;
327
2.17k
    }
328
7.07k
    return false;
329
9.25k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::IndexArray, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::IndexArray, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::JstfPriority, OT::IntType<unsigned short, 2u>, 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>, true>, int>(OT::OffsetTo<OT::SortedArrayOf<OT::HBGlyphID16, OT::IntType<unsigned short, 2u> >, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::JstfLangSys, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::JstfLangSys, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::JstfScript, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::JstfScript, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, 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>, true> >, OT::IntType<unsigned short, 2u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::OffsetTo<AAT::OpticalBounds, OT::IntType<unsigned short, 2u>, true> >, OT::IntType<unsigned short, 2u>, false> const*, int const&)
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathConstants, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathConstants, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
2.91k
  {
323
2.91k
    if (this->may_edit (obj, hb_static_size (Type)))
324
204
    {
325
204
      * const_cast<Type *> (obj) = v;
326
204
      return true;
327
204
    }
328
2.70k
    return false;
329
2.91k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathItalicsCorrectionInfo, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathItalicsCorrectionInfo, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
2.16k
  {
323
2.16k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.28k
    {
325
1.28k
      * const_cast<Type *> (obj) = v;
326
1.28k
      return true;
327
1.28k
    }
328
887
    return false;
329
2.16k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathTopAccentAttachment, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathTopAccentAttachment, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
1.84k
  {
323
1.84k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.22k
    {
325
1.22k
      * const_cast<Type *> (obj) = v;
326
1.22k
      return true;
327
1.22k
    }
328
620
    return false;
329
1.84k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathKern, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathKern, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
12.1k
  {
323
12.1k
    if (this->may_edit (obj, hb_static_size (Type)))
324
10.3k
    {
325
10.3k
      * const_cast<Type *> (obj) = v;
326
10.3k
      return true;
327
10.3k
    }
328
1.77k
    return false;
329
12.1k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathKernInfo, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathKernInfo, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
3.78k
  {
323
3.78k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.66k
    {
325
1.66k
      * const_cast<Type *> (obj) = v;
326
1.66k
      return true;
327
1.66k
    }
328
2.11k
    return false;
329
3.78k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathGlyphInfo, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathGlyphInfo, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
4.73k
  {
323
4.73k
    if (this->may_edit (obj, hb_static_size (Type)))
324
936
    {
325
936
      * const_cast<Type *> (obj) = v;
326
936
      return true;
327
936
    }
328
3.80k
    return false;
329
4.73k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathGlyphAssembly, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathGlyphAssembly, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
15.2k
  {
323
15.2k
    if (this->may_edit (obj, hb_static_size (Type)))
324
14.2k
    {
325
14.2k
      * const_cast<Type *> (obj) = v;
326
14.2k
      return true;
327
14.2k
    }
328
1.03k
    return false;
329
15.2k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathGlyphConstruction, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathGlyphConstruction, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
16.9k
  {
323
16.9k
    if (this->may_edit (obj, hb_static_size (Type)))
324
15.2k
    {
325
15.2k
      * const_cast<Type *> (obj) = v;
326
15.2k
      return true;
327
15.2k
    }
328
1.76k
    return false;
329
16.9k
  }
bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::MathVariants, OT::IntType<unsigned short, 2u>, true>, int>(OT::OffsetTo<OT::MathVariants, OT::IntType<unsigned short, 2u>, true> const*, int const&)
Line
Count
Source
322
3.89k
  {
323
3.89k
    if (this->may_edit (obj, hb_static_size (Type)))
324
1.84k
    {
325
1.84k
      * const_cast<Type *> (obj) = v;
326
1.84k
      return true;
327
1.84k
    }
328
2.04k
    return false;
329
3.89k
  }
330
331
  template <typename Type>
332
  hb_blob_t *sanitize_blob (hb_blob_t *blob)
333
18.7M
  {
334
18.7M
    bool sane;
335
336
18.7M
    init (blob);
337
338
19.0M
  retry:
339
19.0M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
19.0M
    start_processing ();
342
343
19.0M
    if (unlikely (!start))
344
15.3M
    {
345
15.3M
      end_processing ();
346
15.3M
      return blob;
347
15.3M
    }
348
349
3.69M
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
3.69M
    sane = t->sanitize (this);
352
3.69M
    if (sane)
353
2.72M
    {
354
2.72M
      if (edit_count)
355
293k
      {
356
293k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
293k
  edit_count = 0;
360
293k
  sane = t->sanitize (this);
361
293k
  if (edit_count) {
362
7.01k
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
7.01k
    sane = false;
364
7.01k
  }
365
293k
      }
366
2.72M
    }
367
968k
    else
368
968k
    {
369
968k
      if (edit_count && !writable) {
370
368k
  start = hb_blob_get_data_writable (blob, nullptr);
371
368k
  end = start + blob->length;
372
373
368k
  if (start)
374
365k
  {
375
365k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
365k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
365k
    goto retry;
379
365k
  }
380
368k
      }
381
968k
    }
382
383
3.32M
    end_processing ();
384
385
3.32M
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
3.32M
    if (sane)
387
2.71M
    {
388
2.71M
      hb_blob_make_immutable (blob);
389
2.71M
      return blob;
390
2.71M
    }
391
616k
    else
392
616k
    {
393
616k
      hb_blob_destroy (blob);
394
616k
      return hb_blob_get_empty ();
395
616k
    }
396
3.32M
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::GDEF>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
495k
  retry:
339
495k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
495k
    start_processing ();
342
343
495k
    if (unlikely (!start))
344
362k
    {
345
362k
      end_processing ();
346
362k
      return blob;
347
362k
    }
348
349
133k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
133k
    sane = t->sanitize (this);
352
133k
    if (sane)
353
102k
    {
354
102k
      if (edit_count)
355
23.2k
      {
356
23.2k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
23.2k
  edit_count = 0;
360
23.2k
  sane = t->sanitize (this);
361
23.2k
  if (edit_count) {
362
68
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
68
    sane = false;
364
68
  }
365
23.2k
      }
366
102k
    }
367
30.3k
    else
368
30.3k
    {
369
30.3k
      if (edit_count && !writable) {
370
26.3k
  start = hb_blob_get_data_writable (blob, nullptr);
371
26.3k
  end = start + blob->length;
372
373
26.3k
  if (start)
374
26.1k
  {
375
26.1k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
26.1k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
26.1k
    goto retry;
379
26.1k
  }
380
26.3k
      }
381
30.3k
    }
382
383
106k
    end_processing ();
384
385
106k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
106k
    if (sane)
387
102k
    {
388
102k
      hb_blob_make_immutable (blob);
389
102k
      return blob;
390
102k
    }
391
4.34k
    else
392
4.34k
    {
393
4.34k
      hb_blob_destroy (blob);
394
4.34k
      return hb_blob_get_empty ();
395
4.34k
    }
396
106k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::morx>(hb_blob_t*)
Line
Count
Source
333
472k
  {
334
472k
    bool sane;
335
336
472k
    init (blob);
337
338
472k
  retry:
339
472k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
472k
    start_processing ();
342
343
472k
    if (unlikely (!start))
344
444k
    {
345
444k
      end_processing ();
346
444k
      return blob;
347
444k
    }
348
349
27.7k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
27.7k
    sane = t->sanitize (this);
352
27.7k
    if (sane)
353
19.7k
    {
354
19.7k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
19.7k
    }
367
7.98k
    else
368
7.98k
    {
369
7.98k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
7.98k
    }
382
383
27.7k
    end_processing ();
384
385
27.7k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
27.7k
    if (sane)
387
19.7k
    {
388
19.7k
      hb_blob_make_immutable (blob);
389
19.7k
      return blob;
390
19.7k
    }
391
7.98k
    else
392
7.98k
    {
393
7.98k
      hb_blob_destroy (blob);
394
7.98k
      return hb_blob_get_empty ();
395
7.98k
    }
396
27.7k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::ltag>(hb_blob_t*)
Line
Count
Source
333
3.85k
  {
334
3.85k
    bool sane;
335
336
3.85k
    init (blob);
337
338
3.85k
  retry:
339
3.85k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
3.85k
    start_processing ();
342
343
3.85k
    if (unlikely (!start))
344
3.85k
    {
345
3.85k
      end_processing ();
346
3.85k
      return blob;
347
3.85k
    }
348
349
0
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
0
    sane = t->sanitize (this);
352
0
    if (sane)
353
0
    {
354
0
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
0
    }
367
0
    else
368
0
    {
369
0
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
0
    }
382
383
0
    end_processing ();
384
385
0
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
0
    if (sane)
387
0
    {
388
0
      hb_blob_make_immutable (blob);
389
0
      return blob;
390
0
    }
391
0
    else
392
0
    {
393
0
      hb_blob_destroy (blob);
394
0
      return hb_blob_get_empty ();
395
0
    }
396
0
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::mort>(hb_blob_t*)
Line
Count
Source
333
452k
  {
334
452k
    bool sane;
335
336
452k
    init (blob);
337
338
452k
  retry:
339
452k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
452k
    start_processing ();
342
343
452k
    if (unlikely (!start))
344
431k
    {
345
431k
      end_processing ();
346
431k
      return blob;
347
431k
    }
348
349
20.9k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
20.9k
    sane = t->sanitize (this);
352
20.9k
    if (sane)
353
17.8k
    {
354
17.8k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
17.8k
    }
367
3.08k
    else
368
3.08k
    {
369
3.08k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
3.08k
    }
382
383
20.9k
    end_processing ();
384
385
20.9k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
20.9k
    if (sane)
387
17.8k
    {
388
17.8k
      hb_blob_make_immutable (blob);
389
17.8k
      return blob;
390
17.8k
    }
391
3.08k
    else
392
3.08k
    {
393
3.08k
      hb_blob_destroy (blob);
394
3.08k
      return hb_blob_get_empty ();
395
3.08k
    }
396
20.9k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::kerx>(hb_blob_t*)
Line
Count
Source
333
472k
  {
334
472k
    bool sane;
335
336
472k
    init (blob);
337
338
472k
  retry:
339
472k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
472k
    start_processing ();
342
343
472k
    if (unlikely (!start))
344
455k
    {
345
455k
      end_processing ();
346
455k
      return blob;
347
455k
    }
348
349
16.3k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
16.3k
    sane = t->sanitize (this);
352
16.3k
    if (sane)
353
12.1k
    {
354
12.1k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
12.1k
    }
367
4.20k
    else
368
4.20k
    {
369
4.20k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
4.20k
    }
382
383
16.3k
    end_processing ();
384
385
16.3k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
16.3k
    if (sane)
387
12.1k
    {
388
12.1k
      hb_blob_make_immutable (blob);
389
12.1k
      return blob;
390
12.1k
    }
391
4.20k
    else
392
4.20k
    {
393
4.20k
      hb_blob_destroy (blob);
394
4.20k
      return hb_blob_get_empty ();
395
4.20k
    }
396
16.3k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::ankr>(hb_blob_t*)
Line
Count
Source
333
12.1k
  {
334
12.1k
    bool sane;
335
336
12.1k
    init (blob);
337
338
14.3k
  retry:
339
14.3k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
14.3k
    start_processing ();
342
343
14.3k
    if (unlikely (!start))
344
6.45k
    {
345
6.45k
      end_processing ();
346
6.45k
      return blob;
347
6.45k
    }
348
349
7.87k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
7.87k
    sane = t->sanitize (this);
352
7.87k
    if (sane)
353
3.80k
    {
354
3.80k
      if (edit_count)
355
2.20k
      {
356
2.20k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
2.20k
  edit_count = 0;
360
2.20k
  sane = t->sanitize (this);
361
2.20k
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
2.20k
      }
366
3.80k
    }
367
4.07k
    else
368
4.07k
    {
369
4.07k
      if (edit_count && !writable) {
370
2.68k
  start = hb_blob_get_data_writable (blob, nullptr);
371
2.68k
  end = start + blob->length;
372
373
2.68k
  if (start)
374
2.20k
  {
375
2.20k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
2.20k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
2.20k
    goto retry;
379
2.20k
  }
380
2.68k
      }
381
4.07k
    }
382
383
5.66k
    end_processing ();
384
385
5.66k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
5.66k
    if (sane)
387
3.78k
    {
388
3.78k
      hb_blob_make_immutable (blob);
389
3.78k
      return blob;
390
3.78k
    }
391
1.88k
    else
392
1.88k
    {
393
1.88k
      hb_blob_destroy (blob);
394
1.88k
      return hb_blob_get_empty ();
395
1.88k
    }
396
5.66k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::trak>(hb_blob_t*)
Line
Count
Source
333
465k
  {
334
465k
    bool sane;
335
336
465k
    init (blob);
337
338
466k
  retry:
339
466k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
466k
    start_processing ();
342
343
466k
    if (unlikely (!start))
344
463k
    {
345
463k
      end_processing ();
346
463k
      return blob;
347
463k
    }
348
349
2.81k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
2.81k
    sane = t->sanitize (this);
352
2.81k
    if (sane)
353
1.28k
    {
354
1.28k
      if (edit_count)
355
747
      {
356
747
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
747
  edit_count = 0;
360
747
  sane = t->sanitize (this);
361
747
  if (edit_count) {
362
24
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
24
    sane = false;
364
24
  }
365
747
      }
366
1.28k
    }
367
1.53k
    else
368
1.53k
    {
369
1.53k
      if (edit_count && !writable) {
370
820
  start = hb_blob_get_data_writable (blob, nullptr);
371
820
  end = start + blob->length;
372
373
820
  if (start)
374
765
  {
375
765
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
765
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
765
    goto retry;
379
765
  }
380
820
      }
381
1.53k
    }
382
383
2.05k
    end_processing ();
384
385
2.05k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
2.05k
    if (sane)
387
1.25k
    {
388
1.25k
      hb_blob_make_immutable (blob);
389
1.25k
      return blob;
390
1.25k
    }
391
801
    else
392
801
    {
393
801
      hb_blob_destroy (blob);
394
801
      return hb_blob_get_empty ();
395
801
    }
396
2.05k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::feat>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
474k
  retry:
339
474k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
474k
    start_processing ();
342
343
474k
    if (unlikely (!start))
344
473k
    {
345
473k
      end_processing ();
346
473k
      return blob;
347
473k
    }
348
349
724
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
724
    sane = t->sanitize (this);
352
724
    if (sane)
353
266
    {
354
266
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
266
    }
367
458
    else
368
458
    {
369
458
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
458
    }
382
383
724
    end_processing ();
384
385
724
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
724
    if (sane)
387
266
    {
388
266
      hb_blob_make_immutable (blob);
389
266
      return blob;
390
266
    }
391
458
    else
392
458
    {
393
458
      hb_blob_destroy (blob);
394
458
      return hb_blob_get_empty ();
395
458
    }
396
724
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::Layout::GPOS>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
568k
  retry:
339
568k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
568k
    start_processing ();
342
343
568k
    if (unlikely (!start))
344
298k
    {
345
298k
      end_processing ();
346
298k
      return blob;
347
298k
    }
348
349
270k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
270k
    sane = t->sanitize (this);
352
270k
    if (sane)
353
145k
    {
354
145k
      if (edit_count)
355
73.5k
      {
356
73.5k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
73.5k
  edit_count = 0;
360
73.5k
  sane = t->sanitize (this);
361
73.5k
  if (edit_count) {
362
2.92k
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
2.92k
    sane = false;
364
2.92k
  }
365
73.5k
      }
366
145k
    }
367
124k
    else
368
124k
    {
369
124k
      if (edit_count && !writable) {
370
99.1k
  start = hb_blob_get_data_writable (blob, nullptr);
371
99.1k
  end = start + blob->length;
372
373
99.1k
  if (start)
374
98.5k
  {
375
98.5k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
98.5k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
98.5k
    goto retry;
379
98.5k
  }
380
99.1k
      }
381
124k
    }
382
383
171k
    end_processing ();
384
385
171k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
171k
    if (sane)
387
139k
    {
388
139k
      hb_blob_make_immutable (blob);
389
139k
      return blob;
390
139k
    }
391
32.3k
    else
392
32.3k
    {
393
32.3k
      hb_blob_destroy (blob);
394
32.3k
      return hb_blob_get_empty ();
395
32.3k
    }
396
171k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::loca>(hb_blob_t*)
Line
Count
Source
333
470k
  {
334
470k
    bool sane;
335
336
470k
    init (blob);
337
338
470k
  retry:
339
470k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
470k
    start_processing ();
342
343
470k
    if (unlikely (!start))
344
354k
    {
345
354k
      end_processing ();
346
354k
      return blob;
347
354k
    }
348
349
115k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
115k
    sane = t->sanitize (this);
352
115k
    if (sane)
353
115k
    {
354
115k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
115k
    }
367
0
    else
368
0
    {
369
0
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
0
    }
382
383
115k
    end_processing ();
384
385
115k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
115k
    if (sane)
387
115k
    {
388
115k
      hb_blob_make_immutable (blob);
389
115k
      return blob;
390
115k
    }
391
0
    else
392
0
    {
393
0
      hb_blob_destroy (blob);
394
0
      return hb_blob_get_empty ();
395
0
    }
396
115k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::maxp>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
474k
  retry:
339
474k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
474k
    start_processing ();
342
343
474k
    if (unlikely (!start))
344
229k
    {
345
229k
      end_processing ();
346
229k
      return blob;
347
229k
    }
348
349
245k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
245k
    sane = t->sanitize (this);
352
245k
    if (sane)
353
207k
    {
354
207k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
207k
    }
367
37.9k
    else
368
37.9k
    {
369
37.9k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
37.9k
    }
382
383
245k
    end_processing ();
384
385
245k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
245k
    if (sane)
387
207k
    {
388
207k
      hb_blob_make_immutable (blob);
389
207k
      return blob;
390
207k
    }
391
37.9k
    else
392
37.9k
    {
393
37.9k
      hb_blob_destroy (blob);
394
37.9k
      return hb_blob_get_empty ();
395
37.9k
    }
396
245k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::head>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
474k
  retry:
339
474k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
474k
    start_processing ();
342
343
474k
    if (unlikely (!start))
344
258k
    {
345
258k
      end_processing ();
346
258k
      return blob;
347
258k
    }
348
349
215k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
215k
    sane = t->sanitize (this);
352
215k
    if (sane)
353
157k
    {
354
157k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
157k
    }
367
57.9k
    else
368
57.9k
    {
369
57.9k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
57.9k
    }
382
383
215k
    end_processing ();
384
385
215k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
215k
    if (sane)
387
157k
    {
388
157k
      hb_blob_make_immutable (blob);
389
157k
      return blob;
390
157k
    }
391
57.9k
    else
392
57.9k
    {
393
57.9k
      hb_blob_destroy (blob);
394
57.9k
      return hb_blob_get_empty ();
395
57.9k
    }
396
215k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::MVAR>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
478k
  retry:
339
478k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
478k
    start_processing ();
342
343
478k
    if (unlikely (!start))
344
443k
    {
345
443k
      end_processing ();
346
443k
      return blob;
347
443k
    }
348
349
35.7k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
35.7k
    sane = t->sanitize (this);
352
35.7k
    if (sane)
353
20.7k
    {
354
20.7k
      if (edit_count)
355
4.60k
      {
356
4.60k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
4.60k
  edit_count = 0;
360
4.60k
  sane = t->sanitize (this);
361
4.60k
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
4.60k
      }
366
20.7k
    }
367
15.0k
    else
368
15.0k
    {
369
15.0k
      if (edit_count && !writable) {
370
5.10k
  start = hb_blob_get_data_writable (blob, nullptr);
371
5.10k
  end = start + blob->length;
372
373
5.10k
  if (start)
374
4.95k
  {
375
4.95k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
4.95k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
4.95k
    goto retry;
379
4.95k
  }
380
5.10k
      }
381
15.0k
    }
382
383
30.8k
    end_processing ();
384
385
30.8k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
30.8k
    if (sane)
387
20.7k
    {
388
20.7k
      hb_blob_make_immutable (blob);
389
20.7k
      return blob;
390
20.7k
    }
391
10.1k
    else
392
10.1k
    {
393
10.1k
      hb_blob_destroy (blob);
394
10.1k
      return hb_blob_get_empty ();
395
10.1k
    }
396
30.8k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cmap>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
503k
  retry:
339
503k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
503k
    start_processing ();
342
343
503k
    if (unlikely (!start))
344
247k
    {
345
247k
      end_processing ();
346
247k
      return blob;
347
247k
    }
348
349
255k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
255k
    sane = t->sanitize (this);
352
255k
    if (sane)
353
172k
    {
354
172k
      if (edit_count)
355
32.1k
      {
356
32.1k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
32.1k
  edit_count = 0;
360
32.1k
  sane = t->sanitize (this);
361
32.1k
  if (edit_count) {
362
159
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
159
    sane = false;
364
159
  }
365
32.1k
      }
366
172k
    }
367
82.1k
    else
368
82.1k
    {
369
82.1k
      if (edit_count && !writable) {
370
33.5k
  start = hb_blob_get_data_writable (blob, nullptr);
371
33.5k
  end = start + blob->length;
372
373
33.5k
  if (start)
374
33.3k
  {
375
33.3k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
33.3k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
33.3k
    goto retry;
379
33.3k
  }
380
33.5k
      }
381
82.1k
    }
382
383
221k
    end_processing ();
384
385
221k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
221k
    if (sane)
387
172k
    {
388
172k
      hb_blob_make_immutable (blob);
389
172k
      return blob;
390
172k
    }
391
48.9k
    else
392
48.9k
    {
393
48.9k
      hb_blob_destroy (blob);
394
48.9k
      return hb_blob_get_empty ();
395
48.9k
    }
396
221k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::OS2>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
474k
  retry:
339
474k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
474k
    start_processing ();
342
343
474k
    if (unlikely (!start))
344
277k
    {
345
277k
      end_processing ();
346
277k
      return blob;
347
277k
    }
348
349
196k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
196k
    sane = t->sanitize (this);
352
196k
    if (sane)
353
173k
    {
354
173k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
173k
    }
367
23.1k
    else
368
23.1k
    {
369
23.1k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
23.1k
    }
382
383
196k
    end_processing ();
384
385
196k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
196k
    if (sane)
387
173k
    {
388
173k
      hb_blob_make_immutable (blob);
389
173k
      return blob;
390
173k
    }
391
23.1k
    else
392
23.1k
    {
393
23.1k
      hb_blob_destroy (blob);
394
23.1k
      return hb_blob_get_empty ();
395
23.1k
    }
396
196k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::COLR>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
507k
  retry:
339
507k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
507k
    start_processing ();
342
343
507k
    if (unlikely (!start))
344
434k
    {
345
434k
      end_processing ();
346
434k
      return blob;
347
434k
    }
348
349
72.7k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
72.7k
    sane = t->sanitize (this);
352
72.7k
    if (sane)
353
30.7k
    {
354
30.7k
      if (edit_count)
355
28.3k
      {
356
28.3k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
28.3k
  edit_count = 0;
360
28.3k
  sane = t->sanitize (this);
361
28.3k
  if (edit_count) {
362
85
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
85
    sane = false;
364
85
  }
365
28.3k
      }
366
30.7k
    }
367
42.0k
    else
368
42.0k
    {
369
42.0k
      if (edit_count && !writable) {
370
33.1k
  start = hb_blob_get_data_writable (blob, nullptr);
371
33.1k
  end = start + blob->length;
372
373
33.1k
  if (start)
374
33.0k
  {
375
33.0k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
33.0k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
33.0k
    goto retry;
379
33.0k
  }
380
33.1k
      }
381
42.0k
    }
382
383
39.7k
    end_processing ();
384
385
39.7k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
39.7k
    if (sane)
387
30.6k
    {
388
30.6k
      hb_blob_make_immutable (blob);
389
30.6k
      return blob;
390
30.6k
    }
391
9.06k
    else
392
9.06k
    {
393
9.06k
      hb_blob_destroy (blob);
394
9.06k
      return hb_blob_get_empty ();
395
9.06k
    }
396
39.7k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hmtxvmtx<OT::hmtx, OT::hhea, OT::HVAR> >(hb_blob_t*)
Line
Count
Source
333
467k
  {
334
467k
    bool sane;
335
336
467k
    init (blob);
337
338
467k
  retry:
339
467k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
467k
    start_processing ();
342
343
467k
    if (unlikely (!start))
344
293k
    {
345
293k
      end_processing ();
346
293k
      return blob;
347
293k
    }
348
349
174k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
174k
    sane = t->sanitize (this);
352
174k
    if (sane)
353
174k
    {
354
174k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
174k
    }
367
0
    else
368
0
    {
369
0
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
0
    }
382
383
174k
    end_processing ();
384
385
174k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
174k
    if (sane)
387
174k
    {
388
174k
      hb_blob_make_immutable (blob);
389
174k
      return blob;
390
174k
    }
391
0
    else
392
0
    {
393
0
      hb_blob_destroy (blob);
394
0
      return hb_blob_get_empty ();
395
0
    }
396
174k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::HVAR>(hb_blob_t*)
Line
Count
Source
333
467k
  {
334
467k
    bool sane;
335
336
467k
    init (blob);
337
338
472k
  retry:
339
472k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
472k
    start_processing ();
342
343
472k
    if (unlikely (!start))
344
437k
    {
345
437k
      end_processing ();
346
437k
      return blob;
347
437k
    }
348
349
34.6k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
34.6k
    sane = t->sanitize (this);
352
34.6k
    if (sane)
353
15.1k
    {
354
15.1k
      if (edit_count)
355
4.69k
      {
356
4.69k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
4.69k
  edit_count = 0;
360
4.69k
  sane = t->sanitize (this);
361
4.69k
  if (edit_count) {
362
106
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
106
    sane = false;
364
106
  }
365
4.69k
      }
366
15.1k
    }
367
19.5k
    else
368
19.5k
    {
369
19.5k
      if (edit_count && !writable) {
370
5.00k
  start = hb_blob_get_data_writable (blob, nullptr);
371
5.00k
  end = start + blob->length;
372
373
5.00k
  if (start)
374
4.93k
  {
375
4.93k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
4.93k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
4.93k
    goto retry;
379
4.93k
  }
380
5.00k
      }
381
19.5k
    }
382
383
29.6k
    end_processing ();
384
385
29.6k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
29.6k
    if (sane)
387
14.9k
    {
388
14.9k
      hb_blob_make_immutable (blob);
389
14.9k
      return blob;
390
14.9k
    }
391
14.7k
    else
392
14.7k
    {
393
14.7k
      hb_blob_destroy (blob);
394
14.7k
      return hb_blob_get_empty ();
395
14.7k
    }
396
29.6k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hhea>(hb_blob_t*)
Line
Count
Source
333
473k
  {
334
473k
    bool sane;
335
336
473k
    init (blob);
337
338
473k
  retry:
339
473k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
473k
    start_processing ();
342
343
473k
    if (unlikely (!start))
344
263k
    {
345
263k
      end_processing ();
346
263k
      return blob;
347
263k
    }
348
349
210k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
210k
    sane = t->sanitize (this);
352
210k
    if (sane)
353
164k
    {
354
164k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
164k
    }
367
46.3k
    else
368
46.3k
    {
369
46.3k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
46.3k
    }
382
383
210k
    end_processing ();
384
385
210k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
210k
    if (sane)
387
164k
    {
388
164k
      hb_blob_make_immutable (blob);
389
164k
      return blob;
390
164k
    }
391
46.3k
    else
392
46.3k
    {
393
46.3k
      hb_blob_destroy (blob);
394
46.3k
      return hb_blob_get_empty ();
395
46.3k
    }
396
210k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::vhea>(hb_blob_t*)
Line
Count
Source
333
466k
  {
334
466k
    bool sane;
335
336
466k
    init (blob);
337
338
466k
  retry:
339
466k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
466k
    start_processing ();
342
343
466k
    if (unlikely (!start))
344
455k
    {
345
455k
      end_processing ();
346
455k
      return blob;
347
455k
    }
348
349
10.8k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
10.8k
    sane = t->sanitize (this);
352
10.8k
    if (sane)
353
3.81k
    {
354
3.81k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
3.81k
    }
367
7.03k
    else
368
7.03k
    {
369
7.03k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
7.03k
    }
382
383
10.8k
    end_processing ();
384
385
10.8k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
10.8k
    if (sane)
387
3.81k
    {
388
3.81k
      hb_blob_make_immutable (blob);
389
3.81k
      return blob;
390
3.81k
    }
391
7.03k
    else
392
7.03k
    {
393
7.03k
      hb_blob_destroy (blob);
394
7.03k
      return hb_blob_get_empty ();
395
7.03k
    }
396
10.8k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hmtxvmtx<OT::vmtx, OT::vhea, OT::VVAR> >(hb_blob_t*)
Line
Count
Source
333
466k
  {
334
466k
    bool sane;
335
336
466k
    init (blob);
337
338
466k
  retry:
339
466k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
466k
    start_processing ();
342
343
466k
    if (unlikely (!start))
344
456k
    {
345
456k
      end_processing ();
346
456k
      return blob;
347
456k
    }
348
349
10.4k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
10.4k
    sane = t->sanitize (this);
352
10.4k
    if (sane)
353
10.4k
    {
354
10.4k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
10.4k
    }
367
0
    else
368
0
    {
369
0
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
0
    }
382
383
10.4k
    end_processing ();
384
385
10.4k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
10.4k
    if (sane)
387
10.4k
    {
388
10.4k
      hb_blob_make_immutable (blob);
389
10.4k
      return blob;
390
10.4k
    }
391
0
    else
392
0
    {
393
0
      hb_blob_destroy (blob);
394
0
      return hb_blob_get_empty ();
395
0
    }
396
10.4k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::VVAR>(hb_blob_t*)
Line
Count
Source
333
466k
  {
334
466k
    bool sane;
335
336
466k
    init (blob);
337
338
469k
  retry:
339
469k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
469k
    start_processing ();
342
343
469k
    if (unlikely (!start))
344
458k
    {
345
458k
      end_processing ();
346
458k
      return blob;
347
458k
    }
348
349
10.7k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
10.7k
    sane = t->sanitize (this);
352
10.7k
    if (sane)
353
6.13k
    {
354
6.13k
      if (edit_count)
355
2.95k
      {
356
2.95k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
2.95k
  edit_count = 0;
360
2.95k
  sane = t->sanitize (this);
361
2.95k
  if (edit_count) {
362
11
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
11
    sane = false;
364
11
  }
365
2.95k
      }
366
6.13k
    }
367
4.58k
    else
368
4.58k
    {
369
4.58k
      if (edit_count && !writable) {
370
3.06k
  start = hb_blob_get_data_writable (blob, nullptr);
371
3.06k
  end = start + blob->length;
372
373
3.06k
  if (start)
374
3.01k
  {
375
3.01k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
3.01k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
3.01k
    goto retry;
379
3.01k
  }
380
3.06k
      }
381
4.58k
    }
382
383
7.70k
    end_processing ();
384
385
7.70k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
7.70k
    if (sane)
387
6.12k
    {
388
6.12k
      hb_blob_make_immutable (blob);
389
6.12k
      return blob;
390
6.12k
    }
391
1.57k
    else
392
1.57k
    {
393
1.57k
      hb_blob_destroy (blob);
394
1.57k
      return hb_blob_get_empty ();
395
1.57k
    }
396
7.70k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::gvar>(hb_blob_t*)
Line
Count
Source
333
457k
  {
334
457k
    bool sane;
335
336
457k
    init (blob);
337
338
457k
  retry:
339
457k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
457k
    start_processing ();
342
343
457k
    if (unlikely (!start))
344
426k
    {
345
426k
      end_processing ();
346
426k
      return blob;
347
426k
    }
348
349
30.0k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
30.0k
    sane = t->sanitize (this);
352
30.0k
    if (sane)
353
17.3k
    {
354
17.3k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
17.3k
    }
367
12.7k
    else
368
12.7k
    {
369
12.7k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
12.7k
    }
382
383
30.0k
    end_processing ();
384
385
30.0k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
30.0k
    if (sane)
387
17.3k
    {
388
17.3k
      hb_blob_make_immutable (blob);
389
17.3k
      return blob;
390
17.3k
    }
391
12.7k
    else
392
12.7k
    {
393
12.7k
      hb_blob_destroy (blob);
394
12.7k
      return hb_blob_get_empty ();
395
12.7k
    }
396
30.0k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::glyf>(hb_blob_t*)
Line
Count
Source
333
461k
  {
334
461k
    bool sane;
335
336
461k
    init (blob);
337
338
461k
  retry:
339
461k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
461k
    start_processing ();
342
343
461k
    if (unlikely (!start))
344
330k
    {
345
330k
      end_processing ();
346
330k
      return blob;
347
330k
    }
348
349
131k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
131k
    sane = t->sanitize (this);
352
131k
    if (sane)
353
131k
    {
354
131k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
131k
    }
367
0
    else
368
0
    {
369
0
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
0
    }
382
383
131k
    end_processing ();
384
385
131k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
131k
    if (sane)
387
131k
    {
388
131k
      hb_blob_make_immutable (blob);
389
131k
      return blob;
390
131k
    }
391
0
    else
392
0
    {
393
0
      hb_blob_destroy (blob);
394
0
      return hb_blob_get_empty ();
395
0
    }
396
131k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::OpenTypeFontFile>(hb_blob_t*)
Line
Count
Source
333
479k
  {
334
479k
    bool sane;
335
336
479k
    init (blob);
337
338
479k
  retry:
339
479k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
479k
    start_processing ();
342
343
479k
    if (unlikely (!start))
344
403
    {
345
403
      end_processing ();
346
403
      return blob;
347
403
    }
348
349
479k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
479k
    sane = t->sanitize (this);
352
479k
    if (sane)
353
471k
    {
354
471k
      if (edit_count)
355
505
      {
356
505
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
505
  edit_count = 0;
360
505
  sane = t->sanitize (this);
361
505
  if (edit_count) {
362
6
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
6
    sane = false;
364
6
  }
365
505
      }
366
471k
    }
367
8.15k
    else
368
8.15k
    {
369
8.15k
      if (edit_count && !writable) {
370
688
  start = hb_blob_get_data_writable (blob, nullptr);
371
688
  end = start + blob->length;
372
373
688
  if (start)
374
635
  {
375
635
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
635
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
635
    goto retry;
379
635
  }
380
688
      }
381
8.15k
    }
382
383
478k
    end_processing ();
384
385
478k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
478k
    if (sane)
387
471k
    {
388
471k
      hb_blob_make_immutable (blob);
389
471k
      return blob;
390
471k
    }
391
7.53k
    else
392
7.53k
    {
393
7.53k
      hb_blob_destroy (blob);
394
7.53k
      return hb_blob_get_empty ();
395
7.53k
    }
396
478k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::fvar>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
474k
  retry:
339
474k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
474k
    start_processing ();
342
343
474k
    if (unlikely (!start))
344
425k
    {
345
425k
      end_processing ();
346
425k
      return blob;
347
425k
    }
348
349
49.3k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
49.3k
    sane = t->sanitize (this);
352
49.3k
    if (sane)
353
31.1k
    {
354
31.1k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
31.1k
    }
367
18.2k
    else
368
18.2k
    {
369
18.2k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
18.2k
    }
382
383
49.3k
    end_processing ();
384
385
49.3k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
49.3k
    if (sane)
387
31.1k
    {
388
31.1k
      hb_blob_make_immutable (blob);
389
31.1k
      return blob;
390
31.1k
    }
391
18.2k
    else
392
18.2k
    {
393
18.2k
      hb_blob_destroy (blob);
394
18.2k
      return hb_blob_get_empty ();
395
18.2k
    }
396
49.3k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::avar>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
474k
  retry:
339
474k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
474k
    start_processing ();
342
343
474k
    if (unlikely (!start))
344
441k
    {
345
441k
      end_processing ();
346
441k
      return blob;
347
441k
    }
348
349
32.8k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
32.8k
    sane = t->sanitize (this);
352
32.8k
    if (sane)
353
20.3k
    {
354
20.3k
      if (edit_count)
355
341
      {
356
341
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
341
  edit_count = 0;
360
341
  sane = t->sanitize (this);
361
341
  if (edit_count) {
362
21
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
21
    sane = false;
364
21
  }
365
341
      }
366
20.3k
    }
367
12.5k
    else
368
12.5k
    {
369
12.5k
      if (edit_count && !writable) {
370
411
  start = hb_blob_get_data_writable (blob, nullptr);
371
411
  end = start + blob->length;
372
373
411
  if (start)
374
384
  {
375
384
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
384
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
384
    goto retry;
379
384
  }
380
411
      }
381
12.5k
    }
382
383
32.4k
    end_processing ();
384
385
32.4k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
32.4k
    if (sane)
387
20.3k
    {
388
20.3k
      hb_blob_make_immutable (blob);
389
20.3k
      return blob;
390
20.3k
    }
391
12.1k
    else
392
12.1k
    {
393
12.1k
      hb_blob_destroy (blob);
394
12.1k
      return hb_blob_get_empty ();
395
12.1k
    }
396
32.4k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CPAL>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
474k
  retry:
339
474k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
474k
    start_processing ();
342
343
474k
    if (unlikely (!start))
344
452k
    {
345
452k
      end_processing ();
346
452k
      return blob;
347
452k
    }
348
349
21.9k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
21.9k
    sane = t->sanitize (this);
352
21.9k
    if (sane)
353
4.35k
    {
354
4.35k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
4.35k
    }
367
17.5k
    else
368
17.5k
    {
369
17.5k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
17.5k
    }
382
383
21.9k
    end_processing ();
384
385
21.9k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
21.9k
    if (sane)
387
4.35k
    {
388
4.35k
      hb_blob_make_immutable (blob);
389
4.35k
      return blob;
390
4.35k
    }
391
17.5k
    else
392
17.5k
    {
393
17.5k
      hb_blob_destroy (blob);
394
17.5k
      return hb_blob_get_empty ();
395
17.5k
    }
396
21.9k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::SVG>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
469k
  retry:
339
469k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
469k
    start_processing ();
342
343
469k
    if (unlikely (!start))
344
463k
    {
345
463k
      end_processing ();
346
463k
      return blob;
347
463k
    }
348
349
5.30k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
5.30k
    sane = t->sanitize (this);
352
5.30k
    if (sane)
353
1.07k
    {
354
1.07k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
1.07k
    }
367
4.23k
    else
368
4.23k
    {
369
4.23k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
4.23k
    }
382
383
5.30k
    end_processing ();
384
385
5.30k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
5.30k
    if (sane)
387
1.07k
    {
388
1.07k
      hb_blob_make_immutable (blob);
389
1.07k
      return blob;
390
1.07k
    }
391
4.23k
    else
392
4.23k
    {
393
4.23k
      hb_blob_destroy (blob);
394
4.23k
      return hb_blob_get_empty ();
395
4.23k
    }
396
5.30k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CBLC>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
470k
  retry:
339
470k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
470k
    start_processing ();
342
343
470k
    if (unlikely (!start))
344
466k
    {
345
466k
      end_processing ();
346
466k
      return blob;
347
466k
    }
348
349
4.32k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
4.32k
    sane = t->sanitize (this);
352
4.32k
    if (sane)
353
2.11k
    {
354
2.11k
      if (edit_count)
355
990
      {
356
990
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
990
  edit_count = 0;
360
990
  sane = t->sanitize (this);
361
990
  if (edit_count) {
362
1
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
1
    sane = false;
364
1
  }
365
990
      }
366
2.11k
    }
367
2.21k
    else
368
2.21k
    {
369
2.21k
      if (edit_count && !writable) {
370
1.32k
  start = hb_blob_get_data_writable (blob, nullptr);
371
1.32k
  end = start + blob->length;
372
373
1.32k
  if (start)
374
1.29k
  {
375
1.29k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
1.29k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
1.29k
    goto retry;
379
1.29k
  }
380
1.32k
      }
381
2.21k
    }
382
383
3.03k
    end_processing ();
384
385
3.03k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
3.03k
    if (sane)
387
2.09k
    {
388
2.09k
      hb_blob_make_immutable (blob);
389
2.09k
      return blob;
390
2.09k
    }
391
932
    else
392
932
    {
393
932
      hb_blob_destroy (blob);
394
932
      return hb_blob_get_empty ();
395
932
    }
396
3.03k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CBDT>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
469k
  retry:
339
469k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
469k
    start_processing ();
342
343
469k
    if (unlikely (!start))
344
466k
    {
345
466k
      end_processing ();
346
466k
      return blob;
347
466k
    }
348
349
2.39k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
2.39k
    sane = t->sanitize (this);
352
2.39k
    if (sane)
353
2.05k
    {
354
2.05k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
2.05k
    }
367
333
    else
368
333
    {
369
333
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
333
    }
382
383
2.39k
    end_processing ();
384
385
2.39k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
2.39k
    if (sane)
387
2.05k
    {
388
2.05k
      hb_blob_make_immutable (blob);
389
2.05k
      return blob;
390
2.05k
    }
391
333
    else
392
333
    {
393
333
      hb_blob_destroy (blob);
394
333
      return hb_blob_get_empty ();
395
333
    }
396
2.39k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::sbix>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
469k
  retry:
339
469k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
469k
    start_processing ();
342
343
469k
    if (unlikely (!start))
344
466k
    {
345
466k
      end_processing ();
346
466k
      return blob;
347
466k
    }
348
349
3.05k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
3.05k
    sane = t->sanitize (this);
352
3.05k
    if (sane)
353
1.71k
    {
354
1.71k
      if (edit_count)
355
756
      {
356
756
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
756
  edit_count = 0;
360
756
  sane = t->sanitize (this);
361
756
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
756
      }
366
1.71k
    }
367
1.34k
    else
368
1.34k
    {
369
1.34k
      if (edit_count && !writable) {
370
864
  start = hb_blob_get_data_writable (blob, nullptr);
371
864
  end = start + blob->length;
372
373
864
  if (start)
374
834
  {
375
834
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
834
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
834
    goto retry;
379
834
  }
380
864
      }
381
1.34k
    }
382
383
2.22k
    end_processing ();
384
385
2.22k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
2.22k
    if (sane)
387
1.71k
    {
388
1.71k
      hb_blob_make_immutable (blob);
389
1.71k
      return blob;
390
1.71k
    }
391
511
    else
392
511
    {
393
511
      hb_blob_destroy (blob);
394
511
      return hb_blob_get_empty ();
395
511
    }
396
2.22k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cff1>(hb_blob_t*)
Line
Count
Source
333
464k
  {
334
464k
    bool sane;
335
336
464k
    init (blob);
337
338
464k
  retry:
339
464k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
464k
    start_processing ();
342
343
464k
    if (unlikely (!start))
344
407k
    {
345
407k
      end_processing ();
346
407k
      return blob;
347
407k
    }
348
349
56.6k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
56.6k
    sane = t->sanitize (this);
352
56.6k
    if (sane)
353
45.2k
    {
354
45.2k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
45.2k
    }
367
11.3k
    else
368
11.3k
    {
369
11.3k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
11.3k
    }
382
383
56.6k
    end_processing ();
384
385
56.6k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
56.6k
    if (sane)
387
45.2k
    {
388
45.2k
      hb_blob_make_immutable (blob);
389
45.2k
      return blob;
390
45.2k
    }
391
11.3k
    else
392
11.3k
    {
393
11.3k
      hb_blob_destroy (blob);
394
11.3k
      return hb_blob_get_empty ();
395
11.3k
    }
396
56.6k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cff2>(hb_blob_t*)
Line
Count
Source
333
422k
  {
334
422k
    bool sane;
335
336
422k
    init (blob);
337
338
422k
  retry:
339
422k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
422k
    start_processing ();
342
343
422k
    if (unlikely (!start))
344
372k
    {
345
372k
      end_processing ();
346
372k
      return blob;
347
372k
    }
348
349
49.5k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
49.5k
    sane = t->sanitize (this);
352
49.5k
    if (sane)
353
41.0k
    {
354
41.0k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
41.0k
    }
367
8.55k
    else
368
8.55k
    {
369
8.55k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
8.55k
    }
382
383
49.5k
    end_processing ();
384
385
49.5k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
49.5k
    if (sane)
387
41.0k
    {
388
41.0k
      hb_blob_make_immutable (blob);
389
41.0k
      return blob;
390
41.0k
    }
391
8.55k
    else
392
8.55k
    {
393
8.55k
      hb_blob_destroy (blob);
394
8.55k
      return hb_blob_get_empty ();
395
8.55k
    }
396
49.5k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::meta>(hb_blob_t*)
Line
Count
Source
333
468k
  {
334
468k
    bool sane;
335
336
468k
    init (blob);
337
338
468k
  retry:
339
468k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
468k
    start_processing ();
342
343
468k
    if (unlikely (!start))
344
465k
    {
345
465k
      end_processing ();
346
465k
      return blob;
347
465k
    }
348
349
3.71k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
3.71k
    sane = t->sanitize (this);
352
3.71k
    if (sane)
353
769
    {
354
769
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
769
    }
367
2.94k
    else
368
2.94k
    {
369
2.94k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
2.94k
    }
382
383
3.71k
    end_processing ();
384
385
3.71k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
3.71k
    if (sane)
387
769
    {
388
769
      hb_blob_make_immutable (blob);
389
769
      return blob;
390
769
    }
391
2.94k
    else
392
2.94k
    {
393
2.94k
      hb_blob_destroy (blob);
394
2.94k
      return hb_blob_get_empty ();
395
2.94k
    }
396
3.71k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::name>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
469k
  retry:
339
469k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
469k
    start_processing ();
342
343
469k
    if (unlikely (!start))
344
286k
    {
345
286k
      end_processing ();
346
286k
      return blob;
347
286k
    }
348
349
183k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
183k
    sane = t->sanitize (this);
352
183k
    if (sane)
353
94.8k
    {
354
94.8k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
94.8k
    }
367
88.2k
    else
368
88.2k
    {
369
88.2k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
88.2k
    }
382
383
183k
    end_processing ();
384
385
183k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
183k
    if (sane)
387
94.8k
    {
388
94.8k
      hb_blob_make_immutable (blob);
389
94.8k
      return blob;
390
94.8k
    }
391
88.2k
    else
392
88.2k
    {
393
88.2k
      hb_blob_destroy (blob);
394
88.2k
      return hb_blob_get_empty ();
395
88.2k
    }
396
183k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::post>(hb_blob_t*)
Line
Count
Source
333
466k
  {
334
466k
    bool sane;
335
336
466k
    init (blob);
337
338
466k
  retry:
339
466k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
466k
    start_processing ();
342
343
466k
    if (unlikely (!start))
344
301k
    {
345
301k
      end_processing ();
346
301k
      return blob;
347
301k
    }
348
349
164k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
164k
    sane = t->sanitize (this);
352
164k
    if (sane)
353
105k
    {
354
105k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
105k
    }
367
59.1k
    else
368
59.1k
    {
369
59.1k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
59.1k
    }
382
383
164k
    end_processing ();
384
385
164k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
164k
    if (sane)
387
105k
    {
388
105k
      hb_blob_make_immutable (blob);
389
105k
      return blob;
390
105k
    }
391
59.1k
    else
392
59.1k
    {
393
59.1k
      hb_blob_destroy (blob);
394
59.1k
      return hb_blob_get_empty ();
395
59.1k
    }
396
164k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::Layout::GSUB>(hb_blob_t*)
Line
Count
Source
333
469k
  {
334
469k
    bool sane;
335
336
469k
    init (blob);
337
338
613k
  retry:
339
613k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
613k
    start_processing ();
342
343
613k
    if (unlikely (!start))
344
254k
    {
345
254k
      end_processing ();
346
254k
      return blob;
347
254k
    }
348
349
359k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
359k
    sane = t->sanitize (this);
352
359k
    if (sane)
353
179k
    {
354
179k
      if (edit_count)
355
111k
      {
356
111k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
111k
  edit_count = 0;
360
111k
  sane = t->sanitize (this);
361
111k
  if (edit_count) {
362
3.12k
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
3.12k
    sane = false;
364
3.12k
  }
365
111k
      }
366
179k
    }
367
179k
    else
368
179k
    {
369
179k
      if (edit_count && !writable) {
370
144k
  start = hb_blob_get_data_writable (blob, nullptr);
371
144k
  end = start + blob->length;
372
373
144k
  if (start)
374
144k
  {
375
144k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
144k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
144k
    goto retry;
379
144k
  }
380
144k
      }
381
179k
    }
382
383
215k
    end_processing ();
384
385
215k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
215k
    if (sane)
387
172k
    {
388
172k
      hb_blob_make_immutable (blob);
389
172k
      return blob;
390
172k
    }
391
42.6k
    else
392
42.6k
    {
393
42.6k
      hb_blob_destroy (blob);
394
42.6k
      return hb_blob_get_empty ();
395
42.6k
    }
396
215k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::VORG>(hb_blob_t*)
Line
Count
Source
333
471k
  {
334
471k
    bool sane;
335
336
471k
    init (blob);
337
338
471k
  retry:
339
471k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
471k
    start_processing ();
342
343
471k
    if (unlikely (!start))
344
464k
    {
345
464k
      end_processing ();
346
464k
      return blob;
347
464k
    }
348
349
7.21k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
7.21k
    sane = t->sanitize (this);
352
7.21k
    if (sane)
353
2.60k
    {
354
2.60k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
2.60k
    }
367
4.61k
    else
368
4.61k
    {
369
4.61k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
4.61k
    }
382
383
7.21k
    end_processing ();
384
385
7.21k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
7.21k
    if (sane)
387
2.60k
    {
388
2.60k
      hb_blob_make_immutable (blob);
389
2.60k
      return blob;
390
2.60k
    }
391
4.61k
    else
392
4.61k
    {
393
4.61k
      hb_blob_destroy (blob);
394
4.61k
      return hb_blob_get_empty ();
395
4.61k
    }
396
7.21k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::kern>(hb_blob_t*)
Line
Count
Source
333
426k
  {
334
426k
    bool sane;
335
336
426k
    init (blob);
337
338
426k
  retry:
339
426k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
426k
    start_processing ();
342
343
426k
    if (unlikely (!start))
344
417k
    {
345
417k
      end_processing ();
346
417k
      return blob;
347
417k
    }
348
349
9.17k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
9.17k
    sane = t->sanitize (this);
352
9.17k
    if (sane)
353
7.65k
    {
354
7.65k
      if (edit_count)
355
0
      {
356
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
0
  edit_count = 0;
360
0
  sane = t->sanitize (this);
361
0
  if (edit_count) {
362
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
0
    sane = false;
364
0
  }
365
0
      }
366
7.65k
    }
367
1.51k
    else
368
1.51k
    {
369
1.51k
      if (edit_count && !writable) {
370
0
  start = hb_blob_get_data_writable (blob, nullptr);
371
0
  end = start + blob->length;
372
373
0
  if (start)
374
0
  {
375
0
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
0
    goto retry;
379
0
  }
380
0
      }
381
1.51k
    }
382
383
9.17k
    end_processing ();
384
385
9.17k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
9.17k
    if (sane)
387
7.65k
    {
388
7.65k
      hb_blob_make_immutable (blob);
389
7.65k
      return blob;
390
7.65k
    }
391
1.51k
    else
392
1.51k
    {
393
1.51k
      hb_blob_destroy (blob);
394
1.51k
      return hb_blob_get_empty ();
395
1.51k
    }
396
9.17k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::BASE>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
479k
  retry:
339
479k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
479k
    start_processing ();
342
343
479k
    if (unlikely (!start))
344
459k
    {
345
459k
      end_processing ();
346
459k
      return blob;
347
459k
    }
348
349
20.0k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
20.0k
    sane = t->sanitize (this);
352
20.0k
    if (sane)
353
7.78k
    {
354
7.78k
      if (edit_count)
355
3.46k
      {
356
3.46k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
3.46k
  edit_count = 0;
360
3.46k
  sane = t->sanitize (this);
361
3.46k
  if (edit_count) {
362
232
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
232
    sane = false;
364
232
  }
365
3.46k
      }
366
7.78k
    }
367
12.2k
    else
368
12.2k
    {
369
12.2k
      if (edit_count && !writable) {
370
5.38k
  start = hb_blob_get_data_writable (blob, nullptr);
371
5.38k
  end = start + blob->length;
372
373
5.38k
  if (start)
374
5.35k
  {
375
5.35k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
5.35k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
5.35k
    goto retry;
379
5.35k
  }
380
5.38k
      }
381
12.2k
    }
382
383
14.6k
    end_processing ();
384
385
14.6k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
14.6k
    if (sane)
387
7.49k
    {
388
7.49k
      hb_blob_make_immutable (blob);
389
7.49k
      return blob;
390
7.49k
    }
391
7.16k
    else
392
7.16k
    {
393
7.16k
      hb_blob_destroy (blob);
394
7.16k
      return hb_blob_get_empty ();
395
7.16k
    }
396
14.6k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::MATH>(hb_blob_t*)
Line
Count
Source
333
474k
  {
334
474k
    bool sane;
335
336
474k
    init (blob);
337
338
480k
  retry:
339
480k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
340
341
480k
    start_processing ();
342
343
480k
    if (unlikely (!start))
344
466k
    {
345
466k
      end_processing ();
346
466k
      return blob;
347
466k
    }
348
349
13.9k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
350
351
13.9k
    sane = t->sanitize (this);
352
13.9k
    if (sane)
353
4.11k
    {
354
4.11k
      if (edit_count)
355
3.63k
      {
356
3.63k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %u edits; going for second round", edit_count);
357
358
  /* sanitize again to ensure no toe-stepping */
359
3.63k
  edit_count = 0;
360
3.63k
  sane = t->sanitize (this);
361
3.63k
  if (edit_count) {
362
263
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count);
363
263
    sane = false;
364
263
  }
365
3.63k
      }
366
4.11k
    }
367
9.87k
    else
368
9.87k
    {
369
9.87k
      if (edit_count && !writable) {
370
6.35k
  start = hb_blob_get_data_writable (blob, nullptr);
371
6.35k
  end = start + blob->length;
372
373
6.35k
  if (start)
374
6.30k
  {
375
6.30k
    writable = true;
376
    /* ok, we made it writable by relocating.  try again */
377
6.30k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
378
6.30k
    goto retry;
379
6.30k
  }
380
6.35k
      }
381
9.87k
    }
382
383
7.67k
    end_processing ();
384
385
7.67k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
386
7.67k
    if (sane)
387
3.58k
    {
388
3.58k
      hb_blob_make_immutable (blob);
389
3.58k
      return blob;
390
3.58k
    }
391
4.09k
    else
392
4.09k
    {
393
4.09k
      hb_blob_destroy (blob);
394
4.09k
      return hb_blob_get_empty ();
395
4.09k
    }
396
7.67k
  }
397
398
  template <typename Type>
399
  hb_blob_t *reference_table (const hb_face_t *face, hb_tag_t tableTag = Type::tableTag)
400
18.2M
  {
401
18.2M
    if (!num_glyphs_set)
402
11.1M
      set_num_glyphs (hb_face_get_glyph_count (face));
403
18.2M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
18.2M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::GDEF>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::morx>(hb_face_t const*, unsigned int)
Line
Count
Source
400
472k
  {
401
472k
    if (!num_glyphs_set)
402
472k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
472k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
472k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::ltag>(hb_face_t const*, unsigned int)
Line
Count
Source
400
3.85k
  {
401
3.85k
    if (!num_glyphs_set)
402
3.85k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
3.85k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
3.85k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::mort>(hb_face_t const*, unsigned int)
Line
Count
Source
400
452k
  {
401
452k
    if (!num_glyphs_set)
402
452k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
452k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
452k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::kerx>(hb_face_t const*, unsigned int)
Line
Count
Source
400
472k
  {
401
472k
    if (!num_glyphs_set)
402
472k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
472k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
472k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::ankr>(hb_face_t const*, unsigned int)
Line
Count
Source
400
12.1k
  {
401
12.1k
    if (!num_glyphs_set)
402
12.1k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
12.1k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
12.1k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::trak>(hb_face_t const*, unsigned int)
Line
Count
Source
400
465k
  {
401
465k
    if (!num_glyphs_set)
402
465k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
465k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
465k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::feat>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
474k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::Layout::GPOS>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::loca>(hb_face_t const*, unsigned int)
Line
Count
Source
400
470k
  {
401
470k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
470k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
470k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::maxp>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::head>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::MVAR>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::cmap>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::OS2>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::COLR>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
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
400
467k
  {
401
467k
    if (!num_glyphs_set)
402
467k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
467k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
467k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::HVAR>(hb_face_t const*, unsigned int)
Line
Count
Source
400
467k
  {
401
467k
    if (!num_glyphs_set)
402
467k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
467k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
467k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::hhea>(hb_face_t const*, unsigned int)
Line
Count
Source
400
473k
  {
401
473k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
473k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
473k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::vhea>(hb_face_t const*, unsigned int)
Line
Count
Source
400
466k
  {
401
466k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
466k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
466k
  }
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
400
466k
  {
401
466k
    if (!num_glyphs_set)
402
466k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
466k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
466k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::VVAR>(hb_face_t const*, unsigned int)
Line
Count
Source
400
466k
  {
401
466k
    if (!num_glyphs_set)
402
466k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
466k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
466k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::gvar>(hb_face_t const*, unsigned int)
Line
Count
Source
400
457k
  {
401
457k
    if (!num_glyphs_set)
402
457k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
457k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
457k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::glyf>(hb_face_t const*, unsigned int)
Line
Count
Source
400
461k
  {
401
461k
    if (!num_glyphs_set)
402
461k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
461k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
461k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::fvar>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::avar>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::CPAL>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::SVG>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::CBLC>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::CBDT>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::sbix>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::cff1>(hb_face_t const*, unsigned int)
Line
Count
Source
400
464k
  {
401
464k
    if (!num_glyphs_set)
402
464k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
464k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
464k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::cff2>(hb_face_t const*, unsigned int)
Line
Count
Source
400
422k
  {
401
422k
    if (!num_glyphs_set)
402
422k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
422k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
422k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::meta>(hb_face_t const*, unsigned int)
Line
Count
Source
400
468k
  {
401
468k
    if (!num_glyphs_set)
402
468k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
468k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
468k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::name>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::post>(hb_face_t const*, unsigned int)
Line
Count
Source
400
466k
  {
401
466k
    if (!num_glyphs_set)
402
466k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
466k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
466k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::Layout::GSUB>(hb_face_t const*, unsigned int)
Line
Count
Source
400
469k
  {
401
469k
    if (!num_glyphs_set)
402
469k
      set_num_glyphs (hb_face_get_glyph_count (face));
403
469k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
469k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::VORG>(hb_face_t const*, unsigned int)
Line
Count
Source
400
471k
  {
401
471k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
471k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
471k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::kern>(hb_face_t const*, unsigned int)
Line
Count
Source
400
426k
  {
401
426k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
426k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
426k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::BASE>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::MATH>(hb_face_t const*, unsigned int)
Line
Count
Source
400
474k
  {
401
474k
    if (!num_glyphs_set)
402
0
      set_num_glyphs (hb_face_get_glyph_count (face));
403
474k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
404
474k
  }
405
406
  const char *start, *end;
407
  mutable int max_ops, max_subtables;
408
  private:
409
  int recursion_depth;
410
  bool writable;
411
  unsigned int edit_count;
412
  hb_blob_t *blob;
413
  unsigned int num_glyphs;
414
  bool  num_glyphs_set;
415
};
416
417
struct hb_sanitize_with_object_t
418
{
419
  template <typename T>
420
  hb_sanitize_with_object_t (hb_sanitize_context_t *c, const T& obj) : c (c)
421
1.04M
  { c->set_object (obj); }
hb_sanitize_with_object_t::hb_sanitize_with_object_t<AAT::ChainSubtable<AAT::ExtendedTypes> const*>(hb_sanitize_context_t*, AAT::ChainSubtable<AAT::ExtendedTypes> const* const&)
Line
Count
Source
421
320k
  { c->set_object (obj); }
hb_sanitize_with_object_t::hb_sanitize_with_object_t<AAT::ChainSubtable<AAT::ObsoleteTypes> const*>(hb_sanitize_context_t*, AAT::ChainSubtable<AAT::ObsoleteTypes> const* const&)
Line
Count
Source
421
307k
  { c->set_object (obj); }
hb_sanitize_with_object_t::hb_sanitize_with_object_t<AAT::KerxSubTable const*>(hb_sanitize_context_t*, AAT::KerxSubTable const* const&)
Line
Count
Source
421
155k
  { c->set_object (obj); }
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
421
178k
  { c->set_object (obj); }
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&)
Line
Count
Source
421
81.5k
  { c->set_object (obj); }
422
  ~hb_sanitize_with_object_t ()
423
1.04M
  { c->reset_object (); }
424
425
  private:
426
  hb_sanitize_context_t *c;
427
};
428
429
430
#endif /* HB_SANITIZE_HH */