From: Sung Yoon Whang Date: Wed, 12 Feb 2020 01:52:00 +0000 (-0800) Subject: Properly encode semicolon in argument strings for EventPipeProvider (#824) X-Git-Tag: submit/tizen_5.5/20200504.045052~11^2^2~119 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5a870484880ae8eaf4b9435eac7c986e8d8715e6;p=platform%2Fcore%2Fdotnet%2Fdiagnostics.git Properly encode semicolon in argument strings for EventPipeProvider (#824) * Add quotation to semicolon in argument string for EventPipeProvider * Add test * remove dup * Wrap the entire argument string in quotes instead * Add more test --- diff --git a/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/EventPipeProvider.cs b/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/EventPipeProvider.cs index 332ecd20a..e3d00f4ee 100644 --- a/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/EventPipeProvider.cs +++ b/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/EventPipeProvider.cs @@ -69,7 +69,7 @@ namespace Microsoft.Diagnostics.NETCore.Client { return ""; } - return string.Join(";", Arguments.Select(a => $"{a.Key}={a.Value}")); + return string.Join(";", Arguments.Select(a => (a.Value.Contains(";") || a.Value.Contains("=")) ? $"{a.Key}=\"{a.Value}\"" : $"{a.Key}={a.Value}")); } } diff --git a/src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeProviderTests.cs b/src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeProviderTests.cs index 5f66f28e3..46d216d3c 100644 --- a/src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeProviderTests.cs +++ b/src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeProviderTests.cs @@ -109,5 +109,43 @@ namespace Microsoft.Diagnostics.NETCore.Client Assert.Equal("MyProvider:0x00000000DEADBEEF:5:key1=value1", provider1.ToString()); Assert.Equal("MyProvider:0x00000000DEADBEEF:5:key1=value1;key2=value2", provider2.ToString()); } + + [Fact] + public void DiagnosticSourceArgumentStringTest1() + { + string diagnosticFilterString = "Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-" + + "Request.Path" + + ";Request.Method" + + "\r\n"; + + var provider = new EventPipeProvider("DiagnosticSourceProvider", EventLevel.Verbose, (long)(0xdeadbeef), + new Dictionary() + { + { "FilterAndPayloadSpecs", diagnosticFilterString } + }); + + Assert.Equal("DiagnosticSourceProvider:0x00000000DEADBEEF:5:FilterAndPayloadSpecs=\"Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-Request.Path;Request.Method\r\n\"", + provider.ToString()); + } + + + [Fact] + public void DiagnosticSourceArgumentStringTest2() + { + string diagnosticFilterString = "Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-" + + "Request.Path" + + ";Request.Method" + + ";RequestName=SomeRequest" + + "\r\n"; + + var provider = new EventPipeProvider("DiagnosticSourceProvider", EventLevel.Verbose, (long)(0xdeadbeef), + new Dictionary() + { + { "FilterAndPayloadSpecs", diagnosticFilterString } + }); + + Assert.Equal("DiagnosticSourceProvider:0x00000000DEADBEEF:5:FilterAndPayloadSpecs=\"Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-Request.Path;Request.Method;RequestName=SomeRequest\r\n\"", + provider.ToString()); + } } }