Commit 77005abd authored by Geoff Simmons's avatar Geoff Simmons

Use the WS_* interface to check for correct allocations.

parent 180037b6
...@@ -184,13 +184,6 @@ match(VRT_CTX, vre2 * restrict vre2, VCL_STRING restrict subject, ...@@ -184,13 +184,6 @@ match(VRT_CTX, vre2 * restrict vre2, VCL_STRING restrict subject,
#undef ERR_PREFIX #undef ERR_PREFIX
static inline void
WS_Contains(struct ws * const restrict ws, const void * const restrict ptr,
const size_t len)
{
assert((char *)ptr >= ws->s && (char *)(ptr + len) <= ws->e);
}
#define ERR_PREFIX "backref %ld, fallback \"%.40s\": " #define ERR_PREFIX "backref %ld, fallback \"%.40s\": "
static VCL_STRING static VCL_STRING
...@@ -205,7 +198,7 @@ backref(VRT_CTX, VCL_INT refnum, VCL_STRING fallback, void * const groups, ...@@ -205,7 +198,7 @@ backref(VRT_CTX, VCL_INT refnum, VCL_STRING fallback, void * const groups,
if (groups == match_failed) if (groups == match_failed)
return fallback; return fallback;
WS_Contains(ctx->ws, groups, (ngroups + 1) * match_sz); WS_Assert_Allocated(ctx->ws, groups, (ngroups + 1) * match_sz);
if ((err = vre2_capture(groups, (int) refnum, &capture, &len)) if ((err = vre2_capture(groups, (int) refnum, &capture, &len))
!= NULL) { != NULL) {
...@@ -220,7 +213,7 @@ backref(VRT_CTX, VCL_INT refnum, VCL_STRING fallback, void * const groups, ...@@ -220,7 +213,7 @@ backref(VRT_CTX, VCL_INT refnum, VCL_STRING fallback, void * const groups,
if (len == 0) if (len == 0)
return ""; return "";
WS_Contains(ctx->ws, capture, len); WS_Assert_Allocated(ctx->ws, capture, len);
if ((backref = WS_Copy(ctx->ws, capture, len + 1)) == NULL) { if ((backref = WS_Copy(ctx->ws, capture, len + 1)) == NULL) {
VERR(ctx, ERR_PREFIX "insufficient workspace for backref", VERR(ctx, ERR_PREFIX "insufficient workspace for backref",
refnum, fallback); refnum, fallback);
...@@ -391,7 +384,7 @@ vmod_regex_match(const struct vrt_ctx *ctx, struct vmod_re2_regex *re, ...@@ -391,7 +384,7 @@ vmod_regex_match(const struct vrt_ctx *ctx, struct vmod_re2_regex *re,
task_match->magic = TASK_MATCH_MAGIC; task_match->magic = TASK_MATCH_MAGIC;
} }
else { else {
WS_Contains(ctx->ws, task->priv, sizeof(*task_match)); WS_Assert_Allocated(ctx->ws, task->priv, sizeof(*task_match));
CAST_OBJ(task_match, task->priv, TASK_MATCH_MAGIC); CAST_OBJ(task_match, task->priv, TASK_MATCH_MAGIC);
} }
...@@ -436,7 +429,7 @@ vmod_regex_backref(VRT_CTX, struct vmod_re2_regex *re, VCL_INT refnum, ...@@ -436,7 +429,7 @@ vmod_regex_backref(VRT_CTX, struct vmod_re2_regex *re, VCL_INT refnum,
re->vcl_name, refnum, fallback); re->vcl_name, refnum, fallback);
return fallback; return fallback;
} }
WS_Contains(ctx->ws, task->priv, sizeof(*task_match)); WS_Assert_Allocated(ctx->ws, task->priv, sizeof(*task_match));
CAST_OBJ(task_match, task->priv, TASK_MATCH_MAGIC); CAST_OBJ(task_match, task->priv, TASK_MATCH_MAGIC);
return backref(ctx, refnum, fallback, task_match->groups, re->ngroups); return backref(ctx, refnum, fallback, task_match->groups, re->ngroups);
} }
...@@ -477,7 +470,7 @@ vmod_regex_namedref(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING name, ...@@ -477,7 +470,7 @@ vmod_regex_namedref(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING name,
re->vcl_name, name, fallback); re->vcl_name, name, fallback);
return fallback; return fallback;
} }
WS_Contains(ctx->ws, task->priv, sizeof(*task_match)); WS_Assert_Allocated(ctx->ws, task->priv, sizeof(*task_match));
CAST_OBJ(task_match, task->priv, TASK_MATCH_MAGIC); CAST_OBJ(task_match, task->priv, TASK_MATCH_MAGIC);
return namedref(ctx, re->vre2, name, fallback, task_match->groups, return namedref(ctx, re->vre2, name, fallback, task_match->groups,
re->ngroups); re->ngroups);
...@@ -705,7 +698,7 @@ vmod_set_match(VRT_CTX, struct vmod_re2_set *set, VCL_STRING subject) ...@@ -705,7 +698,7 @@ vmod_set_match(VRT_CTX, struct vmod_re2_set *set, VCL_STRING subject)
task->magic = TASK_SET_MATCH_MAGIC; task->magic = TASK_SET_MATCH_MAGIC;
} }
else { else {
WS_Contains(ctx->ws, priv->priv, sizeof(*task)); WS_Assert_Allocated(ctx->ws, priv->priv, sizeof(*task));
CAST_OBJ(task, priv->priv, TASK_SET_MATCH_MAGIC); CAST_OBJ(task, priv->priv, TASK_SET_MATCH_MAGIC);
} }
...@@ -749,12 +742,13 @@ vmod_set_matched(VRT_CTX, struct vmod_re2_set *set, VCL_INT n) ...@@ -749,12 +742,13 @@ vmod_set_matched(VRT_CTX, struct vmod_re2_set *set, VCL_INT n)
set->vcl_name, n); set->vcl_name, n);
return 0; return 0;
} }
WS_Contains(ctx->ws, priv->priv, sizeof(*task)); WS_Assert_Allocated(ctx->ws, priv->priv, sizeof(*task));
CAST_OBJ(task, priv->priv, TASK_SET_MATCH_MAGIC); CAST_OBJ(task, priv->priv, TASK_SET_MATCH_MAGIC);
if (task->nmatches == 0) if (task->nmatches == 0)
return 0; return 0;
WS_Contains(ctx->ws, task->matches, task->nmatches * sizeof(int)); WS_Assert_Allocated(ctx->ws, task->matches,
task->nmatches * sizeof(int));
n--; n--;
for (unsigned i = 0; i < task->nmatches; i++) for (unsigned i = 0; i < task->nmatches; i++)
if (task->matches[i] == n) if (task->matches[i] == n)
...@@ -777,7 +771,7 @@ vmod_set_nmatches(VRT_CTX, struct vmod_re2_set *set) ...@@ -777,7 +771,7 @@ vmod_set_nmatches(VRT_CTX, struct vmod_re2_set *set)
set->vcl_name); set->vcl_name);
return 0; return 0;
} }
WS_Contains(ctx->ws, priv->priv, sizeof(*task)); WS_Assert_Allocated(ctx->ws, priv->priv, sizeof(*task));
CAST_OBJ(task, priv->priv, TASK_SET_MATCH_MAGIC); CAST_OBJ(task, priv->priv, TASK_SET_MATCH_MAGIC);
return task->nmatches; return task->nmatches;
} }
...@@ -842,7 +836,7 @@ vmod_match(VRT_CTX, struct vmod_priv *priv, VCL_STRING pattern, ...@@ -842,7 +836,7 @@ vmod_match(VRT_CTX, struct vmod_priv *priv, VCL_STRING pattern,
task_match->magic = TASK_MATCH_MAGIC; task_match->magic = TASK_MATCH_MAGIC;
} }
else { else {
WS_Contains(ctx->ws, priv->priv, sizeof(*task_match)); WS_Assert_Allocated(ctx->ws, priv->priv, sizeof(*task_match));
CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC); CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC);
} }
task_match->ngroups = ngroups; task_match->ngroups = ngroups;
...@@ -877,7 +871,7 @@ vmod_backref(VRT_CTX, struct vmod_priv *priv, VCL_INT refnum, ...@@ -877,7 +871,7 @@ vmod_backref(VRT_CTX, struct vmod_priv *priv, VCL_INT refnum,
return fallback; return fallback;
} }
WS_Contains(ctx->ws, priv->priv, sizeof(*task_match)); WS_Assert_Allocated(ctx->ws, priv->priv, sizeof(*task_match));
CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC); CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC);
if (task_match->never_capture) { if (task_match->never_capture) {
...@@ -920,7 +914,7 @@ vmod_namedref(VRT_CTX, struct vmod_priv *priv, VCL_STRING name, ...@@ -920,7 +914,7 @@ vmod_namedref(VRT_CTX, struct vmod_priv *priv, VCL_STRING name,
return fallback; return fallback;
} }
WS_Contains(ctx->ws, priv->priv, sizeof(*task_match)); WS_Assert_Allocated(ctx->ws, priv->priv, sizeof(*task_match));
CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC); CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC);
if (task_match->never_capture) { if (task_match->never_capture) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment