File Details
Vamoose's Pet Patrol v1.4.1
- R
- May 23, 2026
- 406.34 KB
- 19
- 12.0.5+2
- Retail
File Name
VamoosesPetPatrol-1.4.1.zip
Supported Versions
- 12.0.5
- 12.0.1
- 12.0.0
- Fix: World-map pet pins no longer taint Blizzard's secure code paths. The taint cascade (most recently surfacing as "attempt to perform arithmetic on local 'textHeight' (a secret number value, while execution tainted by VamoosesPetPatrol)" inside Blizzard_UIWidgetTemplateTextWithState when hovering AreaPOI tooltips) is rooted in coupling to Blizzard's MapCanvas pin pool: any insertion into the shared pool from addon code marks the pool as touched, and once any pin enters in a tainted-tagged state, every future acquisition by ANY addon (or by Blizzard itself) inherits the taint. Prior fixes (Tier-4 RunNextFrame deferral + Tier-2 SetSize/SetAlpha re-stamping) narrowed the window but couldn't close it. The pin layer is now fully decoupled from Blizzard's pool: VPP runs its own framepool on its own private Frame parented under WorldMapFrame.ScrollContainer.Child, never calls map:AcquirePin / WorldMapFrame:AddDataProvider, and listens for map changes via EventRegistry "MapCanvas.MapSet" + hooksecurefunc on OnFrameSizeChanged (taint-preserving Blizzard callbacks) instead of HookScript on WorldMapFrame OnHide. Mirrors RareScanner's architecture, which has been pool-contamination-free since Midnight launch. Reported 2026-05-23.
- Pin pool reset (Tier 2 from MIDNIGHT_SECRET_VALUES.md) now actually does something. The previous `if pin.SetToDefaults then pin:SetToDefaults() end` guard was a no-op: MapCanvasPinMixin defines no SetToDefaults method, and Pool_HideAndSetToDefaults lives on the pool framework, not on pin instances. Each AcquirePin now explicitly re-stamps SetSize(14,14)/SetAlpha(1) and nil's our custom pin fields before re-populating, replacing any property-contagion (secret-tagged width/height/alpha from prior tainted use) on recycled pins. Addresses follow-up MoneyFrame_Update crashes reported 2026-05-15 after v1.4.0's deferral fix. (Superseded by the pool-decoupling refactor above, but kept in the log for context.)