From dc6021a90a0cd8373bd821a79abd72be512e7da7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 2 Sep 2026 14:42:23 +0000 Subject: [PATCH 1/5] Fix SheetRange Equals null/type safety Co-authored-by: SteveWinward <2002602+SteveWinward@users.noreply.github.com> --- .../SheetRangeTests.cs | 22 +++++++++++++++++++ src/GoogleSheetsWrapper/SheetRange.cs | 16 +++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs b/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs index 53de095..24c86bb 100644 --- a/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs +++ b/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs @@ -180,6 +180,28 @@ public void SheetRangeNoTabNameSingleCellR1C1FormattedCorrectly() Assert.That(newRange, Is.EqualTo(range)); } + [Test] + public void SheetRangeEqualsHandlesNullAndDifferentObjectType() + { + var range = new SheetRange("Tab", 1, 1, 2, 2); + + Assert.That(range.Equals((SheetRange)null), Is.False); + Assert.That(range.Equals((object)null), Is.False); + Assert.That(range.Equals("not-a-range"), Is.False); + } + + [Test] + public void SheetRangeEqualsUsesRangeCoordinatesAndTabName() + { + var rangeA = new SheetRange("Tab", 1, 1, 2, 2); + var rangeB = new SheetRange("Tab", 1, 1, 2, 2); + var rangeC = new SheetRange("Tab", 1, 1, 3, 2); + + Assert.That(rangeA.Equals(rangeB), Is.True); + Assert.That(rangeA.GetHashCode(), Is.EqualTo(rangeB.GetHashCode())); + Assert.That(rangeA.Equals(rangeC), Is.False); + } + private static void AssertLettersFromColumnID(int columnID, string expectedLetters) { var result = SheetRange.GetLettersFromColumnID(columnID); diff --git a/src/GoogleSheetsWrapper/SheetRange.cs b/src/GoogleSheetsWrapper/SheetRange.cs index fdd14ad..707c308 100644 --- a/src/GoogleSheetsWrapper/SheetRange.cs +++ b/src/GoogleSheetsWrapper/SheetRange.cs @@ -266,13 +266,19 @@ public static int GetHashCode(SheetRange obj) /// when the ranges are equal; otherwise, . public bool Equals(SheetRange other) { + if (ReferenceEquals(null, other)) + { + return false; + } + + if (ReferenceEquals(this, other)) + { + return true; + } + return - A1Notation == other.A1Notation && - CanSupportA1Notation == other.CanSupportA1Notation && EndColumn == other.EndColumn && EndRow == other.EndRow && - IsSingleCellRange == other.IsSingleCellRange && - R1C1Notation == other.R1C1Notation && StartColumn == other.StartColumn && StartRow == other.StartRow && TabName == other.TabName; @@ -285,7 +291,7 @@ public bool Equals(SheetRange other) /// when the object is an equal range; otherwise, . public override bool Equals(object obj) { - return Equals((SheetRange)obj); + return obj is SheetRange other && Equals(other); } /// From 430f0f0d90cf4f47ff5ca374ddd97211373ebd05 Mon Sep 17 00:00:00 2001 From: Steve Winward <2002602+SteveWinward@users.noreply.github.com> Date: Wed, 2 Sep 2026 10:52:58 -0400 Subject: [PATCH 2/5] Fix null check in Equals method for SheetRange --- src/GoogleSheetsWrapper/SheetRange.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GoogleSheetsWrapper/SheetRange.cs b/src/GoogleSheetsWrapper/SheetRange.cs index 707c308..ced1664 100644 --- a/src/GoogleSheetsWrapper/SheetRange.cs +++ b/src/GoogleSheetsWrapper/SheetRange.cs @@ -266,7 +266,7 @@ public static int GetHashCode(SheetRange obj) /// when the ranges are equal; otherwise, . public bool Equals(SheetRange other) { - if (ReferenceEquals(null, other)) + if (other is null) { return false; } @@ -305,4 +305,4 @@ public override int GetHashCode() #endregion } -} \ No newline at end of file +} From 482a710b5d61d2f1e097aeb8fa2974d3f6b70323 Mon Sep 17 00:00:00 2001 From: Steve Winward <2002602+SteveWinward@users.noreply.github.com> Date: Wed, 2 Sep 2026 10:53:38 -0400 Subject: [PATCH 3/5] Refactor equality check in SheetRange class --- src/GoogleSheetsWrapper/SheetRange.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/GoogleSheetsWrapper/SheetRange.cs b/src/GoogleSheetsWrapper/SheetRange.cs index ced1664..5da2523 100644 --- a/src/GoogleSheetsWrapper/SheetRange.cs +++ b/src/GoogleSheetsWrapper/SheetRange.cs @@ -277,8 +277,12 @@ public bool Equals(SheetRange other) } return + A1Notation == other.A1Notation && + CanSupportA1Notation == other.CanSupportA1Notation && EndColumn == other.EndColumn && EndRow == other.EndRow && + IsSingleCellRange == other.IsSingleCellRange && + R1C1Notation == other.R1C1Notation && StartColumn == other.StartColumn && StartRow == other.StartRow && TabName == other.TabName; From ff7609fcdb63a235a9122328c7d15d3d635714e7 Mon Sep 17 00:00:00 2001 From: Steve Winward <2002602+SteveWinward@users.noreply.github.com> Date: Wed, 2 Sep 2026 10:55:41 -0400 Subject: [PATCH 4/5] Bump version from 2.0.27 to 2.0.28 --- src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj b/src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj index 43e758f..5bd4b22 100644 --- a/src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj +++ b/src/GoogleSheetsWrapper/GoogleSheetsWrapper.csproj @@ -8,7 +8,7 @@ https://github.com/SteveWinward/GoogleSheetsWrapper LICENSE https://github.com/SteveWinward/GoogleSheetsWrapper - 2.0.27 + 2.0.28 Google Sheets README.md A simple wrapper library that makes it easier to perform CRUD operations against Google Sheets spreadsheets. From 4955936dd88f87c01e5893503a72bae2f41d88d1 Mon Sep 17 00:00:00 2001 From: Steve Winward <2002602+SteveWinward@users.noreply.github.com> Date: Wed, 2 Sep 2026 11:03:42 -0400 Subject: [PATCH 5/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs b/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs index 24c86bb..1e4540e 100644 --- a/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs +++ b/src/GoogleSheetsWrapper.Tests/SheetRangeTests.cs @@ -200,6 +200,13 @@ public void SheetRangeEqualsUsesRangeCoordinatesAndTabName() Assert.That(rangeA.Equals(rangeB), Is.True); Assert.That(rangeA.GetHashCode(), Is.EqualTo(rangeB.GetHashCode())); Assert.That(rangeA.Equals(rangeC), Is.False); + + // Derived notation/flags should not participate in equality + var mutated = new SheetRange("Tab", 1, 1, 2, 2); + mutated.EndColumn = null; + var constructed = new SheetRange("Tab", 1, 1, null, 2); + + Assert.That(mutated.Equals(constructed), Is.True); } private static void AssertLettersFromColumnID(int columnID, string expectedLetters)