@@ -718,7 +718,6 @@ ves_icall_System_Array_FastCopy (MonoArray *source, int source_idx, MonoArray* d
718718 void * source_addr ;
719719 MonoClass * src_class ;
720720 MonoClass * dest_class ;
721- int i ;
722721
723722 MONO_ARCH_SAVE_REGS ;
724723
@@ -742,6 +741,10 @@ ves_icall_System_Array_FastCopy (MonoArray *source, int source_idx, MonoArray* d
742741
743742 /* Case1: object[] -> valuetype[] (ArrayList::ToArray) */
744743 if (src_class == mono_defaults .object_class && dest_class -> valuetype ) {
744+ // FIXME: This is racy
745+ return FALSE;
746+ /*
747+ int i;
745748 int has_refs = dest_class->has_references;
746749 for (i = source_idx; i < source_idx + length; ++i) {
747750 MonoObject *elem = mono_array_get (source, MonoObject*, i);
@@ -762,6 +765,7 @@ ves_icall_System_Array_FastCopy (MonoArray *source, int source_idx, MonoArray* d
762765 memcpy (addr, (char *)elem + sizeof (MonoObject), element_size);
763766 }
764767 return TRUE;
768+ */
765769 }
766770
767771 /* Check if we're copying a char[] <==> (u)short[] */
@@ -772,13 +776,18 @@ ves_icall_System_Array_FastCopy (MonoArray *source, int source_idx, MonoArray* d
772776 if (mono_class_is_subclass_of (src_class , dest_class , FALSE))
773777 ;
774778 /* Case2: object[] -> reftype[] (ArrayList::ToArray) */
775- else if (mono_class_is_subclass_of (dest_class , src_class , FALSE))
779+ else if (mono_class_is_subclass_of (dest_class , src_class , FALSE)) {
780+ // FIXME: This is racy
781+ return FALSE;
782+ /*
783+ int i;
776784 for (i = source_idx; i < source_idx + length; ++i) {
777785 MonoObject *elem = mono_array_get (source, MonoObject*, i);
778786 if (elem && !mono_object_isinst (elem, dest_class))
779787 return FALSE;
780788 }
781- else
789+ */
790+ } else
782791 return FALSE;
783792 }
784793
0 commit comments