[Mono-bugs] [Bug 463141] New: AddUserString broken.

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Wed Dec 31 14:44:48 EST 2008


           Summary: AddUserString broken.
           Product: Mono: Class Libraries
           Version: 2.2.x
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: Cecil
        AssignedTo: jbevain at novell.com
        ReportedBy: high6 at live.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---

You fixed this problem in ReadStringAt but not AddUserString.

            byte[] us = Encoding.Unicode.GetBytes(str);

Encoding.Unicode does not function properly and breaks true unicode strings

I whipped up a fix that I am using (You can of course do a better neater fix).

        byte[] Str2Bytes(string str)
            byte[] ret = new byte[str.Length * 2];
            int len = ret.Length;
            for (int i = 0, j = 0; i < len; i += 2, j++)
                ret[i] = (byte)(str[j] & 0xFF);
                ret[i + 1] = (byte)(str[j] >> 8);
            return ret;

        public uint AddUserString(string str)
            if (str == null)
                return 0;

            if (m_usCache.Contains(str))
                return (uint)m_usCache[str];

            uint pointer = (uint)m_usWriter.BaseStream.Position;
            m_usCache[str] = pointer;
            byte[] us = Str2Bytes(str);
            Utilities.WriteCompressedInteger(m_usWriter, us.Length + 1);
            m_usWriter.Write((byte)(RequiresSpecialHandling(us) ? 1 : 0));
            return pointer;

Basically I have it manually create a byte[] from a string instead of using
Encoding.Unicode. Just like in ReadStringAt().

Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.

More information about the mono-bugs mailing list