Skip to content

Commit d99a033

Browse files
authoredMay 5, 2018
Fix builtin inventory list crash when size = 0 (#7297)
1 parent 21c7207 commit d99a033

File tree

3 files changed

+11
-7
lines changed

3 files changed

+11
-7
lines changed
 

Diff for: ‎src/remoteplayer.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ void RemotePlayer::deSerialize(std::istream &is, const std::string &playername,
141141

142142
inventory.deSerialize(is);
143143

144-
if (inventory.getList("craftpreview") == NULL) {
144+
if (!inventory.getList("craftpreview") && inventory.getList("craftresult")) {
145145
// Convert players without craftpreview
146146
inventory.addList("craftpreview", 1);
147147

Diff for: ‎src/script/cpp_api/s_item.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
177177
const InventoryList *old_craft_grid, const InventoryLocation &craft_inv)
178178
{
179179
SCRIPTAPI_PRECHECKHEADER
180-
180+
sanity_check(old_craft_grid);
181181
int error_handler = PUSH_ERROR_HANDLER(L);
182182

183183
lua_getglobal(L, "core");

Diff for: ‎src/server.cpp

+9-5
Original file line numberDiff line numberDiff line change
@@ -2685,20 +2685,24 @@ void Server::DeleteClient(session_t peer_id, ClientDeletionReason reason)
26852685

26862686
void Server::UpdateCrafting(RemotePlayer *player)
26872687
{
2688+
InventoryList *clist = player->inventory.getList("craft");
2689+
if (!clist || clist->getSize() == 0)
2690+
return;
2691+
26882692
// Get a preview for crafting
26892693
ItemStack preview;
26902694
InventoryLocation loc;
26912695
loc.setPlayer(player->getName());
26922696
std::vector<ItemStack> output_replacements;
26932697
getCraftingResult(&player->inventory, preview, output_replacements, false, this);
26942698
m_env->getScriptIface()->item_CraftPredict(preview, player->getPlayerSAO(),
2695-
(&player->inventory)->getList("craft"), loc);
2699+
clist, loc);
26962700

2697-
// Put the new preview in
26982701
InventoryList *plist = player->inventory.getList("craftpreview");
2699-
sanity_check(plist);
2700-
sanity_check(plist->getSize() >= 1);
2701-
plist->changeItem(0, preview);
2702+
if (plist && plist->getSize() >= 1) {
2703+
// Put the new preview in
2704+
plist->changeItem(0, preview);
2705+
}
27022706
}
27032707

27042708
void Server::handleChatInterfaceEvent(ChatEvent *evt)

0 commit comments

Comments
 (0)
Please sign in to comment.