diff --git a/src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.AddRange.cs b/src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.AddRange.cs index 26298c68791107..c0309d046580e9 100644 --- a/src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.AddRange.cs +++ b/src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.AddRange.cs @@ -98,5 +98,28 @@ public void AddRange_AddSelfAsEnumerable_ThrowsExceptionWhenNotEmpty() Assert.Throws(() => list.AddRange(list.Where(_ => true))); Assert.Equal(6, list.Count); } + + [Fact] + public void AddRange_CollectionWithLargeCount_ThrowsOverflowException() + { + List list = GenericListFactory(count: 1); + ICollection collection = new CollectionWithLargeCount(); + + Assert.Throws(() => list.AddRange(collection)); + } + + private class CollectionWithLargeCount : ICollection + { + 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 GetEnumerator() => throw new NotImplementedException(); + public bool Remove(T item) => throw new NotImplementedException(); + IEnumerator IEnumerable.GetEnumerator() => throw new NotImplementedException(); + } } } diff --git a/src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.InsertRange.cs b/src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.InsertRange.cs index d72fd45dd00cc9..4074bde32c2a5f 100644 --- a/src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.InsertRange.cs +++ b/src/libraries/System.Collections/tests/Generic/List/List.Generic.Tests.InsertRange.cs @@ -47,5 +47,14 @@ public void InsertRange_MatchesExpectedContents() 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 list = GenericListFactory(count: 1); + ICollection collection = new CollectionWithLargeCount(); + + Assert.Throws(() => list.InsertRange(0, collection)); + } } } diff --git a/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/List.cs b/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/List.cs index 6f1340e318fb5a..a7b9aa6ea07dab 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/List.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/List.cs @@ -254,7 +254,7 @@ public void AddRange(IEnumerable collection) { if (_items.Length - _size < count) { - Grow(_size + count); + Grow(checked(_size + count)); } c.CopyTo(_items, _size); @@ -787,7 +787,7 @@ public void InsertRange(int index, IEnumerable collection) { if (_items.Length - _size < count) { - Grow(_size + count); + Grow(checked(_size + count)); } if (index < _size) {