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
f3579552
Commit
f3579552
authored
Mar 27, 2016
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
namedref() method and function fail if the fallback is NULL, and add
tests for failure if the name parameter is NULL or empty
parent
4de7fa5a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
4 deletions
+39
-4
backref_fail.vtc
src/tests/backref_fail.vtc
+28
-0
vmod_re2.c
src/vmod_re2.c
+11
-4
No files found.
src/tests/backref_fail.vtc
View file @
f3579552
...
@@ -163,6 +163,15 @@ varnish v1 -vcl+backend {
...
@@ -163,6 +163,15 @@ varnish v1 -vcl+backend {
if (barbaz.match(resp.http.foo)) {
if (barbaz.match(resp.http.foo)) {
set resp.http.foo1 = barbaz.namedref("bar", "error1");
set resp.http.foo1 = barbaz.namedref("bar", "error1");
set resp.http.foo2 = barbaz.namedref("baz", "error2");
set resp.http.foo2 = barbaz.namedref("baz", "error2");
set resp.http.undeffallback
= barbaz.namedref("bar", resp.http.undef);
# Fail if the name is empty or undefined
set resp.http.emptyname
= barbaz.namedref("", "name empty");
set resp.http.undefname
= barbaz.namedref(req.http.undef,
"name undefined");
}
}
if (barbaz.match(resp.http.barf)) {
if (barbaz.match(resp.http.barf)) {
...
@@ -184,12 +193,16 @@ varnish v1 -vcl+backend {
...
@@ -184,12 +193,16 @@ varnish v1 -vcl+backend {
}
}
set resp.http.never1 = never.namedref("bar", "fallback1");
set resp.http.never1 = never.namedref("bar", "fallback1");
set resp.http.never2 = never.namedref("baz", "fallback2");
set resp.http.never2 = never.namedref("baz", "fallback2");
set resp.http.nofallback = never.namedref("bar");
}
}
}
}
logexpect l2 -v v1 -d 0 -g vxid -q "VCL_Error" {
logexpect l2 -v v1 -d 0 -g vxid -q "VCL_Error" {
expect 0 * Begin req
expect 0 * Begin req
expect * = VCL_Error "^vmod re2 error: backref 1, fallback .fallback.: backref called without prior match$"
expect * = VCL_Error "^vmod re2 error: backref 1, fallback .fallback.: backref called without prior match$"
expect * = VCL_Error "^vmod re2 error: barbaz.namedref..: fallback is undefined$"
expect * = VCL_Error "^vmod re2 error: barbaz.namedref.name=.., fallback=.name empty..: name is empty$"
expect * = VCL_Error "^vmod re2 error: barbaz.namedref.name=.., fallback=.name undefined..: name is empty$"
expect * = VCL_Error "^vmod re2 error: never.namedref.name=.bar., fallback=.fallback1..: never_capture is true for object never$"
expect * = VCL_Error "^vmod re2 error: never.namedref.name=.bar., fallback=.fallback1..: never_capture is true for object never$"
expect * = VCL_Error "^vmod re2 error: never.namedref.name=.baz., fallback=.fallback2..: never_capture is true for object never$"
expect * = VCL_Error "^vmod re2 error: never.namedref.name=.baz., fallback=.fallback2..: never_capture is true for object never$"
...
@@ -206,6 +219,9 @@ client c2 {
...
@@ -206,6 +219,9 @@ client c2 {
expect resp.http.frob2 == "fallback2"
expect resp.http.frob2 == "fallback2"
expect resp.http.foo1 == "bar"
expect resp.http.foo1 == "bar"
expect resp.http.foo2 == "baz"
expect resp.http.foo2 == "baz"
expect resp.http.undeffallback ~ "^..NAMEDREF (METHOD|FUNCTION) FAILED..$"
expect resp.http.emptyname == "name empty"
expect resp.http.undefname == "name undefined"
expect resp.http.puke == <undef>
expect resp.http.puke == <undef>
expect resp.http.barf1 == "fallback1"
expect resp.http.barf1 == "fallback1"
expect resp.http.barf2 == "fallback2"
expect resp.http.barf2 == "fallback2"
...
@@ -216,6 +232,7 @@ client c2 {
...
@@ -216,6 +232,7 @@ client c2 {
expect resp.http.never == "match"
expect resp.http.never == "match"
expect resp.http.never1 == "fallback1"
expect resp.http.never1 == "fallback1"
expect resp.http.never2 == "fallback2"
expect resp.http.never2 == "fallback2"
expect resp.http.nofallback ~ "^..NAMEDREF (METHOD|FUNCTION) FAILED..$"
} -run
} -run
logexpect l2 -wait
logexpect l2 -wait
...
@@ -316,6 +333,13 @@ varnish v1 -vcl+backend {
...
@@ -316,6 +333,13 @@ varnish v1 -vcl+backend {
if (re2.match("(?P<bar>bar)(?P<baz>baz)", resp.http.foo)) {
if (re2.match("(?P<bar>bar)(?P<baz>baz)", resp.http.foo)) {
set resp.http.foo1 = re2.namedref("bar", "error1");
set resp.http.foo1 = re2.namedref("bar", "error1");
set resp.http.foo2 = re2.namedref("baz", "error2");
set resp.http.foo2 = re2.namedref("baz", "error2");
set resp.http.undeffallback
= re2.namedref("bar", resp.http.undef);
set resp.http.emptyname
= re2.namedref("", "name empty");
set resp.http.undefname
= re2.namedref(req.http.undef,
"name undefined");
}
}
if (re2.match("(?P<bar>bar)(?P<baz>baz)", resp.http.barf)) {
if (re2.match("(?P<bar>bar)(?P<baz>baz)", resp.http.barf)) {
...
@@ -338,12 +362,16 @@ varnish v1 -vcl+backend {
...
@@ -338,12 +362,16 @@ varnish v1 -vcl+backend {
}
}
set resp.http.never1 = re2.namedref("bar", "fallback1");
set resp.http.never1 = re2.namedref("bar", "fallback1");
set resp.http.never2 = re2.namedref("baz", "fallback2");
set resp.http.never2 = re2.namedref("baz", "fallback2");
set resp.http.nofallback = re2.namedref("bar");
}
}
}
}
logexpect l4 -v v1 -d 0 -g vxid -q "VCL_Error" {
logexpect l4 -v v1 -d 0 -g vxid -q "VCL_Error" {
expect 0 * Begin req
expect 0 * Begin req
expect * = VCL_Error "^vmod re2 error: re2.namedref.name=.bar., fallback=.fallback..: called without previous match$"
expect * = VCL_Error "^vmod re2 error: re2.namedref.name=.bar., fallback=.fallback..: called without previous match$"
expect * = VCL_Error "^vmod re2 error: re2.namedref..: fallback is undefined$"
expect * = VCL_Error "^vmod re2 error: re2.namedref.name=.., fallback=.name empty..: name is empty$"
expect * = VCL_Error "^vmod re2 error: re2.namedref.name=.., fallback=.name undefined..: name is empty$"
expect * = VCL_Error "^vmod re2 error: re2.namedref.name=.bar., fallback=.fallback1..: never_capture was true in previous match$"
expect * = VCL_Error "^vmod re2 error: re2.namedref.name=.bar., fallback=.fallback1..: never_capture was true in previous match$"
expect * = VCL_Error "^vmod re2 error: re2.namedref.name=.baz., fallback=.fallback2..: never_capture was true in previous match$"
expect * = VCL_Error "^vmod re2 error: re2.namedref.name=.baz., fallback=.fallback2..: never_capture was true in previous match$"
...
...
src/vmod_re2.c
View file @
f3579552
...
@@ -43,6 +43,9 @@
...
@@ -43,6 +43,9 @@
#include "vre2/vre2.h"
#include "vre2/vre2.h"
#include "vre2/vre2set.h"
#include "vre2/vre2set.h"
#define ERR(ctx, msg) \
errmsg((ctx), "vmod re2 error: " msg)
#define VERR(ctx, fmt, ...) \
#define VERR(ctx, fmt, ...) \
errmsg((ctx), "vmod re2 error: " fmt, __VA_ARGS__)
errmsg((ctx), "vmod re2 error: " fmt, __VA_ARGS__)
...
@@ -394,8 +397,10 @@ vmod_regex_namedref(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING name,
...
@@ -394,8 +397,10 @@ vmod_regex_namedref(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING name,
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
re
,
VMOD_RE2_REGEX_MAGIC
);
CHECK_OBJ_NOTNULL
(
re
,
VMOD_RE2_REGEX_MAGIC
);
if
(
fallback
==
NULL
)
if
(
fallback
==
NULL
)
{
fallback
=
""
;
VERR
(
ctx
,
"%s.namedref(): fallback is undefined"
,
re
->
vcl_name
);
return
"**NAMEDREF METHOD FAILED**"
;
}
if
(
name
==
NULL
||
name
[
0
]
==
'\0'
)
{
if
(
name
==
NULL
||
name
[
0
]
==
'\0'
)
{
VERR
(
ctx
,
ERR_PREFIX
"name is empty"
,
re
->
vcl_name
,
""
,
VERR
(
ctx
,
ERR_PREFIX
"name is empty"
,
re
->
vcl_name
,
""
,
fallback
);
fallback
);
...
@@ -690,8 +695,10 @@ vmod_namedref(VRT_CTX, struct vmod_priv *priv, VCL_STRING name,
...
@@ -690,8 +695,10 @@ vmod_namedref(VRT_CTX, struct vmod_priv *priv, VCL_STRING name,
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
AN
(
priv
);
AN
(
priv
);
if
(
fallback
==
NULL
)
if
(
fallback
==
NULL
)
{
fallback
=
""
;
ERR
(
ctx
,
"re2.namedref(): fallback is undefined"
);
return
"**NAMEDREF FUNCTION FAILED**"
;
}
if
(
name
==
NULL
||
name
[
0
]
==
'\0'
)
{
if
(
name
==
NULL
||
name
[
0
]
==
'\0'
)
{
VERR
(
ctx
,
ERR_PREFIX
"name is empty"
,
""
,
fallback
);
VERR
(
ctx
,
ERR_PREFIX
"name is empty"
,
""
,
fallback
);
return
fallback
;
return
fallback
;
...
...
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