[Mono-dev] String.Compare bug

Nicklas Overgaard nicklas at isharp.dk
Wed Apr 13 12:05:11 EDT 2011

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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: string-compare-test.patch
Type: text/x-patch
Size: 934 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20110413/2faf54b0/attachment.bin 

More information about the Mono-devel-list mailing list