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

Commit 4e33962

Browse files
Merge pull request #2181 from KrzysztofCwalina/APIReviewChanges
Finished incorporating API review feedback for System.Text.Encodings.Web
2 parents 45f2122 + 9ce81a8 commit 4e33962

15 files changed

+112
-124
lines changed

src/System.Text.Encodings.Web/src/System.Text.Encodings.Web.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818
</PropertyGroup>
1919
<ItemGroup>
2020
<Compile Include="System\Text\Encodings\Web\AllowedCharactersBitmap.cs" />
21-
<Compile Include="System\Text\Encodings\Web\CodePointFilter.cs" />
2221
<Compile Include="System\Text\Encodings\Web\HexUtil.cs" />
2322
<Compile Include="System\Text\Encodings\Web\HtmlEncoder.cs" />
2423
<Compile Include="System\Text\Encodings\Web\JavaScriptStringEncoder.cs" />
2524
<Compile Include="System\Text\Encodings\Web\TextEncoder.cs" />
25+
<Compile Include="System\Text\Encodings\Web\TextEncoderSettings.cs" />
2626
<Compile Include="System\Text\Encodings\Web\UnicodeHelpers.cs" />
2727
<Compile Include="System\Text\Encodings\Web\UnicodeRange.cs" />
2828
<Compile Include="System\Text\Encodings\Web\UnicodeRanges.cs" />

src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/HtmlEncoder.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ public static HtmlEncoder Default
1515
{
1616
get { return DefaultHtmlEncoder.Singleton; }
1717
}
18-
public static HtmlEncoder Create(CodePointFilter filter)
18+
public static HtmlEncoder Create(TextEncoderSettings settings)
1919
{
20-
return new DefaultHtmlEncoder(filter);
20+
return new DefaultHtmlEncoder(settings);
2121
}
2222
public static HtmlEncoder Create(params UnicodeRange[] allowedRanges)
2323
{
@@ -28,9 +28,9 @@ public static HtmlEncoder Create(params UnicodeRange[] allowedRanges)
2828
internal sealed class DefaultHtmlEncoder : HtmlEncoder
2929
{
3030
private AllowedCharactersBitmap _allowedCharacters;
31-
internal readonly static DefaultHtmlEncoder Singleton = new DefaultHtmlEncoder(new CodePointFilter(UnicodeRanges.BasicLatin));
31+
internal readonly static DefaultHtmlEncoder Singleton = new DefaultHtmlEncoder(new TextEncoderSettings(UnicodeRanges.BasicLatin));
3232

33-
public DefaultHtmlEncoder(CodePointFilter filter)
33+
public DefaultHtmlEncoder(TextEncoderSettings filter)
3434
{
3535
if (filter == null)
3636
{
@@ -56,11 +56,11 @@ internal static void ForbidHtmlCharacters(AllowedCharactersBitmap allowedCharact
5656
allowedCharacters.ForbidCharacter('+'); // technically not HTML-specific, but can be used to perform UTF7-based attacks
5757
}
5858

59-
public DefaultHtmlEncoder(params UnicodeRange[] allowedRanges) : this(new CodePointFilter(allowedRanges))
59+
public DefaultHtmlEncoder(params UnicodeRange[] allowedRanges) : this(new TextEncoderSettings(allowedRanges))
6060
{ }
6161

6262
[MethodImpl(MethodImplOptions.AggressiveInlining)]
63-
public override bool Encodes(int unicodeScalar)
63+
public override bool WillEncode(int unicodeScalar)
6464
{
6565
if (UnicodeHelpers.IsSupplementaryCodePoint(unicodeScalar)) return true;
6666
return !_allowedCharacters.IsUnicodeScalarAllowed(unicodeScalar);
@@ -89,7 +89,7 @@ public unsafe override bool TryEncodeUnicodeScalar(int unicodeScalar, char* buff
8989
throw new ArgumentNullException("buffer");
9090
}
9191

92-
if (!Encodes(unicodeScalar)) { return TryWriteScalarAsChar(unicodeScalar, buffer, bufferLength, out numberOfCharactersWritten); }
92+
if (!WillEncode(unicodeScalar)) { return TryWriteScalarAsChar(unicodeScalar, buffer, bufferLength, out numberOfCharactersWritten); }
9393
else if (unicodeScalar == '\"') { return TryCopyCharacters(s_quote, buffer, bufferLength, out numberOfCharactersWritten); }
9494
else if (unicodeScalar == '&') { return TryCopyCharacters(s_ampersand, buffer, bufferLength, out numberOfCharactersWritten); }
9595
else if (unicodeScalar == '<') { return TryCopyCharacters(s_lessthan, buffer, bufferLength, out numberOfCharactersWritten); }

src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/JavaScriptStringEncoder.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ public static JavaScriptEncoder Default
1515
{
1616
get { return DefaultJavaScriptEncoder.Singleton; }
1717
}
18-
public static JavaScriptEncoder Create(CodePointFilter filter)
18+
public static JavaScriptEncoder Create(TextEncoderSettings settings)
1919
{
20-
return new DefaultJavaScriptEncoder(filter);
20+
return new DefaultJavaScriptEncoder(settings);
2121
}
2222
public static JavaScriptEncoder Create(params UnicodeRange[] allowedRanges)
2323
{
@@ -29,9 +29,9 @@ internal sealed class DefaultJavaScriptEncoder : JavaScriptEncoder
2929
{
3030
private AllowedCharactersBitmap _allowedCharacters;
3131

32-
internal readonly static DefaultJavaScriptEncoder Singleton = new DefaultJavaScriptEncoder(new CodePointFilter(UnicodeRanges.BasicLatin));
32+
internal readonly static DefaultJavaScriptEncoder Singleton = new DefaultJavaScriptEncoder(new TextEncoderSettings(UnicodeRanges.BasicLatin));
3333

34-
public DefaultJavaScriptEncoder(CodePointFilter filter)
34+
public DefaultJavaScriptEncoder(TextEncoderSettings filter)
3535
{
3636
if (filter == null)
3737
{
@@ -55,11 +55,11 @@ public DefaultJavaScriptEncoder(CodePointFilter filter)
5555
_allowedCharacters.ForbidCharacter('/');
5656
}
5757

58-
public DefaultJavaScriptEncoder(params UnicodeRange[] allowedRanges) : this(new CodePointFilter(allowedRanges))
58+
public DefaultJavaScriptEncoder(params UnicodeRange[] allowedRanges) : this(new TextEncoderSettings(allowedRanges))
5959
{ }
6060

6161
[MethodImpl(MethodImplOptions.AggressiveInlining)]
62-
public override bool Encodes(int unicodeScalar)
62+
public override bool WillEncode(int unicodeScalar)
6363
{
6464
if (UnicodeHelpers.IsSupplementaryCodePoint(unicodeScalar)) return true;
6565
return !_allowedCharacters.IsUnicodeScalarAllowed(unicodeScalar);
@@ -108,7 +108,7 @@ public unsafe override bool TryEncodeUnicodeScalar(int unicodeScalar, char* buff
108108
// be written out as numeric entities for defense-in-depth.
109109
// See UnicodeEncoderBase ctor comments for more info.
110110

111-
if (!Encodes(unicodeScalar)) { return TryWriteScalarAsChar(unicodeScalar, buffer, bufferLength, out numberOfCharactersWritten); }
111+
if (!WillEncode(unicodeScalar)) { return TryWriteScalarAsChar(unicodeScalar, buffer, bufferLength, out numberOfCharactersWritten); }
112112

113113
char[] toCopy = null;
114114
switch (unicodeScalar)

src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/TextEncoder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public abstract class TextEncoder
3131
#pragma warning restore
3232

3333
[EditorBrowsable(EditorBrowsableState.Never)]
34-
public abstract bool Encodes(int unicodeScalar);
34+
public abstract bool WillEncode(int unicodeScalar);
3535

3636
// this could be a field, but I am trying to make the abstraction pure.
3737
[EditorBrowsable(EditorBrowsableState.Never)]
@@ -113,7 +113,7 @@ private unsafe int EncodeIntoBuffer(char* value, int valueLength, int firstChara
113113
}
114114
secondChar = value[secondCharIndex];
115115

116-
if (!Encodes(firstChar))
116+
if (!WillEncode(firstChar))
117117
{
118118
wasSurrogatePair = false;
119119
*buffer = firstChar;
@@ -280,7 +280,7 @@ private unsafe void EncodeCore(TextWriter output, char* value, int valueLength)
280280
}
281281
secondChar = value[secondCharIndex];
282282

283-
if (!Encodes(firstChar))
283+
if (!WillEncode(firstChar))
284284
{
285285
wasSurrogatePair = false;
286286
output.Write(firstChar);

src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/CodePointFilter.cs renamed to src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/TextEncoderSettings.cs

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,32 @@ namespace System.Text.Encodings.Web
1010
/// <summary>
1111
/// Represents a filter which allows only certain Unicode code points through.
1212
/// </summary>
13-
public class CodePointFilter
13+
public class TextEncoderSettings
1414
{
1515
private AllowedCharactersBitmap _allowedCharactersBitmap;
1616

1717
/// <summary>
1818
/// Instantiates an empty filter (allows no code points through by default).
1919
/// </summary>
20-
public CodePointFilter()
20+
public TextEncoderSettings()
2121
{
2222
_allowedCharactersBitmap = AllowedCharactersBitmap.CreateNew();
2323
}
2424

2525
/// <summary>
26-
/// Instantiates the filter by cloning the allow list of another <see cref="CodePointFilter"/>.
26+
/// Instantiates the filter by cloning the allow list of another <see cref="TextEncoderSettings"/>.
2727
/// </summary>
28-
public CodePointFilter(CodePointFilter other)
28+
public TextEncoderSettings(TextEncoderSettings other)
2929
{
3030
_allowedCharactersBitmap = AllowedCharactersBitmap.CreateNew();
31-
AllowFilter(other);
31+
AllowCodePoints(other.GetAllowedCodePoints());
3232
}
3333

3434
/// <summary>
3535
/// Instantiates the filter where only the character ranges specified by <paramref name="allowedRanges"/>
3636
/// are allowed by the filter.
3737
/// </summary>
38-
public CodePointFilter(params UnicodeRange[] allowedRanges)
38+
public TextEncoderSettings(params UnicodeRange[] allowedRanges)
3939
{
4040
if(allowedRanges == null)
4141
{
@@ -70,16 +70,16 @@ public virtual void AllowCharacters(params char[] characters)
7070
}
7171

7272
/// <summary>
73-
/// Allows all characters specified by <paramref name="filter"/> through the filter.
73+
/// Allows all code points specified by <paramref name="codePoints"/>.
7474
/// </summary>
75-
public virtual void AllowFilter(CodePointFilter filter)
75+
public virtual void AllowCodePoints(IEnumerable<int> codePoints)
7676
{
77-
if (filter == null)
77+
if (codePoints == null)
7878
{
79-
throw new ArgumentNullException("filter");
79+
throw new ArgumentNullException("codePoints");
8080
}
8181

82-
foreach (var allowedCodePoint in filter.GetAllowedCodePoints())
82+
foreach (var allowedCodePoint in codePoints)
8383
{
8484
// If the code point can't be represented as a BMP character, skip it.
8585
char codePointAsChar = (char)allowedCodePoint;
@@ -125,7 +125,7 @@ public virtual void AllowRanges(params UnicodeRange[] ranges)
125125
}
126126

127127
/// <summary>
128-
/// Resets this filter by disallowing all characters.
128+
/// Resets this settings object by disallowing all characters.
129129
/// </summary>
130130
public virtual void Clear()
131131
{
@@ -191,7 +191,7 @@ public virtual void ForbidRanges(params UnicodeRange[] ranges)
191191
}
192192

193193
/// <summary>
194-
/// Retrieves the bitmap of allowed characters from this filter.
194+
/// Retrieves the bitmap of allowed characters from this settings object.
195195
/// The returned bitmap is a clone of the original bitmap to avoid unintentional modification.
196196
/// </summary>
197197
internal AllowedCharactersBitmap GetAllowedCharacters()
@@ -212,21 +212,5 @@ public virtual IEnumerable<int> GetAllowedCodePoints()
212212
}
213213
}
214214
}
215-
216-
/// <summary>
217-
/// Returns a value stating whether the character <paramref name="character"/> is allowed through the filter.
218-
/// </summary>
219-
public virtual bool IsCharacterAllowed(char character)
220-
{
221-
return _allowedCharactersBitmap.IsCharacterAllowed(character);
222-
}
223-
224-
/// <summary>
225-
/// Wraps the provided filter as a CodePointFilter, avoiding the clone if possible.
226-
/// </summary>
227-
internal static CodePointFilter Wrap(CodePointFilter filter)
228-
{
229-
return (filter as CodePointFilter) ?? new CodePointFilter(filter);
230-
}
231215
}
232216
}

src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/UrlEncoder.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public static UrlEncoder Default
1414
{
1515
get { return DefaultUrlEncoder.Singleton; }
1616
}
17-
public static UrlEncoder Create(CodePointFilter filter)
17+
public static UrlEncoder Create(TextEncoderSettings settings)
1818
{
19-
return new DefaultUrlEncoder(filter);
19+
return new DefaultUrlEncoder(settings);
2020
}
2121
public static UrlEncoder Create(params UnicodeRange[] allowedRanges)
2222
{
@@ -28,7 +28,7 @@ internal sealed class DefaultUrlEncoder : UrlEncoder
2828
{
2929
private AllowedCharactersBitmap _allowedCharacters;
3030

31-
internal readonly static DefaultUrlEncoder Singleton = new DefaultUrlEncoder(new CodePointFilter(UnicodeRanges.BasicLatin));
31+
internal readonly static DefaultUrlEncoder Singleton = new DefaultUrlEncoder(new TextEncoderSettings(UnicodeRanges.BasicLatin));
3232

3333
// We perform UTF8 conversion of input, which means that the worst case is
3434
// 9 output chars per input char: [input] U+FFFF -> [output] "%XX%YY%ZZ".
@@ -39,7 +39,7 @@ public override int MaxOutputCharactersPerInputCharacter
3939
get { return 9; }
4040
}
4141

42-
public DefaultUrlEncoder(CodePointFilter filter)
42+
public DefaultUrlEncoder(TextEncoderSettings filter)
4343
{
4444
if (filter == null)
4545
{
@@ -117,11 +117,11 @@ public DefaultUrlEncoder(CodePointFilter filter)
117117
}
118118
}
119119

120-
public DefaultUrlEncoder(params UnicodeRange[] allowedRanges) : this(new CodePointFilter(allowedRanges))
120+
public DefaultUrlEncoder(params UnicodeRange[] allowedRanges) : this(new TextEncoderSettings(allowedRanges))
121121
{ }
122122

123123
[MethodImpl(MethodImplOptions.AggressiveInlining)]
124-
public override bool Encodes(int unicodeScalar)
124+
public override bool WillEncode(int unicodeScalar)
125125
{
126126
if (UnicodeHelpers.IsSupplementaryCodePoint(unicodeScalar)) return true;
127127
return !_allowedCharacters.IsUnicodeScalarAllowed(unicodeScalar);
@@ -144,7 +144,7 @@ public unsafe override bool TryEncodeUnicodeScalar(int unicodeScalar, char* buff
144144
throw new ArgumentNullException("buffer");
145145
}
146146

147-
if (!Encodes(unicodeScalar)) { return TryWriteScalarAsChar(unicodeScalar, buffer, bufferLength, out numberOfCharactersWritten); }
147+
if (!WillEncode(unicodeScalar)) { return TryWriteScalarAsChar(unicodeScalar, buffer, bufferLength, out numberOfCharactersWritten); }
148148

149149
numberOfCharactersWritten = 0;
150150
uint asUtf8 = (uint)UnicodeHelpers.GetUtf8RepresentationForScalarValue((uint)unicodeScalar);

src/System.Text.Encodings.Web/tests/HtmlEncoderTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ namespace Microsoft.Framework.WebEncoders
1313
public class HtmlEncoderTests
1414
{
1515
[Fact]
16-
public void Ctor_WithCodePointFilter()
16+
public void Ctor_WithTextEncoderSettings()
1717
{
1818
// Arrange
19-
var filter = new CodePointFilter();
19+
var filter = new TextEncoderSettings();
2020
filter.AllowCharacters('a', 'b');
2121
filter.AllowCharacters('\0', '&', '\uFFFF', 'd');
2222
HtmlEncoder encoder = new HtmlEncoder(filter);

src/System.Text.Encodings.Web/tests/JavaScriptStringEncoderTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ namespace Microsoft.Framework.WebEncoders
1313
public class JavaScriptStringEncoderTests
1414
{
1515
[Fact]
16-
public void Ctor_WithCodePointFilter()
16+
public void Ctor_WithTextEncoderSettings()
1717
{
1818
// Arrange
19-
var filter = new CodePointFilter();
19+
var filter = new TextEncoderSettings();
2020
filter.AllowCharacters('a', 'b');
2121
filter.AllowCharacters('\0', '&', '\uFFFF', 'd');
2222

src/System.Text.Encodings.Web/tests/System.Text.Encodings.Web.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
</ItemGroup>
2626
<ItemGroup>
2727
<Compile Include="AllowedCharsBitmapTests.cs" />
28-
<Compile Include="CodePointFilterTests.cs" />
2928
<Compile Include="CommonTestEncoder.cs" />
3029
<Compile Include="EncoderCommon.cs" />
3130
<Compile Include="EncoderCommonTests.cs" />
@@ -40,6 +39,7 @@
4039
<Compile Include="TemporaryEncoderAdapters.cs" />
4140
<Compile Include="TemporaryEncoderExtensions.cs" />
4241
<Compile Include="TemporaryInternalTypes.cs" />
42+
<Compile Include="TextEncoderSettingsTests.cs" />
4343
<Compile Include="UnicodeEncoderBase.cs" />
4444
<Compile Include="UnicodeEncoderBaseTests.cs" />
4545
<Compile Include="UnicodeHelpersTests.cs" />

src/System.Text.Encodings.Web/tests/TemporaryEncoderAdapters.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,15 @@ public HtmlEncoder()
4545
{
4646
_encoder = System.Text.Encodings.Web.DefaultHtmlEncoder.Singleton;
4747
}
48-
public HtmlEncoder(CodePointFilter filter)
48+
public HtmlEncoder(TextEncoderSettings filter)
4949
{
5050
_encoder = new System.Text.Encodings.Web.DefaultHtmlEncoder(filter);
5151
}
5252

53-
public HtmlEncoder(UnicodeRange allowedRange) : this(new CodePointFilter(allowedRange))
53+
public HtmlEncoder(UnicodeRange allowedRange) : this(new TextEncoderSettings(allowedRange))
5454
{ }
5555

56-
public HtmlEncoder(params UnicodeRange[] allowedRanges) : this(new CodePointFilter(allowedRanges))
56+
public HtmlEncoder(params UnicodeRange[] allowedRanges) : this(new TextEncoderSettings(allowedRanges))
5757
{ }
5858

5959
public void HtmlEncode(char[] value, int startIndex, int characterCount, TextWriter output)
@@ -108,15 +108,15 @@ public JavaScriptStringEncoder()
108108
{
109109
_encoder = System.Text.Encodings.Web.DefaultJavaScriptEncoder.Singleton;
110110
}
111-
public JavaScriptStringEncoder(CodePointFilter filter)
111+
public JavaScriptStringEncoder(TextEncoderSettings filter)
112112
{
113113
_encoder = new System.Text.Encodings.Web.DefaultJavaScriptEncoder(filter);
114114
}
115115

116-
public JavaScriptStringEncoder(UnicodeRange allowedRange) : this(new CodePointFilter(allowedRange))
116+
public JavaScriptStringEncoder(UnicodeRange allowedRange) : this(new TextEncoderSettings(allowedRange))
117117
{ }
118118

119-
public JavaScriptStringEncoder(params UnicodeRange[] allowedRanges) : this(new CodePointFilter(allowedRanges))
119+
public JavaScriptStringEncoder(params UnicodeRange[] allowedRanges) : this(new TextEncoderSettings(allowedRanges))
120120
{ }
121121

122122
public void JavaScriptStringEncode(char[] value, int startIndex, int characterCount, TextWriter output)
@@ -171,15 +171,15 @@ public UrlEncoder()
171171
{
172172
_encoder = System.Text.Encodings.Web.DefaultUrlEncoder.Singleton;
173173
}
174-
public UrlEncoder(CodePointFilter filter)
174+
public UrlEncoder(TextEncoderSettings filter)
175175
{
176176
_encoder = new System.Text.Encodings.Web.DefaultUrlEncoder(filter);
177177
}
178178

179-
public UrlEncoder(UnicodeRange allowedRange) : this(new CodePointFilter(allowedRange))
179+
public UrlEncoder(UnicodeRange allowedRange) : this(new TextEncoderSettings(allowedRange))
180180
{ }
181181

182-
public UrlEncoder(params UnicodeRange[] allowedRanges) : this(new CodePointFilter(allowedRanges))
182+
public UrlEncoder(params UnicodeRange[] allowedRanges) : this(new TextEncoderSettings(allowedRanges))
183183
{ }
184184

185185
public void UrlEncode(char[] value, int startIndex, int characterCount, TextWriter output)

0 commit comments

Comments
 (0)