From fb1f7e0a4cf242d954499e917bf7b8cc13673861 Mon Sep 17 00:00:00 2001 From: Mason McGlothlin Date: Fri, 7 Jun 2019 10:00:03 -0500 Subject: [PATCH] Prevent index out of array bounds exception Convert short to int because we were overflowing the value and this was causing and index out of bounds exception when accessing an array. Eliminated unnecessary cast --- EPPlus/CellStore.cs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/EPPlus/CellStore.cs b/EPPlus/CellStore.cs index 17ad07bd..f7a796c8 100644 --- a/EPPlus/CellStore.cs +++ b/EPPlus/CellStore.cs @@ -30,11 +30,8 @@ *******************************************************************************/ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Collections; using OfficeOpenXml; -using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; internal class IndexBase : IComparable { @@ -53,7 +50,7 @@ internal int IndexPointer get; set; } - internal short Index; + internal int Index; public int CompareTo(IndexItem other) { return Index - other.Index; @@ -653,7 +650,7 @@ internal void SetValue(int Row, int Column, T Value) pageItem = _columnIndex[col]._pages[pos]; } - short ix = (short)(Row - ((pageItem.Index << pageBits) + pageItem.Offset)); + int ix = Row - ((pageItem.Index << pageBits) + pageItem.Offset); _searchItem.Index = ix; var cellPos = Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchItem); if (cellPos < 0) @@ -671,7 +668,7 @@ internal void SetValue(int Row, int Column, T Value) col = ~col; AddColumn(col, Column); AddPage(_columnIndex[col], 0, page); - short ix = (short)(Row - (page << pageBits)); + int ix = Row - (page << pageBits); AddCell(_columnIndex[col], 0, 0, ix, Value); } } @@ -742,7 +739,7 @@ internal void SetRangeValueSpecial(int fromRow, int fromColumn, int toRow, int t pageItem = _columnIndex[col]._pages[pos]; } - short ix = (short)(rowIx - ((pageItem.Index << pageBits) + pageItem.Offset)); + int ix = rowIx - ((pageItem.Index << pageBits) + pageItem.Offset); _searchItem.Index = ix; var cellPos = Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchItem); if (cellPos < 0) @@ -761,7 +758,7 @@ internal void SetRangeValueSpecial(int fromRow, int fromColumn, int toRow, int t col = ~col; AddColumn(col, colIx); AddPage(_columnIndex[col], 0, page); - short ix = (short)(rowIx - (page << pageBits)); + int ix = rowIx - (page << pageBits); AddCell(_columnIndex[col], 0, 0, ix, default(T)); Updater(_values, _columnIndex[col]._pages[0].Rows[0].IndexPointer, rowIx, colIx, Value); } @@ -812,7 +809,7 @@ internal void SetValueSpecial(int Row, int Column, SetValueDelegate Updater, obj pageItem = _columnIndex[col]._pages[pos]; } - short ix = (short)(Row - ((pageItem.Index << pageBits) + pageItem.Offset)); + int ix = Row - ((pageItem.Index << pageBits) + pageItem.Offset); _searchItem.Index = ix; var cellPos = Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchItem); if (cellPos < 0) @@ -831,7 +828,7 @@ internal void SetValueSpecial(int Row, int Column, SetValueDelegate Updater, obj col = ~col; AddColumn(col, Column); AddPage(_columnIndex[col], 0, page); - short ix = (short)(Row - (page << pageBits)); + int ix = Row - (page << pageBits); AddCell(_columnIndex[col], 0, 0, ix, default(T)); Updater(_values, _columnIndex[col]._pages[0].Rows[0].IndexPointer, Value); } @@ -1421,7 +1418,7 @@ internal static int GetSize(int size) } return newSize; } - private void AddCell(ColumnIndex columnIndex, int pagePos, int pos, short ix, T value) + private void AddCell(ColumnIndex columnIndex, int pagePos, int pos, int ix, T value) { PageIndex pageItem = columnIndex._pages[pagePos]; if (pageItem.RowCount == pageItem.Rows.Length)