Coverage Report

Created: 2024-05-18 02:12

/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
2.62M
#define HB_SANITIZE_MAX_EDITS 32
106
#endif
107
#ifndef HB_SANITIZE_MAX_OPS_FACTOR
108
242M
#define HB_SANITIZE_MAX_OPS_FACTOR 64
109
#endif
110
#ifndef HB_SANITIZE_MAX_OPS_MIN
111
242M
#define HB_SANITIZE_MAX_OPS_MIN 16384
112
#endif
113
#ifndef HB_SANITIZE_MAX_OPS_MAX
114
242M
#define HB_SANITIZE_MAX_OPS_MAX 0x3FFFFFFF
115
#endif
116
#ifndef HB_SANITIZE_MAX_SUBTABLES
117
1.85M
#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
230M
  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
9.14M
  { 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
1.29M
  { 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
559k
  { 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
249k
  { 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
487k
  { 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
147k
  { 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
238k
  { 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
482k
  { 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
728k
  { 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
72.7k
  { 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
10.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
415k
  { 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
71.8k
  { 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
1.53M
  { 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
846k
  { 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
228k
  { 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
951k
  { 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
165k
  { 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
70.1k
  { 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
587k
  { return format->sanitize (this); }
136
36.9M
  static return_t default_return_value () { return true; }
137
540k
  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
1.85M
  {
142
1.85M
    max_subtables += count;
143
1.85M
    return max_subtables < HB_SANITIZE_MAX_SUBTABLES;
144
1.85M
  }
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
242M
  {
161
242M
    this->blob = hb_blob_reference (b);
162
242M
    this->writable = false;
163
242M
  }
164
165
  void set_num_glyphs (unsigned int num_glyphs_)
166
224M
  {
167
224M
    num_glyphs = num_glyphs_;
168
224M
    num_glyphs_set = true;
169
224M
  }
170
6.33M
  unsigned int get_num_glyphs () { return num_glyphs; }
171
172
270k
  void set_max_ops (int max_ops_) { max_ops = max_ops_; }
173
174
  template <typename T>
175
  void set_object (const T *obj)
176
523k
  {
177
523k
    reset_object ();
178
179
523k
    if (!obj) return;
180
181
424k
    const char *obj_start = (const char *) obj;
182
424k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
424k
    else
185
424k
    {
186
424k
      this->start = obj_start;
187
424k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
424k
    }
189
424k
  }
void hb_sanitize_context_t::set_object<AAT::ChainSubtable<AAT::ExtendedTypes> >(AAT::ChainSubtable<AAT::ExtendedTypes> const*)
Line
Count
Source
176
219k
  {
177
219k
    reset_object ();
178
179
219k
    if (!obj) return;
180
181
219k
    const char *obj_start = (const char *) obj;
182
219k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
219k
    else
185
219k
    {
186
219k
      this->start = obj_start;
187
219k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
219k
    }
189
219k
  }
void hb_sanitize_context_t::set_object<AAT::ChainSubtable<AAT::ObsoleteTypes> >(AAT::ChainSubtable<AAT::ObsoleteTypes> const*)
Line
Count
Source
176
129k
  {
177
129k
    reset_object ();
178
179
129k
    if (!obj) return;
180
181
129k
    const char *obj_start = (const char *) obj;
182
129k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
129k
    else
185
129k
    {
186
129k
      this->start = obj_start;
187
129k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
129k
    }
189
129k
  }
void hb_sanitize_context_t::set_object<AAT::KerxSubTable>(AAT::KerxSubTable const*)
Line
Count
Source
176
95.6k
  {
177
95.6k
    reset_object ();
178
179
95.6k
    if (!obj) return;
180
181
41.8k
    const char *obj_start = (const char *) obj;
182
41.8k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
41.8k
    else
185
41.8k
    {
186
41.8k
      this->start = obj_start;
187
41.8k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
41.8k
    }
189
41.8k
  }
void hb_sanitize_context_t::set_object<OT::KernSubTable<OT::KernOTSubTableHeader> >(OT::KernSubTable<OT::KernOTSubTableHeader> const*)
Line
Count
Source
176
40.0k
  {
177
40.0k
    reset_object ();
178
179
40.0k
    if (!obj) return;
180
181
11.0k
    const char *obj_start = (const char *) obj;
182
11.0k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
11.0k
    else
185
11.0k
    {
186
11.0k
      this->start = obj_start;
187
11.0k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
11.0k
    }
189
11.0k
  }
void hb_sanitize_context_t::set_object<OT::KernSubTable<OT::KernAATSubTableHeader> >(OT::KernSubTable<OT::KernAATSubTableHeader> const*)
Line
Count
Source
176
38.9k
  {
177
38.9k
    reset_object ();
178
179
38.9k
    if (!obj) return;
180
181
22.7k
    const char *obj_start = (const char *) obj;
182
22.7k
    if (unlikely (obj_start < this->start || this->end <= obj_start))
183
0
      this->start = this->end = nullptr;
184
22.7k
    else
185
22.7k
    {
186
22.7k
      this->start = obj_start;
187
22.7k
      this->end   = obj_start + hb_min (size_t (this->end - obj_start), obj->get_size ());
188
22.7k
    }
189
22.7k
  }
190
191
  void reset_object ()
192
243M
  {
193
243M
    this->start = this->blob->data;
194
243M
    this->end = this->start + this->blob->length;
195
243M
    assert (this->start <= this->end); /* Must not overflow. */
196
243M
  }
197
198
  void start_processing ()
199
242M
  {
200
242M
    reset_object ();
201
242M
    if (unlikely (hb_unsigned_mul_overflows (this->end - this->start, HB_SANITIZE_MAX_OPS_FACTOR)))
202
0
      this->max_ops = HB_SANITIZE_MAX_OPS_MAX;
203
242M
    else
204
242M
      this->max_ops = hb_clamp ((unsigned) (this->end - this->start) * HB_SANITIZE_MAX_OPS_FACTOR,
205
242M
        (unsigned) HB_SANITIZE_MAX_OPS_MIN,
206
242M
        (unsigned) HB_SANITIZE_MAX_OPS_MAX);
207
242M
    this->edit_count = 0;
208
242M
    this->debug_depth = 0;
209
242M
    this->recursion_depth = 0;
210
211
242M
    DEBUG_MSG_LEVEL (SANITIZE, start, 0, +1,
212
242M
         "start [%p..%p] (%lu bytes)",
213
242M
         this->start, this->end,
214
242M
         (unsigned long) (this->end - this->start));
215
242M
  }
216
217
  void end_processing ()
218
253M
  {
219
253M
    DEBUG_MSG_LEVEL (SANITIZE, this->start, 0, -1,
220
253M
         "end [%p..%p] %u edit requests",
221
253M
         this->start, this->end, this->edit_count);
222
223
253M
    hb_blob_destroy (this->blob);
224
253M
    this->blob = nullptr;
225
253M
    this->start = this->end = nullptr;
226
253M
  }
227
228
80.9k
  unsigned get_edit_count () { return edit_count; }
229
230
  bool check_range (const void *base,
231
        unsigned int len) const
232
3.74G
  {
233
3.74G
    const char *p = (const char *) base;
234
3.74G
    bool ok = !len ||
235
3.74G
        (this->start <= p &&
236
3.71G
         p <= this->end &&
237
3.71G
         (unsigned int) (this->end - p) >= len &&
238
3.71G
         (this->max_ops -= len) > 0);
239
240
3.74G
    DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
241
3.74G
         "check_range [%p..%p]"
242
3.74G
         " (%d bytes) in [%p..%p] -> %s",
243
3.74G
         p, p + len, len,
244
3.74G
         this->start, this->end,
245
3.74G
         ok ? "OK" : "OUT-OF-RANGE");
246
247
3.74G
    return likely (ok);
248
3.74G
  }
249
250
  template <typename T>
251
  bool check_range (const T *base,
252
        unsigned int a,
253
        unsigned int b) const
254
86.7M
  {
255
86.7M
    return !hb_unsigned_mul_overflows (a, b) &&
256
86.7M
     this->check_range (base, a * b);
257
86.7M
  }
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
254
10.1M
  {
255
10.1M
    return !hb_unsigned_mul_overflows (a, b) &&
256
10.1M
     this->check_range (base, a * b);
257
10.1M
  }
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
254
663k
  {
255
663k
    return !hb_unsigned_mul_overflows (a, b) &&
256
663k
     this->check_range (base, a * b);
257
663k
  }
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
254
251k
  {
255
251k
    return !hb_unsigned_mul_overflows (a, b) &&
256
251k
     this->check_range (base, a * b);
257
251k
  }
bool hb_sanitize_context_t::check_range<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int, unsigned int) const
Line
Count
Source
254
41.2M
  {
255
41.2M
    return !hb_unsigned_mul_overflows (a, b) &&
256
41.2M
     this->check_range (base, a * b);
257
41.2M
  }
bool hb_sanitize_context_t::check_range<OT::HBGlyphID24>(OT::HBGlyphID24 const*, unsigned int, unsigned int) const
Line
Count
Source
254
343k
  {
255
343k
    return !hb_unsigned_mul_overflows (a, b) &&
256
343k
     this->check_range (base, a * b);
257
343k
  }
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
254
9.71k
  {
255
9.71k
    return !hb_unsigned_mul_overflows (a, b) &&
256
9.71k
     this->check_range (base, a * b);
257
9.71k
  }
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
254
13.0k
  {
255
13.0k
    return !hb_unsigned_mul_overflows (a, b) &&
256
13.0k
     this->check_range (base, a * b);
257
13.0k
  }
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
254
147k
  {
255
147k
    return !hb_unsigned_mul_overflows (a, b) &&
256
147k
     this->check_range (base, a * b);
257
147k
  }
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
254
6.12k
  {
255
6.12k
    return !hb_unsigned_mul_overflows (a, b) &&
256
6.12k
     this->check_range (base, a * b);
257
6.12k
  }
bool hb_sanitize_context_t::check_range<OT::VarRegionAxis>(OT::VarRegionAxis const*, unsigned int, unsigned int) const
Line
Count
Source
254
45.6k
  {
255
45.6k
    return !hb_unsigned_mul_overflows (a, b) &&
256
45.6k
     this->check_range (base, a * b);
257
45.6k
  }
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
254
46.8k
  {
255
46.8k
    return !hb_unsigned_mul_overflows (a, b) &&
256
46.8k
     this->check_range (base, a * b);
257
46.8k
  }
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
254
8.95M
  {
255
8.95M
    return !hb_unsigned_mul_overflows (a, b) &&
256
8.95M
     this->check_range (base, a * b);
257
8.95M
  }
bool hb_sanitize_context_t::check_range<AAT::Feature>(AAT::Feature const*, unsigned int, unsigned int) const
Line
Count
Source
254
57.9k
  {
255
57.9k
    return !hb_unsigned_mul_overflows (a, b) &&
256
57.9k
     this->check_range (base, a * b);
257
57.9k
  }
bool hb_sanitize_context_t::check_range<AAT::Entry<void> >(AAT::Entry<void> const*, unsigned int, unsigned int) const
Line
Count
Source
254
39.2k
  {
255
39.2k
    return !hb_unsigned_mul_overflows (a, b) &&
256
39.2k
     this->check_range (base, a * b);
257
39.2k
  }
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
254
7.92k
  {
255
7.92k
    return !hb_unsigned_mul_overflows (a, b) &&
256
7.92k
     this->check_range (base, a * b);
257
7.92k
  }
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
254
4.47k
  {
255
4.47k
    return !hb_unsigned_mul_overflows (a, b) &&
256
4.47k
     this->check_range (base, a * b);
257
4.47k
  }
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
254
9.46k
  {
255
9.46k
    return !hb_unsigned_mul_overflows (a, b) &&
256
9.46k
     this->check_range (base, a * b);
257
9.46k
  }
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
254
16.8k
  {
255
16.8k
    return !hb_unsigned_mul_overflows (a, b) &&
256
16.8k
     this->check_range (base, a * b);
257
16.8k
  }
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
254
5.08k
  {
255
5.08k
    return !hb_unsigned_mul_overflows (a, b) &&
256
5.08k
     this->check_range (base, a * b);
257
5.08k
  }
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
254
3.04k
  {
255
3.04k
    return !hb_unsigned_mul_overflows (a, b) &&
256
3.04k
     this->check_range (base, a * b);
257
3.04k
  }
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
254
8.99k
  {
255
8.99k
    return !hb_unsigned_mul_overflows (a, b) &&
256
8.99k
     this->check_range (base, a * b);
257
8.99k
  }
bool hb_sanitize_context_t::check_range<AAT::KernPair>(AAT::KernPair const*, unsigned int, unsigned int) const
Line
Count
Source
254
3.91k
  {
255
3.91k
    return !hb_unsigned_mul_overflows (a, b) &&
256
3.91k
     this->check_range (base, a * b);
257
3.91k
  }
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
254
2.45k
  {
255
2.45k
    return !hb_unsigned_mul_overflows (a, b) &&
256
2.45k
     this->check_range (base, a * b);
257
2.45k
  }
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
254
6.94k
  {
255
6.94k
    return !hb_unsigned_mul_overflows (a, b) &&
256
6.94k
     this->check_range (base, a * b);
257
6.94k
  }
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
254
5.23k
  {
255
5.23k
    return !hb_unsigned_mul_overflows (a, b) &&
256
5.23k
     this->check_range (base, a * b);
257
5.23k
  }
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
254
4.77k
  {
255
4.77k
    return !hb_unsigned_mul_overflows (a, b) &&
256
4.77k
     this->check_range (base, a * b);
257
4.77k
  }
bool hb_sanitize_context_t::check_range<AAT::Anchor>(AAT::Anchor const*, unsigned int, unsigned int) const
Line
Count
Source
254
3.97k
  {
255
3.97k
    return !hb_unsigned_mul_overflows (a, b) &&
256
3.97k
     this->check_range (base, a * b);
257
3.97k
  }
bool hb_sanitize_context_t::check_range<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int, unsigned int) const
Line
Count
Source
254
5.15M
  {
255
5.15M
    return !hb_unsigned_mul_overflows (a, b) &&
256
5.15M
     this->check_range (base, a * b);
257
5.15M
  }
bool hb_sanitize_context_t::check_range<OT::HBFixed>(OT::HBFixed const*, unsigned int, unsigned int) const
Line
Count
Source
254
1.48k
  {
255
1.48k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.48k
     this->check_range (base, a * b);
257
1.48k
  }
bool hb_sanitize_context_t::check_range<AAT::TrackTableEntry>(AAT::TrackTableEntry const*, unsigned int, unsigned int) const
Line
Count
Source
254
1.09k
  {
255
1.09k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.09k
     this->check_range (base, a * b);
257
1.09k
  }
bool hb_sanitize_context_t::check_range<AAT::FeatureName>(AAT::FeatureName const*, unsigned int, unsigned int) const
Line
Count
Source
254
822
  {
255
822
    return !hb_unsigned_mul_overflows (a, b) &&
256
822
     this->check_range (base, a * b);
257
822
  }
bool hb_sanitize_context_t::check_range<AAT::SettingName>(AAT::SettingName const*, unsigned int, unsigned int) const
Line
Count
Source
254
6.77k
  {
255
6.77k
    return !hb_unsigned_mul_overflows (a, b) &&
256
6.77k
     this->check_range (base, a * b);
257
6.77k
  }
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
254
476k
  {
255
476k
    return !hb_unsigned_mul_overflows (a, b) &&
256
476k
     this->check_range (base, a * b);
257
476k
  }
bool hb_sanitize_context_t::check_range<OT::Index>(OT::Index const*, unsigned int, unsigned int) const
Line
Count
Source
254
6.93M
  {
255
6.93M
    return !hb_unsigned_mul_overflows (a, b) &&
256
6.93M
     this->check_range (base, a * b);
257
6.93M
  }
bool hb_sanitize_context_t::check_range<OT::Record<OT::LangSys> >(OT::Record<OT::LangSys> const*, unsigned int, unsigned int) const
Line
Count
Source
254
504k
  {
255
504k
    return !hb_unsigned_mul_overflows (a, b) &&
256
504k
     this->check_range (base, a * b);
257
504k
  }
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
254
14.8k
  {
255
14.8k
    return !hb_unsigned_mul_overflows (a, b) &&
256
14.8k
     this->check_range (base, a * b);
257
14.8k
  }
bool hb_sanitize_context_t::check_range<OT::FeatureTableSubstitutionRecord>(OT::FeatureTableSubstitutionRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
12.4k
  {
255
12.4k
    return !hb_unsigned_mul_overflows (a, b) &&
256
12.4k
     this->check_range (base, a * b);
257
12.4k
  }
bool hb_sanitize_context_t::check_range<OT::FeatureVariationRecord>(OT::FeatureVariationRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
16.5k
  {
255
16.5k
    return !hb_unsigned_mul_overflows (a, b) &&
256
16.5k
     this->check_range (base, a * b);
257
16.5k
  }
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
254
462k
  {
255
462k
    return !hb_unsigned_mul_overflows (a, b) &&
256
462k
     this->check_range (base, a * b);
257
462k
  }
bool hb_sanitize_context_t::check_range<OT::LookupRecord>(OT::LookupRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
1.44M
  {
255
1.44M
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.44M
     this->check_range (base, a * b);
257
1.44M
  }
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
254
23.5k
  {
255
23.5k
    return !hb_unsigned_mul_overflows (a, b) &&
256
23.5k
     this->check_range (base, a * b);
257
23.5k
  }
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
254
597k
  {
255
597k
    return !hb_unsigned_mul_overflows (a, b) &&
256
597k
     this->check_range (base, a * b);
257
597k
  }
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
254
93.6k
  {
255
93.6k
    return !hb_unsigned_mul_overflows (a, b) &&
256
93.6k
     this->check_range (base, a * b);
257
93.6k
  }
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
254
1.96M
  {
255
1.96M
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.96M
     this->check_range (base, a * b);
257
1.96M
  }
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
254
468k
  {
255
468k
    return !hb_unsigned_mul_overflows (a, b) &&
256
468k
     this->check_range (base, a * b);
257
468k
  }
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
254
59.6k
  {
255
59.6k
    return !hb_unsigned_mul_overflows (a, b) &&
256
59.6k
     this->check_range (base, a * b);
257
59.6k
  }
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
254
590k
  {
255
590k
    return !hb_unsigned_mul_overflows (a, b) &&
256
590k
     this->check_range (base, a * b);
257
590k
  }
bool hb_sanitize_context_t::check_range<void>(void const*, unsigned int, unsigned int) const
Line
Count
Source
254
48.9k
  {
255
48.9k
    return !hb_unsigned_mul_overflows (a, b) &&
256
48.9k
     this->check_range (base, a * b);
257
48.9k
  }
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
254
9.26k
  {
255
9.26k
    return !hb_unsigned_mul_overflows (a, b) &&
256
9.26k
     this->check_range (base, a * b);
257
9.26k
  }
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
254
17.0k
  {
255
17.0k
    return !hb_unsigned_mul_overflows (a, b) &&
256
17.0k
     this->check_range (base, a * b);
257
17.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
254
12.2k
  {
255
12.2k
    return !hb_unsigned_mul_overflows (a, b) &&
256
12.2k
     this->check_range (base, a * b);
257
12.2k
  }
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
254
110k
  {
255
110k
    return !hb_unsigned_mul_overflows (a, b) &&
256
110k
     this->check_range (base, a * b);
257
110k
  }
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
254
148k
  {
255
148k
    return !hb_unsigned_mul_overflows (a, b) &&
256
148k
     this->check_range (base, a * b);
257
148k
  }
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
254
7.26k
  {
255
7.26k
    return !hb_unsigned_mul_overflows (a, b) &&
256
7.26k
     this->check_range (base, a * b);
257
7.26k
  }
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
254
6.41k
  {
255
6.41k
    return !hb_unsigned_mul_overflows (a, b) &&
256
6.41k
     this->check_range (base, a * b);
257
6.41k
  }
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
254
5.85k
  {
255
5.85k
    return !hb_unsigned_mul_overflows (a, b) &&
256
5.85k
     this->check_range (base, a * b);
257
5.85k
  }
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
254
155k
  {
255
155k
    return !hb_unsigned_mul_overflows (a, b) &&
256
155k
     this->check_range (base, a * b);
257
155k
  }
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
254
212k
  {
255
212k
    return !hb_unsigned_mul_overflows (a, b) &&
256
212k
     this->check_range (base, a * b);
257
212k
  }
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
254
13.9k
  {
255
13.9k
    return !hb_unsigned_mul_overflows (a, b) &&
256
13.9k
     this->check_range (base, a * b);
257
13.9k
  }
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
254
11.6k
  {
255
11.6k
    return !hb_unsigned_mul_overflows (a, b) &&
256
11.6k
     this->check_range (base, a * b);
257
11.6k
  }
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
254
5.58k
  {
255
5.58k
    return !hb_unsigned_mul_overflows (a, b) &&
256
5.58k
     this->check_range (base, a * b);
257
5.58k
  }
bool hb_sanitize_context_t::check_range<OT::Record<OT::Script> >(OT::Record<OT::Script> const*, unsigned int, unsigned int) const
Line
Count
Source
254
334k
  {
255
334k
    return !hb_unsigned_mul_overflows (a, b) &&
256
334k
     this->check_range (base, a * b);
257
334k
  }
bool hb_sanitize_context_t::check_range<OT::Record<OT::Feature> >(OT::Record<OT::Feature> const*, unsigned int, unsigned int) const
Line
Count
Source
254
320k
  {
255
320k
    return !hb_unsigned_mul_overflows (a, b) &&
256
320k
     this->check_range (base, a * b);
257
320k
  }
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
254
107k
  {
255
107k
    return !hb_unsigned_mul_overflows (a, b) &&
256
107k
     this->check_range (base, a * b);
257
107k
  }
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
254
1.72k
  {
255
1.72k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.72k
     this->check_range (base, a * b);
257
1.72k
  }
bool hb_sanitize_context_t::check_range<OT::UnicodeValueRange>(OT::UnicodeValueRange const*, unsigned int, unsigned int) const
Line
Count
Source
254
4.56k
  {
255
4.56k
    return !hb_unsigned_mul_overflows (a, b) &&
256
4.56k
     this->check_range (base, a * b);
257
4.56k
  }
bool hb_sanitize_context_t::check_range<OT::UVSMapping>(OT::UVSMapping const*, unsigned int, unsigned int) const
Line
Count
Source
254
4.79k
  {
255
4.79k
    return !hb_unsigned_mul_overflows (a, b) &&
256
4.79k
     this->check_range (base, a * b);
257
4.79k
  }
bool hb_sanitize_context_t::check_range<OT::VariationSelectorRecord>(OT::VariationSelectorRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
4.52k
  {
255
4.52k
    return !hb_unsigned_mul_overflows (a, b) &&
256
4.52k
     this->check_range (base, a * b);
257
4.52k
  }
bool hb_sanitize_context_t::check_range<OT::CmapSubtableLongGroup>(OT::CmapSubtableLongGroup const*, unsigned int, unsigned int) const
Line
Count
Source
254
34.1k
  {
255
34.1k
    return !hb_unsigned_mul_overflows (a, b) &&
256
34.1k
     this->check_range (base, a * b);
257
34.1k
  }
bool hb_sanitize_context_t::check_range<OT::EncodingRecord>(OT::EncodingRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
134k
  {
255
134k
    return !hb_unsigned_mul_overflows (a, b) &&
256
134k
     this->check_range (base, a * b);
257
134k
  }
bool hb_sanitize_context_t::check_range<OT::F2DOT14>(OT::F2DOT14 const*, unsigned int, unsigned int) const
Line
Count
Source
254
9.78k
  {
255
9.78k
    return !hb_unsigned_mul_overflows (a, b) &&
256
9.78k
     this->check_range (base, a * b);
257
9.78k
  }
bool hb_sanitize_context_t::check_range<OT::TableRecord>(OT::TableRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
249k
  {
255
249k
    return !hb_unsigned_mul_overflows (a, b) &&
256
249k
     this->check_range (base, a * b);
257
249k
  }
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
254
2.02k
  {
255
2.02k
    return !hb_unsigned_mul_overflows (a, b) &&
256
2.02k
     this->check_range (base, a * b);
257
2.02k
  }
bool hb_sanitize_context_t::check_range<OT::ResourceTypeRecord>(OT::ResourceTypeRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
736
  {
255
736
    return !hb_unsigned_mul_overflows (a, b) &&
256
736
     this->check_range (base, a * b);
257
736
  }
bool hb_sanitize_context_t::check_range<OT::ResourceRecord>(OT::ResourceRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
153k
  {
255
153k
    return !hb_unsigned_mul_overflows (a, b) &&
256
153k
     this->check_range (base, a * b);
257
153k
  }
bool hb_sanitize_context_t::check_range<OT::AxisRecord>(OT::AxisRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
17.8k
  {
255
17.8k
    return !hb_unsigned_mul_overflows (a, b) &&
256
17.8k
     this->check_range (base, a * b);
257
17.8k
  }
bool hb_sanitize_context_t::check_range<OT::InstanceRecord>(OT::InstanceRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
17.7k
  {
255
17.7k
    return !hb_unsigned_mul_overflows (a, b) &&
256
17.7k
     this->check_range (base, a * b);
257
17.7k
  }
bool hb_sanitize_context_t::check_range<OT::AxisValueMap>(OT::AxisValueMap const*, unsigned int, unsigned int) const
Line
Count
Source
254
137k
  {
255
137k
    return !hb_unsigned_mul_overflows (a, b) &&
256
137k
     this->check_range (base, a * b);
257
137k
  }
bool hb_sanitize_context_t::check_range<OT::BaseGlyphRecord>(OT::BaseGlyphRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
22.8k
  {
255
22.8k
    return !hb_unsigned_mul_overflows (a, b) &&
256
22.8k
     this->check_range (base, a * b);
257
22.8k
  }
bool hb_sanitize_context_t::check_range<OT::LayerRecord>(OT::LayerRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
22.5k
  {
255
22.5k
    return !hb_unsigned_mul_overflows (a, b) &&
256
22.5k
     this->check_range (base, a * b);
257
22.5k
  }
bool hb_sanitize_context_t::check_range<OT::BaseGlyphPaintRecord>(OT::BaseGlyphPaintRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
16.9k
  {
255
16.9k
    return !hb_unsigned_mul_overflows (a, b) &&
256
16.9k
     this->check_range (base, a * b);
257
16.9k
  }
bool hb_sanitize_context_t::check_range<OT::NoVariable<OT::ColorStop> >(OT::NoVariable<OT::ColorStop> const*, unsigned int, unsigned int) const
Line
Count
Source
254
1.95k
  {
255
1.95k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.95k
     this->check_range (base, a * b);
257
1.95k
  }
bool hb_sanitize_context_t::check_range<OT::Variable<OT::ColorStop> >(OT::Variable<OT::ColorStop> const*, unsigned int, unsigned int) const
Line
Count
Source
254
1.72k
  {
255
1.72k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.72k
     this->check_range (base, a * b);
257
1.72k
  }
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
254
5.03k
  {
255
5.03k
    return !hb_unsigned_mul_overflows (a, b) &&
256
5.03k
     this->check_range (base, a * b);
257
5.03k
  }
bool hb_sanitize_context_t::check_range<OT::ClipRecord>(OT::ClipRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
3.61k
  {
255
3.61k
    return !hb_unsigned_mul_overflows (a, b) &&
256
3.61k
     this->check_range (base, a * b);
257
3.61k
  }
bool hb_sanitize_context_t::check_range<OT::SVGDocumentIndexEntry>(OT::SVGDocumentIndexEntry const*, unsigned int, unsigned int) const
Line
Count
Source
254
342
  {
255
342
    return !hb_unsigned_mul_overflows (a, b) &&
256
342
     this->check_range (base, a * b);
257
342
  }
bool hb_sanitize_context_t::check_range<OT::BitmapSizeTable>(OT::BitmapSizeTable const*, unsigned int, unsigned int) const
Line
Count
Source
254
3.64k
  {
255
3.64k
    return !hb_unsigned_mul_overflows (a, b) &&
256
3.64k
     this->check_range (base, a * b);
257
3.64k
  }
bool hb_sanitize_context_t::check_range<OT::IndexSubtableRecord>(OT::IndexSubtableRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
4.81k
  {
255
4.81k
    return !hb_unsigned_mul_overflows (a, b) &&
256
4.81k
     this->check_range (base, a * b);
257
4.81k
  }
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
254
1.49k
  {
255
1.49k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.49k
     this->check_range (base, a * b);
257
1.49k
  }
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
254
3.17k
  {
255
3.17k
    return !hb_unsigned_mul_overflows (a, b) &&
256
3.17k
     this->check_range (base, a * b);
257
3.17k
  }
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
254
5.09k
  {
255
5.09k
    return !hb_unsigned_mul_overflows (a, b) &&
256
5.09k
     this->check_range (base, a * b);
257
5.09k
  }
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
254
1.22k
  {
255
1.22k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.22k
     this->check_range (base, a * b);
257
1.22k
  }
bool hb_sanitize_context_t::check_range<CFF::Encoding1_Range>(CFF::Encoding1_Range const*, unsigned int, unsigned int) const
Line
Count
Source
254
91
  {
255
91
    return !hb_unsigned_mul_overflows (a, b) &&
256
91
     this->check_range (base, a * b);
257
91
  }
bool hb_sanitize_context_t::check_range<CFF::SuppEncoding>(CFF::SuppEncoding const*, unsigned int, unsigned int) const
Line
Count
Source
254
52
  {
255
52
    return !hb_unsigned_mul_overflows (a, b) &&
256
52
     this->check_range (base, a * b);
257
52
  }
bool hb_sanitize_context_t::check_range<unsigned char>(unsigned char const*, unsigned int, unsigned int) const
Line
Count
Source
254
153k
  {
255
153k
    return !hb_unsigned_mul_overflows (a, b) &&
256
153k
     this->check_range (base, a * b);
257
153k
  }
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
254
54
  {
255
54
    return !hb_unsigned_mul_overflows (a, b) &&
256
54
     this->check_range (base, a * b);
257
54
  }
bool hb_sanitize_context_t::check_range<OT::DataMap>(OT::DataMap const*, unsigned int, unsigned int) const
Line
Count
Source
254
664
  {
255
664
    return !hb_unsigned_mul_overflows (a, b) &&
256
664
     this->check_range (base, a * b);
257
664
  }
bool hb_sanitize_context_t::check_range<OT::NameRecord>(OT::NameRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
155k
  {
255
155k
    return !hb_unsigned_mul_overflows (a, b) &&
256
155k
     this->check_range (base, a * b);
257
155k
  }
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
254
1.37M
  {
255
1.37M
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.37M
     this->check_range (base, a * b);
257
1.37M
  }
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
254
162k
  {
255
162k
    return !hb_unsigned_mul_overflows (a, b) &&
256
162k
     this->check_range (base, a * b);
257
162k
  }
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
254
23.7k
  {
255
23.7k
    return !hb_unsigned_mul_overflows (a, b) &&
256
23.7k
     this->check_range (base, a * b);
257
23.7k
  }
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
254
29.4k
  {
255
29.4k
    return !hb_unsigned_mul_overflows (a, b) &&
256
29.4k
     this->check_range (base, a * b);
257
29.4k
  }
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
254
5.63k
  {
255
5.63k
    return !hb_unsigned_mul_overflows (a, b) &&
256
5.63k
     this->check_range (base, a * b);
257
5.63k
  }
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
254
219k
  {
255
219k
    return !hb_unsigned_mul_overflows (a, b) &&
256
219k
     this->check_range (base, a * b);
257
219k
  }
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
254
471k
  {
255
471k
    return !hb_unsigned_mul_overflows (a, b) &&
256
471k
     this->check_range (base, a * b);
257
471k
  }
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
254
16.0k
  {
255
16.0k
    return !hb_unsigned_mul_overflows (a, b) &&
256
16.0k
     this->check_range (base, a * b);
257
16.0k
  }
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
254
8.82k
  {
255
8.82k
    return !hb_unsigned_mul_overflows (a, b) &&
256
8.82k
     this->check_range (base, a * b);
257
8.82k
  }
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
254
190k
  {
255
190k
    return !hb_unsigned_mul_overflows (a, b) &&
256
190k
     this->check_range (base, a * b);
257
190k
  }
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
254
1.43k
  {
255
1.43k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.43k
     this->check_range (base, a * b);
257
1.43k
  }
bool hb_sanitize_context_t::check_range<OT::VertOriginMetric>(OT::VertOriginMetric const*, unsigned int, unsigned int) const
Line
Count
Source
254
1.28k
  {
255
1.28k
    return !hb_unsigned_mul_overflows (a, b) &&
256
1.28k
     this->check_range (base, a * b);
257
1.28k
  }
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
254
22.1k
  {
255
22.1k
    return !hb_unsigned_mul_overflows (a, b) &&
256
22.1k
     this->check_range (base, a * b);
257
22.1k
  }
bool hb_sanitize_context_t::check_range<OT::BaseScriptRecord>(OT::BaseScriptRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
21.6k
  {
255
21.6k
    return !hb_unsigned_mul_overflows (a, b) &&
256
21.6k
     this->check_range (base, a * b);
257
21.6k
  }
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
254
52.1k
  {
255
52.1k
    return !hb_unsigned_mul_overflows (a, b) &&
256
52.1k
     this->check_range (base, a * b);
257
52.1k
  }
bool hb_sanitize_context_t::check_range<OT::FeatMinMaxRecord>(OT::FeatMinMaxRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
8.12k
  {
255
8.12k
    return !hb_unsigned_mul_overflows (a, b) &&
256
8.12k
     this->check_range (base, a * b);
257
8.12k
  }
bool hb_sanitize_context_t::check_range<OT::BaseLangSysRecord>(OT::BaseLangSysRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
62.3k
  {
255
62.3k
    return !hb_unsigned_mul_overflows (a, b) &&
256
62.3k
     this->check_range (base, a * b);
257
62.3k
  }
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
254
152k
  {
255
152k
    return !hb_unsigned_mul_overflows (a, b) &&
256
152k
     this->check_range (base, a * b);
257
152k
  }
bool hb_sanitize_context_t::check_range<OT::MathKernInfoRecord>(OT::MathKernInfoRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
4.12k
  {
255
4.12k
    return !hb_unsigned_mul_overflows (a, b) &&
256
4.12k
     this->check_range (base, a * b);
257
4.12k
  }
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
254
4.36k
  {
255
4.36k
    return !hb_unsigned_mul_overflows (a, b) &&
256
4.36k
     this->check_range (base, a * b);
257
4.36k
  }
bool hb_sanitize_context_t::check_range<OT::MathGlyphPartRecord>(OT::MathGlyphPartRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
131k
  {
255
131k
    return !hb_unsigned_mul_overflows (a, b) &&
256
131k
     this->check_range (base, a * b);
257
131k
  }
bool hb_sanitize_context_t::check_range<OT::MathGlyphVariantRecord>(OT::MathGlyphVariantRecord const*, unsigned int, unsigned int) const
Line
Count
Source
254
221k
  {
255
221k
    return !hb_unsigned_mul_overflows (a, b) &&
256
221k
     this->check_range (base, a * b);
257
221k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_range<OT::GaspRange>(OT::GaspRange const*, unsigned int, unsigned int) const
258
259
  template <typename T>
260
  bool check_range (const T *base,
261
        unsigned int a,
262
        unsigned int b,
263
        unsigned int c) const
264
6.82M
  {
265
6.82M
    return !hb_unsigned_mul_overflows (a, b) &&
266
6.82M
     this->check_range (base, a * b, c);
267
6.82M
  }
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
264
5.88M
  {
265
5.88M
    return !hb_unsigned_mul_overflows (a, b) &&
266
5.88M
     this->check_range (base, a * b, c);
267
5.88M
  }
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, unsigned int) const
Line
Count
Source
264
590k
  {
265
590k
    return !hb_unsigned_mul_overflows (a, b) &&
266
590k
     this->check_range (base, a * b, c);
267
590k
  }
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, unsigned int) const
Line
Count
Source
264
17.0k
  {
265
17.0k
    return !hb_unsigned_mul_overflows (a, b) &&
266
17.0k
     this->check_range (base, a * b, c);
267
17.0k
  }
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
264
340k
  {
265
340k
    return !hb_unsigned_mul_overflows (a, b) &&
266
340k
     this->check_range (base, a * b, c);
267
340k
  }
268
269
  template <typename T>
270
  bool check_array (const T *base, unsigned int len) const
271
80.5M
  {
272
80.5M
    return this->check_range (base, len, hb_static_size (T));
273
80.5M
  }
bool hb_sanitize_context_t::check_array<OT::IntType<unsigned short, 2u> >(OT::IntType<unsigned short, 2u> const*, unsigned int) const
Line
Count
Source
271
10.0M
  {
272
10.0M
    return this->check_range (base, len, hb_static_size (T));
273
10.0M
  }
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
271
663k
  {
272
663k
    return this->check_range (base, len, hb_static_size (T));
273
663k
  }
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
271
251k
  {
272
251k
    return this->check_range (base, len, hb_static_size (T));
273
251k
  }
bool hb_sanitize_context_t::check_array<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int) const
Line
Count
Source
271
41.2M
  {
272
41.2M
    return this->check_range (base, len, hb_static_size (T));
273
41.2M
  }
bool hb_sanitize_context_t::check_array<OT::HBGlyphID24>(OT::HBGlyphID24 const*, unsigned int) const
Line
Count
Source
271
343k
  {
272
343k
    return this->check_range (base, len, hb_static_size (T));
273
343k
  }
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
271
9.71k
  {
272
9.71k
    return this->check_range (base, len, hb_static_size (T));
273
9.71k
  }
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
271
13.0k
  {
272
13.0k
    return this->check_range (base, len, hb_static_size (T));
273
13.0k
  }
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
271
147k
  {
272
147k
    return this->check_range (base, len, hb_static_size (T));
273
147k
  }
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
271
6.12k
  {
272
6.12k
    return this->check_range (base, len, hb_static_size (T));
273
6.12k
  }
bool hb_sanitize_context_t::check_array<OT::VarRegionAxis>(OT::VarRegionAxis const*, unsigned int) const
Line
Count
Source
271
45.6k
  {
272
45.6k
    return this->check_range (base, len, hb_static_size (T));
273
45.6k
  }
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
271
46.8k
  {
272
46.8k
    return this->check_range (base, len, hb_static_size (T));
273
46.8k
  }
bool hb_sanitize_context_t::check_array<AAT::Feature>(AAT::Feature const*, unsigned int) const
Line
Count
Source
271
57.9k
  {
272
57.9k
    return this->check_range (base, len, hb_static_size (T));
273
57.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
271
8.47M
  {
272
8.47M
    return this->check_range (base, len, hb_static_size (T));
273
8.47M
  }
bool hb_sanitize_context_t::check_array<AAT::Entry<void> >(AAT::Entry<void> const*, unsigned int) const
Line
Count
Source
271
39.2k
  {
272
39.2k
    return this->check_range (base, len, hb_static_size (T));
273
39.2k
  }
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
271
7.92k
  {
272
7.92k
    return this->check_range (base, len, hb_static_size (T));
273
7.92k
  }
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
271
4.47k
  {
272
4.47k
    return this->check_range (base, len, hb_static_size (T));
273
4.47k
  }
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
271
9.46k
  {
272
9.46k
    return this->check_range (base, len, hb_static_size (T));
273
9.46k
  }
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
271
16.8k
  {
272
16.8k
    return this->check_range (base, len, hb_static_size (T));
273
16.8k
  }
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
271
5.08k
  {
272
5.08k
    return this->check_range (base, len, hb_static_size (T));
273
5.08k
  }
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
271
3.04k
  {
272
3.04k
    return this->check_range (base, len, hb_static_size (T));
273
3.04k
  }
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
271
8.99k
  {
272
8.99k
    return this->check_range (base, len, hb_static_size (T));
273
8.99k
  }
bool hb_sanitize_context_t::check_array<AAT::KernPair>(AAT::KernPair const*, unsigned int) const
Line
Count
Source
271
3.91k
  {
272
3.91k
    return this->check_range (base, len, hb_static_size (T));
273
3.91k
  }
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
271
2.45k
  {
272
2.45k
    return this->check_range (base, len, hb_static_size (T));
273
2.45k
  }
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
271
6.94k
  {
272
6.94k
    return this->check_range (base, len, hb_static_size (T));
273
6.94k
  }
bool hb_sanitize_context_t::check_array<OT::IntType<unsigned int, 4u> >(OT::IntType<unsigned int, 4u> const*, unsigned int) const
Line
Count
Source
271
5.23k
  {
272
5.23k
    return this->check_range (base, len, hb_static_size (T));
273
5.23k
  }
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
271
4.77k
  {
272
4.77k
    return this->check_range (base, len, hb_static_size (T));
273
4.77k
  }
bool hb_sanitize_context_t::check_array<AAT::Anchor>(AAT::Anchor const*, unsigned int) const
Line
Count
Source
271
3.97k
  {
272
3.97k
    return this->check_range (base, len, hb_static_size (T));
273
3.97k
  }
bool hb_sanitize_context_t::check_array<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int) const
Line
Count
Source
271
207k
  {
272
207k
    return this->check_range (base, len, hb_static_size (T));
273
207k
  }
bool hb_sanitize_context_t::check_array<OT::HBFixed>(OT::HBFixed const*, unsigned int) const
Line
Count
Source
271
1.48k
  {
272
1.48k
    return this->check_range (base, len, hb_static_size (T));
273
1.48k
  }
bool hb_sanitize_context_t::check_array<AAT::TrackTableEntry>(AAT::TrackTableEntry const*, unsigned int) const
Line
Count
Source
271
1.09k
  {
272
1.09k
    return this->check_range (base, len, hb_static_size (T));
273
1.09k
  }
bool hb_sanitize_context_t::check_array<AAT::FeatureName>(AAT::FeatureName const*, unsigned int) const
Line
Count
Source
271
822
  {
272
822
    return this->check_range (base, len, hb_static_size (T));
273
822
  }
bool hb_sanitize_context_t::check_array<AAT::SettingName>(AAT::SettingName const*, unsigned int) const
Line
Count
Source
271
6.77k
  {
272
6.77k
    return this->check_range (base, len, hb_static_size (T));
273
6.77k
  }
bool hb_sanitize_context_t::check_array<OT::IntType<unsigned int, 3u> >(OT::IntType<unsigned int, 3u> const*, unsigned int) const
Line
Count
Source
271
476k
  {
272
476k
    return this->check_range (base, len, hb_static_size (T));
273
476k
  }
bool hb_sanitize_context_t::check_array<OT::Index>(OT::Index const*, unsigned int) const
Line
Count
Source
271
6.93M
  {
272
6.93M
    return this->check_range (base, len, hb_static_size (T));
273
6.93M
  }
bool hb_sanitize_context_t::check_array<OT::Record<OT::LangSys> >(OT::Record<OT::LangSys> const*, unsigned int) const
Line
Count
Source
271
504k
  {
272
504k
    return this->check_range (base, len, hb_static_size (T));
273
504k
  }
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
271
14.8k
  {
272
14.8k
    return this->check_range (base, len, hb_static_size (T));
273
14.8k
  }
bool hb_sanitize_context_t::check_array<OT::FeatureTableSubstitutionRecord>(OT::FeatureTableSubstitutionRecord const*, unsigned int) const
Line
Count
Source
271
12.4k
  {
272
12.4k
    return this->check_range (base, len, hb_static_size (T));
273
12.4k
  }
bool hb_sanitize_context_t::check_array<OT::FeatureVariationRecord>(OT::FeatureVariationRecord const*, unsigned int) const
Line
Count
Source
271
16.5k
  {
272
16.5k
    return this->check_range (base, len, hb_static_size (T));
273
16.5k
  }
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
271
462k
  {
272
462k
    return this->check_range (base, len, hb_static_size (T));
273
462k
  }
bool hb_sanitize_context_t::check_array<OT::LookupRecord>(OT::LookupRecord const*, unsigned int) const
Line
Count
Source
271
1.44M
  {
272
1.44M
    return this->check_range (base, len, hb_static_size (T));
273
1.44M
  }
bool hb_sanitize_context_t::check_array<OT::Layout::GPOS_impl::EntryExitRecord>(OT::Layout::GPOS_impl::EntryExitRecord const*, unsigned int) const
Line
Count
Source
271
23.5k
  {
272
23.5k
    return this->check_range (base, len, hb_static_size (T));
273
23.5k
  }
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
271
597k
  {
272
597k
    return this->check_range (base, len, hb_static_size (T));
273
597k
  }
bool hb_sanitize_context_t::check_array<OT::Layout::GPOS_impl::MarkRecord>(OT::Layout::GPOS_impl::MarkRecord const*, unsigned int) const
Line
Count
Source
271
93.6k
  {
272
93.6k
    return this->check_range (base, len, hb_static_size (T));
273
93.6k
  }
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
271
1.96M
  {
272
1.96M
    return this->check_range (base, len, hb_static_size (T));
273
1.96M
  }
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
271
468k
  {
272
468k
    return this->check_range (base, len, hb_static_size (T));
273
468k
  }
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
271
59.6k
  {
272
59.6k
    return this->check_range (base, len, hb_static_size (T));
273
59.6k
  }
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
271
9.26k
  {
272
9.26k
    return this->check_range (base, len, hb_static_size (T));
273
9.26k
  }
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
271
12.2k
  {
272
12.2k
    return this->check_range (base, len, hb_static_size (T));
273
12.2k
  }
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
271
110k
  {
272
110k
    return this->check_range (base, len, hb_static_size (T));
273
110k
  }
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
271
148k
  {
272
148k
    return this->check_range (base, len, hb_static_size (T));
273
148k
  }
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
271
7.26k
  {
272
7.26k
    return this->check_range (base, len, hb_static_size (T));
273
7.26k
  }
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
271
6.41k
  {
272
6.41k
    return this->check_range (base, len, hb_static_size (T));
273
6.41k
  }
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
271
5.85k
  {
272
5.85k
    return this->check_range (base, len, hb_static_size (T));
273
5.85k
  }
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
271
155k
  {
272
155k
    return this->check_range (base, len, hb_static_size (T));
273
155k
  }
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
271
212k
  {
272
212k
    return this->check_range (base, len, hb_static_size (T));
273
212k
  }
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
271
13.9k
  {
272
13.9k
    return this->check_range (base, len, hb_static_size (T));
273
13.9k
  }
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
271
11.6k
  {
272
11.6k
    return this->check_range (base, len, hb_static_size (T));
273
11.6k
  }
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
271
5.58k
  {
272
5.58k
    return this->check_range (base, len, hb_static_size (T));
273
5.58k
  }
bool hb_sanitize_context_t::check_array<OT::Record<OT::Script> >(OT::Record<OT::Script> const*, unsigned int) const
Line
Count
Source
271
334k
  {
272
334k
    return this->check_range (base, len, hb_static_size (T));
273
334k
  }
bool hb_sanitize_context_t::check_array<OT::Record<OT::Feature> >(OT::Record<OT::Feature> const*, unsigned int) const
Line
Count
Source
271
320k
  {
272
320k
    return this->check_range (base, len, hb_static_size (T));
273
320k
  }
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
271
107k
  {
272
107k
    return this->check_range (base, len, hb_static_size (T));
273
107k
  }
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
271
1.72k
  {
272
1.72k
    return this->check_range (base, len, hb_static_size (T));
273
1.72k
  }
bool hb_sanitize_context_t::check_array<OT::UnicodeValueRange>(OT::UnicodeValueRange const*, unsigned int) const
Line
Count
Source
271
4.56k
  {
272
4.56k
    return this->check_range (base, len, hb_static_size (T));
273
4.56k
  }
bool hb_sanitize_context_t::check_array<OT::UVSMapping>(OT::UVSMapping const*, unsigned int) const
Line
Count
Source
271
4.79k
  {
272
4.79k
    return this->check_range (base, len, hb_static_size (T));
273
4.79k
  }
bool hb_sanitize_context_t::check_array<OT::VariationSelectorRecord>(OT::VariationSelectorRecord const*, unsigned int) const
Line
Count
Source
271
4.52k
  {
272
4.52k
    return this->check_range (base, len, hb_static_size (T));
273
4.52k
  }
bool hb_sanitize_context_t::check_array<OT::CmapSubtableLongGroup>(OT::CmapSubtableLongGroup const*, unsigned int) const
Line
Count
Source
271
34.1k
  {
272
34.1k
    return this->check_range (base, len, hb_static_size (T));
273
34.1k
  }
bool hb_sanitize_context_t::check_array<OT::EncodingRecord>(OT::EncodingRecord const*, unsigned int) const
Line
Count
Source
271
134k
  {
272
134k
    return this->check_range (base, len, hb_static_size (T));
273
134k
  }
bool hb_sanitize_context_t::check_array<OT::F2DOT14>(OT::F2DOT14 const*, unsigned int) const
Line
Count
Source
271
9.78k
  {
272
9.78k
    return this->check_range (base, len, hb_static_size (T));
273
9.78k
  }
bool hb_sanitize_context_t::check_array<OT::TableRecord>(OT::TableRecord const*, unsigned int) const
Line
Count
Source
271
249k
  {
272
249k
    return this->check_range (base, len, hb_static_size (T));
273
249k
  }
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
271
2.02k
  {
272
2.02k
    return this->check_range (base, len, hb_static_size (T));
273
2.02k
  }
bool hb_sanitize_context_t::check_array<OT::ResourceTypeRecord>(OT::ResourceTypeRecord const*, unsigned int) const
Line
Count
Source
271
736
  {
272
736
    return this->check_range (base, len, hb_static_size (T));
273
736
  }
bool hb_sanitize_context_t::check_array<OT::ResourceRecord>(OT::ResourceRecord const*, unsigned int) const
Line
Count
Source
271
153k
  {
272
153k
    return this->check_range (base, len, hb_static_size (T));
273
153k
  }
bool hb_sanitize_context_t::check_array<OT::AxisRecord>(OT::AxisRecord const*, unsigned int) const
Line
Count
Source
271
17.8k
  {
272
17.8k
    return this->check_range (base, len, hb_static_size (T));
273
17.8k
  }
bool hb_sanitize_context_t::check_array<OT::AxisValueMap>(OT::AxisValueMap const*, unsigned int) const
Line
Count
Source
271
137k
  {
272
137k
    return this->check_range (base, len, hb_static_size (T));
273
137k
  }
bool hb_sanitize_context_t::check_array<OT::BaseGlyphRecord>(OT::BaseGlyphRecord const*, unsigned int) const
Line
Count
Source
271
22.8k
  {
272
22.8k
    return this->check_range (base, len, hb_static_size (T));
273
22.8k
  }
bool hb_sanitize_context_t::check_array<OT::LayerRecord>(OT::LayerRecord const*, unsigned int) const
Line
Count
Source
271
22.5k
  {
272
22.5k
    return this->check_range (base, len, hb_static_size (T));
273
22.5k
  }
bool hb_sanitize_context_t::check_array<OT::BaseGlyphPaintRecord>(OT::BaseGlyphPaintRecord const*, unsigned int) const
Line
Count
Source
271
16.9k
  {
272
16.9k
    return this->check_range (base, len, hb_static_size (T));
273
16.9k
  }
bool hb_sanitize_context_t::check_array<OT::NoVariable<OT::ColorStop> >(OT::NoVariable<OT::ColorStop> const*, unsigned int) const
Line
Count
Source
271
1.95k
  {
272
1.95k
    return this->check_range (base, len, hb_static_size (T));
273
1.95k
  }
bool hb_sanitize_context_t::check_array<OT::Variable<OT::ColorStop> >(OT::Variable<OT::ColorStop> const*, unsigned int) const
Line
Count
Source
271
1.72k
  {
272
1.72k
    return this->check_range (base, len, hb_static_size (T));
273
1.72k
  }
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
271
5.03k
  {
272
5.03k
    return this->check_range (base, len, hb_static_size (T));
273
5.03k
  }
bool hb_sanitize_context_t::check_array<OT::ClipRecord>(OT::ClipRecord const*, unsigned int) const
Line
Count
Source
271
3.61k
  {
272
3.61k
    return this->check_range (base, len, hb_static_size (T));
273
3.61k
  }
bool hb_sanitize_context_t::check_array<OT::SVGDocumentIndexEntry>(OT::SVGDocumentIndexEntry const*, unsigned int) const
Line
Count
Source
271
342
  {
272
342
    return this->check_range (base, len, hb_static_size (T));
273
342
  }
bool hb_sanitize_context_t::check_array<OT::BitmapSizeTable>(OT::BitmapSizeTable const*, unsigned int) const
Line
Count
Source
271
3.64k
  {
272
3.64k
    return this->check_range (base, len, hb_static_size (T));
273
3.64k
  }
bool hb_sanitize_context_t::check_array<OT::IndexSubtableRecord>(OT::IndexSubtableRecord const*, unsigned int) const
Line
Count
Source
271
4.81k
  {
272
4.81k
    return this->check_range (base, len, hb_static_size (T));
273
4.81k
  }
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
271
1.49k
  {
272
1.49k
    return this->check_range (base, len, hb_static_size (T));
273
1.49k
  }
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
271
3.17k
  {
272
3.17k
    return this->check_range (base, len, hb_static_size (T));
273
3.17k
  }
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
271
5.09k
  {
272
5.09k
    return this->check_range (base, len, hb_static_size (T));
273
5.09k
  }
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
271
1.22k
  {
272
1.22k
    return this->check_range (base, len, hb_static_size (T));
273
1.22k
  }
bool hb_sanitize_context_t::check_array<CFF::Encoding1_Range>(CFF::Encoding1_Range const*, unsigned int) const
Line
Count
Source
271
91
  {
272
91
    return this->check_range (base, len, hb_static_size (T));
273
91
  }
bool hb_sanitize_context_t::check_array<CFF::SuppEncoding>(CFF::SuppEncoding const*, unsigned int) const
Line
Count
Source
271
52
  {
272
52
    return this->check_range (base, len, hb_static_size (T));
273
52
  }
bool hb_sanitize_context_t::check_array<unsigned char>(unsigned char const*, unsigned int) const
Line
Count
Source
271
153k
  {
272
153k
    return this->check_range (base, len, hb_static_size (T));
273
153k
  }
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
271
54
  {
272
54
    return this->check_range (base, len, hb_static_size (T));
273
54
  }
bool hb_sanitize_context_t::check_array<OT::DataMap>(OT::DataMap const*, unsigned int) const
Line
Count
Source
271
664
  {
272
664
    return this->check_range (base, len, hb_static_size (T));
273
664
  }
bool hb_sanitize_context_t::check_array<OT::NameRecord>(OT::NameRecord const*, unsigned int) const
Line
Count
Source
271
155k
  {
272
155k
    return this->check_range (base, len, hb_static_size (T));
273
155k
  }
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
271
1.37M
  {
272
1.37M
    return this->check_range (base, len, hb_static_size (T));
273
1.37M
  }
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
271
162k
  {
272
162k
    return this->check_range (base, len, hb_static_size (T));
273
162k
  }
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
271
23.7k
  {
272
23.7k
    return this->check_range (base, len, hb_static_size (T));
273
23.7k
  }
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
271
29.4k
  {
272
29.4k
    return this->check_range (base, len, hb_static_size (T));
273
29.4k
  }
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
271
5.63k
  {
272
5.63k
    return this->check_range (base, len, hb_static_size (T));
273
5.63k
  }
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
271
219k
  {
272
219k
    return this->check_range (base, len, hb_static_size (T));
273
219k
  }
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
271
471k
  {
272
471k
    return this->check_range (base, len, hb_static_size (T));
273
471k
  }
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
271
16.0k
  {
272
16.0k
    return this->check_range (base, len, hb_static_size (T));
273
16.0k
  }
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
271
8.82k
  {
272
8.82k
    return this->check_range (base, len, hb_static_size (T));
273
8.82k
  }
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
271
190k
  {
272
190k
    return this->check_range (base, len, hb_static_size (T));
273
190k
  }
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
271
1.43k
  {
272
1.43k
    return this->check_range (base, len, hb_static_size (T));
273
1.43k
  }
bool hb_sanitize_context_t::check_array<OT::VertOriginMetric>(OT::VertOriginMetric const*, unsigned int) const
Line
Count
Source
271
1.28k
  {
272
1.28k
    return this->check_range (base, len, hb_static_size (T));
273
1.28k
  }
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
271
22.1k
  {
272
22.1k
    return this->check_range (base, len, hb_static_size (T));
273
22.1k
  }
bool hb_sanitize_context_t::check_array<OT::BaseScriptRecord>(OT::BaseScriptRecord const*, unsigned int) const
Line
Count
Source
271
21.6k
  {
272
21.6k
    return this->check_range (base, len, hb_static_size (T));
273
21.6k
  }
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
271
52.1k
  {
272
52.1k
    return this->check_range (base, len, hb_static_size (T));
273
52.1k
  }
bool hb_sanitize_context_t::check_array<OT::FeatMinMaxRecord>(OT::FeatMinMaxRecord const*, unsigned int) const
Line
Count
Source
271
8.12k
  {
272
8.12k
    return this->check_range (base, len, hb_static_size (T));
273
8.12k
  }
bool hb_sanitize_context_t::check_array<OT::BaseLangSysRecord>(OT::BaseLangSysRecord const*, unsigned int) const
Line
Count
Source
271
62.3k
  {
272
62.3k
    return this->check_range (base, len, hb_static_size (T));
273
62.3k
  }
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
271
152k
  {
272
152k
    return this->check_range (base, len, hb_static_size (T));
273
152k
  }
bool hb_sanitize_context_t::check_array<OT::MathKernInfoRecord>(OT::MathKernInfoRecord const*, unsigned int) const
Line
Count
Source
271
4.12k
  {
272
4.12k
    return this->check_range (base, len, hb_static_size (T));
273
4.12k
  }
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
271
4.36k
  {
272
4.36k
    return this->check_range (base, len, hb_static_size (T));
273
4.36k
  }
bool hb_sanitize_context_t::check_array<OT::MathGlyphPartRecord>(OT::MathGlyphPartRecord const*, unsigned int) const
Line
Count
Source
271
131k
  {
272
131k
    return this->check_range (base, len, hb_static_size (T));
273
131k
  }
bool hb_sanitize_context_t::check_array<OT::MathGlyphVariantRecord>(OT::MathGlyphVariantRecord const*, unsigned int) const
Line
Count
Source
271
221k
  {
272
221k
    return this->check_range (base, len, hb_static_size (T));
273
221k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::check_array<OT::GaspRange>(OT::GaspRange const*, unsigned int) const
274
275
  template <typename T>
276
  bool check_array (const T *base,
277
        unsigned int a,
278
        unsigned int b) const
279
6.22M
  {
280
6.22M
    return this->check_range (base, a, b, hb_static_size (T));
281
6.22M
  }
bool hb_sanitize_context_t::check_array<OT::IntType<short, 2u> >(OT::IntType<short, 2u> const*, unsigned int, unsigned int) const
Line
Count
Source
279
5.88M
  {
280
5.88M
    return this->check_range (base, a, b, hb_static_size (T));
281
5.88M
  }
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
279
340k
  {
280
340k
    return this->check_range (base, a, b, hb_static_size (T));
281
340k
  }
282
283
  bool check_start_recursion (int max_depth)
284
415k
  {
285
415k
    if (unlikely (recursion_depth >= max_depth)) return false;
286
415k
    return ++recursion_depth;
287
415k
  }
288
289
  bool end_recursion (bool result)
290
415k
  {
291
415k
    recursion_depth--;
292
415k
    return result;
293
415k
  }
294
295
  template <typename Type>
296
  bool check_struct (const Type *obj) const
297
3.64G
  { 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
297
760k
  { 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
297
460k
  { 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
297
1.32G
  { 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
297
51.4k
  { 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
297
2.37k
  { 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
297
411k
  { 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
297
65.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 short, 2u>, true> >(OT::OffsetTo<OT::Layout::Common::Coverage, OT::IntType<unsigned short, 2u>, true> const*) const
Line
Count
Source
297
8.49M
  { 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
297
444k
  { 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
297
61.3k
  { 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
297
670k
  { 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
297
1.01G
  { 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
297
14.8M
  { 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
297
6.49M
  { 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
297
5.48M
  { 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
297
322M
  { 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
297
11.5M
  { 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
297
1.36M
  { 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
297
14.9k
  { 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
297
24.3k
  { 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
297
51.2k
  { 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
297
63.3k
  { 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
297
48.3k
  { 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
297
46.9k
  { 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
297
67.0k
  { 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
297
59.9k
  { 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
297
68.7k
  { 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
297
5.03k
  { 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
297
3.65k
  { 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
297
3.22k
  { 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
297
26.2M
  { 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
297
4.12k
  { 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
297
38.3k
  { 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
297
16.5k
  { 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
297
1.04k
  { 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
297
950
  { 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
297
12.9k
  { 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
297
319
  { 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
297
4.78k
  { 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
297
4.47k
  { 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
297
5.50k
  { 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
297
782
  { 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
297
741
  { 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
297
3.60k
  { 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
297
84
  { 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
297
4.85k
  { 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
297
4.83k
  { 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
297
12.8k
  { 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
297
12.8k
  { 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
297
16.8k
  { 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
297
28.6k
  { 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
297
28.6k
  { 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
297
3.40k
  { 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
297
3.04k
  { 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
297
3.82k
  { 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
297
8.52k
  { 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
297
8.49k
  { 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
297
43.0k
  { 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
297
1.42k
  { 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
297
1.99k
  { 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
297
1.96k
  { 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
297
1.13k
  { 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
297
5.64k
  { 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
297
5.61k
  { 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
297
3.28k
  { 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
297
3.65k
  { 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
297
895
  { 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
297
824
  { 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
297
227
  { 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
297
298
  { 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
297
7.58k
  { 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
297
6.95k
  { 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
297
6.49k
  { 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
297
468
  { 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
297
1.28k
  { 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
297
1.20k
  { 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
297
769
  { 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
297
202
  { 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
297
81.0k
  { 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
297
30.9k
  { 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
297
2.07k
  { 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
297
2.85k
  { 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
297
1.74k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed>, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed>, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
297
1.48k
  { 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
297
8.78k
  { 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
297
8.78k
  { 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
297
1.20k
  { 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
297
6.77k
  { 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
297
747k
  { 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
297
12.9k
  { 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
297
60.9k
  { 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
297
74.9k
  { 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
297
2.49M
  { 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
297
1.15M
  { 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
297
4.50M
  { 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
297
86.1M
  { 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
297
85.6M
  { 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
297
5.85k
  { 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
297
95.2k
  { 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
297
23.7k
  { 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
297
23.7k
  { 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
297
66.3k
  { 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
297
65.8k
  { 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
297
24.6k
  { 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
297
112k
  { 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
297
31.8k
  { 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
297
9.23M
  { 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
297
1.72M
  { 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
297
1.04M
  { 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
297
292M
  { 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
297
607k
  { 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
297
61.4M
  { 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
297
2.08M
  { 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
297
22.6M
  { 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
297
60.4k
  { 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
297
1.03M
  { 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
297
599k
  { 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
297
34.3k
  { 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
297
9.72k
  { 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
297
214k
  { 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
297
72.8k
  { 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
297
40.9k
  { 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
297
18.0k
  { 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
297
61.1k
  { 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
297
110k
  { 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
297
797k
  { 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
297
14.1k
  { 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
297
32.0k
  { 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
297
22.3k
  { 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
297
18.0k
  { 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
297
17.0k
  { 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
297
10.2k
  { 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
297
9.28k
  { 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
297
33.6k
  { 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
297
10.9k
  { 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
297
308k
  { 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
297
1.15M
  { 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
297
33.5k
  { 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
297
277k
  { 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
297
24.6k
  { 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
297
412k
  { 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
297
3.95M
  { 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
297
160k
  { 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
297
784k
  { 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
297
19.3k
  { 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
297
10.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
297
362k
  { 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
297
1.92M
  { 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
297
1.92M
  { 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
297
341k
  { 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
297
3.98M
  { 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
297
3.98M
  { 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
297
128k
  { 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
297
722k
  { 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
297
32.2k
  { 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
297
11.1k
  { 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
297
8.51k
  { 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
297
4.34k
  { 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
297
21.3k
  { 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
297
127k
  { 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
297
72.6k
  { 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
297
110k
  { 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
297
97.8k
  { 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
297
93.8k
  { 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
297
5.38k
  { 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
297
102k
  { 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
297
18.7k
  { 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
297
170k
  { 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
297
15.1k
  { 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
297
15.1k
  { 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
297
14.5k
  { 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
297
4.59k
  { 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
297
17.9k
  { 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
297
2.64k
  { 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
297
23.5k
  { 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
297
11.0k
  { 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
297
327k
  { 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
297
327k
  { 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
297
158k
  { 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
297
10.8k
  { 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
297
3.01k
  { 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
297
73.5k
  { 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
297
111k
  { 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
297
3.63k
  { 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
297
14.1k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::OffsetTo<OT::UnsizedArrayOf<OT::F2DOT14>, OT::IntType<unsigned int, 4u>, false> >(OT::OffsetTo<OT::UnsizedArrayOf<OT::F2DOT14>, OT::IntType<unsigned int, 4u>, false> const*) const
Line
Count
Source
297
9.78k
  { 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
297
260k
  { 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
297
251k
  { 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
297
16.0k
  { 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
297
888
  { 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
297
2.30k
  { 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
297
788
  { 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
297
788
  { 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
297
761
  { 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
297
153k
  { 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
297
153k
  { 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
297
1.44k
  { 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
297
1.44k
  { 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
297
18.7k
  { 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
297
12.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
297
2.09k
  { 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
297
248
  { 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
297
22.9k
  { 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
297
22.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
297
312k
  { 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
297
427k
  { 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
297
18.7k
  { 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
297
6.90k
  { 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
297
3.58k
  { 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
297
3.05k
  { 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
297
6.51k
  { 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
297
3.50k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Variable<OT::PaintLinearGradient<OT::Variable> > >(OT::Variable<OT::PaintLinearGradient<OT::Variable> > const*) const
Line
Count
Source
297
2.21k
  { 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
297
1.99k
  { 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
297
6.27k
  { 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
297
3.68k
  { 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
297
2.18k
  { 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
297
2.59k
  { 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
297
2.39k
  { 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
297
1.90k
  { 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
297
2.11k
  { 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
297
1.89k
  { 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
297
2.10k
  { 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
297
80.5k
  { 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
297
2.97k
  { 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
297
45.9k
  { 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
297
20.4k
  { 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
297
17.4k
  { return likely (this->check_range (obj, obj->min_size)); }
bool hb_sanitize_context_t::check_struct<OT::Affine2x3>(OT::Affine2x3 const*) const
Line
Count
Source
297
1.87k
  { 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
297
3.20k
  { 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
297
2.87k
  { 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
297
1.36k
  { 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
297
2.56k
  { 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
297
1.31k
  { 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
297
3.11k
  { 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
297
1.42k
  { 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
297
2.78k
  { 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
297
1.27k
  { 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
297
2.41k
  { 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
297
1.27k
  { 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
297
1.95k
  { 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
297
1.14k
  { 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
297
2.33k
  { 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
297
1.12k
  { 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
297
2.64k
  { 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
297
1.69k
  { 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
297
2.32k
  { 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
297
1.19k
  { 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
297
2.99k
  { 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
297
1.07k
  { 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
297
4.35k
  { 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
297
15.0k
  { 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
297
11.7k
  { 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
297
7.07k
  { 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
297
113k
  { 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
297
113k
  { 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
297
3.60k
  { 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
297
961
  { 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
297
1.28k
  { 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
297
3.73k
  { 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
297
4.81k
  { 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
297
4.81k
  { 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
297
12.9k
  { 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
297
12.6k
  { 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
297
9.82k
  { 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
297
1.49k
  { 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
297
1.43k
  { 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
297
7.12k
  { 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
297
1.31k
  { 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
297
3.29k
  { 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
297
18.9k
  { 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
297
11.6k
  { 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::LayerRecord>(OT::LayerRecord const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::BaseGlyphRecord>(OT::BaseGlyphRecord const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::ColorStop>(OT::ColorStop const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::NoVariable<OT::ColorStop> >(OT::NoVariable<OT::ColorStop> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::Variable<OT::ColorStop> >(OT::Variable<OT::ColorStop> const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::SVGDocumentIndexEntry>(OT::SVGDocumentIndexEntry const*) const
bool hb_sanitize_context_t::check_struct<CFF::FDSelect0>(CFF::FDSelect0 const*) const
Line
Count
Source
297
675
  { 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
297
2.05k
  { 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
297
1.23k
  { 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
297
291
  { 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
297
7.94k
  { 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
297
23.1k
  { 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
297
13.8k
  { 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
297
447k
  { 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
297
1.01k
  { 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
297
1.26M
  { 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
297
28.8k
  { 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
297
147k
  { 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
297
170
  { 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
297
65
  { 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
297
15.8k
  { 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
297
19.9k
  { 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
297
59.9k
  { 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
297
15.2k
  { 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
297
6.43k
  { 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
297
363
  { 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
297
3.13k
  { 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
297
3.13k
  { 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
297
163
  { 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
297
1.28k
  { 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
297
300
  { 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
297
1.44k
  { 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
297
1.69k
  { 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
297
8.44M
  { 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
297
8.44M
  { 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
297
99.3k
  { 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
297
94.7k
  { 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
297
27.0M
  { 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
297
1.52M
  { 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
297
97.7k
  { 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
297
263k
  { 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
297
25.8k
  { 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
297
553k
  { 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
297
2.54M
  { 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
297
59.4k
  { 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
297
1.64M
  { 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
297
70.1k
  { 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
297
194k
  { 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
297
1.94M
  { 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
297
2.90k
  { 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
297
69.4k
  { 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
297
2.44k
  { 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
297
25.9k
  { 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
297
40.5k
  { 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
297
23.3k
  { 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
297
21.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
297
85.0k
  { 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
297
85.0k
  { 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
297
71.0k
  { 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
297
65.7k
  { 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
297
55.0k
  { 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
297
167k
  { 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
297
87.4k
  { 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
297
11.5k
  { 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
297
3.40k
  { 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
297
92.6k
  { 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
297
14.4k
  { 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
297
14.6k
  { 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
297
29.3k
  { 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
297
11.4k
  { 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
297
10.2k
  { 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
297
249M
  { 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
297
8.82k
  { 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
297
8.00k
  { 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
297
7.10k
  { 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
297
5.36k
  { 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
297
6.51k
  { 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
297
4.79k
  { 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
297
6.12k
  { 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
297
4.55k
  { 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
297
267k
  { 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
297
144k
  { 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
297
6.57k
  { 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
297
4.96k
  { 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
297
844k
  { 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
297
224k
  { 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
297
221k
  { 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
297
133k
  { 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
bool hb_sanitize_context_t::check_struct<OT::MVAR>(OT::MVAR const*) const
Line
Count
Source
297
12.7k
  { 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
297
12.4k
  { return likely (this->check_range (obj, obj->min_size)); }
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::VariationValueRecord>(OT::VariationValueRecord const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::GaspRange>(OT::GaspRange const*) const
Unexecuted instantiation: bool hb_sanitize_context_t::check_struct<OT::gasp>(OT::gasp const*) const
298
299
  bool may_edit (const void *base, unsigned int len)
300
2.62M
  {
301
2.62M
    if (this->edit_count >= HB_SANITIZE_MAX_EDITS)
302
130k
      return false;
303
304
2.49M
    const char *p = (const char *) base;
305
2.49M
    this->edit_count++;
306
307
2.49M
    DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
308
2.49M
       "may_edit(%u) [%p..%p] (%d bytes) in [%p..%p] -> %s",
309
2.49M
       this->edit_count,
310
2.49M
       p, p + len, len,
311
2.49M
       this->start, this->end,
312
2.49M
       this->writable ? "GRANTED" : "DENIED");
313
314
2.49M
    return this->writable;
315
2.62M
  }
316
317
  template <typename Type, typename ValueType>
318
  bool try_set (const Type *obj, const ValueType &v)
319
2.62M
  {
320
2.62M
    if (this->may_edit (obj, hb_static_size (Type)))
321
2.05M
    {
322
2.05M
      * const_cast<Type *> (obj) = v;
323
2.05M
      return true;
324
2.05M
    }
325
566k
    return false;
326
2.62M
  }
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
319
14.2k
  {
320
14.2k
    if (this->may_edit (obj, hb_static_size (Type)))
321
10.3k
    {
322
10.3k
      * const_cast<Type *> (obj) = v;
323
10.3k
      return true;
324
10.3k
    }
325
3.90k
    return false;
326
14.2k
  }
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
319
62.6k
  {
320
62.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
54.5k
    {
322
54.5k
      * const_cast<Type *> (obj) = v;
323
54.5k
      return true;
324
54.5k
    }
325
8.10k
    return false;
326
62.6k
  }
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
319
12.6k
  {
320
12.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
11.7k
    {
322
11.7k
      * const_cast<Type *> (obj) = v;
323
11.7k
      return true;
324
11.7k
    }
325
948
    return false;
326
12.6k
  }
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
319
7.10k
  {
320
7.10k
    if (this->may_edit (obj, hb_static_size (Type)))
321
3.37k
    {
322
3.37k
      * const_cast<Type *> (obj) = v;
323
3.37k
      return true;
324
3.37k
    }
325
3.72k
    return false;
326
7.10k
  }
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
319
112k
  {
320
112k
    if (this->may_edit (obj, hb_static_size (Type)))
321
105k
    {
322
105k
      * const_cast<Type *> (obj) = v;
323
105k
      return true;
324
105k
    }
325
6.34k
    return false;
326
112k
  }
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
319
13.8k
  {
320
13.8k
    if (this->may_edit (obj, hb_static_size (Type)))
321
13.2k
    {
322
13.2k
      * const_cast<Type *> (obj) = v;
323
13.2k
      return true;
324
13.2k
    }
325
647
    return false;
326
13.8k
  }
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
319
11.2k
  {
320
11.2k
    if (this->may_edit (obj, hb_static_size (Type)))
321
10.0k
    {
322
10.0k
      * const_cast<Type *> (obj) = v;
323
10.0k
      return true;
324
10.0k
    }
325
1.14k
    return false;
326
11.2k
  }
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
319
7.45k
  {
320
7.45k
    if (this->may_edit (obj, hb_static_size (Type)))
321
4.25k
    {
322
4.25k
      * const_cast<Type *> (obj) = v;
323
4.25k
      return true;
324
4.25k
    }
325
3.20k
    return false;
326
7.45k
  }
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
319
4.05k
  {
320
4.05k
    if (this->may_edit (obj, hb_static_size (Type)))
321
3.74k
    {
322
3.74k
      * const_cast<Type *> (obj) = v;
323
3.74k
      return true;
324
3.74k
    }
325
302
    return false;
326
4.05k
  }
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
319
992
  {
320
992
    if (this->may_edit (obj, hb_static_size (Type)))
321
622
    {
322
622
      * const_cast<Type *> (obj) = v;
323
622
      return true;
324
622
    }
325
370
    return false;
326
992
  }
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
319
2.94k
  {
320
2.94k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.41k
    {
322
1.41k
      * const_cast<Type *> (obj) = v;
323
1.41k
      return true;
324
1.41k
    }
325
1.53k
    return false;
326
2.94k
  }
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
319
12.9k
  {
320
12.9k
    if (this->may_edit (obj, hb_static_size (Type)))
321
11.2k
    {
322
11.2k
      * const_cast<Type *> (obj) = v;
323
11.2k
      return true;
324
11.2k
    }
325
1.69k
    return false;
326
12.9k
  }
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
319
16.6k
  {
320
16.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
11.0k
    {
322
11.0k
      * const_cast<Type *> (obj) = v;
323
11.0k
      return true;
324
11.0k
    }
325
5.52k
    return false;
326
16.6k
  }
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
319
19.4k
  {
320
19.4k
    if (this->may_edit (obj, hb_static_size (Type)))
321
15.7k
    {
322
15.7k
      * const_cast<Type *> (obj) = v;
323
15.7k
      return true;
324
15.7k
    }
325
3.64k
    return false;
326
19.4k
  }
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
319
2.03k
  {
320
2.03k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.29k
    {
322
1.29k
      * const_cast<Type *> (obj) = v;
323
1.29k
      return true;
324
1.29k
    }
325
736
    return false;
326
2.03k
  }
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
319
1.55k
  {
320
1.55k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.38k
    {
322
1.38k
      * const_cast<Type *> (obj) = v;
323
1.38k
      return true;
324
1.38k
    }
325
170
    return false;
326
1.55k
  }
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
319
824
  {
320
824
    if (this->may_edit (obj, hb_static_size (Type)))
321
740
    {
322
740
      * const_cast<Type *> (obj) = v;
323
740
      return true;
324
740
    }
325
84
    return false;
326
824
  }
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
319
3.80k
  {
320
3.80k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.76k
    {
322
1.76k
      * const_cast<Type *> (obj) = v;
323
1.76k
      return true;
324
1.76k
    }
325
2.04k
    return false;
326
3.80k
  }
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
319
982
  {
320
982
    if (this->may_edit (obj, hb_static_size (Type)))
321
490
    {
322
490
      * const_cast<Type *> (obj) = v;
323
490
      return true;
324
490
    }
325
492
    return false;
326
982
  }
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
319
7.57k
  {
320
7.57k
    if (this->may_edit (obj, hb_static_size (Type)))
321
6.61k
    {
322
6.61k
      * const_cast<Type *> (obj) = v;
323
6.61k
      return true;
324
6.61k
    }
325
963
    return false;
326
7.57k
  }
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
319
773
  {
320
773
    if (this->may_edit (obj, hb_static_size (Type)))
321
761
    {
322
761
      * const_cast<Type *> (obj) = v;
323
761
      return true;
324
761
    }
325
12
    return false;
326
773
  }
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
319
65.6k
  {
320
65.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
55.6k
    {
322
55.6k
      * const_cast<Type *> (obj) = v;
323
55.6k
      return true;
324
55.6k
    }
325
9.95k
    return false;
326
65.6k
  }
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
319
9.14k
  {
320
9.14k
    if (this->may_edit (obj, hb_static_size (Type)))
321
8.84k
    {
322
8.84k
      * const_cast<Type *> (obj) = v;
323
8.84k
      return true;
324
8.84k
    }
325
298
    return false;
326
9.14k
  }
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
319
5.36k
  {
320
5.36k
    if (this->may_edit (obj, hb_static_size (Type)))
321
5.19k
    {
322
5.19k
      * const_cast<Type *> (obj) = v;
323
5.19k
      return true;
324
5.19k
    }
325
168
    return false;
326
5.36k
  }
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
319
5.01k
  {
320
5.01k
    if (this->may_edit (obj, hb_static_size (Type)))
321
4.55k
    {
322
4.55k
      * const_cast<Type *> (obj) = v;
323
4.55k
      return true;
324
4.55k
    }
325
468
    return false;
326
5.01k
  }
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
319
9.88k
  {
320
9.88k
    if (this->may_edit (obj, hb_static_size (Type)))
321
9.31k
    {
322
9.31k
      * const_cast<Type *> (obj) = v;
323
9.31k
      return true;
324
9.31k
    }
325
564
    return false;
326
9.88k
  }
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
319
65.6k
  {
320
65.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
61.6k
    {
322
61.6k
      * const_cast<Type *> (obj) = v;
323
61.6k
      return true;
324
61.6k
    }
325
3.98k
    return false;
326
65.6k
  }
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
319
31.0k
  {
320
31.0k
    if (this->may_edit (obj, hb_static_size (Type)))
321
26.5k
    {
322
26.5k
      * const_cast<Type *> (obj) = v;
323
26.5k
      return true;
324
26.5k
    }
325
4.49k
    return false;
326
31.0k
  }
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
319
42.9k
  {
320
42.9k
    if (this->may_edit (obj, hb_static_size (Type)))
321
36.0k
    {
322
36.0k
      * const_cast<Type *> (obj) = v;
323
36.0k
      return true;
324
36.0k
    }
325
6.99k
    return false;
326
42.9k
  }
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
319
28.6k
  {
320
28.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
27.1k
    {
322
27.1k
      * const_cast<Type *> (obj) = v;
323
27.1k
      return true;
324
27.1k
    }
325
1.50k
    return false;
326
28.6k
  }
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
319
7.58k
  {
320
7.58k
    if (this->may_edit (obj, hb_static_size (Type)))
321
5.03k
    {
322
5.03k
      * const_cast<Type *> (obj) = v;
323
5.03k
      return true;
324
5.03k
    }
325
2.54k
    return false;
326
7.58k
  }
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
319
17.2k
  {
320
17.2k
    if (this->may_edit (obj, hb_static_size (Type)))
321
15.2k
    {
322
15.2k
      * const_cast<Type *> (obj) = v;
323
15.2k
      return true;
324
15.2k
    }
325
2.05k
    return false;
326
17.2k
  }
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
319
4.97k
  {
320
4.97k
    if (this->may_edit (obj, hb_static_size (Type)))
321
4.58k
    {
322
4.58k
      * const_cast<Type *> (obj) = v;
323
4.58k
      return true;
324
4.58k
    }
325
390
    return false;
326
4.97k
  }
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
319
4.00k
  {
320
4.00k
    if (this->may_edit (obj, hb_static_size (Type)))
321
3.84k
    {
322
3.84k
      * const_cast<Type *> (obj) = v;
323
3.84k
      return true;
324
3.84k
    }
325
165
    return false;
326
4.00k
  }
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
319
1.91k
  {
320
1.91k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.32k
    {
322
1.32k
      * const_cast<Type *> (obj) = v;
323
1.32k
      return true;
324
1.32k
    }
325
592
    return false;
326
1.91k
  }
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
319
1.29k
  {
320
1.29k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.19k
    {
322
1.19k
      * const_cast<Type *> (obj) = v;
323
1.19k
      return true;
324
1.19k
    }
325
105
    return false;
326
1.29k
  }
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
319
33.6k
  {
320
33.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
31.9k
    {
322
31.9k
      * const_cast<Type *> (obj) = v;
323
31.9k
      return true;
324
31.9k
    }
325
1.68k
    return false;
326
33.6k
  }
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
319
13.5k
  {
320
13.5k
    if (this->may_edit (obj, hb_static_size (Type)))
321
10.9k
    {
322
10.9k
      * const_cast<Type *> (obj) = v;
323
10.9k
      return true;
324
10.9k
    }
325
2.58k
    return false;
326
13.5k
  }
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
319
14.5k
  {
320
14.5k
    if (this->may_edit (obj, hb_static_size (Type)))
321
13.9k
    {
322
13.9k
      * const_cast<Type *> (obj) = v;
323
13.9k
      return true;
324
13.9k
    }
325
631
    return false;
326
14.5k
  }
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
319
17.0k
  {
320
17.0k
    if (this->may_edit (obj, hb_static_size (Type)))
321
15.9k
    {
322
15.9k
      * const_cast<Type *> (obj) = v;
323
15.9k
      return true;
324
15.9k
    }
325
1.11k
    return false;
326
17.0k
  }
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
319
6.13k
  {
320
6.13k
    if (this->may_edit (obj, hb_static_size (Type)))
321
5.87k
    {
322
5.87k
      * const_cast<Type *> (obj) = v;
323
5.87k
      return true;
324
5.87k
    }
325
255
    return false;
326
6.13k
  }
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
319
71.3k
  {
320
71.3k
    if (this->may_edit (obj, hb_static_size (Type)))
321
67.2k
    {
322
67.2k
      * const_cast<Type *> (obj) = v;
323
67.2k
      return true;
324
67.2k
    }
325
4.02k
    return false;
326
71.3k
  }
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
319
19.8k
  {
320
19.8k
    if (this->may_edit (obj, hb_static_size (Type)))
321
14.1k
    {
322
14.1k
      * const_cast<Type *> (obj) = v;
323
14.1k
      return true;
324
14.1k
    }
325
5.68k
    return false;
326
19.8k
  }
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
319
30.6k
  {
320
30.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
29.5k
    {
322
29.5k
      * const_cast<Type *> (obj) = v;
323
29.5k
      return true;
324
29.5k
    }
325
1.11k
    return false;
326
30.6k
  }
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
319
28.7k
  {
320
28.7k
    if (this->may_edit (obj, hb_static_size (Type)))
321
26.3k
    {
322
26.3k
      * const_cast<Type *> (obj) = v;
323
26.3k
      return true;
324
26.3k
    }
325
2.31k
    return false;
326
28.7k
  }
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
319
6.67k
  {
320
6.67k
    if (this->may_edit (obj, hb_static_size (Type)))
321
6.44k
    {
322
6.44k
      * const_cast<Type *> (obj) = v;
323
6.44k
      return true;
324
6.44k
    }
325
227
    return false;
326
6.67k
  }
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
319
215k
  {
320
215k
    if (this->may_edit (obj, hb_static_size (Type)))
321
184k
    {
322
184k
      * const_cast<Type *> (obj) = v;
323
184k
      return true;
324
184k
    }
325
30.9k
    return false;
326
215k
  }
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
319
35.4k
  {
320
35.4k
    if (this->may_edit (obj, hb_static_size (Type)))
321
22.3k
    {
322
22.3k
      * const_cast<Type *> (obj) = v;
323
22.3k
      return true;
324
22.3k
    }
325
13.0k
    return false;
326
35.4k
  }
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
319
28.6k
  {
320
28.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
8.19k
    {
322
8.19k
      * const_cast<Type *> (obj) = v;
323
8.19k
      return true;
324
8.19k
    }
325
20.4k
    return false;
326
28.6k
  }
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
319
58.4k
  {
320
58.4k
    if (this->may_edit (obj, hb_static_size (Type)))
321
47.8k
    {
322
47.8k
      * const_cast<Type *> (obj) = v;
323
47.8k
      return true;
324
47.8k
    }
325
10.5k
    return false;
326
58.4k
  }
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
319
30.5k
  {
320
30.5k
    if (this->may_edit (obj, hb_static_size (Type)))
321
12.2k
    {
322
12.2k
      * const_cast<Type *> (obj) = v;
323
12.2k
      return true;
324
12.2k
    }
325
18.3k
    return false;
326
30.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
319
130k
  {
320
130k
    if (this->may_edit (obj, hb_static_size (Type)))
321
94.0k
    {
322
94.0k
      * const_cast<Type *> (obj) = v;
323
94.0k
      return true;
324
94.0k
    }
325
36.5k
    return false;
326
130k
  }
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
319
50.4k
  {
320
50.4k
    if (this->may_edit (obj, hb_static_size (Type)))
321
7.80k
    {
322
7.80k
      * const_cast<Type *> (obj) = v;
323
7.80k
      return true;
324
7.80k
    }
325
42.5k
    return false;
326
50.4k
  }
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
319
8.88k
  {
320
8.88k
    if (this->may_edit (obj, hb_static_size (Type)))
321
7.16k
    {
322
7.16k
      * const_cast<Type *> (obj) = v;
323
7.16k
      return true;
324
7.16k
    }
325
1.71k
    return false;
326
8.88k
  }
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
319
4.64k
  {
320
4.64k
    if (this->may_edit (obj, hb_static_size (Type)))
321
2.06k
    {
322
2.06k
      * const_cast<Type *> (obj) = v;
323
2.06k
      return true;
324
2.06k
    }
325
2.57k
    return false;
326
4.64k
  }
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
319
3.85k
  {
320
3.85k
    if (this->may_edit (obj, hb_static_size (Type)))
321
2.66k
    {
322
2.66k
      * const_cast<Type *> (obj) = v;
323
2.66k
      return true;
324
2.66k
    }
325
1.19k
    return false;
326
3.85k
  }
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
319
9.37k
  {
320
9.37k
    if (this->may_edit (obj, hb_static_size (Type)))
321
9.04k
    {
322
9.04k
      * const_cast<Type *> (obj) = v;
323
9.04k
      return true;
324
9.04k
    }
325
336
    return false;
326
9.37k
  }
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
319
1.62k
  {
320
1.62k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.23k
    {
322
1.23k
      * const_cast<Type *> (obj) = v;
323
1.23k
      return true;
324
1.23k
    }
325
386
    return false;
326
1.62k
  }
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<unsigned int, 4u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::HBFixed>, 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::IntType<unsigned short, 2u>, unsigned short>(OT::IntType<unsigned short, 2u> const*, unsigned short const&)
Line
Count
Source
319
9.89k
  {
320
9.89k
    if (this->may_edit (obj, hb_static_size (Type)))
321
4.98k
    {
322
4.98k
      * const_cast<Type *> (obj) = v;
323
4.98k
      return true;
324
4.98k
    }
325
4.90k
    return false;
326
9.89k
  }
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
319
4.50k
  {
320
4.50k
    if (this->may_edit (obj, hb_static_size (Type)))
321
3.87k
    {
322
3.87k
      * const_cast<Type *> (obj) = v;
323
3.87k
      return true;
324
3.87k
    }
325
632
    return false;
326
4.50k
  }
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
319
4.99k
  {
320
4.99k
    if (this->may_edit (obj, hb_static_size (Type)))
321
4.47k
    {
322
4.47k
      * const_cast<Type *> (obj) = v;
323
4.47k
      return true;
324
4.47k
    }
325
521
    return false;
326
4.99k
  }
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
319
45.1k
  {
320
45.1k
    if (this->may_edit (obj, hb_static_size (Type)))
321
29.3k
    {
322
29.3k
      * const_cast<Type *> (obj) = v;
323
29.3k
      return true;
324
29.3k
    }
325
15.7k
    return false;
326
45.1k
  }
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
319
9.44k
  {
320
9.44k
    if (this->may_edit (obj, hb_static_size (Type)))
321
7.69k
    {
322
7.69k
      * const_cast<Type *> (obj) = v;
323
7.69k
      return true;
324
7.69k
    }
325
1.74k
    return false;
326
9.44k
  }
Unexecuted instantiation: bool hb_sanitize_context_t::try_set<OT::OffsetTo<OT::UnsizedArrayOf<OT::F2DOT14>, OT::IntType<unsigned int, 4u>, false>, int>(OT::OffsetTo<OT::UnsizedArrayOf<OT::F2DOT14>, 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
319
7.52k
  {
320
7.52k
    if (this->may_edit (obj, hb_static_size (Type)))
321
6.85k
    {
322
6.85k
      * const_cast<Type *> (obj) = v;
323
6.85k
      return true;
324
6.85k
    }
325
669
    return false;
326
7.52k
  }
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::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
319
1.98k
  {
320
1.98k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.64k
    {
322
1.64k
      * const_cast<Type *> (obj) = v;
323
1.64k
      return true;
324
1.64k
    }
325
334
    return false;
326
1.98k
  }
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
319
2.24k
  {
320
2.24k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.81k
    {
322
1.81k
      * const_cast<Type *> (obj) = v;
323
1.81k
      return true;
324
1.81k
    }
325
426
    return false;
326
2.24k
  }
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
319
34.6k
  {
320
34.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
7.92k
    {
322
7.92k
      * const_cast<Type *> (obj) = v;
323
7.92k
      return true;
324
7.92k
    }
325
26.7k
    return false;
326
34.6k
  }
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
319
16.3k
  {
320
16.3k
    if (this->may_edit (obj, hb_static_size (Type)))
321
15.8k
    {
322
15.8k
      * const_cast<Type *> (obj) = v;
323
15.8k
      return true;
324
15.8k
    }
325
494
    return false;
326
16.3k
  }
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
319
554
  {
320
554
    if (this->may_edit (obj, hb_static_size (Type)))
321
500
    {
322
500
      * const_cast<Type *> (obj) = v;
323
500
      return true;
324
500
    }
325
54
    return false;
326
554
  }
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
319
123k
  {
320
123k
    if (this->may_edit (obj, hb_static_size (Type)))
321
113k
    {
322
113k
      * const_cast<Type *> (obj) = v;
323
113k
      return true;
324
113k
    }
325
9.23k
    return false;
326
123k
  }
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
319
7.63k
  {
320
7.63k
    if (this->may_edit (obj, hb_static_size (Type)))
321
659
    {
322
659
      * const_cast<Type *> (obj) = v;
323
659
      return true;
324
659
    }
325
6.97k
    return false;
326
7.63k
  }
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
319
8.22k
  {
320
8.22k
    if (this->may_edit (obj, hb_static_size (Type)))
321
4.90k
    {
322
4.90k
      * const_cast<Type *> (obj) = v;
323
4.90k
      return true;
324
4.90k
    }
325
3.31k
    return false;
326
8.22k
  }
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
319
20.8k
  {
320
20.8k
    if (this->may_edit (obj, hb_static_size (Type)))
321
20.3k
    {
322
20.3k
      * const_cast<Type *> (obj) = v;
323
20.3k
      return true;
324
20.3k
    }
325
464
    return false;
326
20.8k
  }
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
319
4.67k
  {
320
4.67k
    if (this->may_edit (obj, hb_static_size (Type)))
321
4.01k
    {
322
4.01k
      * const_cast<Type *> (obj) = v;
323
4.01k
      return true;
324
4.01k
    }
325
664
    return false;
326
4.67k
  }
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
319
3.67k
  {
320
3.67k
    if (this->may_edit (obj, hb_static_size (Type)))
321
2.74k
    {
322
2.74k
      * const_cast<Type *> (obj) = v;
323
2.74k
      return true;
324
2.74k
    }
325
932
    return false;
326
3.67k
  }
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
319
6.86k
  {
320
6.86k
    if (this->may_edit (obj, hb_static_size (Type)))
321
6.24k
    {
322
6.24k
      * const_cast<Type *> (obj) = v;
323
6.24k
      return true;
324
6.24k
    }
325
613
    return false;
326
6.86k
  }
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
319
41.3k
  {
320
41.3k
    if (this->may_edit (obj, hb_static_size (Type)))
321
36.7k
    {
322
36.7k
      * const_cast<Type *> (obj) = v;
323
36.7k
      return true;
324
36.7k
    }
325
4.54k
    return false;
326
41.3k
  }
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
319
38.5k
  {
320
38.5k
    if (this->may_edit (obj, hb_static_size (Type)))
321
37.5k
    {
322
37.5k
      * const_cast<Type *> (obj) = v;
323
37.5k
      return true;
324
37.5k
    }
325
1.01k
    return false;
326
38.5k
  }
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
319
10.1k
  {
320
10.1k
    if (this->may_edit (obj, hb_static_size (Type)))
321
9.60k
    {
322
9.60k
      * const_cast<Type *> (obj) = v;
323
9.60k
      return true;
324
9.60k
    }
325
510
    return false;
326
10.1k
  }
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
319
10.2k
  {
320
10.2k
    if (this->may_edit (obj, hb_static_size (Type)))
321
9.73k
    {
322
9.73k
      * const_cast<Type *> (obj) = v;
323
9.73k
      return true;
324
9.73k
    }
325
472
    return false;
326
10.2k
  }
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
319
61.6k
  {
320
61.6k
    if (this->may_edit (obj, hb_static_size (Type)))
321
56.0k
    {
322
56.0k
      * const_cast<Type *> (obj) = v;
323
56.0k
      return true;
324
56.0k
    }
325
5.52k
    return false;
326
61.6k
  }
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
319
16.2k
  {
320
16.2k
    if (this->may_edit (obj, hb_static_size (Type)))
321
9.37k
    {
322
9.37k
      * const_cast<Type *> (obj) = v;
323
9.37k
      return true;
324
9.37k
    }
325
6.88k
    return false;
326
16.2k
  }
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
319
19.5k
  {
320
19.5k
    if (this->may_edit (obj, hb_static_size (Type)))
321
18.7k
    {
322
18.7k
      * const_cast<Type *> (obj) = v;
323
18.7k
      return true;
324
18.7k
    }
325
856
    return false;
326
19.5k
  }
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
319
24.7k
  {
320
24.7k
    if (this->may_edit (obj, hb_static_size (Type)))
321
22.9k
    {
322
22.9k
      * const_cast<Type *> (obj) = v;
323
22.9k
      return true;
324
22.9k
    }
325
1.78k
    return false;
326
24.7k
  }
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
319
310k
  {
320
310k
    if (this->may_edit (obj, hb_static_size (Type)))
321
264k
    {
322
264k
      * const_cast<Type *> (obj) = v;
323
264k
      return true;
324
264k
    }
325
45.2k
    return false;
326
310k
  }
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
319
173k
  {
320
173k
    if (this->may_edit (obj, hb_static_size (Type)))
321
114k
    {
322
114k
      * const_cast<Type *> (obj) = v;
323
114k
      return true;
324
114k
    }
325
59.0k
    return false;
326
173k
  }
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
319
62.1k
  {
320
62.1k
    if (this->may_edit (obj, hb_static_size (Type)))
321
2.77k
    {
322
2.77k
      * const_cast<Type *> (obj) = v;
323
2.77k
      return true;
324
2.77k
    }
325
59.4k
    return false;
326
62.1k
  }
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
319
7.90k
  {
320
7.90k
    if (this->may_edit (obj, hb_static_size (Type)))
321
7.63k
    {
322
7.63k
      * const_cast<Type *> (obj) = v;
323
7.63k
      return true;
324
7.63k
    }
325
274
    return false;
326
7.90k
  }
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
319
890
  {
320
890
    if (this->may_edit (obj, hb_static_size (Type)))
321
566
    {
322
566
      * const_cast<Type *> (obj) = v;
323
566
      return true;
324
566
    }
325
324
    return false;
326
890
  }
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
319
21.8k
  {
320
21.8k
    if (this->may_edit (obj, hb_static_size (Type)))
321
20.0k
    {
322
20.0k
      * const_cast<Type *> (obj) = v;
323
20.0k
      return true;
324
20.0k
    }
325
1.87k
    return false;
326
21.8k
  }
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
319
5.57k
  {
320
5.57k
    if (this->may_edit (obj, hb_static_size (Type)))
321
3.14k
    {
322
3.14k
      * const_cast<Type *> (obj) = v;
323
3.14k
      return true;
324
3.14k
    }
325
2.43k
    return false;
326
5.57k
  }
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
319
9.00k
  {
320
9.00k
    if (this->may_edit (obj, hb_static_size (Type)))
321
7.54k
    {
322
7.54k
      * const_cast<Type *> (obj) = v;
323
7.54k
      return true;
324
7.54k
    }
325
1.45k
    return false;
326
9.00k
  }
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
319
12.7k
  {
320
12.7k
    if (this->may_edit (obj, hb_static_size (Type)))
321
8.27k
    {
322
8.27k
      * const_cast<Type *> (obj) = v;
323
8.27k
      return true;
324
8.27k
    }
325
4.51k
    return false;
326
12.7k
  }
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
319
6.44k
  {
320
6.44k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.26k
    {
322
1.26k
      * const_cast<Type *> (obj) = v;
323
1.26k
      return true;
324
1.26k
    }
325
5.17k
    return false;
326
6.44k
  }
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
319
2.70k
  {
320
2.70k
    if (this->may_edit (obj, hb_static_size (Type)))
321
124
    {
322
124
      * const_cast<Type *> (obj) = v;
323
124
      return true;
324
124
    }
325
2.58k
    return false;
326
2.70k
  }
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
319
1.61k
  {
320
1.61k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.02k
    {
322
1.02k
      * const_cast<Type *> (obj) = v;
323
1.02k
      return true;
324
1.02k
    }
325
591
    return false;
326
1.61k
  }
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
319
1.23k
  {
320
1.23k
    if (this->may_edit (obj, hb_static_size (Type)))
321
919
    {
322
919
      * const_cast<Type *> (obj) = v;
323
919
      return true;
324
919
    }
325
316
    return false;
326
1.23k
  }
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
319
9.17k
  {
320
9.17k
    if (this->may_edit (obj, hb_static_size (Type)))
321
8.10k
    {
322
8.10k
      * const_cast<Type *> (obj) = v;
323
8.10k
      return true;
324
8.10k
    }
325
1.07k
    return false;
326
9.17k
  }
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
319
2.29k
  {
320
2.29k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.05k
    {
322
1.05k
      * const_cast<Type *> (obj) = v;
323
1.05k
      return true;
324
1.05k
    }
325
1.24k
    return false;
326
2.29k
  }
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
319
3.13k
  {
320
3.13k
    if (this->may_edit (obj, hb_static_size (Type)))
321
891
    {
322
891
      * const_cast<Type *> (obj) = v;
323
891
      return true;
324
891
    }
325
2.23k
    return false;
326
3.13k
  }
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
319
9.26k
  {
320
9.26k
    if (this->may_edit (obj, hb_static_size (Type)))
321
8.65k
    {
322
8.65k
      * const_cast<Type *> (obj) = v;
323
8.65k
      return true;
324
8.65k
    }
325
617
    return false;
326
9.26k
  }
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
319
8.67k
  {
320
8.67k
    if (this->may_edit (obj, hb_static_size (Type)))
321
7.61k
    {
322
7.61k
      * const_cast<Type *> (obj) = v;
323
7.61k
      return true;
324
7.61k
    }
325
1.05k
    return false;
326
8.67k
  }
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
319
2.60k
  {
320
2.60k
    if (this->may_edit (obj, hb_static_size (Type)))
321
1.34k
    {
322
1.34k
      * const_cast<Type *> (obj) = v;
323
1.34k
      return true;
324
1.34k
    }
325
1.26k
    return false;
326
2.60k
  }
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
319
1.99k
  {
320
1.99k
    if (this->may_edit (obj, hb_static_size (Type)))
321
601
    {
322
601
      * const_cast<Type *> (obj) = v;
323
601
      return true;
324
601
    }
325
1.39k
    return false;
326
1.99k
  }
327
328
  template <typename Type>
329
  hb_blob_t *sanitize_blob (hb_blob_t *blob)
330
230M
  {
331
230M
    bool sane;
332
333
230M
    init (blob);
334
335
230M
  retry:
336
230M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
230M
    start_processing ();
339
340
230M
    if (unlikely (!start))
341
223M
    {
342
223M
      end_processing ();
343
223M
      return blob;
344
223M
    }
345
346
7.59M
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
7.59M
    sane = t->sanitize (this);
349
7.59M
    if (sane)
350
6.92M
    {
351
6.92M
      if (edit_count)
352
142k
      {
353
142k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
142k
  edit_count = 0;
357
142k
  sane = t->sanitize (this);
358
142k
  if (edit_count) {
359
2.34k
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
2.34k
    sane = false;
361
2.34k
  }
362
142k
      }
363
6.92M
    }
364
667k
    else
365
667k
    {
366
667k
      if (edit_count && !writable) {
367
179k
  start = hb_blob_get_data_writable (blob, nullptr);
368
179k
  end = start + blob->length;
369
370
179k
  if (start)
371
177k
  {
372
177k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
177k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
177k
    goto retry;
376
177k
  }
377
179k
      }
378
667k
    }
379
380
7.41M
    end_processing ();
381
382
7.41M
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
7.41M
    if (sane)
384
6.92M
    {
385
6.92M
      hb_blob_make_immutable (blob);
386
6.92M
      return blob;
387
6.92M
    }
388
493k
    else
389
493k
    {
390
493k
      hb_blob_destroy (blob);
391
493k
      return hb_blob_get_empty ();
392
493k
    }
393
7.41M
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::GDEF>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.69M
    {
342
5.69M
      end_processing ();
343
5.69M
      return blob;
344
5.69M
    }
345
346
82.2k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
82.2k
    sane = t->sanitize (this);
349
82.2k
    if (sane)
350
61.8k
    {
351
61.8k
      if (edit_count)
352
9.87k
      {
353
9.87k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
9.87k
  edit_count = 0;
357
9.87k
  sane = t->sanitize (this);
358
9.87k
  if (edit_count) {
359
26
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
26
    sane = false;
361
26
  }
362
9.87k
      }
363
61.8k
    }
364
20.4k
    else
365
20.4k
    {
366
20.4k
      if (edit_count && !writable) {
367
12.7k
  start = hb_blob_get_data_writable (blob, nullptr);
368
12.7k
  end = start + blob->length;
369
370
12.7k
  if (start)
371
12.5k
  {
372
12.5k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
12.5k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
12.5k
    goto retry;
376
12.5k
  }
377
12.7k
      }
378
20.4k
    }
379
380
69.7k
    end_processing ();
381
382
69.7k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
69.7k
    if (sane)
384
61.8k
    {
385
61.8k
      hb_blob_make_immutable (blob);
386
61.8k
      return blob;
387
61.8k
    }
388
7.91k
    else
389
7.91k
    {
390
7.91k
      hb_blob_destroy (blob);
391
7.91k
      return hb_blob_get_empty ();
392
7.91k
    }
393
69.7k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::morx>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.75M
    {
342
5.75M
      end_processing ();
343
5.75M
      return blob;
344
5.75M
    }
345
346
16.6k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
16.6k
    sane = t->sanitize (this);
349
16.6k
    if (sane)
350
11.7k
    {
351
11.7k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
11.7k
    }
364
4.90k
    else
365
4.90k
    {
366
4.90k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
4.90k
    }
379
380
16.6k
    end_processing ();
381
382
16.6k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
16.6k
    if (sane)
384
11.7k
    {
385
11.7k
      hb_blob_make_immutable (blob);
386
11.7k
      return blob;
387
11.7k
    }
388
4.90k
    else
389
4.90k
    {
390
4.90k
      hb_blob_destroy (blob);
391
4.90k
      return hb_blob_get_empty ();
392
4.90k
    }
393
16.6k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::ltag>(hb_blob_t*)
Line
Count
Source
330
2.31k
  {
331
2.31k
    bool sane;
332
333
2.31k
    init (blob);
334
335
2.31k
  retry:
336
2.31k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
2.31k
    start_processing ();
339
340
2.31k
    if (unlikely (!start))
341
2.31k
    {
342
2.31k
      end_processing ();
343
2.31k
      return blob;
344
2.31k
    }
345
346
0
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
0
    sane = t->sanitize (this);
349
0
    if (sane)
350
0
    {
351
0
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
0
    }
364
0
    else
365
0
    {
366
0
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
0
    }
379
380
0
    end_processing ();
381
382
0
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
0
    if (sane)
384
0
    {
385
0
      hb_blob_make_immutable (blob);
386
0
      return blob;
387
0
    }
388
0
    else
389
0
    {
390
0
      hb_blob_destroy (blob);
391
0
      return hb_blob_get_empty ();
392
0
    }
393
0
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::mort>(hb_blob_t*)
Line
Count
Source
330
5.75M
  {
331
5.75M
    bool sane;
332
333
5.75M
    init (blob);
334
335
5.75M
  retry:
336
5.75M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.75M
    start_processing ();
339
340
5.75M
    if (unlikely (!start))
341
5.74M
    {
342
5.74M
      end_processing ();
343
5.74M
      return blob;
344
5.74M
    }
345
346
13.1k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
13.1k
    sane = t->sanitize (this);
349
13.1k
    if (sane)
350
10.7k
    {
351
10.7k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
10.7k
    }
364
2.39k
    else
365
2.39k
    {
366
2.39k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
2.39k
    }
379
380
13.1k
    end_processing ();
381
382
13.1k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
13.1k
    if (sane)
384
10.7k
    {
385
10.7k
      hb_blob_make_immutable (blob);
386
10.7k
      return blob;
387
10.7k
    }
388
2.39k
    else
389
2.39k
    {
390
2.39k
      hb_blob_destroy (blob);
391
2.39k
      return hb_blob_get_empty ();
392
2.39k
    }
393
13.1k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::kerx>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.75M
    {
342
5.75M
      end_processing ();
343
5.75M
      return blob;
344
5.75M
    }
345
346
11.3k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
11.3k
    sane = t->sanitize (this);
349
11.3k
    if (sane)
350
7.86k
    {
351
7.86k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
7.86k
    }
364
3.52k
    else
365
3.52k
    {
366
3.52k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
3.52k
    }
379
380
11.3k
    end_processing ();
381
382
11.3k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
11.3k
    if (sane)
384
7.86k
    {
385
7.86k
      hb_blob_make_immutable (blob);
386
7.86k
      return blob;
387
7.86k
    }
388
3.52k
    else
389
3.52k
    {
390
3.52k
      hb_blob_destroy (blob);
391
3.52k
      return hb_blob_get_empty ();
392
3.52k
    }
393
11.3k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::ankr>(hb_blob_t*)
Line
Count
Source
330
7.83k
  {
331
7.83k
    bool sane;
332
333
7.83k
    init (blob);
334
335
9.59k
  retry:
336
9.59k
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
9.59k
    start_processing ();
339
340
9.59k
    if (unlikely (!start))
341
3.77k
    {
342
3.77k
      end_processing ();
343
3.77k
      return blob;
344
3.77k
    }
345
346
5.81k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
5.81k
    sane = t->sanitize (this);
349
5.81k
    if (sane)
350
3.14k
    {
351
3.14k
      if (edit_count)
352
1.76k
      {
353
1.76k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
1.76k
  edit_count = 0;
357
1.76k
  sane = t->sanitize (this);
358
1.76k
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
1.76k
      }
363
3.14k
    }
364
2.67k
    else
365
2.67k
    {
366
2.67k
      if (edit_count && !writable) {
367
2.04k
  start = hb_blob_get_data_writable (blob, nullptr);
368
2.04k
  end = start + blob->length;
369
370
2.04k
  if (start)
371
1.76k
  {
372
1.76k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
1.76k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
1.76k
    goto retry;
376
1.76k
  }
377
2.04k
      }
378
2.67k
    }
379
380
4.05k
    end_processing ();
381
382
4.05k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
4.05k
    if (sane)
384
3.14k
    {
385
3.14k
      hb_blob_make_immutable (blob);
386
3.14k
      return blob;
387
3.14k
    }
388
909
    else
389
909
    {
390
909
      hb_blob_destroy (blob);
391
909
      return hb_blob_get_empty ();
392
909
    }
393
4.05k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::trak>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
1.69k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
1.69k
    sane = t->sanitize (this);
349
1.69k
    if (sane)
350
739
    {
351
739
      if (edit_count)
352
380
      {
353
380
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
380
  edit_count = 0;
357
380
  sane = t->sanitize (this);
358
380
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
380
      }
363
739
    }
364
951
    else
365
951
    {
366
951
      if (edit_count && !writable) {
367
492
  start = hb_blob_get_data_writable (blob, nullptr);
368
492
  end = start + blob->length;
369
370
492
  if (start)
371
380
  {
372
380
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
380
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
380
    goto retry;
376
380
  }
377
492
      }
378
951
    }
379
380
1.31k
    end_processing ();
381
382
1.31k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
1.31k
    if (sane)
384
739
    {
385
739
      hb_blob_make_immutable (blob);
386
739
      return blob;
387
739
    }
388
571
    else
389
571
    {
390
571
      hb_blob_destroy (blob);
391
571
      return hb_blob_get_empty ();
392
571
    }
393
1.31k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<AAT::feat>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.77M
    {
342
5.77M
      end_processing ();
343
5.77M
      return blob;
344
5.77M
    }
345
346
1.20k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
1.20k
    sane = t->sanitize (this);
349
1.20k
    if (sane)
350
608
    {
351
608
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
608
    }
364
594
    else
365
594
    {
366
594
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
594
    }
379
380
1.20k
    end_processing ();
381
382
1.20k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
1.20k
    if (sane)
384
608
    {
385
608
      hb_blob_make_immutable (blob);
386
608
      return blob;
387
608
    }
388
594
    else
389
594
    {
390
594
      hb_blob_destroy (blob);
391
594
      return hb_blob_get_empty ();
392
594
    }
393
1.20k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::Layout::GPOS>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.81M
  retry:
336
5.81M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.81M
    start_processing ();
339
340
5.81M
    if (unlikely (!start))
341
5.67M
    {
342
5.67M
      end_processing ();
343
5.67M
      return blob;
344
5.67M
    }
345
346
138k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
138k
    sane = t->sanitize (this);
349
138k
    if (sane)
350
79.3k
    {
351
79.3k
      if (edit_count)
352
35.4k
      {
353
35.4k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
35.4k
  edit_count = 0;
357
35.4k
  sane = t->sanitize (this);
358
35.4k
  if (edit_count) {
359
728
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
728
    sane = false;
361
728
  }
362
35.4k
      }
363
79.3k
    }
364
59.6k
    else
365
59.6k
    {
366
59.6k
      if (edit_count && !writable) {
367
47.6k
  start = hb_blob_get_data_writable (blob, nullptr);
368
47.6k
  end = start + blob->length;
369
370
47.6k
  if (start)
371
47.2k
  {
372
47.2k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
47.2k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
47.2k
    goto retry;
376
47.2k
  }
377
47.6k
      }
378
59.6k
    }
379
380
91.6k
    end_processing ();
381
382
91.6k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
91.6k
    if (sane)
384
78.3k
    {
385
78.3k
      hb_blob_make_immutable (blob);
386
78.3k
      return blob;
387
78.3k
    }
388
13.3k
    else
389
13.3k
    {
390
13.3k
      hb_blob_destroy (blob);
391
13.3k
      return hb_blob_get_empty ();
392
13.3k
    }
393
91.6k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::loca>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.71M
    {
342
5.71M
      end_processing ();
343
5.71M
      return blob;
344
5.71M
    }
345
346
55.2k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
55.2k
    sane = t->sanitize (this);
349
55.2k
    if (sane)
350
55.2k
    {
351
55.2k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
55.2k
    }
364
0
    else
365
0
    {
366
0
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
0
    }
379
380
55.2k
    end_processing ();
381
382
55.2k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
55.2k
    if (sane)
384
55.2k
    {
385
55.2k
      hb_blob_make_immutable (blob);
386
55.2k
      return blob;
387
55.2k
    }
388
0
    else
389
0
    {
390
0
      hb_blob_destroy (blob);
391
0
      return hb_blob_get_empty ();
392
0
    }
393
55.2k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::maxp>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.64M
    {
342
5.64M
      end_processing ();
343
5.64M
      return blob;
344
5.64M
    }
345
346
127k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
127k
    sane = t->sanitize (this);
349
127k
    if (sane)
350
117k
    {
351
117k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
117k
    }
364
9.47k
    else
365
9.47k
    {
366
9.47k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
9.47k
    }
379
380
127k
    end_processing ();
381
382
127k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
127k
    if (sane)
384
117k
    {
385
117k
      hb_blob_make_immutable (blob);
386
117k
      return blob;
387
117k
    }
388
9.47k
    else
389
9.47k
    {
390
9.47k
      hb_blob_destroy (blob);
391
9.47k
      return hb_blob_get_empty ();
392
9.47k
    }
393
127k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::head>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.66M
    {
342
5.66M
      end_processing ();
343
5.66M
      return blob;
344
5.66M
    }
345
346
110k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
110k
    sane = t->sanitize (this);
349
110k
    if (sane)
350
90.8k
    {
351
90.8k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
90.8k
    }
364
20.0k
    else
365
20.0k
    {
366
20.0k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
20.0k
    }
379
380
110k
    end_processing ();
381
382
110k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
110k
    if (sane)
384
90.8k
    {
385
90.8k
      hb_blob_make_immutable (blob);
386
90.8k
      return blob;
387
90.8k
    }
388
20.0k
    else
389
20.0k
    {
390
20.0k
      hb_blob_destroy (blob);
391
20.0k
      return hb_blob_get_empty ();
392
20.0k
    }
393
110k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cmap>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.78M
  retry:
336
5.78M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.78M
    start_processing ();
339
340
5.78M
    if (unlikely (!start))
341
5.64M
    {
342
5.64M
      end_processing ();
343
5.64M
      return blob;
344
5.64M
    }
345
346
142k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
142k
    sane = t->sanitize (this);
349
142k
    if (sane)
350
100k
    {
351
100k
      if (edit_count)
352
15.1k
      {
353
15.1k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
15.1k
  edit_count = 0;
357
15.1k
  sane = t->sanitize (this);
358
15.1k
  if (edit_count) {
359
48
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
48
    sane = false;
361
48
  }
362
15.1k
      }
363
100k
    }
364
42.1k
    else
365
42.1k
    {
366
42.1k
      if (edit_count && !writable) {
367
15.5k
  start = hb_blob_get_data_writable (blob, nullptr);
368
15.5k
  end = start + blob->length;
369
370
15.5k
  if (start)
371
15.4k
  {
372
15.4k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
15.4k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
15.4k
    goto retry;
376
15.4k
  }
377
15.5k
      }
378
42.1k
    }
379
380
127k
    end_processing ();
381
382
127k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
127k
    if (sane)
384
100k
    {
385
100k
      hb_blob_make_immutable (blob);
386
100k
      return blob;
387
100k
    }
388
26.7k
    else
389
26.7k
    {
390
26.7k
      hb_blob_destroy (blob);
391
26.7k
      return hb_blob_get_empty ();
392
26.7k
    }
393
127k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::OS2>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.66M
    {
342
5.66M
      end_processing ();
343
5.66M
      return blob;
344
5.66M
    }
345
346
102k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
102k
    sane = t->sanitize (this);
349
102k
    if (sane)
350
95.6k
    {
351
95.6k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
95.6k
    }
364
6.42k
    else
365
6.42k
    {
366
6.42k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
6.42k
    }
379
380
102k
    end_processing ();
381
382
102k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
102k
    if (sane)
384
95.6k
    {
385
95.6k
      hb_blob_make_immutable (blob);
386
95.6k
      return blob;
387
95.6k
    }
388
6.42k
    else
389
6.42k
    {
390
6.42k
      hb_blob_destroy (blob);
391
6.42k
      return hb_blob_get_empty ();
392
6.42k
    }
393
102k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hmtxvmtx<OT::hmtx, OT::hhea, OT::HVAR> >(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.68M
    {
342
5.68M
      end_processing ();
343
5.68M
      return blob;
344
5.68M
    }
345
346
87.2k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
87.2k
    sane = t->sanitize (this);
349
87.2k
    if (sane)
350
87.2k
    {
351
87.2k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
87.2k
    }
364
0
    else
365
0
    {
366
0
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
0
    }
379
380
87.2k
    end_processing ();
381
382
87.2k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
87.2k
    if (sane)
384
87.2k
    {
385
87.2k
      hb_blob_make_immutable (blob);
386
87.2k
      return blob;
387
87.2k
    }
388
0
    else
389
0
    {
390
0
      hb_blob_destroy (blob);
391
0
      return hb_blob_get_empty ();
392
0
    }
393
87.2k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::HVAR>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.74M
    {
342
5.74M
      end_processing ();
343
5.74M
      return blob;
344
5.74M
    }
345
346
29.5k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
29.5k
    sane = t->sanitize (this);
349
29.5k
    if (sane)
350
12.9k
    {
351
12.9k
      if (edit_count)
352
3.92k
      {
353
3.92k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
3.92k
  edit_count = 0;
357
3.92k
  sane = t->sanitize (this);
358
3.92k
  if (edit_count) {
359
161
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
161
    sane = false;
361
161
  }
362
3.92k
      }
363
12.9k
    }
364
16.5k
    else
365
16.5k
    {
366
16.5k
      if (edit_count && !writable) {
367
4.24k
  start = hb_blob_get_data_writable (blob, nullptr);
368
4.24k
  end = start + blob->length;
369
370
4.24k
  if (start)
371
4.12k
  {
372
4.12k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
4.12k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
4.12k
    goto retry;
376
4.12k
  }
377
4.24k
      }
378
16.5k
    }
379
380
25.4k
    end_processing ();
381
382
25.4k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
25.4k
    if (sane)
384
12.8k
    {
385
12.8k
      hb_blob_make_immutable (blob);
386
12.8k
      return blob;
387
12.8k
    }
388
12.5k
    else
389
12.5k
    {
390
12.5k
      hb_blob_destroy (blob);
391
12.5k
      return hb_blob_get_empty ();
392
12.5k
    }
393
25.4k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hhea>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.65M
    {
342
5.65M
      end_processing ();
343
5.65M
      return blob;
344
5.65M
    }
345
346
111k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
111k
    sane = t->sanitize (this);
349
111k
    if (sane)
350
91.7k
    {
351
91.7k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
91.7k
    }
364
19.7k
    else
365
19.7k
    {
366
19.7k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
19.7k
    }
379
380
111k
    end_processing ();
381
382
111k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
111k
    if (sane)
384
91.7k
    {
385
91.7k
      hb_blob_make_immutable (blob);
386
91.7k
      return blob;
387
91.7k
    }
388
19.7k
    else
389
19.7k
    {
390
19.7k
      hb_blob_destroy (blob);
391
19.7k
      return hb_blob_get_empty ();
392
19.7k
    }
393
111k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::vhea>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
3.63k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
3.63k
    sane = t->sanitize (this);
349
3.63k
    if (sane)
350
1.87k
    {
351
1.87k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
1.87k
    }
364
1.75k
    else
365
1.75k
    {
366
1.75k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
1.75k
    }
379
380
3.63k
    end_processing ();
381
382
3.63k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
3.63k
    if (sane)
384
1.87k
    {
385
1.87k
      hb_blob_make_immutable (blob);
386
1.87k
      return blob;
387
1.87k
    }
388
1.75k
    else
389
1.75k
    {
390
1.75k
      hb_blob_destroy (blob);
391
1.75k
      return hb_blob_get_empty ();
392
1.75k
    }
393
3.63k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::hmtxvmtx<OT::vmtx, OT::vhea, OT::VVAR> >(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
3.77k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
3.77k
    sane = t->sanitize (this);
349
3.77k
    if (sane)
350
3.77k
    {
351
3.77k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
3.77k
    }
364
0
    else
365
0
    {
366
0
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
0
    }
379
380
3.77k
    end_processing ();
381
382
3.77k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
3.77k
    if (sane)
384
3.77k
    {
385
3.77k
      hb_blob_make_immutable (blob);
386
3.77k
      return blob;
387
3.77k
    }
388
0
    else
389
0
    {
390
0
      hb_blob_destroy (blob);
391
0
      return hb_blob_get_empty ();
392
0
    }
393
3.77k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::VVAR>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
2.05k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
2.05k
    sane = t->sanitize (this);
349
2.05k
    if (sane)
350
1.20k
    {
351
1.20k
      if (edit_count)
352
546
      {
353
546
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
546
  edit_count = 0;
357
546
  sane = t->sanitize (this);
358
546
  if (edit_count) {
359
20
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
20
    sane = false;
361
20
  }
362
546
      }
363
1.20k
    }
364
850
    else
365
850
    {
366
850
      if (edit_count && !writable) {
367
620
  start = hb_blob_get_data_writable (blob, nullptr);
368
620
  end = start + blob->length;
369
370
620
  if (start)
371
593
  {
372
593
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
593
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
593
    goto retry;
376
593
  }
377
620
      }
378
850
    }
379
380
1.46k
    end_processing ();
381
382
1.46k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
1.46k
    if (sane)
384
1.18k
    {
385
1.18k
      hb_blob_make_immutable (blob);
386
1.18k
      return blob;
387
1.18k
    }
388
277
    else
389
277
    {
390
277
      hb_blob_destroy (blob);
391
277
      return hb_blob_get_empty ();
392
277
    }
393
1.46k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::gvar>(hb_blob_t*)
Line
Count
Source
330
5.73M
  {
331
5.73M
    bool sane;
332
333
5.73M
    init (blob);
334
335
5.73M
  retry:
336
5.73M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.73M
    start_processing ();
339
340
5.73M
    if (unlikely (!start))
341
5.72M
    {
342
5.72M
      end_processing ();
343
5.72M
      return blob;
344
5.72M
    }
345
346
14.1k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
14.1k
    sane = t->sanitize (this);
349
14.1k
    if (sane)
350
9.36k
    {
351
9.36k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
9.36k
    }
364
4.80k
    else
365
4.80k
    {
366
4.80k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
4.80k
    }
379
380
14.1k
    end_processing ();
381
382
14.1k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
14.1k
    if (sane)
384
9.36k
    {
385
9.36k
      hb_blob_make_immutable (blob);
386
9.36k
      return blob;
387
9.36k
    }
388
4.80k
    else
389
4.80k
    {
390
4.80k
      hb_blob_destroy (blob);
391
4.80k
      return hb_blob_get_empty ();
392
4.80k
    }
393
14.1k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::glyf>(hb_blob_t*)
Line
Count
Source
330
5.74M
  {
331
5.74M
    bool sane;
332
333
5.74M
    init (blob);
334
335
5.74M
  retry:
336
5.74M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.74M
    start_processing ();
339
340
5.74M
    if (unlikely (!start))
341
5.67M
    {
342
5.67M
      end_processing ();
343
5.67M
      return blob;
344
5.67M
    }
345
346
68.0k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
68.0k
    sane = t->sanitize (this);
349
68.0k
    if (sane)
350
68.0k
    {
351
68.0k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
68.0k
    }
364
0
    else
365
0
    {
366
0
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
0
    }
379
380
68.0k
    end_processing ();
381
382
68.0k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
68.0k
    if (sane)
384
68.0k
    {
385
68.0k
      hb_blob_make_immutable (blob);
386
68.0k
      return blob;
387
68.0k
    }
388
0
    else
389
0
    {
390
0
      hb_blob_destroy (blob);
391
0
      return hb_blob_get_empty ();
392
0
    }
393
68.0k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::OpenTypeFontFile>(hb_blob_t*)
Line
Count
Source
330
5.91M
  {
331
5.91M
    bool sane;
332
333
5.91M
    init (blob);
334
335
5.91M
  retry:
336
5.91M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.91M
    start_processing ();
339
340
5.91M
    if (unlikely (!start))
341
22.3k
    {
342
22.3k
      end_processing ();
343
22.3k
      return blob;
344
22.3k
    }
345
346
5.89M
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
5.89M
    sane = t->sanitize (this);
349
5.89M
    if (sane)
350
5.67M
    {
351
5.67M
      if (edit_count)
352
419
      {
353
419
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
419
  edit_count = 0;
357
419
  sane = t->sanitize (this);
358
419
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
419
      }
363
5.67M
    }
364
216k
    else
365
216k
    {
366
216k
      if (edit_count && !writable) {
367
555
  start = hb_blob_get_data_writable (blob, nullptr);
368
555
  end = start + blob->length;
369
370
555
  if (start)
371
533
  {
372
533
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
533
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
533
    goto retry;
376
533
  }
377
555
      }
378
216k
    }
379
380
5.89M
    end_processing ();
381
382
5.89M
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
5.89M
    if (sane)
384
5.67M
    {
385
5.67M
      hb_blob_make_immutable (blob);
386
5.67M
      return blob;
387
5.67M
    }
388
216k
    else
389
216k
    {
390
216k
      hb_blob_destroy (blob);
391
216k
      return hb_blob_get_empty ();
392
216k
    }
393
5.89M
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::fvar>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.73M
    {
342
5.73M
      end_processing ();
343
5.73M
      return blob;
344
5.73M
    }
345
346
32.9k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
32.9k
    sane = t->sanitize (this);
349
32.9k
    if (sane)
350
17.7k
    {
351
17.7k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
17.7k
    }
364
15.2k
    else
365
15.2k
    {
366
15.2k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
15.2k
    }
379
380
32.9k
    end_processing ();
381
382
32.9k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
32.9k
    if (sane)
384
17.7k
    {
385
17.7k
      hb_blob_make_immutable (blob);
386
17.7k
      return blob;
387
17.7k
    }
388
15.2k
    else
389
15.2k
    {
390
15.2k
      hb_blob_destroy (blob);
391
15.2k
      return hb_blob_get_empty ();
392
15.2k
    }
393
32.9k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::avar>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.75M
    {
342
5.75M
      end_processing ();
343
5.75M
      return blob;
344
5.75M
    }
345
346
19.9k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
19.9k
    sane = t->sanitize (this);
349
19.9k
    if (sane)
350
9.51k
    {
351
9.51k
      if (edit_count)
352
894
      {
353
894
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
894
  edit_count = 0;
357
894
  sane = t->sanitize (this);
358
894
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
894
      }
363
9.51k
    }
364
10.4k
    else
365
10.4k
    {
366
10.4k
      if (edit_count && !writable) {
367
948
  start = hb_blob_get_data_writable (blob, nullptr);
368
948
  end = start + blob->length;
369
370
948
  if (start)
371
925
  {
372
925
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
925
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
925
    goto retry;
376
925
  }
377
948
      }
378
10.4k
    }
379
380
19.0k
    end_processing ();
381
382
19.0k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
19.0k
    if (sane)
384
9.51k
    {
385
9.51k
      hb_blob_make_immutable (blob);
386
9.51k
      return blob;
387
9.51k
    }
388
9.51k
    else
389
9.51k
    {
390
9.51k
      hb_blob_destroy (blob);
391
9.51k
      return hb_blob_get_empty ();
392
9.51k
    }
393
19.0k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CPAL>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
2.09k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
2.09k
    sane = t->sanitize (this);
349
2.09k
    if (sane)
350
888
    {
351
888
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
888
    }
364
1.20k
    else
365
1.20k
    {
366
1.20k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
1.20k
    }
379
380
2.09k
    end_processing ();
381
382
2.09k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
2.09k
    if (sane)
384
888
    {
385
888
      hb_blob_make_immutable (blob);
386
888
      return blob;
387
888
    }
388
1.20k
    else
389
1.20k
    {
390
1.20k
      hb_blob_destroy (blob);
391
1.20k
      return hb_blob_get_empty ();
392
1.20k
    }
393
2.09k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::COLR>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
17.7k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
17.7k
    sane = t->sanitize (this);
349
17.7k
    if (sane)
350
5.66k
    {
351
5.66k
      if (edit_count)
352
5.24k
      {
353
5.24k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
5.24k
  edit_count = 0;
357
5.24k
  sane = t->sanitize (this);
358
5.24k
  if (edit_count) {
359
166
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
166
    sane = false;
361
166
  }
362
5.24k
      }
363
5.66k
    }
364
12.0k
    else
365
12.0k
    {
366
12.0k
      if (edit_count && !writable) {
367
8.47k
  start = hb_blob_get_data_writable (blob, nullptr);
368
8.47k
  end = start + blob->length;
369
370
8.47k
  if (start)
371
8.26k
  {
372
8.26k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
8.26k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
8.26k
    goto retry;
376
8.26k
  }
377
8.47k
      }
378
12.0k
    }
379
380
9.45k
    end_processing ();
381
382
9.45k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
9.45k
    if (sane)
384
5.49k
    {
385
5.49k
      hb_blob_make_immutable (blob);
386
5.49k
      return blob;
387
5.49k
    }
388
3.96k
    else
389
3.96k
    {
390
3.96k
      hb_blob_destroy (blob);
391
3.96k
      return hb_blob_get_empty ();
392
3.96k
    }
393
9.45k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::SVG>(hb_blob_t*)
Line
Count
Source
330
5.74M
  {
331
5.74M
    bool sane;
332
333
5.74M
    init (blob);
334
335
5.74M
  retry:
336
5.74M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.74M
    start_processing ();
339
340
5.74M
    if (unlikely (!start))
341
5.74M
    {
342
5.74M
      end_processing ();
343
5.74M
      return blob;
344
5.74M
    }
345
346
1.28k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
1.28k
    sane = t->sanitize (this);
349
1.28k
    if (sane)
350
338
    {
351
338
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
338
    }
364
944
    else
365
944
    {
366
944
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
944
    }
379
380
1.28k
    end_processing ();
381
382
1.28k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
1.28k
    if (sane)
384
338
    {
385
338
      hb_blob_make_immutable (blob);
386
338
      return blob;
387
338
    }
388
944
    else
389
944
    {
390
944
      hb_blob_destroy (blob);
391
944
      return hb_blob_get_empty ();
392
944
    }
393
1.28k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CBLC>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
3.00k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
3.00k
    sane = t->sanitize (this);
349
3.00k
    if (sane)
350
1.61k
    {
351
1.61k
      if (edit_count)
352
732
      {
353
732
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
732
  edit_count = 0;
357
732
  sane = t->sanitize (this);
358
732
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
732
      }
363
1.61k
    }
364
1.38k
    else
365
1.38k
    {
366
1.38k
      if (edit_count && !writable) {
367
929
  start = hb_blob_get_data_writable (blob, nullptr);
368
929
  end = start + blob->length;
369
370
929
  if (start)
371
900
  {
372
900
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
900
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
900
    goto retry;
376
900
  }
377
929
      }
378
1.38k
    }
379
380
2.10k
    end_processing ();
381
382
2.10k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
2.10k
    if (sane)
384
1.61k
    {
385
1.61k
      hb_blob_make_immutable (blob);
386
1.61k
      return blob;
387
1.61k
    }
388
482
    else
389
482
    {
390
482
      hb_blob_destroy (blob);
391
482
      return hb_blob_get_empty ();
392
482
    }
393
2.10k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::CBDT>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
1.31k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
1.31k
    sane = t->sanitize (this);
349
1.31k
    if (sane)
350
1.21k
    {
351
1.21k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
1.21k
    }
364
104
    else
365
104
    {
366
104
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
104
    }
379
380
1.31k
    end_processing ();
381
382
1.31k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
1.31k
    if (sane)
384
1.21k
    {
385
1.21k
      hb_blob_make_immutable (blob);
386
1.21k
      return blob;
387
1.21k
    }
388
104
    else
389
104
    {
390
104
      hb_blob_destroy (blob);
391
104
      return hb_blob_get_empty ();
392
104
    }
393
1.31k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::sbix>(hb_blob_t*)
Line
Count
Source
330
5.69M
  {
331
5.69M
    bool sane;
332
333
5.69M
    init (blob);
334
335
5.69M
  retry:
336
5.69M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.69M
    start_processing ();
339
340
5.69M
    if (unlikely (!start))
341
5.69M
    {
342
5.69M
      end_processing ();
343
5.69M
      return blob;
344
5.69M
    }
345
346
2.79k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
2.79k
    sane = t->sanitize (this);
349
2.79k
    if (sane)
350
1.74k
    {
351
1.74k
      if (edit_count)
352
499
      {
353
499
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
499
  edit_count = 0;
357
499
  sane = t->sanitize (this);
358
499
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
499
      }
363
1.74k
    }
364
1.04k
    else
365
1.04k
    {
366
1.04k
      if (edit_count && !writable) {
367
578
  start = hb_blob_get_data_writable (blob, nullptr);
368
578
  end = start + blob->length;
369
370
578
  if (start)
371
534
  {
372
534
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
534
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
534
    goto retry;
376
534
  }
377
578
      }
378
1.04k
    }
379
380
2.25k
    end_processing ();
381
382
2.25k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
2.25k
    if (sane)
384
1.74k
    {
385
1.74k
      hb_blob_make_immutable (blob);
386
1.74k
      return blob;
387
1.74k
    }
388
511
    else
389
511
    {
390
511
      hb_blob_destroy (blob);
391
511
      return hb_blob_get_empty ();
392
511
    }
393
2.25k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cff1>(hb_blob_t*)
Line
Count
Source
330
5.69M
  {
331
5.69M
    bool sane;
332
333
5.69M
    init (blob);
334
335
5.69M
  retry:
336
5.69M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.69M
    start_processing ();
339
340
5.69M
    if (unlikely (!start))
341
5.66M
    {
342
5.66M
      end_processing ();
343
5.66M
      return blob;
344
5.66M
    }
345
346
28.8k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
28.8k
    sane = t->sanitize (this);
349
28.8k
    if (sane)
350
27.0k
    {
351
27.0k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
27.0k
    }
364
1.82k
    else
365
1.82k
    {
366
1.82k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
1.82k
    }
379
380
28.8k
    end_processing ();
381
382
28.8k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
28.8k
    if (sane)
384
27.0k
    {
385
27.0k
      hb_blob_make_immutable (blob);
386
27.0k
      return blob;
387
27.0k
    }
388
1.82k
    else
389
1.82k
    {
390
1.82k
      hb_blob_destroy (blob);
391
1.82k
      return hb_blob_get_empty ();
392
1.82k
    }
393
28.8k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::cff2>(hb_blob_t*)
Line
Count
Source
330
5.74M
  {
331
5.74M
    bool sane;
332
333
5.74M
    init (blob);
334
335
5.74M
  retry:
336
5.74M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.74M
    start_processing ();
339
340
5.74M
    if (unlikely (!start))
341
5.72M
    {
342
5.72M
      end_processing ();
343
5.72M
      return blob;
344
5.72M
    }
345
346
19.9k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
19.9k
    sane = t->sanitize (this);
349
19.9k
    if (sane)
350
17.2k
    {
351
17.2k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
17.2k
    }
364
2.70k
    else
365
2.70k
    {
366
2.70k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
2.70k
    }
379
380
19.9k
    end_processing ();
381
382
19.9k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
19.9k
    if (sane)
384
17.2k
    {
385
17.2k
      hb_blob_make_immutable (blob);
386
17.2k
      return blob;
387
17.2k
    }
388
2.70k
    else
389
2.70k
    {
390
2.70k
      hb_blob_destroy (blob);
391
2.70k
      return hb_blob_get_empty ();
392
2.70k
    }
393
19.9k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::meta>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
1.69k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
1.69k
    sane = t->sanitize (this);
349
1.69k
    if (sane)
350
530
    {
351
530
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
530
    }
364
1.16k
    else
365
1.16k
    {
366
1.16k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
1.16k
    }
379
380
1.69k
    end_processing ();
381
382
1.69k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
1.69k
    if (sane)
384
530
    {
385
530
      hb_blob_make_immutable (blob);
386
530
      return blob;
387
530
    }
388
1.16k
    else
389
1.16k
    {
390
1.16k
      hb_blob_destroy (blob);
391
1.16k
      return hb_blob_get_empty ();
392
1.16k
    }
393
1.69k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::name>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.66M
    {
342
5.66M
      end_processing ();
343
5.66M
      return blob;
344
5.66M
    }
345
346
99.3k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
99.3k
    sane = t->sanitize (this);
349
99.3k
    if (sane)
350
56.8k
    {
351
56.8k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
56.8k
    }
364
42.4k
    else
365
42.4k
    {
366
42.4k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
42.4k
    }
379
380
99.3k
    end_processing ();
381
382
99.3k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
99.3k
    if (sane)
384
56.8k
    {
385
56.8k
      hb_blob_make_immutable (blob);
386
56.8k
      return blob;
387
56.8k
    }
388
42.4k
    else
389
42.4k
    {
390
42.4k
      hb_blob_destroy (blob);
391
42.4k
      return hb_blob_get_empty ();
392
42.4k
    }
393
99.3k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::post>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.76M
  retry:
336
5.76M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.76M
    start_processing ();
339
340
5.76M
    if (unlikely (!start))
341
5.67M
    {
342
5.67M
      end_processing ();
343
5.67M
      return blob;
344
5.67M
    }
345
346
94.7k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
94.7k
    sane = t->sanitize (this);
349
94.7k
    if (sane)
350
70.6k
    {
351
70.6k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
70.6k
    }
364
24.1k
    else
365
24.1k
    {
366
24.1k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
24.1k
    }
379
380
94.7k
    end_processing ();
381
382
94.7k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
94.7k
    if (sane)
384
70.6k
    {
385
70.6k
      hb_blob_make_immutable (blob);
386
70.6k
      return blob;
387
70.6k
    }
388
24.1k
    else
389
24.1k
    {
390
24.1k
      hb_blob_destroy (blob);
391
24.1k
      return hb_blob_get_empty ();
392
24.1k
    }
393
94.7k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::Layout::GSUB>(hb_blob_t*)
Line
Count
Source
330
5.76M
  {
331
5.76M
    bool sane;
332
333
5.76M
    init (blob);
334
335
5.83M
  retry:
336
5.83M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.83M
    start_processing ();
339
340
5.83M
    if (unlikely (!start))
341
5.65M
    {
342
5.65M
      end_processing ();
343
5.65M
      return blob;
344
5.65M
    }
345
346
186k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
186k
    sane = t->sanitize (this);
349
186k
    if (sane)
350
96.1k
    {
351
96.1k
      if (edit_count)
352
59.5k
      {
353
59.5k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
59.5k
  edit_count = 0;
357
59.5k
  sane = t->sanitize (this);
358
59.5k
  if (edit_count) {
359
831
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
831
    sane = false;
361
831
  }
362
59.5k
      }
363
96.1k
    }
364
90.0k
    else
365
90.0k
    {
366
90.0k
      if (edit_count && !writable) {
367
74.1k
  start = hb_blob_get_data_writable (blob, nullptr);
368
74.1k
  end = start + blob->length;
369
370
74.1k
  if (start)
371
73.8k
  {
372
73.8k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
73.8k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
73.8k
    goto retry;
376
73.8k
  }
377
74.1k
      }
378
90.0k
    }
379
380
112k
    end_processing ();
381
382
112k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
112k
    if (sane)
384
94.7k
    {
385
94.7k
      hb_blob_make_immutable (blob);
386
94.7k
      return blob;
387
94.7k
    }
388
17.6k
    else
389
17.6k
    {
390
17.6k
      hb_blob_destroy (blob);
391
17.6k
      return hb_blob_get_empty ();
392
17.6k
    }
393
112k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::VORG>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
2.44k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
2.44k
    sane = t->sanitize (this);
349
2.44k
    if (sane)
350
1.18k
    {
351
1.18k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
1.18k
    }
364
1.26k
    else
365
1.26k
    {
366
1.26k
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
1.26k
    }
379
380
2.44k
    end_processing ();
381
382
2.44k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
2.44k
    if (sane)
384
1.18k
    {
385
1.18k
      hb_blob_make_immutable (blob);
386
1.18k
      return blob;
387
1.18k
    }
388
1.26k
    else
389
1.26k
    {
390
1.26k
      hb_blob_destroy (blob);
391
1.26k
      return hb_blob_get_empty ();
392
1.26k
    }
393
2.44k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::kern>(hb_blob_t*)
Line
Count
Source
330
5.74M
  {
331
5.74M
    bool sane;
332
333
5.74M
    init (blob);
334
335
5.74M
  retry:
336
5.74M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.74M
    start_processing ();
339
340
5.74M
    if (unlikely (!start))
341
5.74M
    {
342
5.74M
      end_processing ();
343
5.74M
      return blob;
344
5.74M
    }
345
346
5.07k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
5.07k
    sane = t->sanitize (this);
349
5.07k
    if (sane)
350
4.12k
    {
351
4.12k
      if (edit_count)
352
0
      {
353
0
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
0
  edit_count = 0;
357
0
  sane = t->sanitize (this);
358
0
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
0
      }
363
4.12k
    }
364
950
    else
365
950
    {
366
950
      if (edit_count && !writable) {
367
0
  start = hb_blob_get_data_writable (blob, nullptr);
368
0
  end = start + blob->length;
369
370
0
  if (start)
371
0
  {
372
0
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
0
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
0
    goto retry;
376
0
  }
377
0
      }
378
950
    }
379
380
5.07k
    end_processing ();
381
382
5.07k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
5.07k
    if (sane)
384
4.12k
    {
385
4.12k
      hb_blob_make_immutable (blob);
386
4.12k
      return blob;
387
4.12k
    }
388
950
    else
389
950
    {
390
950
      hb_blob_destroy (blob);
391
950
      return hb_blob_get_empty ();
392
950
    }
393
5.07k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::BASE>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.75M
    {
342
5.75M
      end_processing ();
343
5.75M
      return blob;
344
5.75M
    }
345
346
21.9k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
21.9k
    sane = t->sanitize (this);
349
21.9k
    if (sane)
350
13.2k
    {
351
13.2k
      if (edit_count)
352
3.97k
      {
353
3.97k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
3.97k
  edit_count = 0;
357
3.97k
  sane = t->sanitize (this);
358
3.97k
  if (edit_count) {
359
296
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
296
    sane = false;
361
296
  }
362
3.97k
      }
363
13.2k
    }
364
8.69k
    else
365
8.69k
    {
366
8.69k
      if (edit_count && !writable) {
367
4.71k
  start = hb_blob_get_data_writable (blob, nullptr);
368
4.71k
  end = start + blob->length;
369
370
4.71k
  if (start)
371
4.65k
  {
372
4.65k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
4.65k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
4.65k
    goto retry;
376
4.65k
  }
377
4.71k
      }
378
8.69k
    }
379
380
17.3k
    end_processing ();
381
382
17.3k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
17.3k
    if (sane)
384
12.9k
    {
385
12.9k
      hb_blob_make_immutable (blob);
386
12.9k
      return blob;
387
12.9k
    }
388
4.33k
    else
389
4.33k
    {
390
4.33k
      hb_blob_destroy (blob);
391
4.33k
      return hb_blob_get_empty ();
392
4.33k
    }
393
17.3k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::MATH>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.76M
    {
342
5.76M
      end_processing ();
343
5.76M
      return blob;
344
5.76M
    }
345
346
9.63k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
9.63k
    sane = t->sanitize (this);
349
9.63k
    if (sane)
350
2.82k
    {
351
2.82k
      if (edit_count)
352
2.37k
      {
353
2.37k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
2.37k
  edit_count = 0;
357
2.37k
  sane = t->sanitize (this);
358
2.37k
  if (edit_count) {
359
71
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
71
    sane = false;
361
71
  }
362
2.37k
      }
363
2.82k
    }
364
6.80k
    else
365
6.80k
    {
366
6.80k
      if (edit_count && !writable) {
367
4.40k
  start = hb_blob_get_data_writable (blob, nullptr);
368
4.40k
  end = start + blob->length;
369
370
4.40k
  if (start)
371
4.28k
  {
372
4.28k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
4.28k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
4.28k
    goto retry;
376
4.28k
  }
377
4.40k
      }
378
6.80k
    }
379
380
5.35k
    end_processing ();
381
382
5.35k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
5.35k
    if (sane)
384
2.63k
    {
385
2.63k
      hb_blob_make_immutable (blob);
386
2.63k
      return blob;
387
2.63k
    }
388
2.71k
    else
389
2.71k
    {
390
2.71k
      hb_blob_destroy (blob);
391
2.71k
      return hb_blob_get_empty ();
392
2.71k
    }
393
5.35k
  }
hb_blob_t* hb_sanitize_context_t::sanitize_blob<OT::MVAR>(hb_blob_t*)
Line
Count
Source
330
5.77M
  {
331
5.77M
    bool sane;
332
333
5.77M
    init (blob);
334
335
5.77M
  retry:
336
5.77M
    DEBUG_MSG_FUNC (SANITIZE, start, "start");
337
338
5.77M
    start_processing ();
339
340
5.77M
    if (unlikely (!start))
341
5.75M
    {
342
5.75M
      end_processing ();
343
5.75M
      return blob;
344
5.75M
    }
345
346
20.7k
    Type *t = reinterpret_cast<Type *> (const_cast<char *> (start));
347
348
20.7k
    sane = t->sanitize (this);
349
20.7k
    if (sane)
350
9.71k
    {
351
9.71k
      if (edit_count)
352
1.20k
      {
353
1.20k
  DEBUG_MSG_FUNC (SANITIZE, start, "passed first round with %d edits; going for second round", edit_count);
354
355
  /* sanitize again to ensure no toe-stepping */
356
1.20k
  edit_count = 0;
357
1.20k
  sane = t->sanitize (this);
358
1.20k
  if (edit_count) {
359
0
    DEBUG_MSG_FUNC (SANITIZE, start, "requested %d edits in second round; FAILLING", edit_count);
360
0
    sane = false;
361
0
  }
362
1.20k
      }
363
9.71k
    }
364
11.0k
    else
365
11.0k
    {
366
11.0k
      if (edit_count && !writable) {
367
1.37k
  start = hb_blob_get_data_writable (blob, nullptr);
368
1.37k
  end = start + blob->length;
369
370
1.37k
  if (start)
371
1.31k
  {
372
1.31k
    writable = true;
373
    /* ok, we made it writable by relocating.  try again */
374
1.31k
    DEBUG_MSG_FUNC (SANITIZE, start, "retry");
375
1.31k
    goto retry;
376
1.31k
  }
377
1.37k
      }
378
11.0k
    }
379
380
19.4k
    end_processing ();
381
382
19.4k
    DEBUG_MSG_FUNC (SANITIZE, start, sane ? "PASSED" : "FAILED");
383
19.4k
    if (sane)
384
9.71k
    {
385
9.71k
      hb_blob_make_immutable (blob);
386
9.71k
      return blob;
387
9.71k
    }
388
9.71k
    else
389
9.71k
    {
390
9.71k
      hb_blob_destroy (blob);
391
9.71k
      return hb_blob_get_empty ();
392
9.71k
    }
393
19.4k
  }
394
395
  template <typename Type>
396
  hb_blob_t *reference_table (const hb_face_t *face, hb_tag_t tableTag = Type::tableTag)
397
224M
  {
398
224M
    if (!num_glyphs_set)
399
207M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
224M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
224M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::GDEF>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::morx>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::ltag>(hb_face_t const*, unsigned int)
Line
Count
Source
397
2.31k
  {
398
2.31k
    if (!num_glyphs_set)
399
2.31k
      set_num_glyphs (hb_face_get_glyph_count (face));
400
2.31k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
2.31k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::mort>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.75M
  {
398
5.75M
    if (!num_glyphs_set)
399
5.75M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.75M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.75M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::kerx>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::ankr>(hb_face_t const*, unsigned int)
Line
Count
Source
397
7.83k
  {
398
7.83k
    if (!num_glyphs_set)
399
7.83k
      set_num_glyphs (hb_face_get_glyph_count (face));
400
7.83k
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
7.83k
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::trak>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<AAT::feat>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::Layout::GPOS>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::loca>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
0
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::maxp>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
0
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::head>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
0
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::cmap>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::OS2>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
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
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::HVAR>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::hhea>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::vhea>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
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
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::VVAR>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::gvar>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.73M
  {
398
5.73M
    if (!num_glyphs_set)
399
5.73M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.73M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.73M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::glyf>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.74M
  {
398
5.74M
    if (!num_glyphs_set)
399
5.74M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.74M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.74M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::fvar>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::avar>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::CPAL>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::COLR>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::SVG>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.74M
  {
398
5.74M
    if (!num_glyphs_set)
399
5.74M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.74M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.74M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::CBLC>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::CBDT>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::sbix>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.69M
  {
398
5.69M
    if (!num_glyphs_set)
399
5.69M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.69M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.69M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::cff1>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.69M
  {
398
5.69M
    if (!num_glyphs_set)
399
5.69M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.69M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.69M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::cff2>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.74M
  {
398
5.74M
    if (!num_glyphs_set)
399
5.74M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.74M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.74M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::meta>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::name>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::post>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::Layout::GSUB>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.76M
  {
398
5.76M
    if (!num_glyphs_set)
399
5.76M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.76M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.76M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::VORG>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::kern>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.74M
  {
398
5.74M
    if (!num_glyphs_set)
399
5.74M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.74M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.74M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::BASE>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::MATH>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
hb_blob_t* hb_sanitize_context_t::reference_table<OT::MVAR>(hb_face_t const*, unsigned int)
Line
Count
Source
397
5.77M
  {
398
5.77M
    if (!num_glyphs_set)
399
5.77M
      set_num_glyphs (hb_face_get_glyph_count (face));
400
5.77M
    return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
401
5.77M
  }
402
403
  const char *start, *end;
404
  mutable int max_ops, max_subtables;
405
  private:
406
  int recursion_depth;
407
  bool writable;
408
  unsigned int edit_count;
409
  hb_blob_t *blob;
410
  unsigned int num_glyphs;
411
  bool  num_glyphs_set;
412
};
413
414
struct hb_sanitize_with_object_t
415
{
416
  template <typename T>
417
  hb_sanitize_with_object_t (hb_sanitize_context_t *c, const T& obj) : c (c)
418
523k
  { 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
418
219k
  { 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
418
129k
  { 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
418
95.6k
  { 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
418
40.0k
  { 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
418
38.9k
  { c->set_object (obj); }
419
  ~hb_sanitize_with_object_t ()
420
523k
  { c->reset_object (); }
421
422
  private:
423
  hb_sanitize_context_t *c;
424
};
425
426
427
#endif /* HB_SANITIZE_HH */