Skip to content

Commit

Permalink
fix: Potential NREs on Player.CraftingState (#1919)
Browse files Browse the repository at this point in the history
  • Loading branch information
Cheshire92 authored Sep 29, 2023
1 parent 93e3544 commit d36f1c7
Showing 1 changed file with 30 additions and 11 deletions.
41 changes: 30 additions & 11 deletions Intersect.Server/Entities/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -541,17 +541,22 @@ public override void Update(long timeMs)

if (CraftingTableBase.TryGet(OpenCraftingTableId, out var b) && CraftingState?.Id != default)
{
if (b.Crafts.Contains(CraftingState.Id))
if (CraftingState != default && b.Crafts.Contains(CraftingState.Id))
{
while (CraftingState?.NextCraftCompletionTime < timeMs)
{
CraftItem();
CraftingState.NextCraftCompletionTime += CraftingState.DurationPerCraft;

if (CraftingState.RemainingCount < 1)
if (CraftingState != default)
{
CraftingState = default;
CraftingState.NextCraftCompletionTime += CraftingState.DurationPerCraft;

if (CraftingState.RemainingCount < 1)
{
CraftingState = default;
}
}

}

if (ShouldCancelCrafting())
Expand Down Expand Up @@ -3652,7 +3657,7 @@ public void CloseCraftingTable()
//Craft a new item
public void CraftItem()
{
if(ShouldCancelCrafting())
if(ShouldCancelCrafting() || CraftingState == default)
{
return;
}
Expand All @@ -3668,7 +3673,11 @@ public void CraftItem()
backupItems.Add(backupItem.Clone());
}

var craftItem = ItemBase.Get(craftDescriptor.ItemId);
if (!ItemBase.TryGet(craftDescriptor.ItemId, out var craftItem) && CraftingState != default)
{
CraftingState.RemainingCount--;
return;
}

lock (EntityLock)
{
Expand Down Expand Up @@ -3696,7 +3705,10 @@ public void CraftItem()
}

PacketSender.SendInventory(this);
CraftingState.RemainingCount--;
if (CraftingState != default)
{
CraftingState.RemainingCount--;
}

return;
}
Expand All @@ -3723,7 +3735,10 @@ public void CraftItem()
}

PacketSender.SendInventory(this);
CraftingState.RemainingCount--;
if (CraftingState != default)
{
CraftingState.RemainingCount--;
}

return;
}
Expand Down Expand Up @@ -3762,7 +3777,10 @@ public void CraftItem()
}
}

CraftingState.RemainingCount--;
if (CraftingState != default)
{
CraftingState.RemainingCount--;
}
}
}

Expand Down Expand Up @@ -3822,13 +3840,14 @@ public bool ShouldCancelCrafting()
//Check the player actually has the items
foreach (var ingredient in craftDescriptor.Ingredients)
{
if (!inventoryItems.TryGetValue(ingredient.ItemId, out var currentQuantity))
var qSearch = inventoryItems.TryGetValue(ingredient.ItemId, out var currentQuantity);
if (CraftingState != default && !qSearch)
{
CraftingState.Id = Guid.Empty;
return true;
}

if (currentQuantity < ingredient.Quantity)
if (CraftingState != default && currentQuantity < ingredient.Quantity)
{
CraftingState.Id = Guid.Empty;
return true;
Expand Down

0 comments on commit d36f1c7

Please sign in to comment.