Commit 974dc4de authored by Ivaria's avatar Ivaria
Browse files

Strengthen custom flag validator sandbox

parent f7c81647
......@@ -13,19 +13,6 @@ VUHDO_FORCE_RESET = false;
local floor = floor;
local select = select;
local twipe = table.wipe;
local GetRaidTargetIndex = GetRaidTargetIndex;
local UnitPower = UnitPower;
local UnitPowerMax = UnitPowerMax;
local UnitIsFriend = UnitIsFriend;
local UnitIsEnemy = UnitIsEnemy;
local UnitIsDeadOrGhost = UnitIsDeadOrGhost;
local UnitIsPlayer = UnitIsPlayer;
local UnitIsTapped = UnitIsTapped;
local UnitIsTappedByPlayer = UnitIsTappedByPlayer;
local GetTexCoordsForRole = GetTexCoordsForRole;
local UnitIsPVP = UnitIsPVP;
local UnitFactionGroup = UnitFactionGroup;
local UnitHasIncomingResurrection = UnitHasIncomingResurrection;
local _;
local VUHDO_RAID = { };
......@@ -1073,6 +1060,16 @@ local function VUHDO_pvpIconValidator(anInfo, _)
end
end
--
local function VUHDO_friendValidator(anInfo, _)
return UnitIsFriend("player", anInfo["unit"]), nil, -1, -1, -1;
end
--
local function VUHDO_foeValidator(anInfo, _)
return not UnitIsFriend("player", anInfo["unit"]), nil, -1, -1, -1;
end
--
......@@ -1156,23 +1153,38 @@ local VUHDO_OVERRIDE_FUNCTIONS = { };
local VUHDO_BLOCKED_FUNCTIONS = {
-- Lua functions that may allow breaking out of the environment
getfenv = true,
setfenv = true,
loadstring = true,
pcall = true,
getfenv = true,
setfenv = true,
loadstring = true,
pcall = true,
xpcall = true,
-- blocked WoW API
SendMail = true,
SetTradeMoney = true,
AddTradeMoney = true,
PickupTradeMoney = true,
PickupPlayerMoney = true,
TradeFrame = true,
MailFrame = true,
EnumerateFrames = true,
RunScript = true,
AcceptTrade = true,
SetSendMailMoney = true,
EditMacro = true
SendMail = true,
SetTradeMoney = true,
AddTradeMoney = true,
PickupTradeMoney = true,
PickupPlayerMoney = true,
TradeFrame = true,
MailFrame = true,
EnumerateFrames = true,
RunScript = true,
AcceptTrade = true,
SetSendMailMoney = true,
EditMacro = true,
DevTools_DumpCommand = true,
hash_SlashCmdList = true,
CreateMacro = true,
SetBindingMacro = true,
GuildDisband = true,
GuildUninvite = true,
securecall = true
};
local VUHDO_BLOCKED_TABLES = {
SlashCmdList = true,
SendMailMailButton = true,
SendMailMoneyGold = true,
MailFrameTab2 = true
};
......@@ -1185,20 +1197,32 @@ end
local env_getglobal;
local exec_env = setmetatable({}, { __index =
function(t, k)
if k == "_G" then
return t
elseif k == "getglobal" then
return env_getglobal
elseif VUHDO_BLOCKED_FUNCTIONS[k] then
return VUHDO_blockedFunction
elseif VUHDO_OVERRIDE_FUNCTIONS[k] then
return VUHDO_OVERRIDE_FUNCTIONS[k]
else
return _G[k]
end
end
local exec_env = setmetatable({}, {
__index =
function(t, k)
if k == "_G" then
return t
elseif k == "getglobal" then
return env_getglobal
elseif VUHDO_BLOCKED_FUNCTIONS[k] then
VUHDO_blockedFunction()
return function() end
elseif VUHDO_BLOCKED_TABLES[k] then
VUHDO_blockedFunction()
return {}
elseif VUHDO_OVERRIDE_FUNCTIONS[k] then
return VUHDO_OVERRIDE_FUNCTIONS[k]
else
return _G[k]
end
end,
__newindex =
function(t, k, v)
VUHDO_blockedFunction()
end,
__metatable = false
});
......@@ -1893,6 +1917,18 @@ VUHDO_BOUQUET_BUFFS_SPECIAL = {
["interests"] = { VUHDO_UPDATE_MINOR_FLAGS },
},
["FRIEND"] = {
["displayName"] = VUHDO_I18N_FRIEND_STATUS,
["validator"] = VUHDO_friendValidator,
["interests"] = { },
},
["FOE"] = {
["displayName"] = VUHDO_I18N_FOE_STATUS,
["validator"] = VUHDO_foeValidator,
["interests"] = { },
},
["OVERFLOW_COUNTER"] = {
["displayName"] = VUHDO_I18N_DEF_COUNTER_OVERFLOW_ABSORB,
["validator"] = VUHDO_overflowCountValidator,
......
......@@ -243,6 +243,7 @@ VUHDO_I18N_BOUQUET_STATUS_THREAT = "Statusbar: Bedrohung %";
VUHDO_I18N_BOUQUET_NEW_ITEM_NAME = "-- (de)buff hier eingeben --";
VUHDO_I18N_DEF_BOUQUET_TANK_COOLDOWNS = "Tank-Cooldowns";
VUHDO_I18N_DEF_BOUQUET_PW_S_WEAKENED_SOUL = "Schild & Geschwächte Seele";
VUHDO_I18N_DEF_BOUQUET_MONK_STAGGER = "Mönch Staffeln";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI_AGGRO = "Rahmen: Multi + Aggro";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI = "Rahmen: Multi";
VUHDO_I18N_DEF_BOUQUET_BORDER_SIMPLE = "Rahmen: Einfach";
......@@ -362,6 +363,8 @@ VUHDO_I18N_DEF_ROLE_ICON = "Rollen-Icon";
VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH = "Leben: (auto, Ziele)";
VUHDO_I18N_TAPPED_COLOR = "Flag: Getappt";
VUHDO_I18N_ENEMY_STATE_COLOR = "Farbe: Freund/Feind";
VUHDO_I18N_FRIEND_STATUS = "Flag: Freund";
VUHDO_I18N_FOE_STATUS = "Flag: Feind";
VUHDO_I18N_BOUQUET_STATUS_ALWAYS_FULL = "Statusbar: Immer voll";
VUHDO_I18N_BOUQUET_STATUS_FULL_IF_ACTIVE = "Statusbar: voll wenn aktiv";
VUHDO_I18N_AOE_ADVICE = "Icon: Gruppenheilung";
......
......@@ -243,6 +243,7 @@ VUHDO_I18N_BOUQUET_STATUS_THREAT = "Statusbar: Threat %";
VUHDO_I18N_BOUQUET_NEW_ITEM_NAME = "-- enter (de)buff here --";
VUHDO_I18N_DEF_BOUQUET_TANK_COOLDOWNS = "Tank Cooldowns";
VUHDO_I18N_DEF_BOUQUET_PW_S_WEAKENED_SOUL = "PW:S & Weakened Soul";
VUHDO_I18N_DEF_BOUQUET_MONK_STAGGER = "Monk Stagger";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI_AGGRO = "Border: Multi + Aggro";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI = "Border: Multi";
VUHDO_I18N_DEF_BOUQUET_BORDER_SIMPLE = "Border: Simple";
......@@ -363,6 +364,8 @@ VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH = "Health (generic, target)";
VUHDO_I18N_TAPPED_COLOR = "Flag: Tapped";
VUHDO_I18N_ENEMY_STATE_COLOR = "Color: Friend/Foe";
VUHDO_I18N_FRIEND_STATUS = "Flag: Friend";
VUHDO_I18N_FOE_STATUS = "Flag: Foe";
VUHDO_I18N_BOUQUET_STATUS_ALWAYS_FULL = "Statusbar: always full";
VUHDO_I18N_BOUQUET_STATUS_FULL_IF_ACTIVE = "Statusbar: full if active";
VUHDO_I18N_AOE_ADVICE = "Icon: AOE Advice";
......
if (GetLocale() ~= "esES") then
return;
end
-- = \195\161
-- = \195\169
-- = \195\173
-- = \195\179
-- = \195\186
-- = \195\177
-- = \195\170
-- = \195\175
-- = \195\180
-- = \195\185
-- = \197\146
-- = \197\147
-- á = \195\161
-- é = \195\169
-- í = \195\173
-- ó = \195\179
-- ú = \195\186
-- ñ = \195\177
-- è = \195\170
-- ï = \195\175
-- ô = \195\180
-- ù = \195\185
-- Œ = \197\146
-- œ = \197\147
-- @EXACT = true: Translation has to be the exact(!) match in the clients language,
-- beacause it carries technical semantics
-- @EXACT = false: Translation can be done freely, because text is only descriptive
-- Class Names
-- @EXACT = false
VUHDO_I18N_WARRIORS="Guerreros"
VUHDO_I18N_ROGUES = "Pcaros";
VUHDO_I18N_ROGUES = "P\195\173caros";
VUHDO_I18N_HUNTERS = "Cazadores";
VUHDO_I18N_PALADINS = "Paladines";
VUHDO_I18N_MAGES = "Magos";
......@@ -256,6 +256,7 @@ VUHDO_I18N_BOUQUET_STATUS_THREAT = "Statusbar: Threat %";
VUHDO_I18N_BOUQUET_NEW_ITEM_NAME = "-- enter (de)buff here --";
VUHDO_I18N_DEF_BOUQUET_TANK_COOLDOWNS = "Tank Cooldowns";
VUHDO_I18N_DEF_BOUQUET_PW_S_WEAKENED_SOUL = "PW:S & Weakened Soul";
VUHDO_I18N_DEF_BOUQUET_MONK_STAGGER = "Monje Aplazar";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI_AGGRO = "Border: Multi + Aggro";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI = "Border: Multi";
VUHDO_I18N_DEF_BOUQUET_BORDER_SIMPLE = "Border: Simple";
......@@ -373,6 +374,8 @@ VUHDO_I18N_DEF_ROLE_ICON = "Role Icon";
VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH = "Health (generic, target)";
VUHDO_I18N_TAPPED_COLOR = "Flag: Tapped";
VUHDO_I18N_ENEMY_STATE_COLOR = "Color: Friend/Foe";
VUHDO_I18N_FRIEND_STATUS = "Flag: Friend";
VUHDO_I18N_FOE_STATUS = "Flag: Foe";
VUHDO_I18N_BOUQUET_STATUS_ALWAYS_FULL = "Statusbar: always full";
VUHDO_I18N_BOUQUET_STATUS_FULL_IF_ACTIVE = "Statusbar: full if active";
VUHDO_I18N_AOE_ADVICE = "Icon: AOE Advice";
......
if (GetLocale() ~= "frFR") then
return;
end
-- = \195\160
-- = \195\162
-- = \195\166
-- = \195\167
-- = \195\168
-- = \195\169
-- = \195\170
-- = \195\175
-- = \195\180
-- = \195\185
-- = \197\146
-- = \197\147
-- à = \195\160
-- â = \195\162
-- æ = \195\166
-- ç = \195\167
-- è = \195\168
-- é = \195\169
-- è = \195\170
-- ï = \195\175
-- ô = \195\180
-- ù = \195\185
-- Œ = \197\146
-- œ = \197\147
-- @EXACT = true: Translation has to be the exact(!) match in the clients language,
-- beacause it carries technical semantics
-- @EXACT = false: Translation can be done freely, because text is only descriptive
......@@ -127,7 +127,7 @@ VUHDO_I18N_BUFFC_SKIN = "Peau";
-- Mage
VUHDO_I18N_BUFFC_ARMOR_MAGE = "Armure";
-- Death Knight
VUHDO_BUFFC_PRESENCE = "Prsence";
VUHDO_BUFFC_PRESENCE = "Pr\195\169sence";
-- Warrior
VUHDO_I18N_BUFFC_SHOUT = "Cri";
-- Hunter
......@@ -256,6 +256,7 @@ VUHDO_I18N_BOUQUET_STATUS_THREAT = "Statusbar: Threat %";
VUHDO_I18N_BOUQUET_NEW_ITEM_NAME = "-- enter (de)buff here --";
VUHDO_I18N_DEF_BOUQUET_TANK_COOLDOWNS = "Tank Cooldowns";
VUHDO_I18N_DEF_BOUQUET_PW_S_WEAKENED_SOUL = "PW:S & Weakened Soul";
VUHDO_I18N_DEF_BOUQUET_MONK_STAGGER = "Report du moine";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI_AGGRO = "Border: Multi + Aggro";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI = "Border: Multi";
VUHDO_I18N_DEF_BOUQUET_BORDER_SIMPLE = "Border: Simple";
......@@ -372,6 +373,8 @@ VUHDO_I18N_DEF_ROLE_ICON = "Role Icon";
VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH = "Health (generic, target)";
VUHDO_I18N_TAPPED_COLOR = "Flag: Tapped";
VUHDO_I18N_ENEMY_STATE_COLOR = "Color: Friend/Foe";
VUHDO_I18N_FRIEND_STATUS = "Flag: Ami";
VUHDO_I18N_FOE_STATUS = "Flag: Ennemi";
VUHDO_I18N_BOUQUET_STATUS_ALWAYS_FULL = "Statusbar: always full";
VUHDO_I18N_BOUQUET_STATUS_FULL_IF_ACTIVE = "Statusbar: full if active";
VUHDO_I18N_AOE_ADVICE = "Icon: AOE Advice";
......
......@@ -246,6 +246,7 @@ VUHDO_I18N_BOUQUET_STATUS_THREAT = "상태바: 위협 %";
VUHDO_I18N_BOUQUET_NEW_ITEM_NAME = "-- 여기 (디)버프 입력 --";
VUHDO_I18N_DEF_BOUQUET_TANK_COOLDOWNS = "탱커 쿨다운";
VUHDO_I18N_DEF_BOUQUET_PW_S_WEAKENED_SOUL = "PW:S & 약화된 영혼";
VUHDO_I18N_DEF_BOUQUET_MONK_STAGGER = "수도사 시간차";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI_AGGRO = "테두리: 다중 + 어그로";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI = "테두리: 다중";
VUHDO_I18N_DEF_BOUQUET_BORDER_SIMPLE = "테두리: 단순";
......@@ -366,6 +367,8 @@ VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH = "체력 (일반, 대상)";
VUHDO_I18N_TAPPED_COLOR = "Flag: 선택";
VUHDO_I18N_ENEMY_STATE_COLOR = "색상: 우호적/적대적";
VUHDO_I18N_FRIEND_STATUS = "Flag: 우호적";
VUHDO_I18N_FOE_STATUS = "Flag: 적대적";
VUHDO_I18N_BOUQUET_STATUS_ALWAYS_FULL = "상태바: 항상 전체";
VUHDO_I18N_BOUQUET_STATUS_FULL_IF_ACTIVE = "상태바: 활성화 전체";
VUHDO_I18N_AOE_ADVICE = "Icon: AOE 주의";
......
......@@ -295,6 +295,7 @@ VUHDO_I18N_BOUQUET_NEW_ITEM_NAME = "-- введите сюда (де)баф --";
VUHDO_I18N_DEF_BOUQUET_TANK_COOLDOWNS = "Откаты танка";
VUHDO_I18N_DEF_BOUQUET_PW_S_WEAKENED_SOUL = "СС:Щ и Ослабленная душа";
VUHDO_I18N_DEF_BOUQUET_MONK_STAGGER = "Монах Пошатывание";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI_AGGRO = "Границы: Комплексная + угроза";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI = "Границы: Комплексная";
VUHDO_I18N_DEF_BOUQUET_BORDER_SIMPLE = "Границы: Простая";
......@@ -437,6 +438,8 @@ VUHDO_I18N_DEF_ROLE_ICON = "Иконка роли";
VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH = "Здоровье (общее, цель)";
VUHDO_I18N_TAPPED_COLOR = "Флаг: Присоединенный";
VUHDO_I18N_ENEMY_STATE_COLOR = "Цвет: Союзник/Враг";
VUHDO_I18N_FRIEND_STATUS = "Флаг: Союзник";
VUHDO_I18N_FOE_STATUS = "Флаг: Враг";
VUHDO_I18N_BOUQUET_STATUS_ALWAYS_FULL = "Полоса состояния: всегда полная";
VUHDO_I18N_BOUQUET_STATUS_FULL_IF_ACTIVE = "Полоса состояния: полная при активности";
VUHDO_I18N_AOE_ADVICE = "Иконка: AOE Советник";
......
......@@ -245,6 +245,7 @@ VUHDO_I18N_BOUQUET_STATUS_THREAT = "状态列: 仇恨 %";
VUHDO_I18N_BOUQUET_NEW_ITEM_NAME = "-- 在此输入增益或减益 --";
VUHDO_I18N_DEF_BOUQUET_TANK_COOLDOWNS = "坦克冷却";
VUHDO_I18N_DEF_BOUQUET_PW_S_WEAKENED_SOUL = "真言盾 & 虚弱灵魂";
VUHDO_I18N_DEF_BOUQUET_MONK_STAGGER = "Monk Stagger";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI_AGGRO = "边框: 多边 + 仇恨";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI = "边框: 多边";
VUHDO_I18N_DEF_BOUQUET_BORDER_SIMPLE = "边框: 简单";
......@@ -365,6 +366,8 @@ VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH = "血量 (通用,目标)";
VUHDO_I18N_TAPPED_COLOR = "标志: 无效目标";
VUHDO_I18N_ENEMY_STATE_COLOR = "颜色: 友方/敌方";
VUHDO_I18N_FRIEND_STATUS = "标志: 友方";
VUHDO_I18N_FOE_STATUS = "标志: 敌方";
VUHDO_I18N_BOUQUET_STATUS_ALWAYS_FULL = "状态列: 永远满的";
VUHDO_I18N_BOUQUET_STATUS_FULL_IF_ACTIVE = "状态列: 启动时满的";
VUHDO_I18N_AOE_ADVICE = "图标: 辅助建议";
......
......@@ -245,6 +245,7 @@ VUHDO_I18N_BOUQUET_STATUS_THREAT = "狀態列: 仇恨 %";
VUHDO_I18N_BOUQUET_NEW_ITEM_NAME = "-- 在此輸入增益或減益 --";
VUHDO_I18N_DEF_BOUQUET_TANK_COOLDOWNS = "坦克冷卻";
VUHDO_I18N_DEF_BOUQUET_PW_S_WEAKENED_SOUL = "真言盾 & 虛弱靈魂";
VUHDO_I18N_DEF_BOUQUET_MONK_STAGGER = "Monk Stagger";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI_AGGRO = "邊框: 多邊 + 仇恨";
VUHDO_I18N_DEF_BOUQUET_BORDER_MULTI = "邊框: 多邊";
VUHDO_I18N_DEF_BOUQUET_BORDER_SIMPLE = "邊框: 簡單";
......@@ -366,6 +367,8 @@ VUHDO_I18N_DEF_ROLE_ICON = "Role Icon";
VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH = "Health (generic, target)";
VUHDO_I18N_TAPPED_COLOR = "Flag: Tapped";
VUHDO_I18N_ENEMY_STATE_COLOR = "Color: Friend/Foe";
VUHDO_I18N_FRIEND_STATUS = "Flag: Friend";
VUHDO_I18N_FOE_STATUS = "Flag: Foe";
VUHDO_I18N_BOUQUET_STATUS_ALWAYS_FULL = "Statusbar: always full";
VUHDO_I18N_BOUQUET_STATUS_FULL_IF_ACTIVE = "Statusbar: full if active";
VUHDO_I18N_AOE_ADVICE = "Icon: AOE Advice";
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment