Skip to content

Commit f7f83f9

Browse files
committed
Fix #721: handle resource names with special characters in admin settings
1 parent 9053fc9 commit f7f83f9

2 files changed

Lines changed: 9 additions & 4 deletions

File tree

[admin]/admin/server/admin_settings.lua

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,18 @@ function aGetResourceSettings( resName, bCountOnly )
2727
return {}, count
2828
end
2929
local settings = {}
30+
-- Escape special characters inside resName
31+
local safeResName = string.gsub(resName, '([^%w])', '%%%1')
32+
local namePattern = '^' .. safeResName .. '%.(.*)$'
3033
-- Parse raw settings
3134
for rawname,value in pairs(rawsettings) do
3235
if allowedTypes[type(value)] then
3336
if allowedAccess[string.sub(rawname,1,1)] then
3437
count = count + 1
3538
-- Remove leading '*','#' or '@'
36-
local temp = string.gsub(rawname,'[%*%#%@](.*)','%1')
39+
local temp = string.gsub(rawname, '^[%*%#%@](.*)', '%1')
3740
-- Remove leading 'resName.'
38-
local name = string.gsub(temp,resName..'%.(.*)','%1')
41+
local name = string.gsub(temp, namePattern, '%1')
3942
-- If name didn't have a leading 'resName.', then it must be the default setting
4043
local bIsDefault = ( temp == name )
4144
if settings[name] == nil then

[admin]/admin2/server/admin_ACL.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,15 @@ function getResourceSettings(resName, bCountOnly)
122122
return {}, count
123123
end
124124
local settings = {}
125+
local safeResName = string.gsub(resName, '([^%w])', '%%%1')
126+
local namePattern = '^' .. safeResName .. '%.(.*)$'
125127

126128
for rawname, value in pairs(rawsettings) do
127129
if (allowedTypes[type(value)]) then
128130
if allowedAccess[string.sub(rawname, 1, 1)] then
129131
count = count + 1
130-
local temp = string.gsub(rawname, "[%*%#%@](.*)", "%1")
131-
local name = string.gsub(temp, resName .. "%.(.*)", "%1")
132+
local temp = string.gsub(rawname, '^[%*%#%@](.*)', '%1')
133+
local name = string.gsub(temp, namePattern, '%1')
132134
local bIsDefault = (temp == name)
133135
if (not settings[name]) then
134136
settings[name] = {}

0 commit comments

Comments
 (0)