Commit cd4c072f authored by Geoff Simmons's avatar Geoff Simmons

In the functional match/backref/namedref implementation, allocate

space for task-scoped match data from workspace.
parent 926c8e3b
......@@ -116,7 +116,6 @@ free_task_match(void *p)
CAST_OBJ_NOTNULL(task_match, p, TASK_MATCH_MAGIC);
if (task_match->vre2 != NULL)
vre2_fini(&task_match->vre2);
FREE_OBJ(task_match);
}
#define ERR_PREFIX "match(\"%.40s\"): "
......@@ -365,7 +364,7 @@ vmod_regex_match(const struct vrt_ctx *ctx, struct vmod_re2_regex *re,
if ((task->priv = WS_Alloc(ctx->ws, sizeof(*task_match)))
== NULL) {
VERRNOMEM(ctx, "Allocating match data in "
"%s.match(subject=\"%.40s\"",
"%s.match(subject=\"%.40s\")",
re->vcl_name, subject);
return 0;
}
......@@ -717,13 +716,21 @@ vmod_match(VRT_CTX, struct vmod_priv *priv, VCL_STRING pattern,
assert(ngroups >= 0);
}
if (priv->priv == NULL) {
ALLOC_OBJ(task_match, TASK_MATCH_MAGIC);
AN(task_match);
if ((task_match = WS_Alloc(ctx->ws, sizeof(*task_match)))
== NULL) {
VERRNOMEM(ctx, ERR_PREFIX "allocating match data",
pattern, subject);
return 0;
}
priv->priv = task_match;
priv->len = sizeof(*task_match);
priv->free = free_task_match;
task_match->magic = TASK_MATCH_MAGIC;
}
else
else {
WS_Contains(ctx->ws, priv->priv, sizeof(*task_match));
CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC);
}
task_match->ngroups = ngroups;
task_match->never_capture = never_capture;
task_match->vre2 = vre2;
......@@ -756,6 +763,7 @@ vmod_backref(VRT_CTX, struct vmod_priv *priv, VCL_INT refnum,
return fallback;
}
WS_Contains(ctx->ws, priv->priv, sizeof(*task_match));
CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC);
if (task_match->never_capture) {
......@@ -798,6 +806,7 @@ vmod_namedref(VRT_CTX, struct vmod_priv *priv, VCL_STRING name,
return fallback;
}
WS_Contains(ctx->ws, priv->priv, sizeof(*task_match));
CAST_OBJ(task_match, priv->priv, TASK_MATCH_MAGIC);
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