[Varnish] #1249: Undeterministic results in regsub/regsuball

Varnish varnish-bugs at varnish-cache.org
Fri Jan 11 05:37:43 CET 2013


#1249: Undeterministic results in regsub/regsuball
---------------------+--------------------
 Reporter:  arthens  |       Type:  defect
   Status:  new      |   Priority:  normal
Milestone:           |  Component:  build
  Version:  3.0.3    |   Severity:  normal
 Keywords:           |
---------------------+--------------------
 First let me say that I'm not a varnish expert nor a C programmer, so bare
 with me if something I say is not 100% correct :) Plus given the nature of
 the bug I'm seeing it might be hard to produce a reliable test case.


 The problem:
 - some of our users get randomly asked to sign in even if they are already
 signed in
 - it seems to happen only on some specific pages, and mostly to staff
 users
 - I managed to verify that the problem happens in our Varnish cache,
 because it never happens when hitting the PHP stack directly
 - we have ~12 regexp rules to remove tracking cookie, but we couldn't find
 anything wrong with any of them (they are pretty simple regexp, I'll
 attach them to the ticket)


 Investigation:
 - I added some logging after each regsuball to verify which one was
 causing the problem
 - the logs suggested that there wasn't a single broken regexp, because
 sometimes it would drop all/most cookies on one regexp, sometimes on
 another
 - we still couldn't see anything wrong with the regexp (we tested it with
 other libraries, and we were never able to reproduce the problem)


 Second investigation (here it's where it gets interesting/weird)
 - I added another regsuball rule applying one of the regexp to a fixed
 string (hardcoded in my .vcl) and noticed that the result changed based on
 where this instruction would be. In other words
 {{{
 subregall("hardcoded string here", regexp, replacement)
 }}}
 would produce a different result based on where it was executed (!!!)


 To be more specific, if this instruction was the first regsuball in
 vcl_recv then the result would be correct, but if I moved it AFTER the 12
 regsuball filtering our cookies then it would produce a wrong result (not
 always, I suppose this bug is only triggered by a particular
 setup/cookies).

 Some other observations:
 - the problem doesn't actually seems to be related with cookies, that's
 just how we noticed it. The attached example simply use other 2 random
 headers
 - it seems like regsuball/regsub (or the underlying library) can get into
 a "broken state" that will cause subsequent calls to produce wrong results
 (but only in the same request, we never saw the bug persist across
 requests)
 - I only managed to reproduce the bug using long-ish strings
 - it doesn't seem to be related with the content of the string (aka not a
 special characters problem)

 Environment:
 - Ubuntu 12.04
 - Varnish 3.0.3

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




More information about the varnish-bugs mailing list