On May 7, 2008, at 10:50 PM, Rodrigo Kumpera wrote: > Hi Luis, > > To have your patch integrated, some changes are needed. First, we > want to default to 32bits sized arrays on 64bits machines, so your > changes must be conditionally compiled. To help with that some > changed to your patch are due. Next are some comments about it: > > ... > > - if (CHECK_MUL_OVERFLOW_UN (n, elem_size)) > - mono_gc_out_of_memory (MYGUINT32_MAX); > + if (CHECK_MUL_OVERFLOW_UN (n, elem_size)) { > + g_print("CHECK_MUL_OVERFLOW_UN(%zd,%zd) failed\n",n, > elem_size); > + mono_gc_out_of_memory (MYGUINT_MAX); > + } > > If you find that keeping such debug code is really important, you > should follow the same pattern of the rest of the project. Take a > look at how DEBUG_IMT is used on object.c.
This was an oversight on my part and should have never made it out. > @@ -3548,34 +3559,30 @@ > /* A single dimensional array with a 0 lower bound is the same > as an szarray */ > if (array_class->rank == 1 && ((array_class->byval_arg.type == > MONO_TYPE_SZARRAY) || (lower_bounds && lower_bounds [0] == 0))) { > len = lengths [0]; > - if ((int) len < 0) > - arith_overflow (); > Why are you removing overflow checks here? That is an error on my part. It should have remained. > @@ -562,6 +607,26 @@ > if (this->bounds == NULL) > return this->max_length; > > + length = this->bounds [dimension].length; > + if (length > G_MAXINT32) > + mono_raise_exception (mono_get_exception_overflow ()); > + > + return length; > +} > > Why throwing an exception here? I'm not sure this is the way to go, > unfortunately this is an area underspecified on ecma. Not that > truncating is a good option either. Now that you are making me look at this code, there is a bug there. When there are no bounds, the length temporary should be set to this- >max_length and the same overflow test applied. The overflow test should be conditionally compiled when some preprocessor variable is defined, as per your previous suggestion. If a big array is passed into a function that is not prepared to handle it, when it tries to get the length, it could end up with a negative number or a positive number which is waay to small. Though ECMA has under-specified here, raising an exception seems to only possible course. /Ortiz/Luis _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list