jinja2 3.1.6
- Source
- https://github.com/pallets/jinja
- Tag scanned
3.1.6- Compared with
3.1.5(0 signals introduced since)- Files
- 83 scanned, 21 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 0 warn · 12 info
- Scan time
- 9.3 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 10 of 10 warn and critical signals; 10 demoted to info.
- Disclude version
- 4.0.0
- Scanned (UTC)
- 2026-10-14 18:16
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
dismissed Documentation prose mentioning eval, not executable code.
Reasoning
The match is the word 'eval' in reStructuredText prose ('eval context object itself'), not a call. The AST pass flagged a non-code file, so this is a false positive.
-
r -
�ׇׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࣓-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣ৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣஂா-ூ… -
��ꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ⟨U+FE00⟩-⟨U+FE0F⟩︠-︯︳︴﹍-﹏_𐇽𐋠𐍶-𐍺𐨁-𐨃𐨅𐨆𐨌-𐨏𐨸-𐨿𐨺𐫦𐫥𐴤-𐽆𐴧-𐽐𑀀-𑀂𑀸-𑁆𑁿-𑂂𑂰-𑂺𑄀-𑄂𑄧-𑄴𑅅𑅆𑅳𑆀-𑆂𑆳-𑇀𑇉-𑇌𑈬-𑈷𑈾𑋟-𑋪𑌀-𑌃𑌻𑌼𑌾-𑍄𑍇𑍈𑍋-𑍍𑍗…likely benign A generated Unicode character-class table for Python identifier matching.Reasoning
The line is a large Unicode range table used to build the identifier regex (ID_Start/ID_Continue). Invisible tag characters appear because the table enumerates Unicode code points. The raw pass has a high false-positive rate, and this is a known data table, not a hidden payload.
-
=likely benign Loads cached compiled template bytecode from disk via marshal.Reasoning
marshal.load on a bytecode cache file is a real code-object sink, and loading untrusted cache files would be a risk. In Jinja2 it is the intended bytecode cache mechanism for compiled templates, with errors caught and the cache reset. It is a documented design choice, not obfuscation.
-
# Raise an exception at the correct line number. : =likely benign Compiles a padding stub that raises an exception at the template's line number.Reasoning
The compile call builds a string of newlines followed by a raise statement so the traceback reports the correct line number. This is a deliberate, well-known technique in Jinja's traceback rewriting, and the string is not attacker-controlled.
-
return . # type: ignorelikely benign Executes compiled template code to capture a traceback for error rewriting.Reasoning
exec runs a compiled template code object inside a try block to produce a real traceback frame for rewriting. This is the template execution path, not an unexpected dynamic execution.
-
""" return compile(source, filename, "exec") @typing.overloadlikely benign Compiles generated template source into a Python code object.Reasoning
compile is the template compiler turning generated Python source into a code object. Compiling generated code is the core function of a template engine.
-
= = =likely benign Executes compiled template code to build a Template class namespace.Reasoning
exec runs the compiled template code inside a namespace to create the template class. This is the expected execution step of a template engine.
-
=likely benign Imports a precompiled Jinja template module by name.Reasoning
The __import__ call loads a precompiled template module by name in ModuleLoader. The module name comes from the loader's configured path, which is the designed behaviour of this loader.
-
return returnlikely benign Dynamic import helper that resolves a dotted name to a module attribute.Reasoning
This is the standard import_string helper, which resolves a dotted path to an object. It is a common utility pattern, and the argument is supplied by the caller, not fetched from untrusted input.
-
return returnlikely benign Dynamic getattr-based import of a named object from a module.Reasoning
This is the second half of the same import_string helper, resolving an object from a module with getattr. It is ordinary dynamic-import logic with no sign of obfuscation.
Reproduce This Scan
Run disclude locally to verify. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.
&&