Sanitize client setinfo metadata by mgravell · Pull Request #2654 · StackExchange/StackExchange.Redis
Expand Up
@@ -26,7 +26,7 @@ internal sealed partial class ServerEndPoint : IDisposable
{
internal volatile ServerEndPoint? Primary;
internal volatile ServerEndPoint[] Replicas = Array.Empty<ServerEndPoint>();
private static readonly Regex nameSanitizer = new Regex("[^!-~]", RegexOptions.Compiled);
private static readonly Regex nameSanitizer = new Regex("[^!-~]+", RegexOptions.Compiled);
private readonly Hashtable knownScripts = new Hashtable(StringComparer.Ordinal);
Expand Down Expand Up @@ -1024,6 +1024,8 @@ private async Task HandshakeAsync(PhysicalConnection connection, ILogger? log) // it, they should set SetClientLibrary to false, not set the name to empty string) libName = config.Defaults.LibraryName; }
libName = ClientInfoSanitize(libName); if (!string.IsNullOrWhiteSpace(libName)) { msg = Message.Create(-1, CommandFlags.FireAndForget, RedisCommand.CLIENT, Expand All @@ -1032,7 +1034,7 @@ private async Task HandshakeAsync(PhysicalConnection connection, ILogger? log) await WriteDirectOrQueueFireAndForgetAsync(connection, msg, ResultProcessor.DemandOK).ForAwait(); }
var version = Utils.GetLibVersion(); var version = ClientInfoSanitize(Utils.GetLibVersion()); if (!string.IsNullOrWhiteSpace(version)) { msg = Message.Create(-1, CommandFlags.FireAndForget, RedisCommand.CLIENT, Expand Down Expand Up @@ -1091,6 +1093,8 @@ private void SetConfig<T>(ref T field, T value, [CallerMemberName] string? calle Multiplexer?.ReconfigureIfNeeded(EndPoint, false, caller!); } } internal static string ClientInfoSanitize(string? value) => string.IsNullOrWhiteSpace(value) ? "" : nameSanitizer.Replace(value!.Trim(), "-");
private void ClearMemoized() { Expand Down
private readonly Hashtable knownScripts = new Hashtable(StringComparer.Ordinal);
Expand Down Expand Up @@ -1024,6 +1024,8 @@ private async Task HandshakeAsync(PhysicalConnection connection, ILogger? log) // it, they should set SetClientLibrary to false, not set the name to empty string) libName = config.Defaults.LibraryName; }
libName = ClientInfoSanitize(libName); if (!string.IsNullOrWhiteSpace(libName)) { msg = Message.Create(-1, CommandFlags.FireAndForget, RedisCommand.CLIENT, Expand All @@ -1032,7 +1034,7 @@ private async Task HandshakeAsync(PhysicalConnection connection, ILogger? log) await WriteDirectOrQueueFireAndForgetAsync(connection, msg, ResultProcessor.DemandOK).ForAwait(); }
var version = Utils.GetLibVersion(); var version = ClientInfoSanitize(Utils.GetLibVersion()); if (!string.IsNullOrWhiteSpace(version)) { msg = Message.Create(-1, CommandFlags.FireAndForget, RedisCommand.CLIENT, Expand Down Expand Up @@ -1091,6 +1093,8 @@ private void SetConfig<T>(ref T field, T value, [CallerMemberName] string? calle Multiplexer?.ReconfigureIfNeeded(EndPoint, false, caller!); } } internal static string ClientInfoSanitize(string? value) => string.IsNullOrWhiteSpace(value) ? "" : nameSanitizer.Replace(value!.Trim(), "-");
private void ClearMemoized() { Expand Down