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