Altoholic

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

You must login to post a comment. Don't have an account? Register to get one!

  • 10 comments
  • Avatar of Tequima 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.

  • Avatar of teelo teelo Feb 29, 2012 at 07:39 UTC - 0 likes

    I'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.

  • Avatar of jeffreii jeffreii Feb 20, 2012 at 21:32 UTC - 0 likes

    It 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.

  • Avatar of jeffreii jeffreii Feb 20, 2012 at 13:34 UTC - 0 likes

    Just 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"

    Last edited Feb 20, 2012 by jeffreii
  • Avatar of jeffreii jeffreii Feb 20, 2012 at 13:27 UTC - 0 likes

    Glad 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.

  • Avatar of Everdreamer Everdreamer Feb 01, 2012 at 18:49 UTC - 0 likes

    Thanks 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.

  • Avatar of Catok Catok Jan 23, 2012 at 08:59 UTC - 0 likes

    This patch helped a lot for me. I still get the taint sometimes, but not nearly as much as before.

    Thanks.

  • Avatar of SpareSimian SpareSimian Jan 15, 2012 at 05:41 UTC - 0 likes

    I've been using this patch all evening with no issues.

  • Avatar of LaoTseu LaoTseu Jan 14, 2012 at 19:48 UTC - 0 likes

    It 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.

  • Avatar of LaoTseu LaoTseu Jan 05, 2012 at 17:21 UTC - 0 likes

    I'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.

  • 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

Reported by

Possible assignees