Wowpedia

We have moved to Warcraft Wiki. Click here for information and the new URL.

READ MORE

Wowpedia
m (I played around with this a little bit and this is what I got. :))
(second return value)
Line 2: Line 2:
 
Determines if given variable or table is [[secure]] or "[[Tainted (Addons)|tainted]]." Any usage of a "[[Tainted (Addons)|tainted]]" (= non-secure) variable, be it a function or simply data, will break [[secure]] state and prevent further access to Protected functions.
 
Determines if given variable or table is [[secure]] or "[[Tainted (Addons)|tainted]]." Any usage of a "[[Tainted (Addons)|tainted]]" (= non-secure) variable, be it a function or simply data, will break [[secure]] state and prevent further access to Protected functions.
   
isSecure, unknown = issecurevariable([table], variable)
+
isSecure, taint = issecurevariable([table], variable)
   
==Parameters==
+
==Returns==
  +
;isSecure : "boolean" flag: 1 if variable is secure, nil if it is tainted.
===Arguments===
 
  +
;taint : string: addon that tainted the variable (possibly nil if not tainted by an addon).
:;[table], variable
 
 
===Return===
 
:;isSecure - 1 (secure) or nil (not secure)
 
:;unknown - always nil. If isSecure is nil, this is not returned (implied nil).
 
   
 
==Example 1==
 
==Example 1==
Line 35: Line 31:
 
end
 
end
 
===Result===
 
===Result===
*[[API_UnitName|UnitName]] is not a protected Blizzard-defined function, but will still become tainted when hooked.
+
* [[API_UnitName|UnitName]] is not a protected Blizzard-defined function, but will still become tainted when hooked.
*Message "Given variable tainted. :s" will get displayed in your chat frame.
+
* Message "Given variable tainted. :s" will get displayed in your chat frame.
   
 
==Notes==
 
==Notes==

Revision as of 20:57, 6 April 2009

Determines if given variable or table is secure or "tainted." Any usage of a "tainted" (= non-secure) variable, be it a function or simply data, will break secure state and prevent further access to Protected functions.

isSecure, taint = issecurevariable([table], variable)

Returns

isSecure
"boolean" flag: 1 if variable is secure, nil if it is tainted.
taint
string: addon that tainted the variable (possibly nil if not tainted by an addon).

Example 1

local secure = issecurevariable( "JumpOrAscendStart" );
if secure then 
 DEFAULT_CHAT_FRAME:AddMessage("OK! Given variable is secure!");
else
 DEFAULT_CHAT_FRAME:AddMessage("Given variable tainted. :s");
end

Result

  • JumpOrAscendStart is a protected Blizzard-defined function, thus secure. Calling it will not break secure status.
  • Message "OK! Given variable is secure!" will get displayed in your chat frame.

Example 2

local Old_UnitName = UnitName
function UnitName(unit)
    return Old_UnitName(unit or "player")
end
local secure = issecurevariable( "UnitName" );
if secure then 
 DEFAULT_CHAT_FRAME:AddMessage("OK! Given variable is secure!");
else
 DEFAULT_CHAT_FRAME:AddMessage("Given variable tainted. :s");
end

Result

  • UnitName is not a protected Blizzard-defined function, but will still become tainted when hooked.
  • Message "Given variable tainted. :s" will get displayed in your chat frame.

Notes

  • Returns 1, nil for undefined variables. This is because an undefined variable is secure since you have not tainted it.
  • Returns 1, nil for all untainted variables (i.e. Blizzard variables).
  • Returns nil for any global variable that is hooked insecurely (tainted), even unprotected ones like UnitName().
  • Returns nil for all user defined global variables.
  • If a table is passed first, it checks table.variable (e.g. issecurevariable(PlayerFrame, "Show") checks PlayerFrame["Show"] or PlayerFrame.Show (they are the same thing)).
  • Does not work for local variables.