Skip to content

Commit aed97b4

Browse files
committed
* Do not strictly validate AmqpString instances by default.
1 parent 8f7d151 commit aed97b4

File tree

2 files changed

+56
-22
lines changed

2 files changed

+56
-22
lines changed

projects/RabbitMQ.Client/PublicAPI.Unshipped.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -873,8 +873,8 @@ virtual RabbitMQ.Client.TcpClientAdapter.ReceiveTimeout.set -> void
873873
~override RabbitMQ.Client.Events.EventingBasicConsumer.HandleBasicDeliverAsync(string consumerTag, ulong deliveryTag, bool redelivered, System.ReadOnlyMemory<byte> exchange, System.ReadOnlyMemory<byte> routingKey, RabbitMQ.Client.ReadOnlyBasicProperties properties, System.ReadOnlyMemory<byte> body) -> System.Threading.Tasks.Task
874874
~override RabbitMQ.Client.ExchangeType.Equals(object obj) -> bool
875875
~override RabbitMQ.Client.ExchangeType.ToString() -> string
876-
~RabbitMQ.Client.AmqpString.AmqpString(string value, ushort maxLen, System.Text.Encoding encoding) -> void
877-
~RabbitMQ.Client.AmqpString.AmqpString(string value, ushort maxLen, System.Text.Encoding encoding, string validatorRegex) -> void
876+
~RabbitMQ.Client.AmqpString.AmqpString(string value, ushort maxLen, System.Text.Encoding encoding, bool strictValidation = false) -> void
877+
~RabbitMQ.Client.AmqpString.AmqpString(string value, ushort maxLen, System.Text.Encoding encoding, string validatorRegex, bool strictValidation = false) -> void
878878
~RabbitMQ.Client.AmqpString.CompareTo(RabbitMQ.Client.AmqpString other) -> int
879879
~RabbitMQ.Client.AmqpString.Contains(string value) -> bool
880880
~RabbitMQ.Client.AmqpString.Equals(RabbitMQ.Client.AmqpString other) -> bool
@@ -887,9 +887,11 @@ virtual RabbitMQ.Client.TcpClientAdapter.ReceiveTimeout.set -> void
887887
~RabbitMQ.Client.ConnectionFactory.CreateConnectionAsync(System.Collections.Generic.IEnumerable<string> hostnames, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<RabbitMQ.Client.IConnection>
888888
~RabbitMQ.Client.ConnectionFactory.CreateConnectionAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<RabbitMQ.Client.IConnection>
889889
~RabbitMQ.Client.ConsumerTag.ConsumerTag(string consumerTag) -> void
890+
~RabbitMQ.Client.ConsumerTag.ConsumerTag(string consumerTag, bool strictValidation) -> void
890891
~RabbitMQ.Client.Events.BasicDeliverEventArgs.BasicDeliverEventArgs(string consumerTag, ulong deliveryTag, bool redelivered, System.ReadOnlyMemory<byte> exchange, System.ReadOnlyMemory<byte> routingKey, in RabbitMQ.Client.ReadOnlyBasicProperties properties, System.ReadOnlyMemory<byte> body) -> void
891892
~RabbitMQ.Client.Events.QueueNameChangedAfterRecoveryEventArgs.QueueNameChangedAfterRecoveryEventArgs(RabbitMQ.Client.QueueName nameBefore, RabbitMQ.Client.QueueName nameAfter) -> void
892893
~RabbitMQ.Client.ExchangeName.ExchangeName(string exchangeName) -> void
894+
~RabbitMQ.Client.ExchangeName.ExchangeName(string exchangeName, bool strictValidation) -> void
893895
~RabbitMQ.Client.ExchangeType.Equals(RabbitMQ.Client.ExchangeType other) -> bool
894896
~RabbitMQ.Client.IAsyncBasicConsumer.HandleBasicDeliver(string consumerTag, ulong deliveryTag, bool redelivered, System.ReadOnlyMemory<byte> exchange, System.ReadOnlyMemory<byte> routingKey, in RabbitMQ.Client.ReadOnlyBasicProperties properties, System.ReadOnlyMemory<byte> body) -> System.Threading.Tasks.Task
895897
~RabbitMQ.Client.IBasicConsumer.HandleBasicDeliverAsync(string consumerTag, ulong deliveryTag, bool redelivered, System.ReadOnlyMemory<byte> exchange, System.ReadOnlyMemory<byte> routingKey, RabbitMQ.Client.ReadOnlyBasicProperties properties, System.ReadOnlyMemory<byte> body) -> System.Threading.Tasks.Task
@@ -932,7 +934,9 @@ virtual RabbitMQ.Client.TcpClientAdapter.ReceiveTimeout.set -> void
932934
~RabbitMQ.Client.ICredentialsRefresher.Register(RabbitMQ.Client.ICredentialsProvider provider, RabbitMQ.Client.ICredentialsRefresher.NotifyCredentialRefreshedAsync callback) -> RabbitMQ.Client.ICredentialsProvider
933935
~RabbitMQ.Client.PublicationAddress.PublicationAddress(RabbitMQ.Client.ExchangeType exchangeType, RabbitMQ.Client.ExchangeName exchangeName, RabbitMQ.Client.RoutingKey routingKey) -> void
934936
~RabbitMQ.Client.QueueName.QueueName(string queueName) -> void
937+
~RabbitMQ.Client.QueueName.QueueName(string queueName, bool strictValidation) -> void
935938
~RabbitMQ.Client.RoutingKey.RoutingKey(string routingKey) -> void
939+
~RabbitMQ.Client.RoutingKey.RoutingKey(string routingKey, bool strictValidation) -> void
936940
~RabbitMQ.Client.TimerBasedCredentialRefresher.Register(RabbitMQ.Client.ICredentialsProvider provider, RabbitMQ.Client.ICredentialsRefresher.NotifyCredentialRefreshedAsync callback) -> RabbitMQ.Client.ICredentialsProvider
937941
~RabbitMQ.Client.TopologyRecoveryExceptionHandler.BindingRecoveryExceptionHandlerAsync.get -> System.Func<RabbitMQ.Client.IRecordedBinding, System.Exception, RabbitMQ.Client.IConnection, System.Threading.Tasks.Task>
938942
~RabbitMQ.Client.TopologyRecoveryExceptionHandler.BindingRecoveryExceptionHandlerAsync.set -> void

projects/RabbitMQ.Client/client/api/AmqpString.cs

Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -48,32 +48,42 @@ protected AmqpString()
4848
_stringBytes = ReadOnlyMemory<byte>.Empty;
4949
}
5050

51-
public AmqpString(string value, ushort maxLen, Encoding encoding)
52-
: this(value, maxLen, encoding, null)
51+
public AmqpString(string value, ushort maxLen, Encoding encoding,
52+
bool strictValidation = false)
53+
: this(value, maxLen, encoding, null, strictValidation)
5354
{
5455
}
5556

56-
public AmqpString(string value, ushort maxLen, Encoding encoding, string validatorRegex)
57+
public AmqpString(string value, ushort maxLen, Encoding encoding, string validatorRegex,
58+
bool strictValidation = false)
5759
{
58-
if (value.Length > maxLen)
60+
/*
61+
* Note:
62+
* RabbitMQ does hardly any validation for names, only stripping off CR/LF
63+
* characters if present. There are no other checks.
64+
*/
65+
if (strictValidation)
5966
{
60-
throw new ArgumentOutOfRangeException(nameof(value));
61-
}
62-
63-
if (false == string.IsNullOrWhiteSpace(validatorRegex))
64-
{
65-
var re = new Regex(validatorRegex);
66-
if (false == re.IsMatch(value))
67+
if (value.Length > maxLen)
6768
{
6869
throw new ArgumentOutOfRangeException(nameof(value));
6970
}
70-
}
7171

72-
if (encoding == Encoding.ASCII)
73-
{
74-
if (false == isAscii(value))
72+
if (false == string.IsNullOrWhiteSpace(validatorRegex))
7573
{
76-
throw new ArgumentOutOfRangeException(nameof(value));
74+
var re = new Regex(validatorRegex);
75+
if (false == re.IsMatch(value))
76+
{
77+
throw new ArgumentOutOfRangeException(nameof(value));
78+
}
79+
}
80+
81+
if (encoding == Encoding.ASCII)
82+
{
83+
if (false == isAscii(value))
84+
{
85+
throw new ArgumentOutOfRangeException(nameof(value));
86+
}
7787
}
7888
}
7989

@@ -204,7 +214,12 @@ private ExchangeName() : base()
204214
}
205215

206216
public ExchangeName(string exchangeName)
207-
: base(exchangeName, 127, Encoding.ASCII, "^[a-zA-Z0-9-_.:]*$")
217+
: this(exchangeName, false)
218+
{
219+
}
220+
221+
public ExchangeName(string exchangeName, bool strictValidation)
222+
: base(exchangeName, 127, Encoding.ASCII, "^[a-zA-Z0-9-_.:]*$", strictValidation)
208223
{
209224
}
210225

@@ -231,7 +246,12 @@ private QueueName() : base()
231246
}
232247

233248
public QueueName(string queueName)
234-
: base(queueName, 127, Encoding.ASCII, "^[a-zA-Z0-9-_.:]*$")
249+
: this(queueName, false)
250+
{
251+
}
252+
253+
public QueueName(string queueName, bool strictValidation)
254+
: base(queueName, 127, Encoding.ASCII, "^[a-zA-Z0-9-_.:]*$", strictValidation)
235255
{
236256
}
237257

@@ -263,7 +283,12 @@ private RoutingKey() : base()
263283
}
264284

265285
public RoutingKey(string routingKey)
266-
: base(routingKey, 256, Encoding.ASCII)
286+
: this(routingKey, false)
287+
{
288+
}
289+
290+
public RoutingKey(string routingKey, bool strictValidation)
291+
: base(routingKey, 256, Encoding.ASCII, strictValidation)
267292
{
268293
}
269294

@@ -289,7 +314,12 @@ private ConsumerTag() : base()
289314
}
290315

291316
public ConsumerTag(string consumerTag)
292-
: base(consumerTag, 256, Encoding.ASCII)
317+
: this(consumerTag, false)
318+
{
319+
}
320+
321+
public ConsumerTag(string consumerTag, bool strictValidation)
322+
: base(consumerTag, 256, Encoding.ASCII, strictValidation)
293323
{
294324
}
295325

0 commit comments

Comments
 (0)