Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libvmod-re2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
libvmod-re2
Commits
cd4c072f
Commit
cd4c072f
authored
Jun 03, 2017
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
In the functional match/backref/namedref implementation, allocate
space for task-scoped match data from workspace.
parent
926c8e3b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
5 deletions
+14
-5
vmod_re2.c
src/vmod_re2.c
+14
-5
No files found.
src/vmod_re2.c
View file @
cd4c072f
...
@@ -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
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment