inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
Tag tag; /* 4-byte identifier. */
public:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& context->check_array (tableDir, TableDirectory::get_size (), numTables);
}
{
bool overflows = len >= ((unsigned int) -1) / record_size;
-
if (HB_DEBUG_SANITIZE && (int) this->debug_depth < (int) HB_DEBUG_SANITIZE)
fprintf (stderr, "SANITIZE(%p) %-*d-> array [%p..%p] (%d*%d=%ld bytes) in [%p..%p] -> %s\n", \
base,
return likely (!overflows && this->check_range (base, record_size * len));
}
+ template <typename Type>
+ inline bool check_struct (const Type *obj) const
+ {
+ return likely (this->check_range (obj, sizeof (*obj)));
+ }
+
inline bool can_edit (const char *base HB_UNUSED, unsigned int len HB_UNUSED)
{
this->edit_count++;
};
-#define SANITIZE_SELF() likely(context->check_range (this, sizeof (*this)))
-
/* Template to sanitize an object. */
template <typename Type>
inline bool operator != (const IntType<Type> &o) const { return v != o.v; }
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
private: BEInt<Type, sizeof (Type)> v;
};
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
USHORT major;
inline bool sanitize (hb_sanitize_context_t *context, void *base) {
TRACE_SANITIZE ();
- if (!SANITIZE_SELF ()) return false;
+ if (!context->check_struct (this)) return false;
unsigned int offset = *this;
if (unlikely (!offset)) return true;
Type &obj = StructAtOffset<Type> (*CharP(base), offset);
template <typename T>
inline bool sanitize (hb_sanitize_context_t *context, void *base, T user_data) {
TRACE_SANITIZE ();
- if (!SANITIZE_SELF ()) return false;
+ if (!context->check_struct (this)) return false;
unsigned int offset = *this;
if (unlikely (!offset)) return true;
Type &obj = StructAtOffset<Type> (*CharP(base), offset);
private:
inline bool sanitize_shallow (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF()
+ return context->check_struct (this)
&& context->check_array (this, Type::get_size (), len);
}
{ return len.get_size () + (len ? len - 1 : 0) * Type::get_size (); }
inline bool sanitize_shallow (hb_sanitize_context_t *context) {
- return SANITIZE_SELF()
+ return context->check_struct (this)
&& context->check_array (this, Type::get_size (), len);
}
inline bool sanitize (hb_sanitize_context_t *context, void *base) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& offset.sanitize (context, base);
}
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& featureIndex.sanitize (context);
}
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& lookupIndex.sanitize (context);
}
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
/* Real sanitize of the subtables is done by GSUB/GPOS/... */
- if (!(SANITIZE_SELF ()
+ if (!(context->check_struct (this)
&& likely (subTable.sanitize (context)))) return false;
if (unlikely (lookupFlag & LookupFlag::UseMarkFilteringSet))
{
public:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
private:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& classValue.sanitize (context);
}
public:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
private:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF()
+ return context->check_struct (this)
&& context->check_range (this, this->get_size ());
}
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
private:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
private:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& deviceTable.sanitize (context, this);
}
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
private:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
private:
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& xDeviceTable.sanitize (context, this)
&& yDeviceTable.sanitize (context, this);
}
inline bool sanitize (hb_sanitize_context_t *context, unsigned int cols) {
TRACE_SANITIZE ();
- if (!SANITIZE_SELF ()) return false;
+ if (!context->check_struct (this)) return false;
if (unlikely (cols >= ((unsigned int) -1) / rows)) return false;
unsigned int count = rows * cols;
if (!context->check_array (matrix, matrix[0].get_size (), count)) return false;
inline bool sanitize (hb_sanitize_context_t *context, void *base) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& markAnchor.sanitize (context, base);
}
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& coverage.sanitize (context, this)
&& valueFormat.sanitize_value (context, CharP(this), values);
}
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& coverage.sanitize (context, this)
&& valueFormat.sanitize_values (context, CharP(this), values, valueCount);
}
/* Note: Doesn't sanitize the Device entries in the ValueRecord */
inline bool sanitize (hb_sanitize_context_t *context, unsigned int format_len) {
TRACE_SANITIZE ();
- if (!SANITIZE_SELF ()) return false;
+ if (!context->check_struct (this)) return false;
unsigned int count = (1 + format_len) * len;
return context->check_array (array, USHORT::get_size (), count);
}
unsigned int len1 = valueFormat1.get_len ();
unsigned int len2 = valueFormat2.get_len ();
- if (!(SANITIZE_SELF ()
+ if (!(context->check_struct (this)
&& coverage.sanitize (context, this)
&& likely (pairSet.sanitize (context, CharP(this), len1 + len2)))) return false;
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- if (!(SANITIZE_SELF ()
+ if (!(context->check_struct (this)
&& coverage.sanitize (context, this)
&& classDef1.sanitize (context, this)
&& classDef2.sanitize (context, this))) return false;
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& markCoverage.sanitize (context, this)
&& baseCoverage.sanitize (context, this)
&& markArray.sanitize (context, this)
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& markCoverage.sanitize (context, this)
&& ligatureCoverage.sanitize (context, this)
&& markArray.sanitize (context, this)
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ()
+ return context->check_struct (this)
&& mark1Coverage.sanitize (context, this)
&& mark2Coverage.sanitize (context, this)
&& mark1Array.sanitize (context, this)
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
USHORT sequenceIndex; /* Index into current glyph
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- if (!SANITIZE_SELF ()) return false;
+ if (!context->check_struct (this)) return false;
unsigned int count = glyphCount;
if (!context->check_array (coverage, OffsetTo<Coverage>::get_size (), count)) return false;
for (unsigned int i = 0; i < count; i++)
inline bool sanitize (hb_sanitize_context_t *context) {
TRACE_SANITIZE ();
- return SANITIZE_SELF ();
+ return context->check_struct (this);
}
private: