System.Text.Encodings.Web refactoring and code modernization (#49373)
authorLevi Broderick <GrabYourPitchforks@users.noreply.github.com>
Fri, 19 Mar 2021 01:14:53 +0000 (18:14 -0700)
committerGitHub <noreply@github.com>
Fri, 19 Mar 2021 01:14:53 +0000 (18:14 -0700)
commitc569bc12223379bf894d7f68cb718b9b376e56eb
treea68216c1c46bfc80427366fab28e0ca3340bca68
parent9f93bcb46478b1282daba268aa4d0a8550e06a31
System.Text.Encodings.Web refactoring and code modernization (#49373)

- Unify workhorse implementations across all inbox encoders
- Refactor most unsafe code from TextEncoder workhorse routines into standalone helpers
- Fix bounds check logic in workhorse routines
- SSSE3-optimize central workhorse routine
- Remove vestigial code from the library and unit test project
- Add significant unit test coverage for the workhorse routines and unsafe helpers
- Ref: CVE-2021-26701 (MSRC 62749)
62 files changed:
src/libraries/System.Private.CoreLib/src/System/Text/Rune.cs
src/libraries/System.Private.CoreLib/src/System/Text/UnicodeDebug.cs
src/libraries/System.Text.Encodings.Web/ref/System.Text.Encodings.Web.csproj
src/libraries/System.Text.Encodings.Web/src/Polyfills/System.Numerics.BitOperations.netstandard20.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/Polyfills/System.Text.Rune.netstandard20.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System.Text.Encodings.Web.csproj
src/libraries/System.Text.Encodings.Web/src/System/IO/TextWriterExtensions.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/AdvSimdHelper.cs [deleted file]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/AllowedBmpCodePointsBitmap.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/AsciiByteMap.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/DefaultHtmlEncoder.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/DefaultJavaScriptEncoder.cs
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/DefaultJavaScriptEncoderBasicLatin.cs [deleted file]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/DefaultUrlEncoder.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/HtmlEncoder.cs
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/JavaScriptEncoder.cs
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/JavaScriptEncoderHelper.cs [deleted file]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/OptimizedInboxTextEncoder.Ascii.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/OptimizedInboxTextEncoder.Ssse3.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/OptimizedInboxTextEncoder.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/ScalarEscaperBase.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/SpanUtility.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/Sse2Helper.cs [deleted file]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/Ssse3Helper.cs [deleted file]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/TextEncoder.cs
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/TextEncoderSettings.cs
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/ThrowHelper.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/UnsafeRelaxedJavaScriptEncoder.cs [deleted file]
src/libraries/System.Text.Encodings.Web/src/System/Text/Encodings/Web/UrlEncoder.cs
src/libraries/System.Text.Encodings.Web/src/System/Text/Internal/AllowedCharactersBitmap.cs [deleted file]
src/libraries/System.Text.Encodings.Web/src/System/Text/Unicode/UnicodeHelpers.cs
src/libraries/System.Text.Encodings.Web/tests/AllowedAsciiCodePointsTests.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/tests/AllowedBmpCodePointsBitmapTests.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/tests/AllowedCharsBitmapTests.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/AsciiByteMapTests.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/tests/AsciiPreescapedDataTests.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/tests/ConfigurableScalarTextEncoder.cs
src/libraries/System.Text.Encodings.Web/tests/EncoderExtensionsTests.cs
src/libraries/System.Text.Encodings.Web/tests/Extensions.cs
src/libraries/System.Text.Encodings.Web/tests/HtmlEncoderTests.cs
src/libraries/System.Text.Encodings.Web/tests/IHtmlEncoder.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/IJavaScriptStringEncoder.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/IUrlEncoder.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/InboxEncoderCommonTests.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/tests/JavaScriptEncoderTests.Relaxed.cs [moved from src/libraries/System.Text.Encodings.Web/tests/JavaScriptStringEncoderTests.Relaxed.cs with 58% similarity]
src/libraries/System.Text.Encodings.Web/tests/JavaScriptEncoderTests.cs [moved from src/libraries/System.Text.Encodings.Web/tests/JavaScriptStringEncoderTests.cs with 71% similarity]
src/libraries/System.Text.Encodings.Web/tests/PerformanceTests.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/ScalarTestEncoder.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/SpanUtilityTests.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/tests/System.Text.Encodings.Web.Tests.csproj
src/libraries/System.Text.Encodings.Web/tests/TemporaryEncoderAdapters.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/TemporaryEncoderExtensions.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/TemporaryInternalTypes.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/TextEncoderBatteryTests.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/tests/TextEncoderSettingsTests.cs
src/libraries/System.Text.Encodings.Web/tests/TextEncoderTests.cs
src/libraries/System.Text.Encodings.Web/tests/UnicodeEncoderBase.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/UnicodeEncoderBaseTests.cs [deleted file]
src/libraries/System.Text.Encodings.Web/tests/UnicodeHelpersTests.cs
src/libraries/System.Text.Encodings.Web/tests/UnicodeTestHelpers.cs [new file with mode: 0644]
src/libraries/System.Text.Encodings.Web/tests/UrlEncoderTests.cs
src/libraries/System.Text.Json/tests/Utf8JsonWriterTests.cs