Quantcast FrameLocks.lua and target taint - WoWInterface
 
Thread Tools Display Modes
09-27-12, 12:06 PM   #1
Grimsin
A Molten Giant
 
Grimsin's Avatar
AddOn Author - Click to view addons
Join Date: Sep 2006
Posts: 990
FrameLocks.lua and target taint

So i have a taint issue. After going into a pet battle my target frame becomes tainted and any time i change targets in combat after a petbattle it fires taint errors. The problem is with the new FrameLocks.lua

my code hides and locks out the original bliz targetframe. This new framelocks.lua does this...
Lua Code:
  1. ----------Local helper functions---------------
  2. local function initiateFrame(frame)
  3.     local frameName = frame:GetName();
  4.     if ( not frameName or frameName == "" ) then
  5.         GMError("Frames controlled by FrameLocks must have names.");
  6.     end
  7.  
  8.     if ( BASE_STATES[frameName] ) then
  9.         return;
  10.     end
  11.  
  12.     BASE_STATES[frameName] = frame:IsShown() and "shown" or "hidden";
  13.     assert(frame.originalShow ~= frame.Show); --Make sure we didn't already set up this frame.
  14.     frame.originalShow = frame.Show;
  15.     frame.originalHide = frame.Hide;
  16.     frame.Show = SmartShow;
  17.     frame.Hide = SmartHide;
  18. end
  19.  
  20. local function updateFrameByState(frame)
  21.     initiateFrame(frame);
  22.     local frameName = frame:GetName();
  23.     if ( not frameName or frameName == "" ) then
  24.         GMError("Frames controlled by FrameLocks must have names.");
  25.     end
  26.     for i=1, #FRAMELOCK_STATE_PRIORITIES do
  27.         local lock = FRAMELOCK_STATE_PRIORITIES[i];
  28.         if ( ACTIVE_FRAMELOCKS[lock] ) then
  29.             local desiredState = FRAMELOCK_STATES[lock][frameName];
  30.             if ( desiredState == "hidden" ) then
  31.                 frame:originalHide();
  32.                 return;
  33.             elseif ( desiredState == "shown" ) then
  34.                 frame:originalShow();
  35.                 return;
  36.             end
  37.         end
  38.     end
  39.  
  40.     --If we got to here, no lock is in place, so use the base state.
  41.     if ( BASE_STATES[frameName] == "shown" ) then
  42.         frame:originalShow();
  43.     else
  44.         frame:originalHide();
  45.     end
  46. end

I think the taint is created because my addon cancels the orignal hide and show functions via
Lua Code:
  1. function addon:HideFrame(reference)
  2.     local frame = type(reference) == 'string' and _G[reference] or reference
  3.     if type(frame) ~= 'table' then return end
  4.     frame.Show = DoNothing
  5.     frame:Hide()
  6. end

and this is the actual hiding of it...
Lua Code:
  1. --[[-----------------------------------------------------------------------------
  2. Configure Bliz Target Frame
  3. -------------------------------------------------------------------------------]]
  4. function addon:ConfigureBlizTargetFrame()
  5.     if addon.settings.hideBlizTargetFrame then
  6.         addon:HideFrame('TargetFrame')  -- come back to this and put in unregisters but watch out for buffs :)
  7.     else
  8.         TargetFrame.Show = TargetFrame:Show()
  9.         TargetFrame:RegisterEvent("PLAYER_TARGET_CHANGED")
  10.         TargetFrame:RegisterEvent("UNIT_HEALTH")
  11.         TargetFrame:RegisterEvent("UNIT_LEVEL")
  12.         TargetFrame:RegisterEvent("UNIT_FACTION")
  13.         TargetFrame:RegisterEvent("UNIT_CLASSIFICATION_CHANGED")
  14.         TargetFrame:RegisterEvent("UNIT_AURA")
  15.         TargetFrame:RegisterEvent("PLAYER_FLAGS_CHANGED")
  16.         TargetFrame:RegisterEvent("PLAYER_FOCUS_CHANGED")
  17.         if UnitExists("target") then TargetFrame:Show() end
  18.     end
  19. end
  20.  
  21. addon.RegisterEvent("TargetFrame-Prime", 'PLAYER_LOGIN', function(self, event)
  22.     addon.UnregisterEvent(self, event)
  23.     addon:ConfigureBlizTargetFrame()
  24. end)

Any ideas for turning the framelock.lua off?
__________________
"Are we there yet?"

GrimUI
[SIGPIC][/SIGPIC]

Last edited by Grimsin : 09-27-12 at 12:08 PM.
  Reply With Quote
09-27-12, 05:09 PM   #2
Grimsin
A Molten Giant
 
Grimsin's Avatar
AddOn Author - Click to view addons
Join Date: Sep 2006
Posts: 990
heres what the taint log produces... Chat frame 11? ummm my chat setup only goes to 8?
Code:
9/27 16:05:26.989  Execution tainted by GrimUI while reading ChatFrame11 - Interface\FrameXML\FloatingChatFrame.lua:1105 FCF_OnUpdate()
9/27 16:05:26.989      UIParent:OnUpdate()
9/27 16:05:26.989  An action was blocked in combat because of taint from GrimUI - TargetFrame:originalHide()
9/27 16:05:26.989      Interface\FrameXML\FrameLocks.lua:90 updateFrameByState()
9/27 16:05:26.989      Interface\FrameXML\FrameLocks.lua:101 setBaseState()
9/27 16:05:26.989      Interface\FrameXML\FrameLocks.lua:116 TargetFrame:Hide()
9/27 16:05:26.989      Interface\FrameXML\TargetFrame.lua:99 TargetFrame_Update()
9/27 16:05:26.989      Interface\FrameXML\TargetFrame.lua:150 OnEvent()
9/27 16:05:26.989      Interface\FrameXML\UnitFrame.lua:489
__________________
"Are we there yet?"

GrimUI
[SIGPIC][/SIGPIC]
  Reply With Quote
09-27-12, 05:42 PM   #3
Grimsin
A Molten Giant
 
Grimsin's Avatar
AddOn Author - Click to view addons
Join Date: Sep 2006
Posts: 990
Can someone point me to where the pet battle chatframe gets created? is that in chatframes? floatingchatframes? the petbattle ui?
__________________
"Are we there yet?"

GrimUI
[SIGPIC][/SIGPIC]
  Reply With Quote
09-27-12, 09:34 PM   #4
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
The problem in your original post is that you are replacing the Show and Hide methods on the frame; this taints the secure frame. If you want to hide the target frame without tainting it, you need to do it without overwriting anything on it. Try this instead:

Hide:
Code:
	TargetFrame:UnregisterAllEvents()
	TargetFrame:Hide()
Show:
Code:
	TargetFrame:GetScript("OnLoad")(TargetFrame)
Note that these must be run out of combat.

If you want to "hide" the frame based on certain conditions, you can either use a secure state driver that shows or hides the frame based on macro conditionals, or you can change the opacity of the frame to 0% to visually hide it if you want to "hide" it based on conditions that aren't allowed in macros like health.

Without seeing the whole file (what you posted is obviously not it, since there are tons of functions and variables used in the code you posted that are not defined in the code you posted), that's about as specific as I can get.
__________________
Author/maintainer of Grid, PhanxChat, oUF_Phanx, and many more.
Troubleshoot an addonTurn any code into an addonMore addon resources
Need help with your code? Post all of your actual code! Attach or paste your files.
Please don’t PM me about addon bugs or code questions. Post a comment or forum thread instead!
  Reply With Quote
09-28-12, 12:26 AM   #5
Grimsin
A Molten Giant
 
Grimsin's Avatar
AddOn Author - Click to view addons
Join Date: Sep 2006
Posts: 990
hmm well im not so sure anymore that the targetframe is the initial taint culprit anymore but on the target frame note.. Yes i had thought about dumping the events before and you may have noticed my note to myself in the code that i made months ago to come back and hide the target frame the way you posted but i have two things that rely on the original target frame still functioning... at least to some degree. The target castbar and buffs

i suppose my hope at this point should be that i can leave the events necessary for those to function right intact and ditch the event thats causing it to try to hide/show the original? maybe a simple unregister of the petbattle start and finish events on the target frame? hmm but is the target frame even looking for such events? It did not look like it when i was going through it earlier.
__________________
"Are we there yet?"

GrimUI
[SIGPIC][/SIGPIC]
  Reply With Quote
09-28-12, 05:21 PM   #6
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
Ignoring, for the moment, all of your current code and everything it does, what exactly do you actually want to do with the target frame?
__________________
Author/maintainer of Grid, PhanxChat, oUF_Phanx, and many more.
Troubleshoot an addonTurn any code into an addonMore addon resources
Need help with your code? Post all of your actual code! Attach or paste your files.
Please don’t PM me about addon bugs or code questions. Post a comment or forum thread instead!
  Reply With Quote

WoWInterface » Developer Discussions » General Authoring Discussion » FrameLocks.lua and target taint

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off