]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Restrict cross-test jinja2 includes to _common/ 11805/head
authorNicki Křížek <nicki@isc.org>
Wed, 20 May 2026 14:34:02 +0000 (14:34 +0000)
committerNicki Křížek <nicki@isc.org>
Wed, 27 May 2026 14:25:44 +0000 (16:25 +0200)
The previous loader was a FileSystemLoader rooted at $srcdir, which
allowed any system test to include any other test's templates -- a
wider scope than intended. Every existing cross-test include already
targets _common/, so make that the only path.

ChoiceLoader + PrefixLoader keeps the existing '_common/foo.j2' path
convention working without changes to call sites. The '_common/'
prefix is deliberately kept rather than dropping it by rooting the
FileSystemLoader at _common/ directly:

  - It signals at the include site that the file is a shared
    template, not a sibling of the current test; readers don't need
    to know the loader configuration to understand where the file
    lives.
  - It prevents shadowing: a test-local 'controls.conf.j2' would
    not collide with the shared one, and the unqualified name keeps
    its test-local meaning.
  - It makes the dependency greppable: 'grep -rl _common/'
    identifies every test that consumes shared snippets.

Assisted-by: Claude:claude-opus-4-7
bin/tests/system/isctest/template.py

index 6c6b628b946f1d4cf96fffb989dfcde52501a68f..83e6ce8691c2d6471c14ae38a7a3b2a2a9ab9279 100644 (file)
@@ -40,10 +40,16 @@ class TemplateEngine:
         self.directory = Path(directory)
         self.env_vars = dict(env_vars)
         self.j2env = jinja2.Environment(
-            loader=jinja2.FileSystemLoader(
+            loader=jinja2.ChoiceLoader(
                 [
-                    str(self.directory),
-                    str(ALL["srcdir"]),  # to allow _common/ includes
+                    jinja2.FileSystemLoader(self.directory),
+                    jinja2.PrefixLoader(
+                        {
+                            "_common": jinja2.FileSystemLoader(
+                                Path(ALL["srcdir"]) / "_common"
+                            ),
+                        }
+                    ),
                 ]
             ),
             undefined=jinja2.StrictUndefined,