[HB] More sanitize infrastructure
This commit is contained in:
parent
b508e5ccd5
commit
b1e187fc63
|
@ -59,9 +59,36 @@ typedef struct _hb_sanitize_context_t hb_sanitize_context_t;
|
||||||
struct _hb_sanitize_context_t
|
struct _hb_sanitize_context_t
|
||||||
{
|
{
|
||||||
const char *start, *end;
|
const char *start, *end;
|
||||||
|
int edit_count;
|
||||||
hb_blob_t *blob;
|
hb_blob_t *blob;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static HB_GNUC_UNUSED void
|
||||||
|
hb_sanitize_init (hb_sanitize_context_t *context,
|
||||||
|
hb_blob_t *blob)
|
||||||
|
{
|
||||||
|
context->blob = blob;
|
||||||
|
context->start = hb_blob_lock (blob);
|
||||||
|
context->end = context->start + hb_blob_get_length (blob);
|
||||||
|
context->edit_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HB_GNUC_UNUSED void
|
||||||
|
hb_sanitize_fini (hb_sanitize_context_t *context, bool unlock)
|
||||||
|
{
|
||||||
|
if (unlock)
|
||||||
|
hb_blob_unlock (context->blob);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HB_GNUC_UNUSED bool
|
||||||
|
hb_sanitize_edit (hb_sanitize_context_t *context)
|
||||||
|
{
|
||||||
|
bool perm = hb_blob_try_writeable_inplace (context->blob);
|
||||||
|
if (perm)
|
||||||
|
context->edit_count++;
|
||||||
|
return perm;
|
||||||
|
}
|
||||||
|
|
||||||
#define SANITIZE_ARG_DEF \
|
#define SANITIZE_ARG_DEF \
|
||||||
hb_sanitize_context_t *context
|
hb_sanitize_context_t *context
|
||||||
#define SANITIZE_ARG \
|
#define SANITIZE_ARG \
|
||||||
|
@ -83,7 +110,7 @@ struct _hb_sanitize_context_t
|
||||||
|
|
||||||
#define SANITIZE_MEM(B,L) HB_LIKELY (context->start <= CONST_CHARP(B) && CONST_CHARP(B) + (L) <= context->end) /* XXX overflow */
|
#define SANITIZE_MEM(B,L) HB_LIKELY (context->start <= CONST_CHARP(B) && CONST_CHARP(B) + (L) <= context->end) /* XXX overflow */
|
||||||
|
|
||||||
#define NEUTER(Var, Val) (SANITIZE_OBJ (Var) && hb_blob_try_writeable_inplace (context->blob) && ((Var) = (Val), true))
|
#define NEUTER(Var, Val) (SANITIZE_OBJ (Var) && hb_sanitize_edit (context) && ((Var) = (Val), true))
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue