[Varnish] #1557: regsuball() doesn't honor lookahead assertion on repeated strings

Varnish varnish-bugs at varnish-cache.org
Thu Jul 24 16:43:53 CEST 2014

#1557: regsuball() doesn't honor lookahead assertion on repeated strings
 Reporter:  varnish@…                 |       Type:  defect
   Status:  new                       |   Priority:  normal
Milestone:                            |  Component:  varnishd
  Version:  trunk                     |   Severity:  normal
 Keywords:  lookahead pcre regsuball  |
 Hi Varnish-Team,

 the function regsuball doesn't honor lookahead assertion in a regular
 expression correctly, if a regex matches against sequenced or repeated

 If you strip some query strings and match for different query strings in
 one regex and the query strings are sequenced one after another, not all
 strings matches:

 sub vcl_backend_response {
     set bereq.url = "/?id=23&name=foo&age=42";
     set beresp.http.foo = regsuball(bereq.url,
 "(?<=[&\?])(id|name|age)=[^&]+(?:&|$)", "");

 The expected result should be:
 EXPECT resp.http.foo == "/?"

 Result is:

 resp.http.foo /?name=foo&

 This error occures in bin/varnishd/cache/cache_vrt_re.c, in function
 VRT_regsub. The matched substring is some kind of cutted off instead of
 setting the offset for the ongoing pcre_exec runs. So the pcre engine
 could never test for lookahead assertion, since the former string isn't
 there anymore. This results in a misbehavior and a not correctly executed

 Best regards,


Ticket URL: <https://www.varnish-cache.org/trac/ticket/1557>
Varnish <https://varnish-cache.org/>
The Varnish HTTP Accelerator

More information about the varnish-bugs mailing list