// (this is the ideal solution)
if (charCount == 0 || bytes.Length == byteIndex)
return;
+ if (charIndex < 0 || charIndex > chars.Length) {
+ throw new ArgumentOutOfRangeException
+ ("charIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if (byteIndex < 0 || byteIndex > bytes.Length) {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if (charCount < 0 || charIndex + charCount > chars.Length || byteIndex + charCount > bytes.Length) {
+ throw new ArgumentOutOfRangeException
+ ("charCount", Strings.GetString("ArgRange_Array"));
+ }
fixed (char* cptr = chars) {
fixed (byte* bptr = bytes) {
ToBytes (cptr + charIndex, charCount,
#if NET_2_0
EncoderFallbackBuffer buffer = null;
#endif
+ if (byteCount < charCount) {
+ throw new ArgumentOutOfRangeException
+ ("byteCount", Strings.GetString("ArgRange_Array"));
+ }
while(charCount > 0)
{
ch = (int)(chars[charIndex++]);
{
if(ch >= 0xFF01 && ch <= 0xFF5E)
ch -= 0xFEE0;
- else
+ else {
#if NET_2_0
HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
+ if (byteCount < charCount) {
+ throw new ArgumentOutOfRangeException
+ ("byteCount", Strings.GetString("ArgRange_Array"));
+ }
#else
ch = 0x3F;
#endif
+ }
}
break;
}