[Mono-dev] String.Compare bug

Atsushi Eno atsushieno at veritas-vos-liberabit.com
Thu Apr 14 08:35:16 EDT 2011


It is now fixed in git. If you would like to see what's inside the sausage:
https://github.com/mono/mono/commit/8277f4a

NET is too inconsistent on how to process \0 in Compare(), IndexOf() 
and LastIndexOf(). IMO We should totally switch to .NET 4's strategy to 
eliminate
extraneous misuse of CompareInfo.

Atsushi Eno

(2011/04/14 16:02), Nicklas Overgaard wrote:
> Hi,
>
> It's now filed as bug #687444
>
> /Nicklas
>
> On Wed, 2011-04-13 at 17:56 -0300, Rodrigo Kumpera wrote:
>> Please file a bug report so this bug isn't forgotten.
>>
>> On Wed, Apr 13, 2011 at 3:52 PM, Nicklas Overgaard<nicklas at isharp.dk>
>> wrote:
>>          Hi again,
>>
>>          The previously attached patch does not apply for some reason.
>>          A new one
>>          is attached here.
>>
>>          Sorry about that.
>>
>>          /Nicklas
>>
>>
>>          On Wed, 2011-04-13 at 18:05 +0200, Nicklas Overgaard wrote:
>>          >  Hi mono devers!
>>          >
>>          >  I discovered a bug in String.Compare when using a UTF8
>>          string created
>>          >  from a byte array with a zero-byte at the end. It's
>>          converted to the
>>          >  same string on both .net and mono, however, String.Compare
>>          on .net is
>>          >  different from String.Compare on mono.
>>          >
>>          >  The issue is the following:
>>          >
>>          >  Mono reports "1" on the string compare, signaling that the
>>          converted
>>          >  string is "larger" than the hard-coded string I compare it
>>          to. And it
>>          >  kinda is - the byte array is converted to "%EOF\0" and the
>>          hardcoded
>>          >  string is just "%EOF" - but .net manages to ignore the '\0'
>>          when doing
>>          >  the compare, which results in "0" (equal strings).
>>          >
>>          >  Attached is a patch, which adds a test-case to
>>          >  'mcs/class/corlib/Test/System' which shows the issue -
>>          >  "CompareNotWorking3" to follow the lingo :)
>>          >
>>          >  I have tried to track the issue down myself in
>>          String.Compare, but I
>>          >  gave up due to the complexity of the underlying code.
>>          >
>>          >  As a final note, I'm running with UTF8 culture on my Linux
>>          box, where
>>          >  the issue is showing up.
>>          >
>>          >  Best regards,
>>          >
>>          >  Nicklas Overgaard
>>          >
>>          >
>>
>>          >  _______________________________________________
>>          >  Mono-devel-list mailing list
>>          >  Mono-devel-list at lists.ximian.com
>>          >  http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>
>>
>>          _______________________________________________
>>          Mono-devel-list mailing list
>>          Mono-devel-list at lists.ximian.com
>>          http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>
>>
>> _______________________________________________
>> Mono-devel-list mailing list
>> Mono-devel-list at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>
>



More information about the Mono-devel-list mailing list