fix: skip malformed item objectives in cache

This commit is contained in:
Xurkon
2026-06-05 18:02:15 -05:00
parent aa973188ce
commit 7a87f51032
2 changed files with 27 additions and 7 deletions
+13 -7
View File
@@ -427,19 +427,25 @@ function QuestieLib:CacheItemNames(questId)
if (quest and quest.ObjectiveData) then if (quest and quest.ObjectiveData) then
for _, objectiveDB in pairs(quest.ObjectiveData) do for _, objectiveDB in pairs(quest.ObjectiveData) do
if objectiveDB.Type == "item" then if objectiveDB.Type == "item" then
if not ((QuestieDB.ItemPointers or QuestieDB.itemData)[objectiveDB.Id]) then local itemId = objectiveDB.Id
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieLib:CacheItemNames] Requesting item information for missing itemId:", objectiveDB.Id) if not itemId then
local item = Item:CreateFromItemID(objectiveDB.Id) Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieLib:CacheItemNames] Skipping item objective without itemId for quest:", questId)
elseif not ((QuestieDB.ItemPointers or QuestieDB.itemData)[itemId]) then
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieLib:CacheItemNames] Requesting item information for missing itemId:", itemId)
local item = Item:CreateFromItemID(itemId)
item:ContinueOnItemLoad( item:ContinueOnItemLoad(
function() function()
local itemName = item:GetItemName() local itemName = item:GetItemName()
if not QuestieDB.itemDataOverrides[objectiveDB.Id] then if not itemId then
QuestieDB.itemDataOverrides[objectiveDB.Id] = { itemName, { questId }, {}, {} } return
end
if not QuestieDB.itemDataOverrides[itemId] then
QuestieDB.itemDataOverrides[itemId] = { itemName, { questId }, {}, {} }
else else
QuestieDB.itemDataOverrides[objectiveDB.Id][1] = itemName QuestieDB.itemDataOverrides[itemId][1] = itemName
end end
Questie:Debug(Questie.DEBUG_DEVELOP, Questie:Debug(Questie.DEBUG_DEVELOP,
"[QuestieLib:CacheItemNames] Created item information for item:", itemName, ":", objectiveDB.Id) "[QuestieLib:CacheItemNames] Created item information for item:", itemName, ":", itemId)
end) end)
end end
end end
+14
View File
@@ -1,4 +1,11 @@
describe("Questie item name safety", function() describe("Questie item name safety", function()
local function read(path)
local f = assert(io.open(path, "r"), "cannot open " .. path)
local c = f:read("*a")
f:close()
return c
end
before_each(function() before_each(function()
dofile("Tests/wow_api_mock.lua") dofile("Tests/wow_api_mock.lua")
GetItemInfo = function() GetItemInfo = function()
@@ -16,4 +23,11 @@ describe("Questie item name safety", function()
local item = Item:CreateFromItemID("bad-id") local item = Item:CreateFromItemID("bad-id")
assert.equals("item:bad-id", item:GetItemName()) assert.equals("item:bad-id", item:GetItemName())
end) end)
it("skips malformed item objectives without an item id", function()
local lib = read("Modules/Libs/QuestieLib.lua")
assert.is_true(string.find(lib, "local itemId = objectiveDB.Id", 1, true) ~= nil)
assert.is_true(string.find(lib, "if not itemId then", 1, true) ~= nil)
assert.is_true(string.find(lib, "QuestieDB.itemDataOverrides[itemId]", 1, true) ~= nil)
end)
end) end)