diff --git a/[admin]/admin/server/admin_settings.lua b/[admin]/admin/server/admin_settings.lua index e8bc1e87e..b85abeecc 100644 --- a/[admin]/admin/server/admin_settings.lua +++ b/[admin]/admin/server/admin_settings.lua @@ -27,15 +27,18 @@ function aGetResourceSettings( resName, bCountOnly ) return {}, count end local settings = {} + -- Escape special characters inside resName + local safeResName = string.gsub(resName, '([^%w])', '%%%1') + local namePattern = '^' .. safeResName .. '%.(.*)$' -- Parse raw settings for rawname,value in pairs(rawsettings) do if allowedTypes[type(value)] then if allowedAccess[string.sub(rawname,1,1)] then count = count + 1 -- Remove leading '*','#' or '@' - local temp = string.gsub(rawname,'[%*%#%@](.*)','%1') + local temp = string.gsub(rawname, '^[%*%#%@](.*)', '%1') -- Remove leading 'resName.' - local name = string.gsub(temp,resName..'%.(.*)','%1') + local name = string.gsub(temp, namePattern, '%1') -- If name didn't have a leading 'resName.', then it must be the default setting local bIsDefault = ( temp == name ) if settings[name] == nil then diff --git a/[admin]/admin2/server/admin_ACL.lua b/[admin]/admin2/server/admin_ACL.lua index 9976f0adf..a23e479b6 100644 --- a/[admin]/admin2/server/admin_ACL.lua +++ b/[admin]/admin2/server/admin_ACL.lua @@ -122,13 +122,15 @@ function getResourceSettings(resName, bCountOnly) return {}, count end local settings = {} + local safeResName = string.gsub(resName, '([^%w])', '%%%1') + local namePattern = '^' .. safeResName .. '%.(.*)$' for rawname, value in pairs(rawsettings) do if (allowedTypes[type(value)]) then if allowedAccess[string.sub(rawname, 1, 1)] then count = count + 1 - local temp = string.gsub(rawname, "[%*%#%@](.*)", "%1") - local name = string.gsub(temp, resName .. "%.(.*)", "%1") + local temp = string.gsub(rawname, '^[%*%#%@](.*)', '%1') + local name = string.gsub(temp, namePattern, '%1') local bIsDefault = (temp == name) if (not settings[name]) then settings[name] = {}