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)