Skip to content

Conversation

@xuhuanxxx
Copy link
Contributor

@xuhuanxxx xuhuanxxx commented Jan 26, 2026

问题

在受保护执行环境中,直接访问 tooltipData 字段、tooltip 文本或调用 SetHyperlink 会导致 "Secret values" 错误。

解决方案

Commit 1: 统一保护 tooltipData 字段访问和 tooltip 文本操作

  • SafeUnitAPI 中添加 tooltipData 保护函数(TooltipDataField, TooltipDataType, TooltipDataGUID, TooltipDataLines)
  • SafeUnitAPI 中添加文本操作保护函数(GetText, StringFind, TooltipLineText)用于受保护执行环境
  • 使用 pcall 安全获取值,再用 issecretvalue 检查
  • 替换所有直接访问 tooltipData 字段的代码
  • 保护 FindLineInGameTooltipFindLineInTooltipData 以安全处理 secret values

Commit 2: 延迟调用 SetHyperlink

  • 使用 C_Timer.After(0, ...) 延迟调用 SetHyperlink/SetSpellByID/SetText
  • 让这些调用在下一个帧执行,脱离受保护执行环境

修改文件

  • InspectCore.lua: 添加 SafeUnitAPI tooltipData 和文本操作保护函数
  • InspectMouse.lua: 使用 SafeUnitAPI 保护 tooltipData 访问和文本操作
  • libs/LibItemInfo.lua: 使用 SafeUnitAPI 保护 tooltipData.lines 访问
  • InspectUnitGemAndEnchant.lua: 添加延迟调用保护 SetHyperlink

…eUnitAPI

- Add SafeUnitAPI tooltipData protection functions (TooltipDataField, TooltipDataType, TooltipDataGUID, TooltipDataLines)
- Add SafeUnitAPI text operation functions (GetText, StringFind, TooltipLineText) for protected execution environment
- Replace all direct tooltipData field access in InspectMouse.lua, LibItemInfo.lua, InspectUnitGemAndEnchant.lua
- Protect FindLineInGameTooltip and FindLineInTooltipData to handle secret values safely
Use delayed call to execute SetHyperlink/SetSpellByID/SetText in next frame, escaping protected execution environment to avoid Blizzard code performing arithmetic on secret values.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant