diff --git a/src/Runner.Common/HostContext.cs b/src/Runner.Common/HostContext.cs index 643c61c81..1834a57fa 100644 --- a/src/Runner.Common/HostContext.cs +++ b/src/Runner.Common/HostContext.cs @@ -84,6 +84,7 @@ namespace GitHub.Runner.Common this.SecretMasker.AddValueEncoder(ValueEncoders.Base64StringEscape); this.SecretMasker.AddValueEncoder(ValueEncoders.Base64StringEscapeShift1); this.SecretMasker.AddValueEncoder(ValueEncoders.Base64StringEscapeShift2); + this.SecretMasker.AddValueEncoder(ValueEncoders.BashComparand); this.SecretMasker.AddValueEncoder(ValueEncoders.CommandLineArgumentEscape); this.SecretMasker.AddValueEncoder(ValueEncoders.ExpressionStringEscape); this.SecretMasker.AddValueEncoder(ValueEncoders.JsonStringEscape); diff --git a/src/Sdk/DTLogging/Logging/ValueEncoders.cs b/src/Sdk/DTLogging/Logging/ValueEncoders.cs index c3c065bc2..3ef804a6d 100644 --- a/src/Sdk/DTLogging/Logging/ValueEncoders.cs +++ b/src/Sdk/DTLogging/Logging/ValueEncoders.cs @@ -38,6 +38,20 @@ namespace GitHub.DistributedTask.Logging return Base64StringEscapeShift(value, 2); } + public static String BashComparand(String value) + { + var result = new StringBuilder(); + foreach (var c in value) + { + if (!char.IsLowSurrogate(c)) + { + result.Append('\\'); + } + result.Append(c); + } + return result.ToString(); + } + // Used when we pass environment variables to docker to escape " with \" public static String CommandLineArgumentEscape(String value) {