If you're actually replacing the
global ReputationFrame_Update, then it stands to reason this is the source of your taint. Your tainted function would be called in the execution path when the reputation frame is shown, then transferring that taint to UIParent's position handler.
The best you can do to ensure there are no problems with taint is to either replace the frame altogether, or use hooksecurefunc to apply your changes after the original function call.
This is how the taint would spread (
secure/
tainted):
ToggleCharacter("ReputationFrame", true)
-> CharacterFrame_ShowSubFrame("ReputationFrame")
--> _G["ReputationFrame"]:Show()
---> ReputationFrame_OnShow(self)
----> ReputationFrame_Update(true)
-> ShowUIPanel(CharacterFrame)
--> FramePositionDelegate_OnAttributeChanged(self, "panel-show")
---> FramePositionDelegate:ShowUIPanel(CharacterFrame, false)
----> FramePositionDelegate:SetUIPanel(...)
|
At this point, FramePositionDelegate taints itself by storing CharacterFrame as a key in its own table. Thus, next time
FramePositionDelegate:UIParentManageFramePositions() is called in combat, the taint and the source of the taint is finally revealed.