From 22b32638e83b0595f47d4b3cfb7cf11f6fbd5b17 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Mon, 18 Oct 2021 21:22:34 +0200 Subject: [PATCH] Fix parsing of assign() template function This fixes a regression from commit bde8cd5e65984786471851309bd9c95be1f354a5, which allowed expression lists as function arguments. However, assign() still expects simple expression as its first argument. I don't think allowing expression list there makes much sense, so let's restrict this. --- src/calibre/utils/formatter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/utils/formatter.py b/src/calibre/utils/formatter.py index 544463bf27..bfe34c7e7e 100644 --- a/src/calibre/utils/formatter.py +++ b/src/calibre/utils/formatter.py @@ -540,8 +540,8 @@ class _Parser: lambda ln, args: IfNode(ln, args[0], (args[1],), (args[2],))), 'first_non_empty': (lambda args: len(args) == 1, lambda ln, args: FirstNonEmptyNode(ln, args)), - 'assign': (lambda args: len(args) == 2 and args[0].node_type == Node.NODE_RVALUE, - lambda ln, args: AssignNode(ln, args[0].name, args[1])), + 'assign': (lambda args: len(args) == 2 and len(args[0]) == 1 and args[0][0].node_type == Node.NODE_RVALUE, + lambda ln, args: AssignNode(ln, args[0][0].name, args[1])), 'contains': (lambda args: len(args) == 4, lambda ln, args: ContainsNode(ln, args)), 'character': (lambda args: len(args) == 1,