Skip to content

Commit d3e10b7

Browse files
authored
Adding reference to MessagePackAnalyzer to check for MsgPack001 / MsgPack002 (Banned API) (#19989)
1 parent aff01eb commit d3e10b7

File tree

6 files changed

+41
-24
lines changed

6 files changed

+41
-24
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ BenchmarkDotNet.Artifacts/
1313
.gradle/
1414
src/SignalR/clients/**/dist/
1515
modules/
16+
.ionide/
1617

1718
# File extensions
1819
*.aps
@@ -41,4 +42,4 @@ launchSettings.json
4142
msbuild.ProjectImports.zip
4243
StyleCop.Cache
4344
UpgradeLog.htm
44-
.idea
45+
.idea

eng/Dependencies.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ and are generated based on the last package release.
163163
<LatestPackageReference Include="IdentityServer4.Storage" Version="$(IdentityServer4StoragePackageVersion)" />
164164
<LatestPackageReference Include="Libuv" Version="$(LibuvPackageVersion)" />
165165
<LatestPackageReference Include="MessagePack" Version="$(MessagePackPackageVersion)" />
166+
<LatestPackageReference Include="MessagePackAnalyzer" Version="$(MessagePackPackageVersion)" />
166167
<LatestPackageReference Include="Mono.Cecil" Version="$(MonoCecilPackageVersion)" />
167168
<LatestPackageReference Include="Moq" Version="$(MoqPackageVersion)" />
168169
<LatestPackageReference Include="Newtonsoft.Json.Bson" Version="$(NewtonsoftJsonBsonPackageVersion)" />

eng/Versions.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@
225225
<IdentityServer4PackageVersion>3.0.0</IdentityServer4PackageVersion>
226226
<IdentityServer4StoragePackageVersion>3.0.0</IdentityServer4StoragePackageVersion>
227227
<IdentityServer4EntityFrameworkStoragePackageVersion>3.0.0</IdentityServer4EntityFrameworkStoragePackageVersion>
228-
<MessagePackPackageVersion>2.1.80</MessagePackPackageVersion>
228+
<MessagePackPackageVersion>2.1.90</MessagePackPackageVersion>
229229
<MoqPackageVersion>4.10.0</MoqPackageVersion>
230230
<MonoCecilPackageVersion>0.10.1</MonoCecilPackageVersion>
231231
<NewtonsoftJsonBsonPackageVersion>1.0.2</NewtonsoftJsonBsonPackageVersion>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# EditorConfig is awesome:http://EditorConfig.org
2+
# NOTE: Requires **VS2019 16.3** or later
3+
4+
# New Rule Set
5+
# Description:
6+
# MsgPack001 : MsgPack001 Avoid static default for MessagePackSerializerOptions
7+
# MsgPack002 : MsgPack002 Avoid using a mutable static value for MessagePackSerializerOptions
8+
9+
# Code files
10+
[*.{cs,vb}]
11+
dotnet_diagnostic.MsgPack001.severity = error
12+
dotnet_diagnostic.MsgPack002.severity = error

src/SignalR/common/Protocols.MessagePack/src/Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<Description>Implements the SignalR Hub Protocol over MsgPack.</Description>
@@ -17,6 +17,7 @@
1717
<ItemGroup>
1818
<Reference Include="Microsoft.AspNetCore.SignalR.Common" />
1919
<Reference Include="MessagePack" />
20+
<Reference Include="MessagePackAnalyzer" PrivateAssets="All" />
2021
</ItemGroup>
2122

2223
</Project>

src/SignalR/common/Protocols.MessagePack/src/Protocol/MessagePackHubProtocol.cs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class MessagePackHubProtocol : IHubProtocol
2626
private const int VoidResult = 2;
2727
private const int NonVoidResult = 3;
2828

29-
private MessagePackSerializerOptions _msgPackSerializerOptions;
29+
private readonly MessagePackSerializerOptions _msgPackSerializerOptions;
3030
private static readonly string ProtocolName = "messagepack";
3131
private static readonly int ProtocolVersion = 1;
3232

@@ -53,34 +53,36 @@ public MessagePackHubProtocol()
5353
public MessagePackHubProtocol(IOptions<MessagePackHubProtocolOptions> options)
5454
{
5555
var msgPackOptions = options.Value;
56-
SetupResolver(msgPackOptions);
57-
_msgPackSerializerOptions.WithSecurity(MessagePackSecurity.UntrustedData);
58-
}
56+
var resolver = SignalRResolver.Instance;
57+
var hasCustomFormatterResolver = false;
5958

60-
private void SetupResolver(MessagePackHubProtocolOptions options)
61-
{
62-
// if counts don't match then we know users customized resolvers so we set up the options
63-
// with the provided resolvers
64-
if (options.FormatterResolvers.Count != SignalRResolver.Resolvers.Count)
59+
// if counts don't match then we know users customized resolvers so we set up the options with the provided resolvers
60+
if (msgPackOptions.FormatterResolvers.Count != SignalRResolver.Resolvers.Count)
6561
{
66-
var resolver = CompositeResolver.Create(Array.Empty<IMessagePackFormatter>(), (IReadOnlyList<IFormatterResolver>)options.FormatterResolvers);
67-
_msgPackSerializerOptions = MessagePackSerializerOptions.Standard.WithResolver(resolver);
68-
return;
62+
hasCustomFormatterResolver = true;
6963
}
70-
71-
for (var i = 0; i < options.FormatterResolvers.Count; i++)
64+
else
7265
{
73-
// check if the user customized the resolvers
74-
if (options.FormatterResolvers[i] != SignalRResolver.Resolvers[i])
66+
// Compare each "reference" in the FormatterResolvers IList<> against the default "SignalRResolver.Resolvers" IList<>
67+
for (var i = 0; i < msgPackOptions.FormatterResolvers.Count; i++)
7568
{
76-
var resolver = CompositeResolver.Create(Array.Empty<IMessagePackFormatter>(), (IReadOnlyList<IFormatterResolver>)options.FormatterResolvers);
77-
_msgPackSerializerOptions = MessagePackSerializerOptions.Standard.WithResolver(resolver);
78-
return;
69+
// check if the user customized the resolvers
70+
if (msgPackOptions.FormatterResolvers[i] != SignalRResolver.Resolvers[i])
71+
{
72+
hasCustomFormatterResolver = true;
73+
break;
74+
}
7975
}
8076
}
8177

82-
// Use optimized cached resolver if the default is chosen
83-
_msgPackSerializerOptions = MessagePackSerializerOptions.Standard.WithResolver(SignalRResolver.Instance);
78+
if (hasCustomFormatterResolver)
79+
{
80+
resolver = CompositeResolver.Create(Array.Empty<IMessagePackFormatter>(), (IReadOnlyList<IFormatterResolver>)msgPackOptions.FormatterResolvers);
81+
}
82+
83+
_msgPackSerializerOptions = MessagePackSerializerOptions.Standard
84+
.WithResolver(resolver)
85+
.WithSecurity(MessagePackSecurity.UntrustedData);
8486
}
8587

8688
/// <inheritdoc />

0 commit comments

Comments
 (0)