diff --git a/src/EPPlus/Core/ChangableDictionary.cs b/src/EPPlus/Core/ChangableDictionary.cs index 7668b18cc..260f7a484 100644 --- a/src/EPPlus/Core/ChangableDictionary.cs +++ b/src/EPPlus/Core/ChangableDictionary.cs @@ -66,7 +66,7 @@ internal virtual void InsertAndShift(int fromPosition, int add) pos = ~pos; } - if (pos + 1 >= _index[0].Length - 1) + if (_count >= _index[0].Length - 1) { Array.Resize(ref _index[0], _index[0].Length << 1); Array.Resize(ref _index[1], _index[1].Length << 1); diff --git a/src/EPPlusTest/Issues/WorksheetIssues.cs b/src/EPPlusTest/Issues/WorksheetIssues.cs index a7cd11ea6..13aaf0530 100644 --- a/src/EPPlusTest/Issues/WorksheetIssues.cs +++ b/src/EPPlusTest/Issues/WorksheetIssues.cs @@ -4,6 +4,7 @@ using OfficeOpenXml.Drawing; using OfficeOpenXml.Drawing.Chart; using OfficeOpenXml.FormulaParsing; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using OfficeOpenXml.FormulaParsing.Excel.Functions.MathFunctions; using OfficeOpenXml.RichData; @@ -1112,5 +1113,22 @@ public void i2258() Assert.AreEqual("Negative 4000,000", d3); } + [TestMethod] + public void InsertAndShift_ShouldNotThrow_WhenArrayIsFull() + { + using var package = new ExcelPackage(); + var sheet = package.Workbook.Worksheets.Add("Sheet1"); + + // Fill 7 columns with formatting to trigger the boundary condition + for (int col = 1; col <= 7; col++) + { + sheet.Column(col).Width = 15; + } + + // These two inserts should not throw ArgumentException + sheet.InsertColumn(3, 1); + sheet.InsertColumn(5, 1); + } + } }