From 86beb55a9041a92d0ab2f28ea7fe042997b8059f Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Fri, 10 Feb 2017 09:34:35 -0600 Subject: [PATCH] Also clean template data even if marked unsafe Fixes #20568 --- lib/ansible/template/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py index 1aef060505..ab9bc466ee 100644 --- a/lib/ansible/template/__init__.py +++ b/lib/ansible/template/__init__.py @@ -281,7 +281,7 @@ class Templar: def _clean_data(self, orig_data): ''' remove jinja2 template tags from a string ''' - if not isinstance(orig_data, string_types) or hasattr(orig_data, '__ENCRYPTED__') or hasattr(orig_data, '__UNSAFE__'): + if not isinstance(orig_data, string_types) or hasattr(orig_data, '__ENCRYPTED__'): return orig_data with contextlib.closing(StringIO(orig_data)) as data: @@ -385,11 +385,12 @@ class Templar: overrides=overrides, disable_lookups=disable_lookups, ) + + unsafe = hasattr(result, '__UNSAFE__') if convert_data and not self._no_type_regex.match(variable): # if this looks like a dictionary or list, convert it to such using the safe_eval method if (result.startswith("{") and not result.startswith(self.environment.variable_start_string)) or \ result.startswith("[") or result in ("True", "False"): - unsafe = hasattr(result, '__UNSAFE__') eval_results = safe_eval(result, locals=self._available_variables, include_exceptions=True) if eval_results[1] is None: result = eval_results[0]