From: Sung Yoon Whang Date: Wed, 12 Feb 2020 23:10:13 +0000 (-0800) Subject: Escape EventPipeProvider argument key as well (#825) X-Git-Tag: submit/tizen_5.5/20200504.045052~11^2^2~116 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e1d58b65fec0a207833d27488397324cd6e3bf43;p=platform%2Fcore%2Fdotnet%2Fdiagnostics.git Escape EventPipeProvider argument key as well (#825) * Escape EventPipeProvider argument key as well * put the brace where it was --- diff --git a/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/EventPipeProvider.cs b/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/EventPipeProvider.cs index e3d00f4ee..53f859124 100644 --- a/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/EventPipeProvider.cs +++ b/src/Microsoft.Diagnostics.NETCore.Client/DiagnosticsClient/EventPipeProvider.cs @@ -69,8 +69,12 @@ namespace Microsoft.Diagnostics.NETCore.Client { return ""; } - return string.Join(";", Arguments.Select(a => (a.Value.Contains(";") || a.Value.Contains("=")) ? $"{a.Key}=\"{a.Value}\"" : $"{a.Key}={a.Value}")); + return string.Join(";", Arguments.Select(a => { + var escapedKey = a.Key.Contains(";") || a.Key.Contains("=") ? $"\"{a.Key}\"" : a.Key; + var escapedValue = a.Value.Contains(";") || a.Value.Contains("=") ? $"\"{a.Value}\"" : a.Value; + return $"{escapedKey}={escapedValue}"; + })); } } -} \ No newline at end of file +} diff --git a/src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeProviderTests.cs b/src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeProviderTests.cs index 46d216d3c..31f87b34a 100644 --- a/src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeProviderTests.cs +++ b/src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeProviderTests.cs @@ -111,7 +111,7 @@ namespace Microsoft.Diagnostics.NETCore.Client } [Fact] - public void DiagnosticSourceArgumentStringTest1() + public void DiagnosticSourceArgumentStringTestWithEscapedValue1() { string diagnosticFilterString = "Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-" + "Request.Path" + @@ -130,7 +130,7 @@ namespace Microsoft.Diagnostics.NETCore.Client [Fact] - public void DiagnosticSourceArgumentStringTest2() + public void DiagnosticSourceArgumentStringTestWithEscapedValue2() { string diagnosticFilterString = "Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-" + "Request.Path" + @@ -147,5 +147,44 @@ namespace Microsoft.Diagnostics.NETCore.Client Assert.Equal("DiagnosticSourceProvider:0x00000000DEADBEEF:5:FilterAndPayloadSpecs=\"Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-Request.Path;Request.Method;RequestName=SomeRequest\r\n\"", provider.ToString()); } + + [Fact] + public void DiagnosticSourceArgumentStringTestWithEscapedKey() + { + 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() + { + { "ArgumentKeyWith;Semicolon=Equal", diagnosticFilterString } + }); + + Assert.Equal("DiagnosticSourceProvider:0x00000000DEADBEEF:5:\"ArgumentKeyWith;Semicolon=Equal\"=\"Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-Request.Path;Request.Method;RequestName=SomeRequest\r\n\"", + provider.ToString()); + } + + [Fact] + public void DiagnosticSourceArgumentStringTestWithManyArgs() + { + 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() + { + { "ArgumentKeyWith;Semicolon=Equal", diagnosticFilterString }, + { "ArgumentKeyWith;Semicolon=Equal2", diagnosticFilterString } + }); + + Assert.Equal("DiagnosticSourceProvider:0x00000000DEADBEEF:5:\"ArgumentKeyWith;Semicolon=Equal\"=\"Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-Request.Path;Request.Method;RequestName=SomeRequest\r\n\";\"ArgumentKeyWith;Semicolon=Equal2\"=\"Microsoft.AspNetCore/Microsoft.AspNetCore.Hosting.HttpRequestIn.Start@Activity1Start:-Request.Path;Request.Method;RequestName=SomeRequest\r\n\"", + provider.ToString()); + } } }