From 8ac1651db02a141f98d42d73fa13028353becb42 Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Wed, 20 May 2026 00:34:21 +0200 Subject: [PATCH] coa: sanitize debuff icon path before SetTexture MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- Decursive/Dcr_LiveList.lua | 17 ++++++++++++++++- Decursive/Decursive.toc | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Decursive/Dcr_LiveList.lua b/Decursive/Dcr_LiveList.lua index 1eef552..ade2817 100644 --- a/Decursive/Dcr_LiveList.lua +++ b/Decursive/Dcr_LiveList.lua @@ -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 diff --git a/Decursive/Decursive.toc b/Decursive/Decursive.toc index 7349c73..413dc05 100644 --- a/Decursive/Decursive.toc +++ b/Decursive/Decursive.toc @@ -18,7 +18,7 @@ ## SavedVariables: DecursiveDB -## Version: Asc-1.1.2-coa (orig 2.5.1-6-gd3885c5) +## Version: Asc-1.1.3-coa (orig 2.5.1-6-gd3885c5) ## Author: Archarodim ## X-License: All Rights Reserved