[Mono-bugs] [Bug 81956][Wis] Changed - ArrayOutOfBounds in BigInteger class

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Sat Aug 4 14:47:26 EDT 2007

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 marek.safar at seznam.cz.


--- shadow/81956	2007-08-02 15:13:06.000000000 -0400
+++ shadow/81956.tmp.30817	2007-08-04 14:47:26.000000000 -0400
@@ -420,6 +420,41 @@
 Can you provide a stack trace of the error from your test case ?
 One possibility is that MS runtime expects special syntax of byte
 array initializer (csc produces __StaticArrayInitTypeSize=<<size>>) to
 work correctly. It's just guess because I cannot test it, it works on
 my machine.
+------- Additional Comments From marek.safar at seznam.cz  2007-08-04 14:47 -------
+OK, It looks better now. I was able to reproduce the issue with the
+compiled sample which you sent me.
+I got errors like this
+System.AccessViolationException: Attempted to read or write protected
+memory. This is often an indication that other memory is corrupt.
+   at Mono.Math.BigInteger.Kernel.SquarePositive(BigInteger bi,
+UInt32[]& wkSpace)
+   at Mono.Math.BigInteger.ModulusRing.OddPow(BigInteger b, BigInteger
+   at Mono.Math.BigInteger.ModPow(BigInteger exp, BigInteger n)
+   at Foo.Calculator.Calculate()
+Which indicates that the problem is in BigInteger class. I also
+recompiled the test sample with csc and I got same exception.
+I check BigInteger class and I think I found the problem.
+public static unsafe void SquarePositive (BigInteger bi, ref uint []
+	uint [] t = wkSpace;
+	wkSpace = bi.data;
+	uint [] d = bi.data;
+	uint dl = bi.length;
+	bi.data = t;  <<<< HERE
+I think this code is not thread safe, bi is shared and it is modified
+by each thread.

More information about the mono-bugs mailing list