http://bugzilla.novell.com/show_bug.cgi?id=622101

http://bugzilla.novell.com/show_bug.cgi?id=622101#c0


           Summary: Array.Sort broken when using custom comparer that
                    sorts `null' differently.
    Classification: Mono
           Product: Mono: Class Libraries
           Version: unspecified
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: CORLIB
        AssignedTo: [email protected]
        ReportedBy: [email protected]
         QAContact: [email protected]
          Found By: ---
           Blocker: ---


The optimizations introduced by the suggestions in #351638 broke sorting in
cases like this:


This patch broke some things in some subtle ways.

The code that pushes the nulls to the beginning of the array assumes that this
is how the user wants the data sorted, which is not the case if he provides his
own comparer.

Consider this sample which is now broken:

using System;
using System.Collections;

class  Test {
    static void Main ()
    {
        string[] s1 = new string[9]{"Jack", "Mary", "Mike", null, "Peter",
"Boy", "Tom", null, "Allin"};
        IComparer d = new D();
        Array.Sort(s1, d);
        }
}

class D : IComparer {
        public int Compare(object x, object y)
        {
        if (x == null) return 1;
        if (y == null) return -1;
        return ((string)x).CompareTo((string)y);
        }
}

The above case should put all the null elements at the end of the array, not at
the beginning. 

This patch tries to solve this by removing the code that arbitrarily moves the
nulls to the beginning by handling those in the loops.

-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to