Skip to content

Commit de45317

Browse files
NemesisXBjosesimoes
authored andcommitted
Fix Hashtable.CopyTo (#23)
1 parent d9e569d commit de45317

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

source/System/Collections/HashTable.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,13 @@ private void Rehash(int newSize)
140140
//implementation for KeyCollection and ValueCollection copyTo method
141141
private void CopyToCollection(Array array, int index, EnumeratorType type)
142142
{
143-
if (index < 0 && index > _numberOfBuckets) throw new IndexOutOfRangeException("index");
143+
if (index < 0 || index >= array.Length) throw new IndexOutOfRangeException("index");
144+
if ((index + Count) > array.Length) throw new IndexOutOfRangeException("array length");
144145

145-
var j = 0;
146+
var j = index;
146147
var len = array.Length;
147148

148-
for (var i = index; i < _numberOfBuckets; i++)
149+
for (var i = 0; i < _numberOfBuckets; i++)
149150
{
150151
for (var cur = _buckets[i]; cur != null && j < len; cur = cur.next)
151152
{
@@ -229,15 +230,18 @@ public object SyncRoot
229230
/// <param name="index">The zero-based index in array at which copying begins.</param>
230231
public void CopyTo(Array array, int index)
231232
{
232-
if (index < 0 && index > _buckets.Length) throw new IndexOutOfRangeException("index");
233+
if (index < 0 || index >= array.Length) throw new IndexOutOfRangeException("index");
234+
if ((index + _count) > array.Length) throw new IndexOutOfRangeException("array length");
233235

234-
var j = 0;
236+
var j = index;
235237
var len = array.Length;
236-
for (var i = index; i < _buckets.Length; i++)
238+
239+
for (var i = 0; i < _numberOfBuckets; i++)
237240
{
238241
for (var cur = _buckets[i]; cur != null && j < len; cur = cur.next)
239242
{
240243
((IList)array)[j] = new DictionaryEntry(cur.key, cur.value);
244+
241245
j++;
242246
}
243247
}

0 commit comments

Comments
 (0)