Varnish module (VMOD) to access the Google RE2 regular expression engine
  • VCL 77.1%
  • C 16%
  • C++ 5.2%
  • Makefile 0.9%
  • M4 0.7%
2026-03-30 16:52:57 +02:00
src Vinylize 2026-03-30 15:49:39 +02:00
.clang-tidy CI: Introduce clang-tidy 2025-09-02 16:44:17 +02:00
.dir-locals.el initial commit, passes a simple test for an initial verson of .match() 2016-03-13 13:01:41 +01:00
.gitignore Handle src/vmod_vcs_version.txt 2025-05-12 11:28:43 +02:00
.gitlab-ci.yml CI: Use debian for coverage 2026-03-30 16:52:57 +02:00
bootstrap Vinylize 2026-03-30 15:49:39 +02:00
CHANGES.md Add a change log. 2021-04-22 13:37:18 +02:00
configure.ac Vinylize 2026-03-30 15:49:39 +02:00
CONTRIBUTING.rst Vinylize 2026-03-30 15:49:39 +02:00
INSTALL.rst Vinylize 2026-03-30 15:49:39 +02:00
LICENSE Standardize LICENSE 2022-12-01 16:24:17 +01:00
Makefile.am Vinylize 2026-03-30 15:49:39 +02:00
README.md Vinylize 2026-03-30 15:49:39 +02:00

vmod_re2

Vinyl Module for access to the Google RE2 regular expression engine

DESCRIPTION

Vinyl Module (VMOD) for access to the Google RE2 regular expression engine.

Vinyl VCL uses the PCRE library (Perl Compatible Regular Expressions) for its native regular expressions, which runs very efficiently for many common uses of pattern matching in VCL, as attested by years of successful use of PCRE with Vinyl.

But for certain kinds of patterns, the worst-case running time of the PCRE matcher is exponential in the length of the string to be matched. The matcher uses backtracking, implemented with recursive calls to the internal match() function. In principle there is no upper bound to the possible depth of backtracking and recursion, except as imposed by the vinyld runtime parameters pcre_match_limit and pcre_match_limit_recursion; matches fail if either of these limits are met. Stack overflow caused by deep backtracking has occasionally been the subject of vinyld issues.

RE2 differs from PCRE in that it limits the syntax of patterns so that they always specify a regular language in the formally strict sense. Most notably, backreferences within a pattern are not permitted, for example (foo|bar)\1 to match foofoo and barbar, but not foobar or barfoo. See the link in SEE ALSO for the specification of RE2 syntax.

This means that an RE2 matcher runs as a finite automaton, which guarantees linear running time in the length of the matched string. There is no backtracking, and hence no risk of deep recursion or stack overflow.

The relative advantages and disadvantages of RE2 and PCRE is a broad subject, beyond the scope of this manual. See the references in SEE ALSO for more in-depth discussion.

INSTALLATION

See INSTALL.rst in the source repository.

VARNISH-CACHE

As of 2026-03-16 and version 9.0 Varnish-Cache has been rebranded as Vinyl Cache, this repository contains a 8.0 branch which works with Varnish-Cache 8.0.

AUTHOR

UPLEX Nils Goroll Systemoptimierung

SEE ALSO

Copyright (c) 2016-2018 UPLEX Nils Goroll Systemoptimierung
All rights reserved

Author: Geoffrey Simmons <geoffrey.simmons@uplex.de>

See LICENSE