Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Fix DecoderNLS.Convert to out the correct value for 'completed' #27210

Merged
merged 2 commits into from
Oct 16, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions src/System.Private.CoreLib/shared/System/Text/DecoderNLS.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,11 +207,13 @@ public override unsafe void Convert(byte* bytes, int byteCount,
charsUsed = _encoding.GetChars(bytes, byteCount, chars, charCount, this);
bytesUsed = _bytesUsed;

// Its completed if they've used what they wanted AND if they didn't want flush or if we are flushed
completed = (bytesUsed == byteCount) && (!flush || !this.HasState) &&
(_fallbackBuffer == null || _fallbackBuffer.Remaining == 0);
// Per MSDN, "The completed output parameter indicates whether all the data in the input
// buffer was converted and stored in the output buffer." That means we've successfully
// consumed all the input _and_ there's no pending state or fallback data remaining to be output.

// Our data thingy are now full, we can return
completed = (bytesUsed == byteCount)
&& !this.HasState
&& (_fallbackBuffer is null || _fallbackBuffer.Remaining == 0);
}

public bool MustFlush => _mustFlush;
Expand Down
2 changes: 0 additions & 2 deletions src/System.Private.CoreLib/shared/System/Text/EncoderNLS.cs
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,6 @@ public override unsafe void Convert(char* chars, int charCount,
completed = (charsUsed == charCount)
&& !this.HasState
&& (_fallbackBuffer is null || _fallbackBuffer.Remaining == 0);

// Our data thingys are now full, we can return
}

public Encoding Encoding
Expand Down
4 changes: 4 additions & 0 deletions tests/CoreFX/CoreFX.issues.rsp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@
# https://github.com/dotnet/coreclr/issues/22414
-nomethod System.Numerics.Tests.ToStringTest.RunRegionSpecificStandardFormatToStringTests

# Failure in System.Text.Encoding.Tests due to bug fix in DecoderNLS.Convert
# https://github.com/dotnet/coreclr/issues/27191
-nomethod System.Text.Tests.DecoderConvert2.PosTest6

# Timeout in System.Text.RegularExpressions.Tests.RegexMatchTests.Match_ExcessPrefix
# https://github.com/dotnet/coreclr/issues/18912
-nomethod System.Text.RegularExpressions.Tests.RegexMatchTests.Match_ExcessPrefix
Expand Down