Safety checks for perf fixes
diff --git a/EPPlus/CellStore.cs b/EPPlus/CellStore.cs index 623ab56..0f8a600 100644 --- a/EPPlus/CellStore.cs +++ b/EPPlus/CellStore.cs
@@ -68,7 +68,7 @@ { var page = (short)(Row >> CellStore<int>.pageBits); _searchIx.Index = page; - var res = (page>=0 && page<_pages.Length && _pages[page].Index == page) ? page : Array.BinarySearch(_pages, 0, PageCount, _searchIx); + var res = (_pages!=null && page>=0 && page<_pages.Length && _pages[page]!=null && _pages[page].Index == page) ? page : Array.BinarySearch(_pages, 0, PageCount, _searchIx); if (res >= 0) { GetPage(Row, ref res); @@ -263,7 +263,7 @@ internal int GetPosition(int offset) { _searchIx.Index = (short)offset; - return (offset>0 && offset-1<Rows.Length && Rows[offset-1].Index == offset) ? offset-1 : Array.BinarySearch(Rows, 0, RowCount, _searchIx); + return (Rows!=null && offset>0 && offset-1<Rows.Length && Rows[offset-1]!=null && Rows[offset-1].Index == offset) ? offset-1 : Array.BinarySearch(Rows, 0, RowCount, _searchIx); } internal int GetNextRow(int row) { @@ -355,7 +355,7 @@ internal int GetPosition(int Column) { _searchIx.Index = (short)Column; - return (Column>0 && Column-1<_columnIndex.Length && _columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, _searchIx); + return (_columnIndex!=null && Column>0 && Column-1<_columnIndex.Length && _columnIndex[Column-1]!=null && _columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, _searchIx); } internal CellStore<T> Clone() { @@ -568,7 +568,7 @@ } short ix = (short)(Row - pageItem.IndexOffset); _searchIx.Index = ix; - var cellPos = (ix>0 && ix-1<pageItem.Rows.Length && pageItem.Rows[ix-1].Index == ix) ? ix-1 : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx); + var cellPos = (pageItem.Rows!=null && ix>0 && ix-1<pageItem.Rows.Length && pageItem.Rows[ix-1]!=null && pageItem.Rows[ix-1].Index == ix) ? ix-1 : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx); if (cellPos >= 0) { return pageItem.Rows[cellPos].IndexPointer; @@ -609,7 +609,7 @@ { lock (_columnIndex) { - var col = (Column>0 && Column-1 < _columnIndex.Length && _columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, new IndexBase() { Index = (short)(Column) }); + var col = (_columnIndex!=null && Column>0 && Column-1 < _columnIndex.Length && _columnIndex[Column-1]!=null && _columnIndex[Column-1].Index == Column) ? Column-1 : Array.BinarySearch(_columnIndex, 0, ColumnCount, new IndexBase() { Index = (short)(Column) }); var page = (short)(Row >> pageBits); if (col >= 0) { @@ -645,7 +645,7 @@ short ix = (short)(Row - ((pageItem.Index << pageBits) + pageItem.Offset)); _searchIx.Index = ix; - var cellPos = (ix>=0 && ix<pageItem.Rows.Length && pageItem.Rows[ix].Index == ix) ? ix : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx); + var cellPos = (pageItem.Rows!=null && ix>=0 && ix<pageItem.Rows.Length && pageItem.Rows[ix]!=null && pageItem.Rows[ix].Index == ix) ? ix : Array.BinarySearch(pageItem.Rows, 0, pageItem.RowCount, _searchIx); if (cellPos < 0) { cellPos = ~cellPos;