From: Martin Krizek Date: Thu, 28 Jan 2021 09:08:50 +0000 (+0100) Subject: native_concat: pass only strings to literal_eval X-Git-Tag: 3.0.0rc1~51^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd8bad37d1c0e2d8995a44fd88e234f5340afec5;p=thirdparty%2Fjinja.git native_concat: pass only strings to literal_eval If there is only single node and it is not a string, there is no point in passing it into ``literal_eval``, just return it immediately. One of the examples where passing a non-string node into ``literal_eval`` would actually cause problems is when the node is ``Undefined``. On Python 3.10 this would cause ``UndefinedError`` instead of just ``Undefined`` being returned. Fixes #1335 --- diff --git a/CHANGES.rst b/CHANGES.rst index 6f4649fd..43e4ad6a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -16,6 +16,9 @@ Unreleased - Add ability to ignore ``trim_blocks`` using ``+%}``. :issue:`1036` - Fix a bug that caused custom async-only filters to fail with constant input. :issue:`1279` +- Fix UndefinedError incorrectly being thrown on an undefined variable + instead of ``Undefined`` being returned on + ``NativeEnvironment`` on Python 3.10. :issue:`1335` Version 2.11.2 diff --git a/src/jinja2/nativetypes.py b/src/jinja2/nativetypes.py index c71e0336..3ac70cf7 100644 --- a/src/jinja2/nativetypes.py +++ b/src/jinja2/nativetypes.py @@ -26,6 +26,8 @@ def native_concat(nodes): if len(head) == 1: raw = head[0] + if not isinstance(raw, str): + return raw else: raw = "".join([str(v) for v in chain(head, nodes)])