Unicode16 writing bug, in src\io_helpers.cpp
Bug Description: Some Chinese encoded utf16
characters such as '21691' which should be
written '54BB' were being written 54FF because the '|
data[i+1];
' was ORing a negative number '-69' signed instead of
unsigned '187', casting the string to unsigned char fixes
the bug.
function:
size_t io::writeUnicodeText(ID3_Writer& writer, String
data, bool bom)
right code:
unsigned char *pdata = (unsigned char *)
data.c_str();
for (size_t i = 0; i < size; i += 2)
{
unicode_t ch = (pdata[i] << 8) |
pdata[i+1];
writer.writeChars((const unsigned
char*) &ch, 2);
}
wrong code:
for (size_t i = 0; i < size; i += 2)
{
unicode_t ch = (data[i] << 8) | data
[i+1];
writer.writeChars((const unsigned
char*) &ch, 2);
}
Logged In: NO
I have used the following and it works too:
for (size_t i = 0; i < size; i += 2)
{
unicode_t ch = (static_cast<unsigned char>(data[i]) << 8) | static_cast<unsigned char>(data[i+1]);
writer.writeChars((const unsigned char*) &ch, 2);
}