coa: sanitize debuff icon path before SetTexture

Ascension has been shipping auras whose UnitAura()-returned icon path
is nil or unresolvable on the local client. Decursive's LiveList fed
it straight into Texture:SetTexture(), and on the 3.3.5 engine that
crashes the renderer downstream — #132 ACCESS_VIOLATION near
Ascension.exe text + null+offset (texture-loader struct left
half-initialized). Confirmed across multiple recent DLL hashes
(0baf62b, 6a3088c, 7bba9c8, 502ca3c), recurring fault @ 0x00749EEB.

Fix: when Debuff.Texture isn't a non-empty string, fall back to
INV_Misc_QuestionMark and log the offender once (via AddDebugText so
it lands in Logs/Trace.txt) for future identification of the bad aura.

Bumped toc to Asc-1.1.3-coa.
This commit is contained in:
2026-05-20 00:34:21 +02:00
parent 4e2a0503b7
commit 8ac1651db0
2 changed files with 17 additions and 2 deletions
+16 -1
View File
@@ -272,8 +272,23 @@ function LiveList.prototype:SetDebuff(UnitID, Debuff, IsCharmed) -- {{{
-- Set the graphical elements to the right values
-- Icon
-- CoA: Ascension sometimes ships auras whose icon path is missing/invalid on
-- the local client; passing those into SetTexture has crashed the engine
-- (#132 ACCESS_VIOLATION, fault inside Ascension.exe texture loader).
-- Fall back to the question-mark icon and record the offender once so it
-- shows up in Logs/Trace.txt.
if self.PrevDebuffTexture ~= Debuff.Texture then
self.IconTexture:SetTexture(Debuff.Texture);
local tex = Debuff.Texture;
if type(tex) ~= "string" or tex == "" then
if not D.coa_LoggedBadTextures then D.coa_LoggedBadTextures = {}; end
local key = tostring(tex);
if not D.coa_LoggedBadTextures[key] then
D.coa_LoggedBadTextures[key] = true;
D:AddDebugText("CoA: bad debuff icon, falling back. Name=", Debuff.Name, "Type=", Debuff.TypeName, "raw=", tex);
end
tex = "Interface\\Icons\\INV_Misc_QuestionMark";
end
self.IconTexture:SetTexture(tex);
self.PrevDebuffTexture = Debuff.Texture;
end