1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00

Fixed UTF16/32 encoding issues regarding null termination

This commit is contained in:
Brian Fiete 2022-04-22 18:34:17 -07:00
parent 5fd9552331
commit cf6ade5e45
4 changed files with 8 additions and 11 deletions

View file

@ -132,7 +132,7 @@ namespace System
int allocSize = UTF16.GetEncodedLen(key);
char16* encodedData = scope char16[allocSize]*;
int encodedLen = UTF16.Encode(key, encodedData, allocSize);
int byteLen = (encodedLen - 1) * 2;
int byteLen = encodedLen * 2;
Internal.MemCpy(data.GrowUnitialized(byteLen), encodedData, byteLen);
data.Add((uint8)'='); data.Add((uint8)0);
@ -141,7 +141,7 @@ namespace System
allocSize = UTF16.GetEncodedLen(value);
encodedData = scope char16[allocSize]*;
encodedLen = UTF16.Encode(value, encodedData, allocSize);
byteLen = (encodedLen - 1) * 2;
byteLen = encodedLen * 2;
Internal.MemCpy(data.GrowUnitialized(byteLen), encodedData, byteLen);
data.Add(0); data.Add(0); // Single UTF16 char

View file

@ -2516,11 +2516,11 @@ namespace System
c_wchar* buf;
if (encodedLen < 128)
{
buf = scope:mixin c_wchar[encodedLen]* ( ? );
buf = scope:mixin c_wchar[encodedLen+1]* ( ? );
}
else
{
buf = new c_wchar[encodedLen]* ( ? );
buf = new c_wchar[encodedLen+1]* ( ? );
defer:mixin delete buf;
}
@ -2528,6 +2528,7 @@ namespace System
UTF16.Encode(this, (.)buf, encodedLen);
else
UTF32.Encode(this, (.)buf, encodedLen);
buf[encodedLen] = 0;
buf
}
@ -3805,15 +3806,16 @@ namespace System
char16* buf;
if (encodedLen < 128)
{
buf = scope:mixin char16[encodedLen]* ( ? );
buf = scope:mixin char16[encodedLen+1]* ( ? );
}
else
{
buf = new char16[encodedLen]* ( ? );
buf = new char16[encodedLen+1]* ( ? );
defer:mixin delete buf;
}
UTF16.Encode(this, buf, encodedLen);
buf[encodedLen] = 0;
buf
}
}

View file

@ -170,7 +170,6 @@ namespace System.Text
else
len += 2;
}
len++; // null terminator
return len;
}
@ -223,7 +222,6 @@ namespace System.Text
EncodeChar((char16)(valLeft & 0x3FF) + 0xDC00);
}
}
EncodeChar(0);
int encodedLen = bufLen - bufLeft;
if (bufLeft < 0)

View file

@ -106,7 +106,6 @@ namespace System.Text
{
len++;
}
len++; // null terminator
return len;
}
@ -132,10 +131,8 @@ namespace System.Text
for (var c in str.DecodedChars)
{
EncodeChar((char32)c);
}
EncodeChar(0);
int encodedLen = bufLen - bufLeft;
if (bufLeft < 0)