[PATCH] substring matching in std

Federico Schwindt fgsch at lodoss.net
Sat Sep 20 13:00:00 CEST 2014


I'd prefer to keep substr (or rename it to strstr) but returning the
substring instead so you can also use the  string.

The reason for this is that regex match doesn't work on dynamic strings.
 On 20 Sep 2014 10:31, "Rogier 'DocWilco' Mulhuijzen" <varnish at bsdchicks.com>
wrote:

> I'm not fond of using "substr" as the function name, as other languages
> use this function with start/end or start/length parameters to create a new
> string from the existing string.
>
> I would suggest one of the following:
>
> - strstr
> - instr
> - contains
>
> Also, just out of curiosity, exactly how much faster is this than a regex
> match?
>
> On Sat, Sep 20, 2014 at 11:12 AM, Per Buer <perbu at varnish-software.com>
> wrote:
>
>>  bin/varnishtest/tests/m00018.vtc | 34 ++++++++++++++++++++++++++++++++++
>>  lib/libvmod_std/vmod.vcc         | 12 +++++++++++-
>>  lib/libvmod_std/vmod_std.c       | 14 ++++++++++++++
>>  3 files changed, 59 insertions(+), 1 deletion(-)
>>  create mode 100644 bin/varnishtest/tests/m00018.vtc
>>
>> diff --git a/bin/varnishtest/tests/m00018.vtc
>> b/bin/varnishtest/tests/m00018.vtc
>> new file mode 100644
>> index 0000000..af00716
>> --- /dev/null
>> +++ b/bin/varnishtest/tests/m00018.vtc
>> @@ -0,0 +1,34 @@
>> +varnishtest "Test substring matching in std"
>> +
>> +server s1 {
>> +       rxreq
>> +       txresp
>> +
>> +       rxreq
>> +       txresp
>> +} -start
>> +
>> +varnish v1 -vcl+backend {
>> + import ${vmod_std};
>> +
>> + sub vcl_deliver {
>> +    if (std.substr(req.url, "foo")) {
>> + set resp.http.sub = "found";
>> +    } else {
>> + set resp.http.sub = "not found";
>> +    }
>> +
>> + }
>> +} -start
>> +
>> +client c1 {
>> + txreq -url "/foobar"
>> + rxresp
>> + expect resp.http.sub == "found"
>> +
>> +
>> + txreq -url "/quux"
>> + rxresp
>> + expect resp.http.sub == "not found"
>> +} -run
>> +
>> diff --git a/lib/libvmod_std/vmod.vcc b/lib/libvmod_std/vmod.vcc
>> index fbc082b..e59c7a4 100644
>> --- a/lib/libvmod_std/vmod.vcc
>> +++ b/lib/libvmod_std/vmod.vcc
>> @@ -195,7 +195,6 @@ $Function STRING querysort(STRING)
>>
>>  Description
>>          Sorts the querystring for cache normalization purposes.
>> -
>>  Example
>>          set req.url = std.querysort(req.url);
>>
>> @@ -208,6 +207,17 @@ Example
>>
>>         This will cache the req.body if its size is smaller than 1KB.
>>
>> +$Function BOOL substr(STRING, STRING)
>> +
>> +Description
>> + Returns true if the second string is a substring of the first
>> + string. Note that the comparison is case sensitive. You can
>> + use the tolower function on both strings if you want case
>> + insensitivity.
>> +Example
>> + if (std.substr(req.url, req.http.x-restrict))
>> +
>> +
>>
>>  SEE ALSO
>>  ========
>> diff --git a/lib/libvmod_std/vmod_std.c b/lib/libvmod_std/vmod_std.c
>> index 8872a1c..8a89bb8 100644
>> --- a/lib/libvmod_std/vmod_std.c
>> +++ b/lib/libvmod_std/vmod_std.c
>> @@ -239,3 +239,17 @@ vmod_cache_req_body(const struct vrt_ctx *ctx,
>> VCL_BYTES size)
>>   result = VRT_CacheReqBody(ctx, size);
>>   VSLb(ctx->vsl, SLT_Debug,"VRT_CacheReqBody(%zu): %d", (size_t)size,
>> result);
>>  }
>> +
>> +VCL_BOOL __match_proto__(td_std_substr)
>> +vmod_substr(const struct vrt_ctx *ctx, VCL_STRING mstr, VCL_STRING
>> msubstr)
>> +{
>> +
>> +        CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
>> +        char *match =  strstr(mstr, msubstr);
>> +
>> + if (match)
>> +  return(1);
>> + else
>> +  return(0);
>> +}
>> +
>> --
>> 1.9.3 (Apple Git-50)+GitX
>>
>> --
>> *Per Buer*
>> CTO | Varnish Software AS
>> Cell: +47 95839117
>> We Make Websites Fly!
>> www.varnish-software.com
>> [image: Register now]
>> <http://info.varnish-software.com/varnish-summits-autumn-2014-registration>
>>
>> _______________________________________________
>> varnish-dev mailing list
>> varnish-dev at varnish-cache.org
>> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev
>>
>
>
> _______________________________________________
> varnish-dev mailing list
> varnish-dev at varnish-cache.org
> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-dev/attachments/20140920/609daf69/attachment.html>


More information about the varnish-dev mailing list