Commit d68e44a
mergetest
fix(auras): guard the AD health mirror against a forbidden bar
Bug #1004: 999x "Frames/Core.lua:127: calling 'SetMinMaxValues' on bad
self (Attempt to access forbidden object from code tainted by an AddOn)"
reported from a PTR follower dungeon.
MirrorHealthValue drives frame.dfADHealthMirror, which is not ours: it is
a StatusBar child of the secret aura button, created by AuraContainer's
style pass and handed back through the onBar callback for the update loop
to feed. Children of that button are access-constrained, so the client can
turn the bar forbidden underneath us — a slot reclaimed or re-initialised
without the addon observing it leaves the stash pointing at an object we
may no longer touch, and every health event then throws. Roster churn in a
follower dungeon rebuilds containers constantly, hence the volume.
The sibling SetHealthBarValue makes the identical SetMinMaxValues call and
never throws, because it drives frame.healthBar, which we own.
Probed with the first render call rather than IsForbidden(). The bar lives
inside the secret container, so IsForbidden can itself return a SECRET on a
healthy bar, and the existing guard idiom (ClickCasting/Frames.lua:1157)
treats a secret result as "skip" — that would have disabled the overlay for
everyone. Probing the real call cannot false-positive.
The stash is deliberately not cleared on failure: Factory owns that
reference and nils it on its own teardown paths, and clearing it here would
fight the container over a bar that may only be transiently unavailable.
The debug warning is one-shot per frame so a persistently forbidden bar
does not trade an error spam for a debug spam.
Not reproduced locally — the fix is defensive and the root cause is
inferred from the stack and the container's ownership model.1 parent eea8f68 commit d68e44a
2 files changed
Lines changed: 34 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
127 | | - | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
128 | 160 | | |
129 | 161 | | |
130 | 162 | | |
| |||
0 commit comments