Skip to content

compile_templates is non-deterministic when using filters #1453

@atetubou

Description

@atetubou

Following code generates non-deterministic compiled output.

from jinja2 import loaders
from jinja2.environment import Environment

env = Environment(loader=loaders.DictLoader({"foo": """
{{ 1|filter1 }}
{{ 2|filter2 }}
"""}))

env.filters["filter1"]=lambda value: value
env.filters["filter2"]=lambda value: value

env.compile_templates('archive', zip=None, ignore_errors=False)
 from __future__ import generator_stop
 from jinja2.runtime import LoopContext, Macro, Markup, Namespace, TemplateNotFound, TemplateReference, TemplateRuntimeError, Undefined, concat, escape, identity, internalcode, markup_join, missing, str_join
 name = 'foo'

 def root(context, missing=missing):
     resolve = context.resolve_or_missing
     undefined = environment.undefined
     cond_expr_undefined = Undefined
     if 0: yield None
     try:
-        t_1 = environment.filters['filter1']
+        t_1 = environment.filters['filter2']
     except KeyError:
         @internalcode
         def t_1(*unused):
-            raise TemplateRuntimeError("No filter named 'filter1' found.")
+            raise TemplateRuntimeError("No filter named 'filter2' found.")
     try:
-        t_2 = environment.filters['filter2']
+        t_2 = environment.filters['filter1']
     except KeyError:
         @internalcode
         def t_2(*unused):
-            raise TemplateRuntimeError("No filter named 'filter2' found.")
+            raise TemplateRuntimeError("No filter named 'filter1' found.")
     pass
     yield '\n1\n2'

 blocks = {}
 debug_info = ''

Chromium uses jinja2 for code generator during build, and this breaks Reproducible builds when we are switching to python3.

Some more context is in https://crbug.com/1194274

Environment:

  • Python version: Python 3.9.2
  • Jinja version: 3.0.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions