Core/AuctionHouse: Fix overflow in item ordering.

Port From (https://github.com/TrinityCore/TrinityCore/commit/c0f5f7d4ef4253826d3be5882ebdcf7f463cce5a)
This commit is contained in:
hondacrx
2021-03-04 15:29:25 -05:00
parent 166da57c6b
commit 3ae07c3cbe
+8 -8
View File
@@ -1735,7 +1735,7 @@ namespace Game
{ {
for (var i = 0; i < _sortCount; ++i) for (var i = 0; i < _sortCount; ++i)
{ {
int ordering = CompareColumns(_sorts[i].SortOrder, left, right); long ordering = CompareColumns(_sorts[i].SortOrder, left, right);
if (ordering != 0) if (ordering != 0)
return (ordering < 0).CompareTo(!_sorts[i].ReverseSort); return (ordering < 0).CompareTo(!_sorts[i].ReverseSort);
} }
@@ -1747,7 +1747,7 @@ namespace Game
return left.Id.CompareTo(right.Id); return left.Id.CompareTo(right.Id);
} }
int CompareColumns(AuctionHouseSortOrder column, AuctionPosting left, AuctionPosting right) long CompareColumns(AuctionHouseSortOrder column, AuctionPosting left, AuctionPosting right)
{ {
switch (column) switch (column)
{ {
@@ -1755,7 +1755,7 @@ namespace Game
{ {
ulong leftPrice = left.BuyoutOrUnitPrice != 0 ? left.BuyoutOrUnitPrice : (left.BidAmount != 0 ? left.BidAmount : left.MinBid); ulong leftPrice = left.BuyoutOrUnitPrice != 0 ? left.BuyoutOrUnitPrice : (left.BidAmount != 0 ? left.BidAmount : left.MinBid);
ulong rightPrice = right.BuyoutOrUnitPrice != 0 ? right.BuyoutOrUnitPrice : (right.BidAmount != 0 ? right.BidAmount : right.MinBid); ulong rightPrice = right.BuyoutOrUnitPrice != 0 ? right.BuyoutOrUnitPrice : (right.BidAmount != 0 ? right.BidAmount : right.MinBid);
return (int)(leftPrice - rightPrice); return (long)(leftPrice - rightPrice);
} }
case AuctionHouseSortOrder.Name: case AuctionHouseSortOrder.Name:
return left.Bucket.FullName[(int)_locale].CompareTo(right.Bucket.FullName[(int)_locale]); return left.Bucket.FullName[(int)_locale].CompareTo(right.Bucket.FullName[(int)_locale]);
@@ -1766,9 +1766,9 @@ namespace Game
return leftLevel - rightLevel; return leftLevel - rightLevel;
} }
case AuctionHouseSortOrder.Bid: case AuctionHouseSortOrder.Bid:
return (int)(left.BidAmount - right.BidAmount); return (long)(left.BidAmount - right.BidAmount);
case AuctionHouseSortOrder.Buyout: case AuctionHouseSortOrder.Buyout:
return (int)(left.BuyoutOrUnitPrice - right.BuyoutOrUnitPrice); return (long)(left.BuyoutOrUnitPrice - right.BuyoutOrUnitPrice);
default: default:
break; break;
} }
@@ -1858,7 +1858,7 @@ namespace Game
{ {
for (var i = 0; i < _sortCount; ++i) for (var i = 0; i < _sortCount; ++i)
{ {
int ordering = CompareColumns(_sorts[i].SortOrder, left, right); long ordering = CompareColumns(_sorts[i].SortOrder, left, right);
if (ordering != 0) if (ordering != 0)
return (ordering < 0).CompareTo(!_sorts[i].ReverseSort); return (ordering < 0).CompareTo(!_sorts[i].ReverseSort);
} }
@@ -1866,14 +1866,14 @@ namespace Game
return left.Key != right.Key ? 1 : 0; return left.Key != right.Key ? 1 : 0;
} }
int CompareColumns(AuctionHouseSortOrder column, AuctionsBucketData left, AuctionsBucketData right) long CompareColumns(AuctionHouseSortOrder column, AuctionsBucketData left, AuctionsBucketData right)
{ {
switch (column) switch (column)
{ {
case AuctionHouseSortOrder.Price: case AuctionHouseSortOrder.Price:
case AuctionHouseSortOrder.Bid: case AuctionHouseSortOrder.Bid:
case AuctionHouseSortOrder.Buyout: case AuctionHouseSortOrder.Buyout:
return (int)((long)left.MinPrice - (long)right.MinPrice); return (long)(left.MinPrice - right.MinPrice);
case AuctionHouseSortOrder.Name: case AuctionHouseSortOrder.Name:
return left.FullName[(int)_locale].CompareTo(right.FullName[(int)_locale]); return left.FullName[(int)_locale].CompareTo(right.FullName[(int)_locale]);
case AuctionHouseSortOrder.Level: case AuctionHouseSortOrder.Level: