Fix #76116. (#76747)
authorEirik Tsarpalis <eirik.tsarpalis@gmail.com>
Fri, 7 Oct 2022 21:25:17 +0000 (22:25 +0100)
committerGitHub <noreply@github.com>
Fri, 7 Oct 2022 21:25:17 +0000 (22:25 +0100)
src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.AddRange.cs
src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.InsertRange.cs
src/libraries/System.Private.CoreLib/src/System/Collections/Generic/List.cs

index 26298c6..c0309d0 100644 (file)
@@ -98,5 +98,28 @@ namespace System.Collections.Tests
             Assert.Throws<InvalidOperationException>(() => list.AddRange(list.Where(_ => true)));
             Assert.Equal(6, list.Count);
         }
+
+        [Fact]
+        public void AddRange_CollectionWithLargeCount_ThrowsOverflowException()
+        {
+            List<T> list = GenericListFactory(count: 1);
+            ICollection<T> collection = new CollectionWithLargeCount();
+
+            Assert.Throws<OverflowException>(() => list.AddRange(collection));
+        }
+
+        private class CollectionWithLargeCount : ICollection<T>
+        {
+            public int Count => int.MaxValue;
+
+            public bool IsReadOnly => throw new NotImplementedException();
+            public void Add(T item) => throw new NotImplementedException();
+            public void Clear() => throw new NotImplementedException();
+            public bool Contains(T item) => throw new NotImplementedException();
+            public void CopyTo(T[] array, int arrayIndex) => throw new NotImplementedException();
+            public IEnumerator<T> GetEnumerator() => throw new NotImplementedException();
+            public bool Remove(T item) => throw new NotImplementedException();
+            IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException();
+        }
     }
 }
index d72fd45..4074bde 100644 (file)
@@ -47,5 +47,14 @@ namespace System.Collections.Tests
             Assert.Equal(12, list.Count);
             Assert.Equal(new[] { 6, 5, 4, 100, 99, 98, 3, 2, 1, 0, -1, -2 }, list);
         }
+
+        [Fact]
+        public void InsertRange_CollectionWithLargeCount_ThrowsOverflowException()
+        {
+            List<T> list = GenericListFactory(count: 1);
+            ICollection<T> collection = new CollectionWithLargeCount();
+
+            Assert.Throws<OverflowException>(() => list.InsertRange(0, collection));
+        }
     }
 }
index 6f1340e..a7b9aa6 100644 (file)
@@ -254,7 +254,7 @@ namespace System.Collections.Generic
                 {
                     if (_items.Length - _size < count)
                     {
-                        Grow(_size + count);
+                        Grow(checked(_size + count));
                     }
 
                     c.CopyTo(_items, _size);
@@ -787,7 +787,7 @@ namespace System.Collections.Generic
                 {
                     if (_items.Length - _size < count)
                     {
-                        Grow(_size + count);
+                        Grow(checked(_size + count));
                     }
                     if (index < _size)
                     {