Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by [EMAIL PROTECTED]

http://bugzilla.ximian.com/show_bug.cgi?id=77195

--- shadow/77195        2006-01-10 10:41:41.000000000 -0500
+++ shadow/77195.tmp.5190       2006-01-10 10:41:41.000000000 -0500
@@ -0,0 +1,123 @@
+Bug#: 77195
+Product: Mono: Class Libraries
+Version: unspecified
+OS: All
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Major
+Component: CORLIB
+AssignedTo: [EMAIL PROTECTED]                            
+ReportedBy: [EMAIL PROTECTED]               
+QAContact: [EMAIL PROTECTED]
+TargetMilestone: ---
+URL: 
+Summary: BitArray.CopyTo throws ArgumentException when 0-length BitArray is 
copied
+
+Please fill in this template when reporting a bug, unless you know what you
+are doing.
+Description of Problem:
+
+
+Steps to reproduce the problem:
+1. Use any System.Collection.BitArray of Length=0
+2. Allocate also Length=0 byte Array
+3. Try to use BitArray.CopyTo(byteArray, 0)
+Example:
+using System;
+using System.Collections;
+
+namespace BitArrTest
+{
+       class Class1
+       {
+               [STAThread]
+               static void Main(string[] args)
+               {
+                       ArrayList al = new ArrayList();
+                       //al.Add(1);
+                       //al.Add(0);
+                       BitArray ba = new BitArray(al.Count);
+                       for(int i = 0; i < al.Count; i++)
+                               if((int)al[i] != 0)
+                                       ba[i] = true;
+                               else
+                                       ba[i] = false;
+                       byte[] bya = new byte[(al.Count+7)/8];
+                       ba.CopyTo(bya, 0); // When al empty then 
ArgumentException here.
+                       Console.WriteLine("Done");
+               }
+       }
+}
+
+std compile and run
+
+
+Actual Results:
+fik:~/mono/vt# mono BitArrTest.exe
+
+Unhandled Exception: System.ArgumentException: index
+Parameter name: index is greater than array.Length
+in <0x003d4> System.Collections.BitArray:CopyTo (System.Array array, Int32
+index)
+in <0x00100> BitArrTest.Class1:Main (System.String[] args)
+fik:~/mono/vt#
+
+
+Expected Results:
+Print: Done. (byte array created with length=0, no actual data copy)
+
+How often does this happen? 
+allways when destination array is length=0 (
+
+Additional Information:
+
+Possible part:
+
+               public void CopyTo (Array array, int index)
+               {
+                       if (array == null)
+                               throw new ArgumentNullException ("array");
+                       if (index < 0)
+                               throw new ArgumentOutOfRangeException ("index");
+                       
+                       if (array.Rank != 1)
+                               throw new ArgumentException ("array", "Array 
rank must be 1");
+                       
+                       if (index >= array.Length) // Possible error here! add 
|| index == 0 ->
+which provides success for 0len to 0len array copy
+                               throw new ArgumentException ("index", "index is 
greater than
+array.Length");
+                       
+                       // in each case, check to make sure enough space in 
array
+                       
+                       if (array is bool []) {
+                               if (array.Length - index < _length)
+                                        throw new ArgumentException ();
+                               
+                               bool [] barray = (bool []) array;
+                               
+                               // Copy the bits into the array
+                               for (int i = 0; i < _length; i++)
+                                       barray[index + i] = this [i];
+                               
+                       } else if (array is byte []) {
+                               int numbytes = (_length + 7) / 8;
+                               
+                               if ((array.Length - index) < numbytes)
+                                        throw new ArgumentException ();
+                               
+                               byte [] barray = (byte []) array;
+                               // Copy the bytes into the array
+                               for (int i = 0; i < numbytes; i++)
+                                       barray [index + i] = getByte (i);
+                               
+                       } else if (array is int []) {
+                               
+                               Array.Copy (_array, 0, array, index, (_length + 
31) / 32);
+                               
+                       } else {
+                               throw new ArgumentException ("array", 
"Unsupported type");
+                       }
+               }
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to