Is there a concise list of what causes taint, how to prevent it and most importantly, how to find out what caused it?
Reason I'm asking is that I have never had taint issues with my UI before (pre-4.0.1 and in the Cata Beta), but when trying to place a raid-marker I suddenly get the issue:
What strikes me as odd is:
"AddOn EthenaUI attempted to call a forbidden function (PlaceRaidMarker())"
Where this is completely unchanged, standard Blizzard UI and I just clicked "Place Blue Marker". :confused:
-- adds my own layout to the default bags
local function bags_Override(frame, size, id)
-- get the relevant data
bag = frame
bagName = bag:GetName()
-- hide default textures
toHide = {
[COLOR="Red"]_G[bagName.."BackgroundTop"],
_G[bagName.."BackgroundMiddle1"],
_G[bagName.."BackgroundMiddle2"],
_G[bagName.."BackgroundBottom"],
_G[bagName.."Background1Slot"],[/COLOR]
}
for k, v in pairs(toHide) do
v:SetTexture(0,0,0,0)
[COLOR="Red"]v.SetTexture = dummyfunc[/COLOR]
end
-- create own background
if not bag.Ethbg then
bag:SetBackdrop(config.backdrop)
bag.Ethbg = bag:CreateTexture(nil, "PARENT")
bag.Ethbg:SetTexture(1,1,1,1)
bag.Ethbg:ClearAllPoints()
bag.Ethbg:SetPoint("TOPLEFT", bag, "TOPLEFT", 2, -2);
bag.Ethbg:SetPoint("BOTTOMRIGHT", bag, "BOTTOMRIGHT", -2, 2);
bag.Ethbg:SetVertexColor(unpack(config.background))
bag.Ethbg:SetBlendMode("BLEND")
bag:SetBackdropBorderColor(unpack(config.border))
end
-- apply own texture to the background of the itemslots
local numSlots = GetContainerNumSlots(i)
for j=1, size do
local itemSlot = _G[bagName.."Item"..j.."NormalTexture"]
itemSlot:SetTexture(config.itemslot)
itemSlot:SetVertexColor(unpack(config.itemslot_background))
itemSlot:SetPoint("TOPLEFT", -1, 1)
itemSlot:SetPoint("BOTTOMRIGHT", 1, -1)
[COLOR="#ff0000"]itemSlot.SetTexture = dummyfunc[/COLOR]
-- shift count to a visible spot
local stock = _G[bagName.."Item"..j.."Count"]
stock:SetPoint("BOTTOMRIGHT", -5, 5)
[color="#ff0000"]stock.SetPoint = dummyfunc[/COLOR]
end
end
-- somewhere down the line
hooksecurefunc("ContainerFrame_GenerateFrame", bags_Override)
dummyfunc is just "function() end"
but removing those (or disabling this whole function) didn't change a thing, whereas this is about the only thing I added.
Since I can't flag where taint occurs, I'm going to scour over all code, but it would be good to know everything that can possibly cause taint.
Cheers for the help, boiled down to something I overlooked...
Ok, here is the tainting reported:
10/20 13:27:59.665 Execution tainted by !Swatter while reading Swatter - Interface\AddOns\!Swatter\Swatter.lua:296 GetAddOns()
10/20 13:27:59.665 Interface\AddOns\!Swatter\Swatter.lua:145 OnError()
10/20 13:27:59.665 Interface\AddOns\!Swatter\Swatter.lua:360
10/20 13:27:59.665 PlaceRaidMarker()
10/20 13:27:59.665 Interface\AddOns\Blizzard_CompactRaidFrames\Blizzard_CompactRaidFrameManager.lua:103 func()
10/20 13:27:59.665 Interface\FrameXML\UIDropDownMenu.lua:636 UIDropDownMenuButton_OnClick()
10/20 13:27:59.665 DropDownList1Button1:OnClick()
10/20 13:27:59.665 An action was blocked because of taint from EthenaUI - PlaceRaidMarker()
10/20 13:27:59.665 Interface\AddOns\Blizzard_CompactRaidFrames\Blizzard_CompactRaidFrameManager.lua:103 func()
10/20 13:27:59.665 Interface\FrameXML\UIDropDownMenu.lua:636 UIDropDownMenuButton_OnClick()
10/20 13:27:59.665 DropDownList1Button1:OnClick()
Seems indeed it has something to do with the DropDown...
So I went looking for that:
Execution tainted by EthenaUI while reading TIMESTAMP_FORMAT_HHMM - Interface\FrameXML\InterfaceOptionsPanels.lua:1099 initFunction()
10/20 13:27:54.220 Interface\FrameXML\UIDropDownMenu.lua:69 UIDropDownMenu_Initialize()
10/20 13:27:54.220 Interface\FrameXML\InterfaceOptionsPanels.lua:1061
10/20 13:27:54.220 Execution tainted by EthenaUI while reading TIMESTAMP_FORMAT_HHMMSS - Interface\FrameXML\InterfaceOptionsPanels.lua:1100 initFunction()
10/20 13:27:54.220 Interface\FrameXML\UIDropDownMenu.lua:69 UIDropDownMenu_Initialize()
10/20 13:27:54.220 Interface\FrameXML\InterfaceOptionsPanels.lua:1061
10/20 13:27:54.220 Execution tainted by EthenaUI while reading TIMESTAMP_FORMAT_HHMM_AMPM - Interface\FrameXML\InterfaceOptionsPanels.lua:1101 initFunction()
10/20 13:27:54.220 Interface\FrameXML\UIDropDownMenu.lua:69 UIDropDownMenu_Initialize()
10/20 13:27:54.220 Interface\FrameXML\InterfaceOptionsPanels.lua:1061
10/20 13:27:54.220 Execution tainted by EthenaUI while reading TIMESTAMP_FORMAT_HHMMSS_AMPM - Interface\FrameXML\InterfaceOptionsPanels.lua:1102 initFunction()
10/20 13:27:54.220 Interface\FrameXML\UIDropDownMenu.lua:69 UIDropDownMenu_Initialize()
10/20 13:27:54.220 Interface\FrameXML\InterfaceOptionsPanels.lua:1061
10/20 13:27:54.220 Execution tainted by EthenaUI while reading TIMESTAMP_FORMAT_HHMM_24HR - Interface\FrameXML\InterfaceOptionsPanels.lua:1103 initFunction()
10/20 13:27:54.220 Interface\FrameXML\UIDropDownMenu.lua:69 UIDropDownMenu_Initialize()
10/20 13:27:54.220 Interface\FrameXML\InterfaceOptionsPanels.lua:1061
10/20 13:27:54.220 Execution tainted by EthenaUI while reading TIMESTAMP_FORMAT_HHMMSS_24HR - Interface\FrameXML\InterfaceOptionsPanels.lua:1104 initFunction()
10/20 13:27:54.220 Interface\FrameXML\UIDropDownMenu.lua:69 UIDropDownMenu_Initialize()
10/20 13:27:54.220 Interface\FrameXML\InterfaceOptionsPanels.lua:1061
[COLOR="Red"]10/20 13:27:54.220 Global variable uncheckImage tainted by EthenaUI - Interface\FrameXML\UIDropDownMenu.lua:500 UIDropDownMenu_Refresh()
10/20 13:27:54.220 Interface\FrameXML\UIDropDownMenu.lua:561 UIDropDownMenu_SetSelectedValue()
10/20 13:27:54.220 Interface\FrameXML\InterfaceOptionsPanels.lua:1062[/COLOR]
10/20 13:27:54.220 Execution tainted by EthenaUI while reading uncheckImage - Interface\FrameXML\UIDropDownMenu.lua:514 UIDropDownMenu_Refresh()
10/20 13:27:54.220 Interface\FrameXML\UIDropDownMenu.lua:561 UIDropDownMenu_SetSelectedValue()
10/20 13:27:54.220 Interface\FrameXML\InterfaceOptionsPanels.lua:1062
At the red part is where it goes wrong, as every single time after that when UIDropDwonMenu is called, this is the issue.
Funny thing, I'm totally unaware to how I'm even remotely touching this image?
But *apparently* it's the case that this image is infected through me altering the default textual values on one of the UIDropDowns (The timestamp in chat ones, directly above this occurence).
Disabling that alleviated the issue aka the raidmarkers work.
Now only to figure out how to style the timestamps to my liking without causing taint (no brackets, specific color)...
Its what i was afraid of. Its Blizzards fault.
Any addon that even looks at the DropDowns the wrong way will break them. And now, Blizzard used the freaking dropdowns to do another secure action, that will be tainted by a whole load of addons.
The issue you're seeing right there is a leaking global variable, which will be tainted once, and then carry that taint through the UI, no matter what. it should probably be in the "local" list at the beginning of that function. But they like to forget stuff like this.. This would probably not fix the issue, however. Its just one of the problems.
In any case, if you can prevent the taint somehow, all good. If you cannot, well, don't worry about it. The freaking dropdown gets tainted by basically every unit frame around there, and all other addons that try to do anything with the Dropdowns. Which is a real shame.
Someone write a new Dropdown System and send it to Blizzard for them to include.
I used to check and report (via Cairenn) a lot of issues related to tainting and missing local declaration. I've been unable to do so for wow4. It's probably not too late for fixes to be inserted in 4.0.3, though.
I reported this bug after each beta build, but they still didn't fix it, and I was forced to implement my own dropdown :(. Also, InterfaceOptions is buggy too, if you call InterfaceOptions_AddCategory(panel), and then open interface options, uncheckImage will become tainted.
I think we may have compounded the issue a little by discouraging custom dropdown solutions and encouraging the use of Blizz's. It's not a real problem because the issue shouldn't exist, it's just a minor point of irony perhaps.
Sadly the focus issue shows that these kinds of problems have a very long (infinite?) shelf-life.
There are only a select few occurences of this "uncheck"
The following seems not to have any impact:
function UIDropDownMenu_ClearAll(frame)
-- Previous code refreshed the menu quite often and was a performance bottleneck
frame.selectedID = nil;
frame.selectedName = nil;
frame.selectedValue = nil;
UIDropDownMenu_SetText(frame, "");
local button, checkImage;
for i=1, UIDROPDOWNMENU_MAXBUTTONS do
button = _G["DropDownList"..UIDROPDOWNMENU_MENU_LEVEL.."Button"..i];
button:UnlockHighlight();
checkImage = _G["DropDownList"..UIDROPDOWNMENU_MENU_LEVEL.."Button"..i.."Check"];
checkImage:Hide();
[COLOR="Red"]uncheckImage = _G["DropDownList"..UIDROPDOWNMENU_MENU_LEVEL.."Button"..i.."UnCheck"];[/COLOR]
uncheckImage:Hide();
end
end
However, this seems to be the culprit (lines 497 and onwards)
--function UIDropDownMenu_Refresh(frame, useValue, dropdownLevel)
--[...]
if not button.notCheckable and button:IsShown() then
-- If checked show check image
checkImage = _G["DropDownList"..dropdownLevel.."Button"..i.."Check"];
[COLOR="#ff0000"]uncheckImage = _G["DropDownList"..dropdownLevel.."Button"..i.."UnCheck"];[/COLOR]
if ( checked ) then
somethingChecked = true;
if ( useValue ) then
UIDropDownMenu_SetText(frame, button.value);
else
UIDropDownMenu_SetText(frame, button:GetText());
end
button:LockHighlight();
checkImage:Show();
uncheckImage:Hide();
else
button:UnlockHighlight();
checkImage:Hide();
uncheckImage:Show();
end
end
This is called by (as can be seen from the stack provided in the first post)
-- line 556
function UIDropDownMenu_SetSelectedValue(frame, value, useValue)
-- useValue will set the value as the text, not the name
frame.selectedName = nil;
frame.selectedID = nil;
frame.selectedValue = value;
UIDropDownMenu_Refresh(frame, useValue);
end
So what makes that different then? What causes this taint to bubble up?
- We know it only happens at buttons that are 1) firstlevel 2) have a function 3) are not checkable (aka "not button.notCheckable) and 3) visible, at least, as far as I know ofcourse :D
- The taint is in my case caused by assigning a non-default value, causing a refresh of the dropdownmenu.
The only relevant difference between the routine "refresh" and the creation of the DropDown is the usage of the initialize function, which - handy dandy - contains:
-- line 64
securecall("UIDropDownMenu_InitializeHelper", frame);
which refers to line 35:
function UIDropDownMenu_InitializeHelper (frame)
-- This deals with the potentially tainted stuff!
if ( frame ~= UIDROPDOWNMENU_OPEN_MENU ) then
UIDROPDOWNMENU_MENU_LEVEL = 1;
end
Do note that in the initialization process the UIDROPDOWNMENU_MENU_LEVEL is used, whereas in the refreshing process a supplied value is used.
Geez...
So apparently, by causing taint in an addon, this is allowed to bubble up to the execution path due to the fact that an initialization of a DropDownMenu is secured against taint, however a refresh of that same menu is not, leading to a tainted global variable "uncheck" by using
-> user-variables, thus tainting the functionality, and when referring to a global variable, which through the lua and the XML-template is referencing to one image, tainting that image, locking out secure function calls?
Did I make any sense here or am I just jibbering about as usual?
FrameXML/BNet.lua:333 missing local declaration for "givenName" in BNet_InitiateReport
FrameXML/BNet.lua:333 missing local declaration for "surname" in BNet_InitiateReport
FrameXML/BuffFrame.lua:300 missing local declaration for "index" in BuffFrame_UpdateAllBuffAnchors
FrameXML/ChatFrame.lua:1863 missing local declaration for "name" in *function:1853-1880*
FrameXML/ChatFrame.lua:1863 missing local declaration for "rank" in *function:1853-1880*
FrameXML/ContainerFrame.lua:680 GLOBAL "_" is set in ContainerFrame_GetExtendedPriceString
FrameXML/FriendsFrame.lua:647 GLOBAL "days" is set in PendingList_Scroll
FrameXML/FriendsFrame.lua:647 missing local declaration for "timeSent" in PendingList_Scroll
FrameXML/FriendsFrame.lua:647 missing local declaration for "givenName" in PendingList_Scroll
FrameXML/FriendsFrame.lua:647 missing local declaration for "inviteID" in PendingList_Scroll
FrameXML/FriendsFrame.lua:1274 missing local declaration for "button" in FriendsFrame_UpdateFriends
FrameXML/FriendsFrame.lua:1275 missing local declaration for "index" in FriendsFrame_UpdateFriends
FrameXML/LootFrame.lua:112 missing local declaration for "questTexture" in LootFrame_UpdateButton
FrameXML/MailFrame.lua:92 GLOBAL "itemSubType" is set in MailFrame_OnEvent
FrameXML/MailFrame.lua:92 GLOBAL "itemType" is set in MailFrame_OnEvent
FrameXML/MailFrame.lua:92 missing local declaration for "itemTexture" in MailFrame_OnEvent
FrameXML/MailFrame.lua:92 missing local declaration for "itemName" in MailFrame_OnEvent
FrameXML/MailFrame.lua:92 GLOBAL "itemEquipLoc" is set in MailFrame_OnEvent
FrameXML/MailFrame.lua:92 GLOBAL "itemStackCount" is set in MailFrame_OnEvent
FrameXML/MailFrame.lua:92 GLOBAL "itemMinLevel" is set in MailFrame_OnEvent
FrameXML/MailFrame.lua:92 GLOBAL "itemLevel" is set in MailFrame_OnEvent
FrameXML/MailFrame.lua:92 missing local declaration for "itemRarity" in MailFrame_OnEvent
FrameXML/MerchantFrame.lua:467 missing local declaration for "currencyName" in MerchantFrame_ConfirmExtendedItemCost
FrameXML/MovieFrame.lua:18 GLOBAL "volume" is set in MovieFrame_PlayMovie
FrameXML/PaperDollFrame.lua:504 GLOBAL "_" is set in PaperDollFrame_SetLevel
FrameXML/PaperDollFrame.lua:3513 GLOBAL "_" is set in RecalculateGearManagerDialogPopup
FrameXML/PaperDollFrame.lua:3597 GLOBAL "_" is set in GearManagerDialogPopup_Update
FrameXML/PVPFrame.lua:309 GLOBAL "_" is set in PVPFrame_UpdateCurrency
FrameXML/PVPFrame.lua:387 GLOBAL "_" is set in PVPFrame_TabClicked
FrameXML/PVPFrame.lua:475 GLOBAL "_" is set in PVPHonor_UpdateBattlegrounds
FrameXML/PVPFrame.lua:807 GLOBAL "_" is set in PVPConquestFrame_Update
FrameXML/PVPFrame.lua:807 missing local declaration for "ratedArenaReward" in PVPConquestFrame_Update
FrameXML/PVPFrame.lua:1000 missing local declaration for "played" in PVPTeamManagementFrame_UpdateTeamInfo
FrameXML/PVPFrame.lua:1001 missing local declaration for "wins" in PVPTeamManagementFrame_UpdateTeamInfo
FrameXML/PVPFrame.lua:1012 missing local declaration for "loss" in PVPTeamManagementFrame_UpdateTeamInfo
FrameXML/PVPFrame.lua:1046 missing local declaration for "button" in PVPTeamManagementFrame_UpdateTeamInfo
FrameXML/PVPFrame.lua:1069 missing local declaration for "seasonLoss" in PVPTeamManagementFrame_UpdateTeamInfo
FrameXML/PVPFrame.lua:1087 missing local declaration for "winLossText" in PVPTeamManagementFrame_UpdateTeamInfo
FrameXML/PVPFrame.lua:1186 GLOBAL "_" is set in PVPTeamManagementFrame_UpdateTeams
FrameXML/QuestInfo.lua:61 missing local declaration for "bottomShownFrame" in QuestInfo_Display
FrameXML/QuestInfo.lua:198 GLOBAL "_" is set in QuestInfo_DoReputations
FrameXML/QuestInfo.lua:198 missing local declaration for "hasRep" in QuestInfo_DoReputations
FrameXML/QuestInfo.lua:287 GLOBAL "_" is set in QuestInfo_ShowObjectivesText
FrameXML/SpellBookFrame.lua:1012 missing local declaration for "offset" in SpellBookCompanionButton_OnClick
FrameXML/StaticPopup.lua:3142 missing local declaration for "moneyInputFrame" in StaticPopup_Show
FrameXML/UIDropDownMenu.lua:500 missing local declaration for "uncheckImage" in UIDropDownMenu_Refresh
FrameXML/UIDropDownMenu.lua:937 missing local declaration for "uncheckImage" in UIDropDownMenu_ClearAll
FrameXML/UIParent.lua:3667 missing local declaration for "xCoord" in SetGuildTabardTextures
FrameXML/UIParent.lua:3668 missing local declaration for "yCoord" in SetGuildTabardTextures
FrameXML/WatchFrame.lua:893 missing local declaration for "objectiveType" in WatchFrame_DisplayTrackedQuests
FrameXML/WorldMapFrame.lua:2008 missing local declaration for "questFrame" in WorldMapQuestFrame_UpdateMouseOver
FrameXML/WorldMapFrame.lua:2062 GLOBAL "_" is set in WorldMapQuestPOI_SetTooltip
FrameXML/WorldStateFrame.lua:843 GLOBAL "_" is set in WorldStateScoreFrame_Update
AddOns/Blizzard_ArchaeologyUI/Blizzard_ArchaeologyUI.lua:329 GLOBAL "firstComletionTime" is set in ArchaeologyFrame_UpdateComplete
AddOns/Blizzard_ArchaeologyUI/Blizzard_ArchaeologyUI.lua:329 missing local declaration for "description" in ArchaeologyFrame_UpdateComplete
AddOns/Blizzard_ArchaeologyUI/Blizzard_ArchaeologyUI.lua:329 GLOBAL "_" is set in ArchaeologyFrame_UpdateComplete
AddOns/Blizzard_ArchaeologyUI/Blizzard_ArchaeologyUI.lua:329 missing local declaration for "spellDescription" in ArchaeologyFrame_UpdateComplete
AddOns/Blizzard_GuildUI/Blizzard_GuildUI.lua:163 GLOBAL "_" is set in GuildFrame_LinkItem
AddOns/Blizzard_InspectUI/InspectPaperDollFrame.lua:32 GLOBAL "_" is set in InspectPaperDollFrame_SetLevel
AddOns/Blizzard_TalentUI/Blizzard_TalentUI.lua:1454 missing local declaration for "tab" in PlayerTalentFrame_UpdateTabs
AddOns/Blizzard_TokenUI/Blizzard_TokenUI.lua:177 missing local declaration for "itemID" in BackpackTokenFrame_Update
AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillUI.lua:171 missing local declaration for "numSkillUps" in TradeSkillFrame_Update
AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillUI.lua:181 missing local declaration for "skillButtonNumSkillUps" in TradeSkillFrame_Update
AddOns/Blizzard_TradeSkillUI/Blizzard_TradeSkillUI.lua:182 missing local declaration for "skillButtonNumSkillUpsIcon" in TradeSkillFrame_Update
AddOns/Blizzard_TrainerUI/Blizzard_TrainerUI.lua:191 missing local declaration for "hasReq" in ClassTrainerFrame_SetServiceButton
The dropdown system is inherently broken with tainting issues, the leaking global isnt the cause of all that. I cba to figure out the details, maybe someone still has it soemwhere.
Rollback Post to RevisionRollBack
To post a comment, please login or register a new account.
Reason I'm asking is that I have never had taint issues with my UI before (pre-4.0.1 and in the Cata Beta), but when trying to place a raid-marker I suddenly get the issue:
What strikes me as odd is:
"AddOn EthenaUI attempted to call a forbidden function (PlaceRaidMarker())"
Where this is completely unchanged, standard Blizzard UI and I just clicked "Place Blue Marker". :confused:
I've never had this issue before.
After reading up a bit http://www.wowwiki.com/Secure_Execution_and_Tainting , I suspect the error lies in:
dummyfunc is just "function() end"
but removing those (or disabling this whole function) didn't change a thing, whereas this is about the only thing I added.
Since I can't flag where taint occurs, I'm going to scour over all code, but it would be good to know everything that can possibly cause taint.
Thanks in advance.
If you can reproduce it reliably, turn on taint logging (/console taintLog 1 (or 2 for more details)). Maybe something pops out..
I do fear that its the old problem with tainting any and all secure functions that are executed through any DropDown, like the Set Focus issue <.<
Ok, here is the tainting reported:
Seems indeed it has something to do with the DropDown...
So I went looking for that:
At the red part is where it goes wrong, as every single time after that when UIDropDwonMenu is called, this is the issue.
Funny thing, I'm totally unaware to how I'm even remotely touching this image?
But *apparently* it's the case that this image is infected through me altering the default textual values on one of the UIDropDowns (The timestamp in chat ones, directly above this occurence).
Disabling that alleviated the issue aka the raidmarkers work.
Now only to figure out how to style the timestamps to my liking without causing taint (no brackets, specific color)...
Any addon that even looks at the DropDowns the wrong way will break them. And now, Blizzard used the freaking dropdowns to do another secure action, that will be tainted by a whole load of addons.
The issue you're seeing right there is a leaking global variable, which will be tainted once, and then carry that taint through the UI, no matter what. it should probably be in the "local" list at the beginning of that function. But they like to forget stuff like this.. This would probably not fix the issue, however. Its just one of the problems.
In any case, if you can prevent the taint somehow, all good. If you cannot, well, don't worry about it. The freaking dropdown gets tainted by basically every unit frame around there, and all other addons that try to do anything with the Dropdowns. Which is a real shame.
Someone write a new Dropdown System and send it to Blizzard for them to include.
Sadly the focus issue shows that these kinds of problems have a very long (infinite?) shelf-life.
Hmms, trying to figure this out....
Using: http://github.com/tekkub/wow-ui-source/blob/live/FrameXML/UIDropDownMenu.lua
There are only a select few occurences of this "uncheck"
The following seems not to have any impact:
However, this seems to be the culprit (lines 497 and onwards)
This is called by (as can be seen from the stack provided in the first post)
So what makes that different then? What causes this taint to bubble up?
- We know it only happens at buttons that are 1) firstlevel 2) have a function 3) are not checkable (aka "not button.notCheckable) and 3) visible, at least, as far as I know ofcourse :D
- The taint is in my case caused by assigning a non-default value, causing a refresh of the dropdownmenu.
The only relevant difference between the routine "refresh" and the creation of the DropDown is the usage of the initialize function, which - handy dandy - contains:
which refers to line 35:
Do note that in the initialization process the UIDROPDOWNMENU_MENU_LEVEL is used, whereas in the refreshing process a supplied value is used.
Geez...
So apparently, by causing taint in an addon, this is allowed to bubble up to the execution path due to the fact that an initialization of a DropDownMenu is secured against taint, however a refresh of that same menu is not, leading to a tainted global variable "uncheck" by using
-> user-variables, thus tainting the functionality, and when referring to a global variable, which through the lua and the XML-template is referencing to one image, tainting that image, locking out secure function calls?
Did I make any sense here or am I just jibbering about as usual?