diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2009-01-25 12:29:37 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2009-01-25 12:29:37 +0000 |
commit | e226a77b2470b7c7c95f9a1bb764fbdc02c06f84 (patch) | |
tree | d5704c24ae3d73f8c4af3150ada2a4430758a368 /libs/core | |
parent | 918e1f8658a34a52a7f97512d15ad234913d89b5 (diff) |
libs/core: rework luci.util.pcdata() to also escape ascii control chars
Diffstat (limited to 'libs/core')
-rw-r--r-- | libs/core/luasrc/util.lua | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/libs/core/luasrc/util.lua b/libs/core/luasrc/util.lua index 10606e825..03eb2f128 100644 --- a/libs/core/luasrc/util.lua +++ b/libs/core/luasrc/util.lua @@ -193,16 +193,24 @@ end --- Create valid XML PCDATA from given string. -- @param value String value containing the data to escape -- @return String value containing the escaped data -local _pcdata_repl = { - ["&"] = "&", - ['"'] = """, - ["'"] = "'", - ["<"] = "<", - [">"] = ">" -} +local function _pcdata_repl(c) + local i = string.byte(c) + + if ( i >= 0x00 and i <= 0x08 ) or + ( i >= 0x0B and i <= 0x0C ) or + ( i >= 0x0E and i <= 0x0F ) or + ( i >= 0x26 and i <= 0x27 ) or + ( i == 0x7F ) or ( i == 0x22 ) or + ( i == 0x3C ) or ( i == 0x3E ) + then + return string.format("&#%i;", i) + end + + return c +end function pcdata(value) - return value and tostring(value):gsub("[&\"'<>]", _pcdata_repl) + return value and tostring(value):gsub("[&\"'<>%c]", _pcdata_repl) end --- Strip HTML tags from given string. |