498 - The Long-standing Taint Issue
The same issue as ticket #492, but I decide to write my own ticket.
The taint problem is a long-standing issue. I know that well, and have visited various addons' developing pages to search for any solution or tips before, including this very Altoholic's page ( I remember you answered one ticket or two). Due to the annoying implicit nature of taint issue, it's hard to hunt down the source of the problem; when addon B causes the problem but UI engine blames addon A etc. That to be said, Altoholic is alphabetically on top so we may feel it is more likely to be blamed.
But today I think I have confirmed that regardless other addons, Altoholic itself has taint issue (the hunting lasted more than a week >_<).
Steps to reproduce: (if there are more than 1 problem these steps probably can only reproduce one of them.)
1. Disable all addons.
2. Enter the game, /run print(issecurevariable("CompactRaidFrame1")), it should be "1 nil"
3. Leave the game, Enable DataStore(s), for the dependencies later.
4. Enter the game, /run print(issecurevariable("CompactRaidFrame1")), it should be "1 nil", all still good.
5. Leave the game, Enable Altoholic.
6. Enter the game, /run print(issecurevariable("CompactRaidFrame1")), on my screen it shows "nil Altoholic", means it's tainted by Altoholic.
Now looking at the `/console taintLog 2' taint.log, to be honest I can't tell where the problem is. One could see a lot UIDROPDOWNMENU_MENU_LEVEL entries
12/13 03:44:42.431 Global variable UIDROPDOWNMENU_MENU_LEVEL tainted by Altoholic - Interface\FrameXML\UIDropDownMenu.lua:38 12/13 03:44:42.431 securecall() 12/13 03:44:42.431 Interface\FrameXML\UIDropDownMenu.lua:64 UIDropDownMenu_Initialize() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:448 CompactUnitFrameProfilesGeneralOptionsFrameSortByDropdown:updateFunc() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:178 CompactUnitFrameProfiles_UpdateCurrentPanel() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:165 CompactUnitFrameProfiles_ActivateRaidProfile() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:39 CompactUnitFrameProfiles_ValidateProfilesLoaded() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:24 12/13 03:44:42.431 Execution tainted by Altoholic while reading UIDROPDOWNMENU_MENU_LEVEL - Interface\FrameXML\UIDropDownMenu.lua:48 12/13 03:44:42.431 securecall() 12/13 03:44:42.431 Interface\FrameXML\UIDropDownMenu.lua:64 UIDropDownMenu_Initialize() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:448 CompactUnitFrameProfilesGeneralOptionsFrameSortByDropdown:updateFunc() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:178 CompactUnitFrameProfiles_UpdateCurrentPanel() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:165 CompactUnitFrameProfiles_ActivateRaidProfile() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:39 CompactUnitFrameProfiles_ValidateProfilesLoaded() 12/13 03:44:42.431 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:24
Quite normal Exeuction taints that always happen, but these are no good
12/13 03:44:42.630 Global variable CUF_HORIZONTAL_GROUPS tainted by Altoholic - Interface\AddOns\Blizzard_CompactRaidFrames\Blizzard_CompactRaidFrameManager.lua:479 CompactRaidFrameManager_SetHorizontalGroups() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CompactRaidFrames\Blizzard_CompactRaidFrameManager.lua:504 CompactRaidFrameManager_SetSetting() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:560 func() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:537 CompactUnitFrameProfiles_ApplyProfile() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:170 CompactUnitFrameProfiles_ApplyCurrentSettings() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:166 CompactUnitFrameProfiles_ActivateRaidProfile() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:39 CompactUnitFrameProfiles_ValidateProfilesLoaded() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:24 12/13 03:44:42.630 Global variable RAID_BORDERS_SHOWN tainted by Altoholic - Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:606 func() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:537 CompactUnitFrameProfiles_ApplyProfile() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:170 CompactUnitFrameProfiles_ApplyCurrentSettings() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:166 CompactUnitFrameProfiles_ActivateRaidProfile() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:39 CompactUnitFrameProfiles_ValidateProfilesLoaded() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:24 12/13 03:44:42.630 Global variable CUF_SHOW_BORDER tainted by Altoholic - Interface\AddOns\Blizzard_CompactRaidFrames\Blizzard_CompactRaidFrameManager.lua:470 CompactRaidFrameManager_SetBorderShown() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CompactRaidFrames\Blizzard_CompactRaidFrameManager.lua:502 CompactRaidFrameManager_SetSetting() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:609 func() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:537 CompactUnitFrameProfiles_ApplyProfile() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:170 CompactUnitFrameProfiles_ApplyCurrentSettings() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:166 CompactUnitFrameProfiles_ActivateRaidProfile() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:39 CompactUnitFrameProfiles_ValidateProfilesLoaded() 12/13 03:44:42.630 Interface\AddOns\Blizzard_CUFProfiles\Blizzard_CompactUnitFrameProfiles.lua:24
Somehow(always?) the taint log doesn't provide enough information. The thing is, other addons like Mapster or Postal also use DropDownMenu and they dont cause the problem. I skimmed Altoholic's code about the usage of the infamous DropDownMenu and couldn't find anything wrong. I appreciate if you are kind to recheck them.
On the other hand, I suspect that it could be caused by some insecure hooks and variable assignments spread among files (probably including DataStore(s)). Could you please check them and change them to secure hooks if possible? It happens that some functions or variables used to be hooked insecurely and it worked perfectly fine, but suddenly after a patch the default UI decides to access them, the taint spreads to some core parts of default UI (in this case they are CompactRaidFrames or PartyMemberFrames). Then soon or later the tainted default UI tries to call some protected functions (like :Show() :Hide() :SetPoint() :ClearAllPoints() ) in combat and causes the "addon action blocked" errors.
======================
To be honest the taint issue is not a fatal problem at all, it's just... very annoying to see there are 50/50 addon action blocked errors in the BugSack :p Also frames behave abnormally in combat. I LOVE Altoholic and now it still works fine with activities in the city. I just have to turn it off every time I go to dungeon, raid, or battleground.
| User | When | Change |
|---|---|---|
| Everdreamer | Dec 12, 2011 at 22:03 UTC | Changed description: 3. Leave the game, Enable DataStore(s), for the dependencies later.
4. Enter the game, /run print(issecurevariable("CompactRaidFrame1")), it should be "1 nil", all still good.
5. Leave the game, Enable Altoholic.
- 6. Enter the game, /run print(issecurevariable("CompactRaidFrame1")), on my screen it shows "nil Altoholic", means it's tainted.
+ 6. Enter the game, /run print(issecurevariable("CompactRaidFrame1")), on my screen it shows "nil Altoholic", means it's tainted by Altoholic.
Now looking at the `/console taintLog 2' taint.log, to be honest I can't tell where the problem is. One could see a lot UIDROPDOWNMENU_MENU_LEVEL entries
[code] |
| Everdreamer | Dec 12, 2011 at 22:02 UTC | Changed description:[/code] Somehow(always?) the taint log doesn't provide enough information. The thing is, other addons like Mapster or Postal also use DropDownMenu and they dont cause the problem. I skimmed Altoholic's code about the usage of the infamous DropDownMenu and couldn't find anything wrong. I appreciate if you are kind to recheck them. - On the other hand, I suspect that it could be caused by some insecure hooks and variable assignments spread among files (probably including DataStore(s)). Could you please check them and change them to secure hooks if possible? It happens that some functions or variables used to be hooked insecurely and it worked perfectly fine, but suddenly after a patch the default UI decides to access them, the taint spreads to some core part of default UI. Then soon or later the tainted default UI tries to call some protected functions (like :Show() or :Hide() ) and causes the "addon action blocked" errors. + On the other hand, I suspect that it could be caused by some insecure hooks and variable assignments spread among files (probably including DataStore(s)). Could you please check them and change them to secure hooks if possible? It happens that some functions or variables used to be hooked insecurely and it worked perfectly fine, but suddenly after a patch the default UI decides to access them, the taint spreads to some core parts of default UI (in this case they are CompactRaidFrames or PartyMemberFrames). Then soon or later the tainted default UI tries to call some protected functions (like :Show() :Hide() :SetPoint() :ClearAllPoints() ) in combat and causes the "addon action blocked" errors. ============================ To be honest the taint issue is not a fatal problem at all, it's just... very annoying to see there are 50/50 addon action blocked errors in the BugSack :p Also frames behave abnormally in combat. I LOVE Altoholic and now it still works fine with activities in the city. I just have to turn it off every time I go to dungeon, raid, or battleground. |
| Everdreamer | Dec 12, 2011 at 21:48 UTC | Create |
- 10 comments
- 10 comments
Facts
- Last updated
- Mar 30, 2012
- Reported
- Dec 12, 2011
- Status
- New - Issue has not had initial review yet.
- Type
- Defect - A shortcoming, fault, or imperfection
- Priority
- Medium - Normal priority.
- Votes
- 4
- Reply
- #10
Tequima Apr 19, 2012 at 06:57 UTC - 0 likes@LaoTseu: Go
Hi, There was a recent update to Decursive regarding taint - should still be in the version comments. Apparently there is a bug with the Blizzard drop-down functions. Unfortunately the Tukui topic on which it was discussed has been deleted. I don't pretend to understand it, being an ex-programmer rather than LUA author, but the gist of it was that when the default of 1 is used for drop-downs, the Blizzard raid functions and focus can attempt to use it without checking another add-on is using it. A work-around used by Decursive was to use 3 as default, 4 if in use. I don't know if this relates to the apparent Altoholic taint issue, but hope it helps.
- Reply
- #9
teelo Feb 29, 2012 at 07:39 UTC - 0 likesI've made a temporary fix for the whole WorldMapFrame issue.
Comment out line 423 in Altoholic\Events.lua, and line 301 in Altoholic\Frame\TabSummary.lua.
--UIDropDownMenu_AddButton(info, 1);and
--UIDropDownMenu_Initialize(_G[rcMenuName.."1"], AltoholicOptionsIcon_Initialize, "MENU")No longer getting taint when opening the world map while in combat with embedded quest frames enabled. This of course disabled the right click menus, but eh, not like I ever used them.
- Reply
- #8
jeffreii Feb 20, 2012 at 21:32 UTC - 0 likesIt occured to me that I should try installing Altoholic to a fresh WoW install to see what happened...first BG I joined, as soon as someone left, I had raid frame issues. This is with no other addons installed.
- Reply
- #7
jeffreii Feb 20, 2012 at 13:34 UTC - 0 likesJust noticed this on the 2nd page of Altoholic comments, by the author Thaoky:
"As for the raid frame issue, I went a bit further in the analysis. It does well occur when the main module of Altoholic is active, and disappears when it is disabled. That said, I will insist again on the fact that Altoholic IS NOT guilty.
When the problem occurs, I see in the eventtrace that 3 events named ADDON_ACTION_BLOCKED are triggered, and Altholic is obviously listed as the cause, but the functions listed are functions THAT ARE NOT CALLED BY ME. I could see that they are part of AceGUI, but in all honesty, AceGUI is not more guilty than Altoholic is.
My goal is to further analyze some depencies in the addon, maybe break the addon into one or two additional submodules, and get rid of AceGUI in the end (it's not much used in fact).
Release .. ? When it's done of course"
- Reply
- #6
jeffreii Feb 20, 2012 at 13:27 UTC - 0 likesGlad I found this thread. I have been suspecting Altoholic of causing my Blizzard raid frames to bug out during combat (specifically when people leave/join the raid). It's one of the worst problems I've ever had with WoW.
I finally decided to remove all addons and install a fresh copy of WoW to see if it went away...it did. I then installed DBM and OmniCC and decided to slowly install addons as I confirmed the issue remained gone.
A week later I installed Altoholic and immediately had the raid frames error pop up in LFR. I removed Altoholic a week ago and have done LFR on 5 toons, along with various other raid scenarios, and not seen the error.
I'd like to run another LFR or two and make sure it's absolutely gone before reinstalling Altoholic to see if the raid frame errors come back...but based on this thread I get the feeling that I've found the culprit.
I really hope the dev responds to this and tries to find a solution. I absolutely love Altoholic and hate the idea that I might have to abandon it...but first I will try the hack posted below. Thanks very much.
- Reply
- #5
Everdreamer Feb 01, 2012 at 18:49 UTC - 0 likesThanks LaoTseu for responding and providing a hack, but I believe that it only fixes part of the problem. I hope authors have read this ticket and have an official fix in the future, because only authors can fully understand the semantic meanings of these hooks.
- Reply
- #4
Catok Jan 23, 2012 at 08:59 UTC - 0 likesThis patch helped a lot for me. I still get the taint sometimes, but not nearly as much as before.
Thanks.
- Reply
- #3
SpareSimian Jan 15, 2012 at 05:41 UTC - 0 likesI've been using this patch all evening with no issues.
- Reply
- #2
LaoTseu Jan 14, 2012 at 19:48 UTC - 0 likesIt took me a bit longer then expected but it's now tested.
I have to files that I needed to edit: Altoholic.lua Tooltip.lua
Not all the hooks were converted to secure hooks since a few of them require actions that needed to be done before or instead of the normal actions.
Hope that helps.
- Reply
- #1
LaoTseu Jan 05, 2012 at 17:21 UTC - 0 likesI've hacked my local copy to use hooksecurefunc() and HookScript() whenever possible. This appear to have solve the tainting issue for me. I'm back today from vacation and I had to redo the hack since I overrode it with a Curse update so I'll just test it in raid and if it still good, I'll post it here.