Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 4b3540d

Browse files
committed
Fix UTF8 BOM tests
1 parent 2296948 commit 4b3540d

File tree

4 files changed

+21
-8
lines changed

4 files changed

+21
-8
lines changed

src/ServiceStack.Text/DefaultMemory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ public override ReadOnlyMemory<char> FromUtf8(ReadOnlySpan<byte> source)
534534
{
535535
var bytes = source.WithoutBom().ToArray();
536536
var chars = new char[Encoding.UTF8.GetCharCount(bytes)];
537-
var charsWritten = Encoding.UTF8.GetChars(bytes, 0, source.Length, chars, 0);
537+
var charsWritten = Encoding.UTF8.GetChars(bytes, 0, bytes.Length, chars, 0);
538538
return new ReadOnlyMemory<char>(chars, 0, charsWritten);
539539
}
540540

@@ -551,7 +551,7 @@ public override int FromUtf8(ReadOnlySpan<byte> source, Span<char> destination)
551551
{
552552
var bytes = source.WithoutBom().ToArray();
553553
var chars = destination.ToArray();
554-
var charsWritten = Encoding.UTF8.GetChars(bytes, 0, source.Length, chars, 0);
554+
var charsWritten = Encoding.UTF8.GetChars(bytes, 0, bytes.Length, chars, 0);
555555
new ReadOnlySpan<char>(chars, 0, charsWritten).CopyTo(destination);
556556
return charsWritten;
557557
}

src/ServiceStack.Text/StringExtensions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,13 @@ public static byte[] ToUtf8Bytes(this double doubleVal)
305305
return FastToUtf8Bytes(doubleStr);
306306
}
307307

308+
public static string WithoutBom(this string value)
309+
{
310+
return value.Length > 0 && value[0] == 65279
311+
? value.Substring(1)
312+
: value;
313+
}
314+
308315
// from JWT spec
309316
public static string ToBase64UrlSafe(this byte[] input)
310317
{

tests/ServiceStack.Text.Tests/SpanMemoryTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,10 @@ public void Can_ToUtf8_and_FromUtf8_using_Memory()
118118
Assert.That(bytes.ToArray(), Is.EquivalentTo(test.expectedBytes));
119119

120120
ReadOnlyMemory<char> chars = bytes.FromUtf8();
121-
Assert.That(chars.Length, Is.EqualTo(test.expectedString.Length));
122-
Assert.That(chars.ToString(), Is.EqualTo(test.expectedString));
121+
Assert.That(chars.Length, Is.EqualTo(test.expectedString.Length)
122+
.Or.EqualTo(test.expectedString.WithoutBom().Length));
123+
Assert.That(chars.ToString(), Is.EqualTo(test.expectedString)
124+
.Or.EqualTo(test.expectedString.WithoutBom()));
123125
}
124126
}
125127

tests/ServiceStack.Text.Tests/SpanTests.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,10 @@ public void Can_ToUtf8_and_FromUtf8_using_Span()
111111
Assert.That(bytes.ToArray(), Is.EquivalentTo(test.expectedBytes));
112112

113113
ReadOnlyMemory<char> chars = bytes.FromUtf8();
114-
Assert.That(chars.Length, Is.EqualTo(test.expectedString.Length));
115-
Assert.That(chars.ToString(), Is.EqualTo(test.expectedString));
114+
Assert.That(chars.Length, Is.EqualTo(test.expectedString.Length)
115+
.Or.EqualTo(test.expectedString.WithoutBom().Length));
116+
Assert.That(chars.ToString(), Is.EqualTo(test.expectedString)
117+
.Or.EqualTo(test.expectedString.WithoutBom()));
116118
}
117119
}
118120

@@ -133,8 +135,10 @@ public void Can_ToUtf8_and_FromUtf8_in_place_using_Span()
133135
var charsWritten = MemoryProvider.Instance.FromUtf8(bytes.Span, charBuff.Span);
134136
chars = charBuff.Slice(0, charsWritten).Span;
135137

136-
Assert.That(chars.Length, Is.EqualTo(test.expectedString.Length));
137-
Assert.That(chars.ToString(), Is.EqualTo(test.expectedString));
138+
Assert.That(chars.Length, Is.EqualTo(test.expectedString.Length)
139+
.Or.EqualTo(test.expectedString.WithoutBom().Length));
140+
Assert.That(chars.ToString(), Is.EqualTo(test.expectedString)
141+
.Or.EqualTo(test.expectedString.WithoutBom()));
138142
}
139143
}
140144

0 commit comments

Comments
 (0)