From 28e852f4e06303d313ac06b0b0c9d5e4dd3b13a0 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Tue, 12 Feb 2019 08:28:21 +0100 Subject: [PATCH] luci-base: dispatcher: support raw values in attr() and ifattr() Extend the attr() and ifattr() template functions to take an optional further parameter indicating that the passed value should not be escaped. This is needed for cases where the input already is escaped through other means, e.g. when the value was previously filtered through the striptags() template helper. Signed-off-by: Jo-Philipp Wich (cherry picked from commit 4141243762aafb7960d67f871c97907307005f87) --- modules/luci-base/luasrc/dispatcher.lua | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua index 6cf2712eb..80b715906 100644 --- a/modules/luci-base/luasrc/dispatcher.lua +++ b/modules/luci-base/luasrc/dispatcher.lua @@ -315,7 +315,7 @@ function dispatch(request) assert(media, "No valid theme found") end - local function _ifattr(cond, key, val) + local function _ifattr(cond, key, val, noescape) if cond then local env = getfenv(3) local scope = (type(env.self) == "table") and env.self @@ -326,13 +326,16 @@ function dispatch(request) val = util.serialize_json(val) end end - return string.format( - ' %s="%s"', tostring(key), - util.pcdata(tostring( val - or (type(env[key]) ~= "function" and env[key]) - or (scope and type(scope[key]) ~= "function" and scope[key]) - or "" )) - ) + + val = tostring(val or + (type(env[key]) ~= "function" and env[key]) or + (scope and type(scope[key]) ~= "function" and scope[key]) or "") + + if noescape ~= true then + val = util.pcdata(val) + end + + return string.format(' %s="%s"', tostring(key), val) else return '' end -- 2.25.1